diff options
author | Alan Modra <amodra@gmail.com> | 2013-07-03 02:22:35 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-07-03 02:22:35 +0000 |
commit | ba8ca3e7399cd074297d850b5abd16a22bdf3eb2 (patch) | |
tree | 753a861c50d444c8a26f9ab2f6c554e432839d9e /gold | |
parent | c66bb0eea0d2b6bc4b07f3457e2166fd0bbaba3c (diff) | |
download | gdb-ba8ca3e7399cd074297d850b5abd16a22bdf3eb2.zip gdb-ba8ca3e7399cd074297d850b5abd16a22bdf3eb2.tar.gz gdb-ba8ca3e7399cd074297d850b5abd16a22bdf3eb2.tar.bz2 |
bfd/
* elf64-ppc.c (struct ppc_stub_hash_entry): Delete "addend".
(ppc64_elf_size_stubs): Don't set "addend".
(ppc64_elf_relocate_section): Don't allow calls via
toc-adjusting stubs without a following nop even in an
executable, except for self-calls and both libc_start_main
and .libc_start_main.
gold/
* powerpc.cc (Target_powerpc::Relocate::relocate): Update self-call
comment.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 5 | ||||
-rw-r--r-- | gold/powerpc.cc | 11 |
2 files changed, 12 insertions, 4 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 3ca1cf7..3373715 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2013-07-03 Alan Modra <amodra@gmail.com> + + * powerpc.cc (Target_powerpc::Relocate::relocate): Update self-call + comment. + 2013-07-01 Cary Coutant <ccoutant@google.com> * dwarf_reader.cc (Dwarf_ranges_table::read_ranges_table): Save diff --git a/gold/powerpc.cc b/gold/powerpc.cc index 17849ee..0653ea7 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -6346,10 +6346,13 @@ Target_powerpc<size, big_endian>::Relocate::relocate( } if (!can_plt_call) { - // This is not an error in one special case: A self - // call. It isn't possible to cheaply verify we have - // such a call so just check for a call to the same - // section. + // g++ as of 20130507 emits self-calls without a + // following nop. This is arguably wrong since we have + // conflicting information. On the one hand a global + // symbol and on the other a local call sequence, but + // don't error for this special case. + // It isn't possible to cheaply verify we have exactly + // such a call. Allow all calls to the same section. bool ok = false; Address code = value; if (gsym->source() == Symbol::FROM_OBJECT |