Re: [PATCH] D22130: Link static PIE programs against rcrt0.o on OpenBSD
sisnkemp added a comment. Ping? https://reviews.llvm.org/D22130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D22130: Link static PIE programs against rcrt0.o on OpenBSD
Ed Maste wrote: > emaste added a comment. > > Seems fine to me, but I'm not particularly knowledgeable about OpenBSD's > toolchain. Could you commit it please if it looks ok? This diff is what OpenBSD has in its tree. We'd like to get it upstream. > https://reviews.llvm.org/D22130 > > > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r284256 - Link static PIE programs against rcrt0.o on OpenBSD
Brad Smith wrote: > On Fri, Oct 14, 2016 at 09:47:17PM -0400, Brad Smith via cfe-commits wrote: > > On Fri, Oct 14, 2016 at 05:59:54PM -, Ed Maste via cfe-commits wrote: > > > Author: emaste > > > Date: Fri Oct 14 12:59:53 2016 > > > New Revision: 284256 > > > > > > URL: http://llvm.org/viewvc/llvm-project?rev=284256&view=rev > > > Log: > > > Link static PIE programs against rcrt0.o on OpenBSD > > > > > > Patch by Stefan Kempf. > > > > > > Differential Revision:https://reviews.llvm.org/D22130 > > > > > > Modified: > > > cfe/trunk/lib/Driver/Tools.cpp > > > cfe/trunk/test/Driver/openbsd.c > > > > > > Modified: cfe/trunk/lib/Driver/Tools.cpp > > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=284256&r1=284255&r2=284256&view=diff > > > == > > > --- cfe/trunk/lib/Driver/Tools.cpp (original) > > > +++ cfe/trunk/lib/Driver/Tools.cpp Fri Oct 14 12:59:53 2016 > > > @@ -8519,6 +8519,10 @@ void openbsd::Linker::ConstructJob(Compi > > >if (Args.hasArg(options::OPT_pg)) > > > CmdArgs.push_back( > > > Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o"))); > > > + else if (Args.hasArg(options::OPT_static) && > > > + !Args.hasArg(options::OPT_nopie)) > > > +CmdArgs.push_back( > > > +Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o"))); > > >else > > > CmdArgs.push_back( > > > Args.MakeArgString(getToolChain().GetFilePath("crt0.o"))); > > > > > > Modified: cfe/trunk/test/Driver/openbsd.c > > > URL: > > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/openbsd.c?rev=284256&r1=284255&r2=284256&view=diff > > > == > > > --- cfe/trunk/test/Driver/openbsd.c (original) > > > +++ cfe/trunk/test/Driver/openbsd.c Fri Oct 14 12:59:53 2016 > > > @@ -67,3 +67,26 @@ > > > // CHECK-MIPS64-PIC: as{{.*}}" "-mabi" "64" "-EB" "-KPIC" > > > // CHECK-MIPS64EL: as{{.*}}" "-mabi" "64" "-EL" > > > // CHECK-MIPS64EL-PIC: as{{.*}}" "-mabi" "64" "-EL" "-KPIC" > > > + > > > +// Check linking against correct startup code when (not) using PIE > > > +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -### > > > 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-PIE %s > > > +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s > > > -fno-pie %s -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-PIE %s > > > +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static %s > > > -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s > > > +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static > > > -fno-pie %s -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s > > > +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -nopie %s > > > -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s > > > +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie > > > -nopie %s -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s > > > +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -static > > > -nopie %s -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s > > > +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie > > > -static -nopie %s -### 2>&1 \ > > > +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s > > > +// CHECK-PIE: "/usr/lib/crt0.o" > > > +// CHECK-PIE-NOT: "-nopie" > > > +// CHECK-STATIC-PIE: "/usr/lib/rcrt0.o" > > > +// CHECK-STATIC-PIE-NOT: "-nopie" > > > +// CHECK-NOPIE: "-nopie" {{.*}}"/usr/lib/crt0.o" > > > > Ok, I see the obvious issue with -no-canonical-prefix vs > > -no-canonical-prefixes > > and fix the typo with the target triples. > > After seeing what the test failure was I have adjusted the tests as > appropriate. Oh, sorry for that failing test :-( Thanks, your diff looks better. I wonder why running ./bin/llvm-lit tools/clang/test/Driver/openbsd.c output PASS even with the broken test case. > Index: lib/Driver/Tools.cpp > === > --- lib/Driver/Tools.cpp (revision 283697) > +++ lib/Driver/Tools.cpp (working copy) > @@ -8469,6 +8469,10 @@ >if (Args.hasArg(options::OPT_pg)) > CmdArgs.push_back( > Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o"))); > + else if (Args.hasArg(options::OPT_static) && > + !Args.hasArg(options::OPT_nopie)) > +CmdArgs.push_back( > +Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o"))); >else > CmdArgs.push_back( > Args.MakeArgString(getToolChain().GetFilePath("crt0.o"))); > Index: test/Driver/openbsd.c > === > --- test
[PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp created this revision. sisnkemp added a subscriber: cfe-commits. When using -pg in combination with optimizations (e.g. -O3), compiled programs crash in the profiling routine mcount(). This is because mcount (on x86_64 at least) relies on the frame pointer to be valid. See test case to reproduce. This diff makes sure that the driver does not pass -fomit-frame-pointer or -momit-leaf-frame-pointer to the frontend when -pg is used. Currently, clang gives an error if -fomit-frame-pointer is used in combination with -pg, but -momit-leaf-frame-pointer was forgotten. Also, disable frame pointer elimination in the frontend when -pg is set. The behavior is consistent with gcc now: clang produces an error if -fomit-frame-pointer is used with -pg, and silently disables -momit-leaf-frame-pointer when -pg is used. http://reviews.llvm.org/D14215 Files: lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/x86_64-profiling-keep-fp.c Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -450,7 +450,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2716,6 +2716,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2725,6 +2727,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -450,7 +450,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2716,6 +2716,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2725,6 +2727,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; ___ cfe-commits mailing list
Re: [PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp updated this revision to Diff 39651. http://reviews.llvm.org/D14215 Files: lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/x86_64-profiling-keep-fp.c Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -452,7 +452,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2717,6 +2717,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2726,6 +2728,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -452,7 +452,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2717,6 +2717,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2726,6 +2728,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp added a comment. Ping. Can somebody please comment on this? http://reviews.llvm.org/D14215 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D22130: Link static PIE programs against rcrt0.o on OpenBSD
sisnkemp added a comment. Ping? https://reviews.llvm.org/D22130 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D22130: Link static PIE programs against rcrt0.o on OpenBSD
sisnkemp updated this revision to Diff 68046. sisnkemp added a comment. Now with test case. https://reviews.llvm.org/D22130 Files: lib/Driver/Tools.cpp test/Driver/openbsd.c Index: test/Driver/openbsd.c === --- test/Driver/openbsd.c +++ test/Driver/openbsd.c @@ -67,3 +67,26 @@ // CHECK-MIPS64-PIC: as{{.*}}" "-mabi" "64" "-EB" "-KPIC" // CHECK-MIPS64EL: as{{.*}}" "-mabi" "64" "-EL" // CHECK-MIPS64EL-PIC: as{{.*}}" "-mabi" "64" "-EL" "-KPIC" + +// Check linking against correct startup code when (not) using PIE +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-PIE %s +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -fno-pie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-PIE %s +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static -fno-pie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -static -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie -static -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// CHECK-PIE: "/usr/lib/crt0.o" +// CHECK-PIE-NOT: "-nopie" +// CHECK-STATIC-PIE: "/usr/lib/rcrt0.o" +// CHECK-STATIC-PIE-NOT: "-nopie" +// CHECK-NOPIE: "-nopie" {{.*}}"/usr/lib/crt0.o" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8301,6 +8301,10 @@ if (Args.hasArg(options::OPT_pg)) CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o"))); + else if (Args.hasArg(options::OPT_static) && + !Args.hasArg(options::OPT_nopie)) +CmdArgs.push_back( +Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o"))); else CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("crt0.o"))); Index: test/Driver/openbsd.c === --- test/Driver/openbsd.c +++ test/Driver/openbsd.c @@ -67,3 +67,26 @@ // CHECK-MIPS64-PIC: as{{.*}}" "-mabi" "64" "-EB" "-KPIC" // CHECK-MIPS64EL: as{{.*}}" "-mabi" "64" "-EL" // CHECK-MIPS64EL-PIC: as{{.*}}" "-mabi" "64" "-EL" "-KPIC" + +// Check linking against correct startup code when (not) using PIE +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-PIE %s +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd %s -fno-pie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-PIE %s +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static -fno-pie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-STATIC-PIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -static -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// RUN: %clang -no-canonical-prefix -target i868-pc-openbsd -fno-pie -static -nopie %s -### 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-NOPIE %s +// CHECK-PIE: "/usr/lib/crt0.o" +// CHECK-PIE-NOT: "-nopie" +// CHECK-STATIC-PIE: "/usr/lib/rcrt0.o" +// CHECK-STATIC-PIE-NOT: "-nopie" +// CHECK-NOPIE: "-nopie" {{.*}}"/usr/lib/crt0.o" Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8301,6 +8301,10 @@ if (Args.hasArg(options::OPT_pg)) CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o"))); + else if (Args.hasArg(options::OPT_static) && + !Args.hasArg(options::OPT_nopie)) +CmdArgs.push_back( +Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o"))); else CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("crt0.o"))); ___ cfe-commits mailing list cfe-commits@lists.ll
[PATCH] D22130: Link static PIE programs against rcrt0.o on OpenBSD
sisnkemp created this revision. sisnkemp added a reviewer: rafael. sisnkemp added a subscriber: cfe-commits. When building a static PIE binary, linking against /usr/lib/crt0.o results in segfaults when trying to run the binary. Static PIE programs must link against /usr/lib/rcrt0.o instead to run correctly. Bitrig has this patch in their local clang tree also. http://reviews.llvm.org/D22130 Files: lib/Driver/Tools.cpp Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8083,6 +8083,10 @@ if (Args.hasArg(options::OPT_pg)) CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o"))); + else if (Args.hasArg(options::OPT_static) && + !Args.hasArg(options::OPT_nopie)) +CmdArgs.push_back( +Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o"))); else CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("crt0.o"))); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -8083,6 +8083,10 @@ if (Args.hasArg(options::OPT_pg)) CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("gcrt0.o"))); + else if (Args.hasArg(options::OPT_static) && + !Args.hasArg(options::OPT_nopie)) +CmdArgs.push_back( +Args.MakeArgString(getToolChain().GetFilePath("rcrt0.o"))); else CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("crt0.o"))); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp updated this revision to Diff 40230. http://reviews.llvm.org/D14215 Files: lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/x86_64-profiling-keep-fp.c Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2755,6 +2755,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2764,6 +2766,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2755,6 +2755,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2764,6 +2766,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp updated this revision to Diff 40793. sisnkemp added a comment. Added a test with -momit-leaf-frame-pointer as requested by davidxl. http://reviews.llvm.org/D14215 Files: lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/x86_64-profiling-keep-fp-1.c test/CodeGen/x86_64-profiling-keep-fp-2.c Index: test/CodeGen/x86_64-profiling-keep-fp-2.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp-2.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: test/CodeGen/x86_64-profiling-keep-fp-1.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp-1.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2794,6 +2794,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2803,6 +2805,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; Index: test/CodeGen/x86_64-profiling-keep-fp-2.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp-2.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: test/CodeGen/x86_64-profiling-keep-fp-1.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp-1.c @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2794,6 +2794,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2803,6 +2805,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_le
Re: [PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp updated this revision to Diff 40794. http://reviews.llvm.org/D14215 Files: lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/x86_64-profiling-keep-fp.c Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2794,6 +2794,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2803,6 +2805,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2794,6 +2794,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2803,6 +2805,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D14215: Disable frame pointer elimination when using -pg
sisnkemp updated this revision to Diff 40933. http://reviews.llvm.org/D14215 Files: lib/Driver/Tools.cpp lib/Frontend/CompilerInvocation.cpp test/CodeGen/x86_64-profiling-keep-fp.c Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,14 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2794,6 +2794,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2803,6 +2805,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; Index: test/CodeGen/x86_64-profiling-keep-fp.c === --- /dev/null +++ test/CodeGen/x86_64-profiling-keep-fp.c @@ -0,0 +1,14 @@ +// REQUIRES: x86-registered-target +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ +// RUN: FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -momit-leaf-frame-pointer -pg -S -o - %s | \ +// RUN: FileCheck %s + +// Test that the frame pointer is kept when compiling with +// profiling. + +//CHECK: pushq %rbp +int main(void) +{ + return 0; +} Index: lib/Frontend/CompilerInvocation.cpp === --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -453,7 +453,8 @@ Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); Opts.CodeModel = getCodeModel(Args, Diags); Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); + Opts.DisableFPElim = + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); Opts.DisableFree = Args.hasArg(OPT_disable_free); Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); Index: lib/Driver/Tools.cpp === --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -2794,6 +2794,8 @@ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, options::OPT_fomit_frame_pointer)) return A->getOption().matches(options::OPT_fno_omit_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; return shouldUseFramePointerForTarget(Args, Triple); } @@ -2803,6 +2805,8 @@ if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, options::OPT_momit_leaf_frame_pointer)) return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); + if (Args.hasArg(options::OPT_pg)) +return true; if (Triple.isPS4CPU()) return false; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r253886 - Disable frame pointer elimination when using -pg
Hi, David Blaikie via cfe-commits wrote: > On Mon, Nov 23, 2015 at 9:30 AM, Xinliang David Li via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > > > Author: davidxl > > Date: Mon Nov 23 11:30:31 2015 > > New Revision: 253886 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=253886&view=rev > > Log: > > Disable frame pointer elimination when using -pg > > > > (Re-apply patch after bug fixing) > > > > It's helpful to describe what the bug fixing was (& test changes to ensure > it's covered (if it fails only on some subset of buildbots usually a test > case can be added so it would fail on any buildbot/locally, which is a good > idea to help proactively avoid regressions in the future)) when > recommitting a patch. the patch that David initally committed contained a test case that was x86 specific. Thus it would fail on the AArch64 buildbot, for example. The bug fix in the re-commited patch was to fix the test case to run only when clang was configured with the x86 target. > > > > This diff makes sure that the driver does not pass > > -fomit-frame-pointer or -momit-leaf-frame-pointer to > > the frontend when -pg is used. Currently, clang gives > > an error if -fomit-frame-pointer is used in combination > > with -pg, but -momit-leaf-frame-pointer was forgotten. > > Also, disable frame pointer elimination in the frontend > > when -pg is set. > > > > Patch by Stefan Kempf. > > > > Added: > > cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c > > Modified: > > cfe/trunk/lib/Driver/Tools.cpp > > cfe/trunk/lib/Frontend/CompilerInvocation.cpp > > > > Modified: cfe/trunk/lib/Driver/Tools.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=253886&r1=253885&r2=253886&view=diff > > > > == > > --- cfe/trunk/lib/Driver/Tools.cpp (original) > > +++ cfe/trunk/lib/Driver/Tools.cpp Mon Nov 23 11:30:31 2015 > > @@ -2794,6 +2794,8 @@ static bool shouldUseFramePointer(const > >if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer, > > options::OPT_fomit_frame_pointer)) > > return A->getOption().matches(options::OPT_fno_omit_frame_pointer); > > + if (Args.hasArg(options::OPT_pg)) > > +return true; > > > >return shouldUseFramePointerForTarget(Args, Triple); > > } > > @@ -2803,6 +2805,8 @@ static bool shouldUseLeafFramePointer(co > >if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer, > > options::OPT_momit_leaf_frame_pointer)) > > return > > A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer); > > + if (Args.hasArg(options::OPT_pg)) > > +return true; > > > >if (Triple.isPS4CPU()) > > return false; > > > > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=253886&r1=253885&r2=253886&view=diff > > > > == > > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) > > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Nov 23 11:30:31 2015 > > @@ -453,7 +453,8 @@ static bool ParseCodeGenArgs(CodeGenOpti > >Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases); > >Opts.CodeModel = getCodeModel(Args, Diags); > >Opts.DebugPass = Args.getLastArgValue(OPT_mdebug_pass); > > - Opts.DisableFPElim = Args.hasArg(OPT_mdisable_fp_elim); > > + Opts.DisableFPElim = > > + (Args.hasArg(OPT_mdisable_fp_elim) || Args.hasArg(OPT_pg)); > >Opts.DisableFree = Args.hasArg(OPT_disable_free); > >Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls); > >Opts.FloatABI = Args.getLastArgValue(OPT_mfloat_abi); > > > > Added: cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c > > URL: > > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c?rev=253886&view=auto > > > > == > > --- cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c (added) > > +++ cfe/trunk/test/CodeGen/x86_64-profiling-keep-fp.c Mon Nov 23 11:30:31 > > 2015 > > @@ -0,0 +1,14 @@ > > +// REQUIRES: x86-registered-target > > +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 -pg -S -o - %s | \ > > +// RUN: FileCheck %s > > +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -O3 > > -momit-leaf-frame-pointer -pg -S -o - %s | \ > > +// RUN: FileCheck %s > > + > > +// Test that the frame pointer is kept when compiling with > > +// profiling. > > + > > +//CHECK: pushq %rbp > > +int main(void) > > +{ > > + return 0; > > +} > > > > > > ___ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > ___ > cfe-commits mailing list