[PATCH] ld.so: handle STT_COMMON symbols

Joakim Tjernlund joakim.tjernlund at transmode.se
Mon Oct 8 06:16:30 PDT 2007


On Mon, 2007-10-08 at 14:01 +0200, Carmelo AMOROSO wrote:
> Joakim Tjernlund wrote:
> > On Mon, 2007-10-08 at 12:15 +0200, Carmelo AMOROSO wrote:
> >   
> >> Joakim Tjernlund wrote:
> >>     
> >>> On Mon, 2007-10-08 at 09:10 +0200, Carmelo AMOROSO wrote:
> >>>   
> >>>       
> >>>> Hi Folks,
> >>>> as reported into glibc bug #5104 
> >>>> (http://sourceware.org/bugzilla/show_bug.cgi?id=5104)
> >>>>
> >>>>     
> >>>>         
> >>> [snip]
> >>>   
> >>> I am good with this change. One question though: I don't think the
> >>> STT_SECTION and STT_FILE are present in a relocatable object. If this
> >>> is true(needs to be checked), then the above if stmt can be changed to:
> >>>  #define STT_RELOC_MAX STT_TLS
> >>> or 
> >>>  #define STT_RELOC_MAX STT_COMMON 
> >>> if (ELF_ST_TYPE(sym->st_info) > STT_RELOC_MAX)
> >>>
> >>> or if the above assumption is true only for STT_FILE
> >>> if (ELF_ST_TYPE(sym->st_info) > STT_RELOC_MAX || ELF_ST_TYPE(sym->st_info) == STT_SECTION)
> >>>   
> >>>       
> >> This is the case, STT_SECTION symbol are present into symbol table of 
> >> the libuClibc.so.0 for sure.
> >> Actually, I did not find any STT_FILE symbols...
> >>     
> >
> > Right, but they are STB_LOCAL I think. If so they are skipped anyway.
> >   
> Yes, they are STB_LOCAL, but we should skip them earlier to avoid 
> calling a pointless strcmp... right?

Yes, but their st_value *might* be 0. If so, then they
are skipped anyway. Eeh, just noticed they are not 0.

You might not hit the default: case in the switch stmt very often(or at
all)

Just trying to keep this function as clean/fast as possible. When TLS
gets added it might get ugly. Anyhow, I accept your orginal fix, but if
you want to experiment/reseach this issue you are most welcome :)

 Jocke
> 
> Carmelo
> 
> 


More information about the uClibc mailing list