diff options
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 |