
-mbranch-protection=gcs (enabled by -mbranch-protection=standard) causes generated objects to be marked with the gcs feature. This is done via the guarded-control-stack module flag, in a similar way to branch-target-enforcement and sign-return-address. Enabling GCS causes the GNU_PROPERTY_AARCH64_FEATURE_1_GCS bit to be set on generated objects. No code generation changes are required, as GCS just requires that functions are called using BL and returned from using RET (or other similar variant instructions), which is already the case.
21 lines
487 B
LLVM
21 lines
487 B
LLVM
; RUN: llc -mtriple=aarch64-linux %s -o - | \
|
|
; RUN: FileCheck %s --check-prefix=ASM
|
|
; RUN: llc -mtriple=aarch64-linux %s -filetype=obj -o - | \
|
|
; RUN: llvm-readelf --notes - | FileCheck %s --check-prefix=OBJ
|
|
|
|
define dso_local i32 @f() {
|
|
entry:
|
|
ret i32 0
|
|
}
|
|
|
|
!llvm.module.flags = !{!0}
|
|
|
|
!0 = !{i32 8, !"guarded-control-stack", i32 1}
|
|
|
|
; GCS attribute present
|
|
; ASM: .word 3221225472
|
|
; ASM-NEXT: .word 4
|
|
; ASM-NEXT: .word 4
|
|
|
|
; OBJ: Properties: aarch64 feature: GCS
|