Bug 22284 - -pg -pie doesn't work
Summary: -pg -pie doesn't work
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: libc (show other bugs)
Version: 2.27
: P2 normal
Target Milestone: 2.27
Assignee: Not yet assigned to anyone
URL:
Keywords:
: 21189 22549 (view as bug list)
Depends on:
Blocks:
 
Reported: 2017-10-12 01:16 UTC by H.J. Lu
Modified: 2022-08-03 08:10 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2017-10-12 01:16:33 UTC
[hjl@gnu-efi-2 gcc]$ cat x.c
#include <stdio.h>

void
foo (void)
{
  printf ("hello\n");
}

int
main ()
{
  foo ();
  return 0;
}
[hjl@gnu-efi-2 gcc]$ gcc  -pg -fpie -pie x.c
[hjl@gnu-efi-2 gcc]$ ./a.out 
hello
[hjl@gnu-efi-2 gcc]$ gprof --brief a.out 
Flat profile:

Each sample counts as 0.01 seconds.
 no time accumulated

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    


			Call graph


granularity: each sample hit covers 2 byte(s) no time propagated

index % time    self  children    called     name


Index by function name

[hjl@gnu-efi-2 gcc]$ gcc  -pg  x.c
[hjl@gnu-efi-2 gcc]$ ./a.out 
hello
[hjl@gnu-efi-2 gcc]$ gprof --brief a.out 
Flat profile:

Each sample counts as 0.01 seconds.
 no time accumulated

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
  0.00      0.00     0.00        1     0.00     0.00  foo


			Call graph


granularity: each sample hit covers 2 byte(s) no time propagated

index % time    self  children    called     name
                0.00    0.00       1/1           main [7]
[1]      0.0    0.00    0.00       1         foo [1]
-----------------------------------------------


Index by function name

   [1] foo
[hjl@gnu-efi-2 gcc]$
Comment 1 H.J. Lu 2017-10-12 10:51:15 UTC
Fixed for 2.27.
Comment 2 Sourceware Commits 2017-10-12 10:51:15 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  d165ca64980f90ccace088670652cc203d1b5411 (commit)
      from  bc9620d040b7494f457ccb750c9797b47ed76ada (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=d165ca64980f90ccace088670652cc203d1b5411

commit d165ca64980f90ccace088670652cc203d1b5411
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Oct 12 03:45:55 2017 -0700

    Support profiling PIE [BZ #22284]
    
    Since PIE can be loaded at any address, we need to subtract load address
    from PCs.
    
    	[BZ #22284]
    	* gmon/Makefile [$(have-fpie)$(build-shared) == yesyes] (tests,
    	tests-pie): Add tst-gmon-pie.
    	(CFLAGS-tst-gmon-pie.c): New.
    	(CRT-tst-gmon-pie): Likewise.
    	(tst-gmon-pie-ENV): Likewise.
    	[$(have-fpie)$(build-shared) == yesyes] (tests-special): Likewise.
    	($(objpfx)tst-gmon-pie.out): Likewise.
    	(clean-tst-gmon-pie-data): Likewise.
    	($(objpfx)tst-gmon-pie-gprof.out): Likewise.
    	* gmon/gmon.c [PIC]: Include <link.h>.
    	[PIC] (callback): New function.
    	(write_hist): Add an argument for load address.  Subtract load
    	address from PCs.
    	(write_call_graph): Likewise.
    	(write_gmon): Call __dl_iterate_phdr to get load address, pass
    	it to write_hist and write_call_graph.
    
    Reviewed-by: Carlos O'Donell <carlos@redhat.com>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog           |   20 ++++++++++++++++++++
 gmon/Makefile       |   21 +++++++++++++++++++++
 gmon/gmon.c         |   47 +++++++++++++++++++++++++++++++++++++----------
 gmon/tst-gmon-pie.c |    1 +
 4 files changed, 79 insertions(+), 10 deletions(-)
 create mode 100644 gmon/tst-gmon-pie.c
Comment 3 Sourceware Commits 2017-10-12 22:58:58 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, hjl/pr22284/2.26 has been created
        at  5a951cc33ccec638bcd2a2ed44db34f2610dacd3 (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=5a951cc33ccec638bcd2a2ed44db34f2610dacd3

commit 5a951cc33ccec638bcd2a2ed44db34f2610dacd3
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Oct 12 03:45:55 2017 -0700

    Support profiling PIE [BZ #22284]
    
    Since PIE can be loaded at any address, we need to subtract load address
    from PCs.
    
    	[BZ #22284]
    	* gmon/gmon.c [PIC]: Include <link.h>.
    	[PIC] (callback): New function.
    	(write_hist): Add an argument for load address.  Subtract load
    	address from PCs.
    	(write_call_graph): Likewise.
    	(write_gmon): Call __dl_iterate_phdr to get load address, pass
    	it to write_hist and write_call_graph.
    
    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
    
    (cherry picked from commit d165ca64980f90ccace088670652cc203d1b5411)

-----------------------------------------------------------------------
Comment 4 H.J. Lu 2022-08-02 19:23:50 UTC
*** Bug 21189 has been marked as a duplicate of this bug. ***
Comment 5 Alan Modra 2022-08-03 08:10:01 UTC
*** Bug 22549 has been marked as a duplicate of this bug. ***