Summary: $ clang -O2 -pg -mfentry foo.c was adding frame pointers to all functions. This was exposed via compiling the Linux kernel for x86_64 with CONFIG_FUNCTION_TRACER enabled. -pg was unconditionally setting the equivalent of -fno-omit-frame-pointer, regardless of the presence of -mfentry or optimization level. After this patch, frame pointers will only be omitted at -O0 or if -fno-omit-frame-pointer is explicitly set for -pg -mfentry. See also: https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=3c5273a96ba8dbf98c40bc6d9d0a1587b4cfedb2;hp=c9d75a48c4ea63ab27ccdb40f993236289b243f2#patch2 (modification to ix86_frame_pointer_required()) Fixes: pr/44934 Reviewers: void, manojgupta, dberris, MaskRay, hfinkel Reviewed By: MaskRay Subscribers: cfe-commits, llozano, niravd, srhines Tags: #clang Differential Revision: https://reviews.llvm.org/D74698
20 lines
1.1 KiB
C
20 lines
1.1 KiB
C
// RUN: %clang -target s390x -c -### %s -mfentry 2>&1 | FileCheck %s
|
|
// RUN: %clang -target i386 -c -### %s -mfentry 2>&1 | FileCheck %s
|
|
// RUN: %clang -target x86_64 -c -### %s -mfentry 2>&1 | FileCheck %s
|
|
// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s
|
|
// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s
|
|
// RUN: %clang -target x86_64-linux-gnu -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=NOFP %s
|
|
// RUN: %clang -target x86_64 -pg -mfentry -O0 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s
|
|
// RUN: %clang -target x86_64 -pg -mfentry -O2 -fno-omit-frame-pointer -### -E %s 2>&1 | FileCheck -check-prefix=FP %s
|
|
// RUN: %clang -target x86_64 -pg -mfentry -O2 -### -E %s 2>&1 | FileCheck -check-prefix=FP %s
|
|
|
|
// CHECK: "-mfentry"
|
|
|
|
// RUN: %clang -target powerpc64le -c -### %s -mfentry 2>&1 | FileCheck --check-prefix=ERR %s
|
|
|
|
// ERR: error: unsupported option '-mfentry' for target 'powerpc64le'
|
|
|
|
// FP: "-mframe-pointer=all"
|
|
// NOFP: "-mframe-pointer=none"
|
|
void foo(void) {}
|