Enable non-leaf Frame Pointers for Arm64EC Windows
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
use crate::spec::{LinkerFlavor, Lld, Target, TargetMetadata, add_link_args, base};
|
use crate::spec::{FramePointer, LinkerFlavor, Lld, Target, TargetMetadata, add_link_args, base};
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
pub(crate) fn target() -> Target {
|
||||||
let mut base = base::windows_msvc::opts();
|
let mut base = base::windows_msvc::opts();
|
||||||
@@ -10,6 +10,12 @@ pub(crate) fn target() -> Target {
|
|||||||
&["/machine:arm64ec", "softintrin.lib"],
|
&["/machine:arm64ec", "softintrin.lib"],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Microsoft recommends enabling frame pointers on Arm64 Windows.
|
||||||
|
// From https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-170#integer-registers
|
||||||
|
// "The frame pointer (x29) is required for compatibility with fast stack walking used by ETW
|
||||||
|
// and other services. It must point to the previous {x29, x30} pair on the stack."
|
||||||
|
base.frame_pointer = FramePointer::NonLeaf;
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: "arm64ec-pc-windows-msvc".into(),
|
llvm_target: "arm64ec-pc-windows-msvc".into(),
|
||||||
metadata: TargetMetadata {
|
metadata: TargetMetadata {
|
||||||
|
|||||||
@@ -86,10 +86,12 @@ pub unsafe fn sym_static() {
|
|||||||
|
|
||||||
// Regression test for #75761
|
// Regression test for #75761
|
||||||
// CHECK-LABEL: {{("#)?}}issue_75761{{"?}}
|
// CHECK-LABEL: {{("#)?}}issue_75761{{"?}}
|
||||||
// CHECK: str {{.*}}x30
|
// aarch64: str {{.*}}x30
|
||||||
|
// arm64ec: stp {{.*}}x30
|
||||||
// CHECK: //APP
|
// CHECK: //APP
|
||||||
// CHECK: //NO_APP
|
// CHECK: //NO_APP
|
||||||
// CHECK: ldr {{.*}}x30
|
// aarch64: ldr {{.*}}x30
|
||||||
|
// arm64ec: ldp {{.*}}x30
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe fn issue_75761() {
|
pub unsafe fn issue_75761() {
|
||||||
asm!("", out("v0") _, out("x30") _);
|
asm!("", out("v0") _, out("x30") _);
|
||||||
|
|||||||
Reference in New Issue
Block a user