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,19 @@ +# REQUIRES: aarch64 + +# RUN: llvm-mc -filetype=obj -triple aarch64 -mattr=+mte %s -o %t.o +# RUN: ld.lld --eh-frame-hdr %t.o -o %t +# RUN: llvm-objdump --dwarf=frames %t | FileCheck %s + +# CHECK: Augmentation: "zRG" + + .text + .globl WithUnwind + .p2align 2 + .type WithUnwind,@function +WithUnwind: + .cfi_startproc + .cfi_mte_tagged_frame + ret +.Lfunc_end0: + .size WithUnwind, .Lfunc_end0-WithUnwind + .cfi_endproc