diff options
author | Alan Modra <amodra@gmail.com> | 2017-07-23 20:03:40 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-07-23 20:40:39 +0930 |
commit | 15a3a14fdd725c049d6b2aadbaf66c9be5ed36a8 (patch) | |
tree | 633d54bee7dac24c42e25a098af636280867fee1 /gold | |
parent | 5c2c0020fbe7110e6780ec1ee85ff11833779f8c (diff) | |
download | gdb-15a3a14fdd725c049d6b2aadbaf66c9be5ed36a8.zip gdb-15a3a14fdd725c049d6b2aadbaf66c9be5ed36a8.tar.gz gdb-15a3a14fdd725c049d6b2aadbaf66c9be5ed36a8.tar.bz2 |
Correct eh_frame info for __glink_PLTresolve
My PPC64_OPT_LOCALENTRY patch of June 1, git commit f378ab099d, and
the later gold change, git commit 7ee7ff7015, added an insn in
__glink_PLTresolve which needs a corresponding adjustment in the
eh_frame info for asynchronous exceptions to unwind correctly.
It would have been OK for both ABIs to use +5 for the advance before
restore of LR, since we can put the DW_CFA_restore_extended on any
insn after the actual restore and before the r12/r0 copy is clobbered,
but it's slightly better to delay as much as possible. There are
then more addresses where fewer CFA program insns are executed.
bfd/
* elf64-ppc.c (ppc64_elf_size_stubs): Correct advance to
restore of LR.
gold/
* powerpc.cc (glink_eh_frame_fde_64v2): Correct advance to
restore of LR.
(glink_eh_frame_fde_64v1): Advance to restore of LR at latest
possible insn.
Diffstat (limited to 'gold')
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/powerpc.cc | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 0dc3972..01f0d34 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,10 @@ +2017-07-23 Alan Modra <amodra@gmail.com> + + * powerpc.cc (glink_eh_frame_fde_64v2): Correct advance to + restore of LR. + (glink_eh_frame_fde_64v1): Advance to restore of LR at latest + possible insn. + 2017-07-18 Nick Clifton <nickc@redhat.com> PR 21775 diff --git a/gold/powerpc.cc b/gold/powerpc.cc index fcbf177..a4966b8 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -3987,7 +3987,7 @@ static const unsigned char glink_eh_frame_fde_64v1[] = 0, // Augmentation size. elfcpp::DW_CFA_advance_loc + 1, elfcpp::DW_CFA_register, 65, 12, - elfcpp::DW_CFA_advance_loc + 4, + elfcpp::DW_CFA_advance_loc + 5, elfcpp::DW_CFA_restore_extended, 65 }; @@ -3999,7 +3999,7 @@ static const unsigned char glink_eh_frame_fde_64v2[] = 0, // Augmentation size. elfcpp::DW_CFA_advance_loc + 1, elfcpp::DW_CFA_register, 65, 0, - elfcpp::DW_CFA_advance_loc + 4, + elfcpp::DW_CFA_advance_loc + 7, elfcpp::DW_CFA_restore_extended, 65 }; |