This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v2 2/2] elf: Correct absolute (SHN_ABS) symbol run-time calculation [BZ #19818]



On 20/02/2018 15:38, Maciej W. Rozycki wrote:
> Do not relocate absolute symbols by the base address.  Such symbols have 
> SHN_ABS as the section index and their value is not supposed to be 
> affected by relocation as per the ELF gABI[1]:
> 
> "SHN_ABS
>     The symbol has an absolute value that will not change because of
>     relocation."
> 
> The reason for our non-conformance here seems to be an old SysV linker 
> bug causing symbols like _DYNAMIC to be incorrectly emitted as absolute 
> symbols[2].  However in a previous discussion it was pointed that this 
> is seriously flawed by preventing the lone purpose of the existence of 
> absolute symbols from being used[3]:
> 
> "On the contrary, the only interpretation that makes sense to me is that 
> it will not change because of relocation at link time or at load time.  
> Absolute symbols, from the days of the earliest linking loaders, have 
> been used to represent addresses that are outside the address space of 
> the module (e.g., memory-mapped addresses or kernel gateway pages).  
> They've even been used to represent true symbolic constants (e.g., 
> system entry point numbers, sizes, version numbers).  There's no other 
> way to represent a true absolute symbol, while the meaning you seek is 
> easily represented by giving the symbol a non-negative st_shndx value." 
> 
> and we ought to stop supporting our current broken interpretation.
> 
> Update processing for dladdr(3) and dladdr1(3) so that SHN_ABS symbols 
> are ignored, because under the corrected interpretation they do not 
> represent addresses within a mapped file and therefore are not supposed 
> to be considered.
> 
> References:
> 
> [1] "System V Application Binary Interface - DRAFT - 19 October 2010",
>     The SCO Group, Section "Symbol Table",
>     <http://www.sco.com/developers/gabi/2012-12-31/ch4.symtab.html>
> 
> [2] Alan Modra, "Absolute symbols" 
>     <https://sourceware.org/ml/binutils/2012-05/msg00019.html>
> 
> [3] Cary Coutant, "Re: Absolute symbols"
>     <https://sourceware.org/ml/binutils/2012-05/msg00020.html>
> 
> 	[BZ #19818]
> 	* sysdeps/generic/ldsodefs.h (SYMBOL_ADDRESS): Handle SHN_ABS 
> 	symbols.
> 	* elf/dl-addr.c (determine_info): Ignore SHN_ABS symbols.
> 	* elf/tst-absolute-sym.c: New file.
> 	* elf/tst-absolute-sym-lib.c: New file.
> 	* elf/tst-absolute-sym-lib.lds: New file.
> 	* elf/Makefile (tests): Add `tst-absolute-sym'.
> 	(modules-names): Add `tst-absolute-sym-lib'.
> 	(LDLIBS-tst-absolute-sym-lib.so): New variable.
> 	($(objpfx)tst-absolute-sym-lib.so): New dependency.
> 	($(objpfx)tst-absolute-sym): New dependency.

The patch and rationale looks reasonable, Andrea and Florian do you still have
objections or doubts about the patch?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]