diff --git a/lld/ELF/EhFrame.cpp b/lld/ELF/EhFrame.cpp --- a/lld/ELF/EhFrame.cpp +++ b/lld/ELF/EhFrame.cpp @@ -171,7 +171,7 @@ readByte(); else if (c == 'P') skipAugP(); - else if (c != 'B' && c != 'S') + else if (c != 'B' && c != 'S' && c != 'G') failOn(aug.data(), "unknown .eh_frame augmentation string: " + aug); } return DW_EH_PE_absptr; @@ -188,7 +188,7 @@ skipAugP(); else if (c == 'R') readByte(); - else if (c != 'B' && c != 'S') + else if (c != 'B' && c != 'S' && c != 'G') failOn(aug.data(), "unknown .eh_frame augmentation string: " + aug); } return false; diff --git a/lld/test/ELF/stack-tagging-cfi.s b/lld/test/ELF/stack-tagging-cfi.s new file mode 100644 --- /dev/null +++ b/lld/test/ELF/stack-tagging-cfi.s @@ -0,0 +1,22 @@ +# RUN: llvm-mc -filetype=obj -triple aarch64-generic-linux -mattr=+mte %s -o %t.o +# RUN: ld.lld --eh-frame-hdr %t.o -o %t +# RUN: llvm-objdump -s --dwarf=frames %t | FileCheck %s + +# CHECK: Augmentation: "zRG" + + .text + .globl WithUnwind // -- Begin function WithUnwind + .p2align 2 + .type WithUnwind,@function +WithUnwind: // @WithUnwind + .cfi_startproc +// %bb.0: // %entry + .cfi_mte_tagged_frame + ret +.Lfunc_end0: + .size WithUnwind, .Lfunc_end0-WithUnwind + .cfi_endproc + // -- End function + .globl NoUnwind // -- Begin function NoUnwind + .p2align 2 + .type NoUnwind,@function