mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 20:28:28 +08:00
cris: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it is resolved to zero. FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be checked in more places. bfd/ PR ld/22269 * elf32-cris.c (cris_elf_relocate_section): Don't generate dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true. (cris_elf_check_relocs): Don't allocate dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true. ld/ PR ld/22269 * testsuite/ld-cris/weakhiddso.d: Update and remove R_CRIS_NONE.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2017-10-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/22269
|
||||||
|
* elf32-cris.c (cris_elf_relocate_section): Don't generate
|
||||||
|
dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
|
||||||
|
(cris_elf_check_relocs): Don't allocate dynamic relocation
|
||||||
|
if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
|
||||||
|
|
||||||
2017-10-14 H.J. Lu <hongjiu.lu@intel.com>
|
2017-10-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/22269
|
PR ld/22269
|
||||||
|
@ -1018,6 +1018,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
bfd_reloc_status_type r;
|
bfd_reloc_status_type r;
|
||||||
const char *symname = NULL;
|
const char *symname = NULL;
|
||||||
enum elf_cris_reloc_type r_type;
|
enum elf_cris_reloc_type r_type;
|
||||||
|
bfd_boolean resolved_to_zero;
|
||||||
|
|
||||||
r_type = ELF32_R_TYPE (rel->r_info);
|
r_type = ELF32_R_TYPE (rel->r_info);
|
||||||
|
|
||||||
@ -1130,6 +1131,9 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
if (bfd_link_relocatable (info))
|
if (bfd_link_relocatable (info))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
resolved_to_zero = (h != NULL
|
||||||
|
&& UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
|
||||||
|
|
||||||
switch (r_type)
|
switch (r_type)
|
||||||
{
|
{
|
||||||
case R_CRIS_16_GOTPLT:
|
case R_CRIS_16_GOTPLT:
|
||||||
@ -1432,6 +1436,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
case R_CRIS_16:
|
case R_CRIS_16:
|
||||||
case R_CRIS_32:
|
case R_CRIS_32:
|
||||||
if (bfd_link_pic (info)
|
if (bfd_link_pic (info)
|
||||||
|
&& !resolved_to_zero
|
||||||
&& r_symndx != STN_UNDEF
|
&& r_symndx != STN_UNDEF
|
||||||
&& (input_section->flags & SEC_ALLOC) != 0
|
&& (input_section->flags & SEC_ALLOC) != 0
|
||||||
&& ((r_type != R_CRIS_8_PCREL
|
&& ((r_type != R_CRIS_8_PCREL
|
||||||
@ -3540,7 +3545,8 @@ cris_elf_check_relocs (bfd *abfd,
|
|||||||
render the symbol local. */
|
render the symbol local. */
|
||||||
|
|
||||||
/* No need to do anything if we're not creating a shared object. */
|
/* No need to do anything if we're not creating a shared object. */
|
||||||
if (! bfd_link_pic (info))
|
if (! bfd_link_pic (info)
|
||||||
|
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* We may need to create a reloc section in the dynobj and made room
|
/* We may need to create a reloc section in the dynobj and made room
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2017-10-14 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
PR ld/22269
|
||||||
|
* testsuite/ld-cris/weakhiddso.d: Update and remove R_CRIS_NONE.
|
||||||
|
|
||||||
2017-10-13 Alan Modra <amodra@gmail.com>
|
2017-10-13 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR ld/22263
|
PR ld/22263
|
||||||
|
@ -4,28 +4,26 @@
|
|||||||
#objdump: -s -R -T
|
#objdump: -s -R -T
|
||||||
|
|
||||||
# Check that .weak and .weak .hidden object references are handled
|
# Check that .weak and .weak .hidden object references are handled
|
||||||
# correctly when generating a DSO. For now, we have to live with the
|
# correctly when generating a DSO.
|
||||||
# R_CRIS_NONE entry.
|
|
||||||
|
|
||||||
.*: file format elf32-cris
|
.*: file format elf32-cris
|
||||||
|
|
||||||
DYNAMIC SYMBOL TABLE:
|
DYNAMIC SYMBOL TABLE:
|
||||||
0+2214 l d \.data 0+ \.data
|
0+2208 l d \.data 0+ \.data
|
||||||
0+2214 g DO \.data 0+c x
|
0+2208 g DO \.data 0+c x
|
||||||
0+ D \*UND\* 0+ xregobj
|
0+ D \*UND\* 0+ xregobj
|
||||||
0+2220 g D \.data 0+ __bss_start
|
0+2214 g D \.data 0+ __bss_start
|
||||||
0+ w D \*UND\* 0+ xweakobj
|
0+ w D \*UND\* 0+ xweakobj
|
||||||
0+2220 g D \.data 0+ _edata
|
0+2214 g D \.data 0+ _edata
|
||||||
0+2220 g D \.data 0+ _end
|
0+2220 g D \.data 0+ _end
|
||||||
|
|
||||||
|
|
||||||
DYNAMIC RELOCATION RECORDS
|
DYNAMIC RELOCATION RECORDS
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0+ R_CRIS_NONE \*ABS\*
|
0+220c R_CRIS_32 xweakobj
|
||||||
0+2218 R_CRIS_32 xweakobj
|
0+2210 R_CRIS_32 xregobj
|
||||||
0+221c R_CRIS_32 xregobj
|
|
||||||
|
|
||||||
Contents of section \.hash:
|
Contents of section \.hash:
|
||||||
#...
|
#...
|
||||||
Contents of section \.data:
|
Contents of section \.data:
|
||||||
2214 00000000 00000000 00000000 .*
|
2208 00000000 00000000 00000000 .*
|
||||||
|
Reference in New Issue
Block a user