提交 b40dc30a 编写于 作者: F Fangrui Song

Use function attribute "frame-pointer" instead of "no-frame-pointer-elim"

LLVM 8 (D56351) introduced "frame-pointer". In LLVM 10 (D71863),
"no-frame-pointer-elim"/"no-frame-pointer-elim-non-leaf" will be
ignored.
上级 a9dd56ff
...@@ -66,12 +66,21 @@ fn naked(val: &'ll Value, is_naked: bool) { ...@@ -66,12 +66,21 @@ fn naked(val: &'ll Value, is_naked: bool) {
pub fn set_frame_pointer_elimination(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { pub fn set_frame_pointer_elimination(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
if cx.sess().must_not_eliminate_frame_pointers() { if cx.sess().must_not_eliminate_frame_pointers() {
llvm::AddFunctionAttrStringValue( if llvm_util::get_major_version() >= 8 {
llfn, llvm::AddFunctionAttrStringValue(
llvm::AttributePlace::Function, llfn,
const_cstr!("no-frame-pointer-elim"), llvm::AttributePlace::Function,
const_cstr!("true"), const_cstr!("frame-pointer"),
); const_cstr!("all"),
);
} else {
llvm::AddFunctionAttrStringValue(
llfn,
llvm::AttributePlace::Function,
const_cstr!("no-frame-pointer-elim"),
const_cstr!("true"),
);
}
} }
} }
......
// // min-llvm-version 8.0
// compile-flags: -C no-prepopulate-passes -C force-frame-pointers=y // compile-flags: -C no-prepopulate-passes -C force-frame-pointers=y
#![crate_type="lib"] #![crate_type="lib"]
// CHECK: attributes #{{.*}} "no-frame-pointer-elim"="true" // CHECK: attributes #{{.*}} "frame-pointer"="all"
pub fn foo() {} pub fn foo() {}
// min-llvm-version 8.0
// ignore-tidy-linelength // ignore-tidy-linelength
// compile-flags: -Z instrument-mcount // compile-flags: -Z instrument-mcount
#![crate_type = "lib"] #![crate_type = "lib"]
// CHECK: attributes #{{.*}} "instrument-function-entry-inlined"="{{.*}}mcount{{.*}}" "no-frame-pointer-elim"="true" // CHECK: attributes #{{.*}} "frame-pointer"="all" "instrument-function-entry-inlined"="{{.*}}mcount{{.*}}"
pub fn foo() {} pub fn foo() {}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册