diff options
author | Sam Tebbs <sam.tebbs@arm.com> | 2018-12-13 16:27:01 +0000 |
---|---|---|
committer | Thomas Preud'homme <thomas.preudhomme@linaro.org> | 2018-12-13 16:37:40 +0000 |
commit | 09038062534606ef9100b5474d136f7d2e543de4 (patch) | |
tree | 71b88ac39f8eee0495e68f742a8dfc4deefcfcc4 /gas/dw2gencfi.c | |
parent | fe554d200d1befdc3bddc9e14f8593ea3446c351 (diff) | |
download | binutils-gdb-09038062534606ef9100b5474d136f7d2e543de4.tar.gz |
Move aarch64 CIE code to aarch64 backend
This commit moves all aarch64-specific code to deal with CIE structure
introduced in 3a67e1a6b4430374f3073e51bb19347d4c421cfe from
target-independent files to the aarch64 backend.
2018-12-13 Sam Tebbs <sam.tebbs@arm.com>
binutils/
* dwarf.c (read_cie): Add check for 'B'.
gas/
* config/tc-aarch64.h (enum pointer_auth_key,
tc_fde_entry_extras, tc_cie_entry_extras, tc_fde_entry_init_extra,
tc_output_cie_extra, tc_cie_fde_equivalent_extra,
tc_cie_entry_init_extra): Define.
* dw2gencfi.c (struct cie_entry): Add tc_cie_entry_extras invocation.
(alloc_fde_entry, select_cie_for_fde): Add tc_fde_entry_init_extra
invocation.
(output_cie): Add tc_output_cie_extra invocation.
(select_cie_for_fde): Add tc_cie_fde_equivalent_extra invocation.
* dw2gencfi.h (enum pointer_auth_key): Move to config/tc-aarch64.h.
(struct fde_entry): Add tc_fde_entry_extras invocation
Diffstat (limited to 'gas/dw2gencfi.c')
-rw-r--r-- | gas/dw2gencfi.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c index ff5c0df7f61..02d7f3c48a3 100644 --- a/gas/dw2gencfi.c +++ b/gas/dw2gencfi.c @@ -403,7 +403,9 @@ struct cie_entry unsigned char per_encoding; unsigned char lsda_encoding; expressionS personality; - enum pointer_auth_key pauth_key; +#ifdef tc_cie_entry_extras + tc_cie_entry_extras +#endif struct cfi_insn_data *first, *last; }; @@ -433,7 +435,9 @@ alloc_fde_entry (void) fde->per_encoding = DW_EH_PE_omit; fde->lsda_encoding = DW_EH_PE_omit; fde->eh_header_type = EH_COMPACT_UNKNOWN; - fde->pauth_key = AARCH64_PAUTH_KEY_A; +#ifdef tc_fde_entry_init_extra + tc_fde_entry_init_extra (fde) +#endif return fde; } @@ -1858,8 +1862,9 @@ output_cie (struct cie_entry *cie, bfd_boolean eh_frame, int align) if (cie->lsda_encoding != DW_EH_PE_omit) out_one ('L'); out_one ('R'); - if (cie->pauth_key == AARCH64_PAUTH_KEY_B) - out_one ('B'); +#ifdef tc_output_cie_extra + tc_output_cie_extra (cie) +#endif } if (cie->signal_frame) out_one ('S'); @@ -2039,8 +2044,11 @@ select_cie_for_fde (struct fde_entry *fde, bfd_boolean eh_frame, { if (CUR_SEG (cie) != CUR_SEG (fde)) continue; +#ifdef tc_cie_fde_equivalent_extra + if (!tc_cie_fde_equivalent_extra (cie, fde)) + continue; +#endif if (cie->return_column != fde->return_column - || cie->pauth_key != fde->pauth_key || cie->signal_frame != fde->signal_frame || cie->per_encoding != fde->per_encoding || cie->lsda_encoding != fde->lsda_encoding) @@ -2147,7 +2155,9 @@ select_cie_for_fde (struct fde_entry *fde, bfd_boolean eh_frame, cie->lsda_encoding = fde->lsda_encoding; cie->personality = fde->personality; cie->first = fde->data; - cie->pauth_key = fde->pauth_key; +#ifdef tc_cie_entry_init_extra + tc_cie_entry_init_extra (cie, fde) +#endif for (i = cie->first; i ; i = i->next) if (i->insn == DW_CFA_advance_loc |