diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index aca16170a56..dc0d2e097f5 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -802,6 +802,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, switch (*aug++) { case 'B': + case 'G': if (abfd->arch_info->arch != bfd_arch_aarch64) goto unrecognized; break; diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 4de498fc381..2d444e7d1e2 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -376,6 +376,8 @@ run_dump_test_lp64 "variant_pcs-r" run_dump_test_lp64 "variant_pcs-shared" run_dump_test_lp64 "variant_pcs-now" +run_dump_test_lp64 "mte-tagged-frame" + set aarch64elflinktests { {"ld-aarch64/so with global symbol" "-shared" "" "" {copy-reloc-so.s} {} "copy-reloc-so.so"} diff --git a/ld/testsuite/ld-aarch64/mte-tagged-frame-bar.s b/ld/testsuite/ld-aarch64/mte-tagged-frame-bar.s new file mode 100644 index 00000000000..0bd56191912 --- /dev/null +++ b/ld/testsuite/ld-aarch64/mte-tagged-frame-bar.s @@ -0,0 +1,17 @@ + .text + .global bar + .type bar, %function +bar: + .cfi_startproc + .cfi_mte_tagged_frame + stp x19, x20, [sp, -144]! + .cfi_def_cfa_offset 144 + .cfi_offset 19, -144 + .cfi_offset 20, -136 + ldp x19, x20, [sp], 144 + .cfi_restore 20 + .cfi_restore 19 + .cfi_def_cfa_offset 0 + ret + .cfi_endproc + .size bar, .-bar diff --git a/ld/testsuite/ld-aarch64/mte-tagged-frame-foo.s b/ld/testsuite/ld-aarch64/mte-tagged-frame-foo.s new file mode 100644 index 00000000000..af5a8c42f95 --- /dev/null +++ b/ld/testsuite/ld-aarch64/mte-tagged-frame-foo.s @@ -0,0 +1,16 @@ + .text + .global foo + .type foo, %function +foo: + .cfi_startproc + stp x19, x20, [sp, -32]! + .cfi_def_cfa_offset 32 + .cfi_offset 19, -32 + .cfi_offset 20, -16 + ldp x19, x20, [sp], 32 + .cfi_restore 20 + .cfi_restore 19 + .cfi_def_cfa_offset 0 + ret + .cfi_endproc + .size foo, .-foo diff --git a/ld/testsuite/ld-aarch64/mte-tagged-frame.d b/ld/testsuite/ld-aarch64/mte-tagged-frame.d new file mode 100644 index 00000000000..dd667fe5ca7 --- /dev/null +++ b/ld/testsuite/ld-aarch64/mte-tagged-frame.d @@ -0,0 +1,35 @@ +#source: mte-tagged-frame-foo.s +#source: mte-tagged-frame-bar.s +#ld: -shared +#objdump: -Wf +#name: MTE tagged EH Frame FDE + +#... +Contents of the .eh_frame section: + +00000000 0000000000000010 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 4 + Data alignment factor: -8 + Return address column: 30 + Augmentation data: 1b + DW_CFA_def_cfa: r31 \(sp\) ofs 0 + +00000014 0000000000000020 00000018 FDE cie=00000000 pc=[a-f0-9]+\.\.[a-f0-9]+ +#... + +00000038 0000000000000014 00000000 CIE + Version: 1 + Augmentation: "zRG" + Code alignment factor: 4 + Data alignment factor: -8 + Return address column: 30 + Augmentation data: 1b + DW_CFA_def_cfa: r31 \(sp\) ofs 0 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +00000050 000000000000001c 0000001c FDE cie=00000038 pc=[a-f0-9]+\.\.[a-f0-9]+ +#...