Skip to content
  • Max Filippov's avatar
    xtensa: don't emit dynamic relocation for weak undefined symbol · 82f32155
    Max Filippov authored
    Resolved reference to a weak undefined symbol in PIE must not have
    a dynamic relative relocation against itself, otherwise the value of a
    reference will be changed from 0 to the base of executable, breaking
    code like the following:
    
      void weak_function (void);
      if (weak_function)
        weak_function ();
    
    This fixes tests for PR ld/22269 and a number of PIE tests in xtensa gcc
    testsuite.
    
    bfd/
    2018-07-11  Max Filippov  <jcmvbkbc@gmail.com>
    
    	* elf32-xtensa.c (elf_xtensa_allocate_dynrelocs): Don't allocate
    	space for dynamic relocation for undefined weak symbol.
    	(elf_xtensa_relocate_section): Don't emit R_XTENSA_RELATIVE
    	relocation for undefined weak symbols.
    	(shrink_dynamic_reloc_sections): Don't shrink dynamic relocation
    	section for relocations against undefined weak symbols.
    
    (cherry picked from commit c451bb34)
    82f32155