Message ID | 20150113125432.GB18558@gmail.com |
---|---|
State | New |
Headers | show |
On Tue, Jan 13, 2015 at 04:54:32AM -0800, H.J. Lu wrote: > On Mon, Jan 12, 2015 at 03:04:20PM -0700, Jeff Law wrote: > > On 01/12/15 14:51, Magnus Granberg wrote: > > >måndag 12 januari 2015 12.11.17 skrev H.J. Lu: > > >>On Mon, Jan 12, 2015 at 12:03 PM, Jeff Law <law@redhat.com> wrote: > > >>>On 01/12/15 12:59, H.J. Lu wrote: > > >>>>I don't know if -pg will work PIE on any targets. For Linux/x86 > > >>>>the choices of crt1.o are > > >>>> > > >>>>%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} > > >>>> > > >>>>-shared, -pg and -pie are mutually exclusive. Those crt1 files are > > >>>>only crt1 files provided by glibc. You can't even try -pg -pie on > > >>>>Linux without changing glibc. > > >>> > > >>>You're totally missing the point. What I care about is *why*. > > >>> > > >With -pg it use gcrt1.o object file and that file is not compile with -fPIC. > > >When you build a shared lib on x86_64 all the objects files need to be buiit > > >with -fPIC else you get a error like that one abow and it is the same problems > > >when you build bin with -fPIE and linke with -pie. > > >Glibc do not provide one that is compile with -fPIC > > Is there some reason why glibc could not provide gcrt1.o compiled with > > -fPIC? > > > > > > Here is a patch to check if -pg is available. If -pg doesn't link, > profiling isn't available. OK for trunk? > > Thanks. > > > H.J. > --- > gcc/testsuite/lib/target-supports.exp | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp > index 0ac9646..7c09399 100644 > --- a/gcc/testsuite/lib/target-supports.exp > +++ b/gcc/testsuite/lib/target-supports.exp > @@ -546,6 +546,12 @@ proc check_profiling_available { test_what } { > set profiling_available_saved 0 > } else { > set profiling_available_saved 1 > + if { [check_no_compiler_messages_nocache profiling executable { > + int main() { return 0; } } "-pg"] } { > + set profiling_available_saved 1 > + } else { > + set profiling_available_saved 0 > + } > } > } > Here is the ChangeLog entry. 2015-01-13 H.J. Lu <hongjiu.lu@intel.com> * lib/target-supports.exp (check_profiling_available): Check if -pg links. H.J.
On 01/13/15 05:54, H.J. Lu wrote: > On Mon, Jan 12, 2015 at 03:04:20PM -0700, Jeff Law wrote: >> On 01/12/15 14:51, Magnus Granberg wrote: >>> måndag 12 januari 2015 12.11.17 skrev H.J. Lu: >>>> On Mon, Jan 12, 2015 at 12:03 PM, Jeff Law <law@redhat.com> wrote: >>>>> On 01/12/15 12:59, H.J. Lu wrote: >>>>>> I don't know if -pg will work PIE on any targets. For Linux/x86 >>>>>> the choices of crt1.o are >>>>>> >>>>>> %{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} >>>>>> >>>>>> -shared, -pg and -pie are mutually exclusive. Those crt1 files are >>>>>> only crt1 files provided by glibc. You can't even try -pg -pie on >>>>>> Linux without changing glibc. >>>>> >>>>> You're totally missing the point. What I care about is *why*. >>>>> >>> With -pg it use gcrt1.o object file and that file is not compile with -fPIC. >>> When you build a shared lib on x86_64 all the objects files need to be buiit >>> with -fPIC else you get a error like that one abow and it is the same problems >>> when you build bin with -fPIE and linke with -pie. >>> Glibc do not provide one that is compile with -fPIC >> Is there some reason why glibc could not provide gcrt1.o compiled with >> -fPIC? >> >> > > Here is a patch to check if -pg is available. If -pg doesn't link, > profiling isn't available. OK for trunk? OK with a suitable ChangeLog entry. jeff
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 0ac9646..7c09399 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -546,6 +546,12 @@ proc check_profiling_available { test_what } { set profiling_available_saved 0 } else { set profiling_available_saved 1 + if { [check_no_compiler_messages_nocache profiling executable { + int main() { return 0; } } "-pg"] } { + set profiling_available_saved 1 + } else { + set profiling_available_saved 0 + } } }