mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 16:38:05 +08:00
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.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2017-07-23 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* elf64-ppc.c (ppc64_elf_size_stubs): Correct advance to
|
||||||
|
restore of LR.
|
||||||
|
|
||||||
2017-07-19 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
2017-07-19 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
PR ld/18841
|
PR ld/18841
|
||||||
|
@ -12871,7 +12871,7 @@ ppc64_elf_size_stubs (struct bfd_link_info *info)
|
|||||||
*p++ = DW_CFA_register;
|
*p++ = DW_CFA_register;
|
||||||
*p++ = 65;
|
*p++ = 65;
|
||||||
*p++ = htab->opd_abi ? 12 : 0;
|
*p++ = htab->opd_abi ? 12 : 0;
|
||||||
*p++ = DW_CFA_advance_loc + 4;
|
*p++ = DW_CFA_advance_loc + (htab->opd_abi ? 5 : 7);
|
||||||
*p++ = DW_CFA_restore_extended;
|
*p++ = DW_CFA_restore_extended;
|
||||||
*p++ = 65;
|
*p++ = 65;
|
||||||
p += ((24 + align - 1) & -align) - 24;
|
p += ((24 + align - 1) & -align) - 24;
|
||||||
|
@ -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>
|
2017-07-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
PR 21775
|
PR 21775
|
||||||
|
@ -3987,7 +3987,7 @@ static const unsigned char glink_eh_frame_fde_64v1[] =
|
|||||||
0, // Augmentation size.
|
0, // Augmentation size.
|
||||||
elfcpp::DW_CFA_advance_loc + 1,
|
elfcpp::DW_CFA_advance_loc + 1,
|
||||||
elfcpp::DW_CFA_register, 65, 12,
|
elfcpp::DW_CFA_register, 65, 12,
|
||||||
elfcpp::DW_CFA_advance_loc + 4,
|
elfcpp::DW_CFA_advance_loc + 5,
|
||||||
elfcpp::DW_CFA_restore_extended, 65
|
elfcpp::DW_CFA_restore_extended, 65
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3999,7 +3999,7 @@ static const unsigned char glink_eh_frame_fde_64v2[] =
|
|||||||
0, // Augmentation size.
|
0, // Augmentation size.
|
||||||
elfcpp::DW_CFA_advance_loc + 1,
|
elfcpp::DW_CFA_advance_loc + 1,
|
||||||
elfcpp::DW_CFA_register, 65, 0,
|
elfcpp::DW_CFA_register, 65, 0,
|
||||||
elfcpp::DW_CFA_advance_loc + 4,
|
elfcpp::DW_CFA_advance_loc + 7,
|
||||||
elfcpp::DW_CFA_restore_extended, 65
|
elfcpp::DW_CFA_restore_extended, 65
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user