CRIS: fix PR ld/26589, a missing NULL check in fix for PR ld/22269
Not sure why there wasn't a NULL check in the ld/22269 patch (e01c16a8
) at the time, as there was one for the corresponding patch to elf32-m68k.c (5056ba1d
). Incidentally, I had missed that in 2017, as a prerequisite for the ld/22269 series, the check_relocs function finally were made "safe"! (I.e. the number of references and symbol types are final, garbage collection done, so port-specific accounting can be made sanely.) Committed. bfd: PR ld/26589 * elf32-cris.c (cris_elf_check_relocs): Add missing NULL check on argument before calling UNDEFWEAK_NO_DYNAMIC_RELOC. ld: PR ld/26589 * testsuite/ld-elf/pr26589.d, testsuite/ld-elf/locref3.s: New test.
This commit is contained in:
parent
e1044e6adc
commit
4a8f181d19
5 changed files with 42 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2020-09-15 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
PR ld/26589
|
||||
* elf32-cris.c (cris_elf_check_relocs): Add missing NULL check
|
||||
on argument before calling UNDEFWEAK_NO_DYNAMIC_RELOC.
|
||||
|
||||
2020-09-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/26391
|
||||
|
|
|
@ -3359,7 +3359,7 @@ cris_elf_check_relocs (bfd *abfd,
|
|||
|
||||
/* No need to do anything if we're not creating a shared object. */
|
||||
if (! bfd_link_pic (info)
|
||||
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
||||
|| (h != NULL && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)))
|
||||
break;
|
||||
|
||||
/* We may need to create a reloc section in the dynobj and made room
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-09-15 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
PR ld/26589
|
||||
* testsuite/ld-elf/pr26589.d, testsuite/ld-elf/locref3.s: New test.
|
||||
|
||||
2020-09-13 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 26391
|
||||
|
|
14
ld/testsuite/ld-cris/locref3.s
Normal file
14
ld/testsuite/ld-cris/locref3.s
Normal file
|
@ -0,0 +1,14 @@
|
|||
; Test-case primarily from PR26589, which could have been locref3.d.
|
||||
; A local (like "static") function, with all ELF decorations.
|
||||
.text
|
||||
.type alocalfunc,@function
|
||||
.p2align 1
|
||||
alocalfunc:
|
||||
nop
|
||||
.Lfe1:
|
||||
.size alocalfunc,.Lfe1-alocalfunc
|
||||
|
||||
; Random absolute reference to the address of alocalfunc, requiring a
|
||||
; runtime relocation in code that needs to be PIC/PIE.
|
||||
.data
|
||||
.dword alocalfunc
|
16
ld/testsuite/ld-cris/pr26589.d
Normal file
16
ld/testsuite/ld-cris/pr26589.d
Normal file
|
@ -0,0 +1,16 @@
|
|||
#source: dso-1.s
|
||||
#source: locref3.s
|
||||
#as: --pic --no-underscore --em=criself
|
||||
#ld: --shared -m crislinux
|
||||
#readelf: --dyn-syms -r
|
||||
|
||||
# Besides typical DSO stuff (libdso-1.d), we here have a data section
|
||||
# with an absolute reloc to a local symbol. For the original
|
||||
# test-case, this happened for a destructor (.dtors).
|
||||
|
||||
Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entry:
|
||||
Offset[ ]+Info[ ]+Type[ ]+Sym\.Value Sym\. Name \+ Addend
|
||||
[a-f0-9]+[ ]+0+c R_CRIS_RELATIVE[ ]+ [a-f0-9]+
|
||||
|
||||
Symbol table '\.dynsym' contains 3 entries:
|
||||
#pass
|
Loading…
Add table
Reference in a new issue