unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Siddhesh Poyarekar <siddhesh@gotplt.org>
To: libc-alpha@sourceware.org
Subject: Re: [ping][PATCH v3] mtrace: Fix output with PIE and ASLR [BZ #22716]
Date: Mon, 23 Aug 2021 08:15:15 +0530	[thread overview]
Message-ID: <beeb152b-e83e-ba90-3d78-bf00f8cf86ee@gotplt.org> (raw)
In-Reply-To: <80db4ad2-b129-c125-f8a7-bf9faa9b1b8d@gotplt.org>

I've pushed this now since the changes in v2 and v3 were trivial.

Thanks,
Siddhesh


On 8/17/21 8:27 AM, Siddhesh Poyarekar wrote:
> Ping!  I'll push this if there are no further objections.
> 
> Thanks,
> Siddhesh
> 
> On 8/12/21 2:37 PM, Siddhesh Poyarekar via Libc-alpha wrote:
>> Record only the relative address of the caller in mtrace file.  Use
>> LD_TRACE_PRELINKING to get the executable as well as binary vs
>> executable load offsets so that we may compute a base to add to the
>> relative address in the mtrace file.  This allows us to get a valid
>> address to pass to addr2line in all cases.
>>
>> Co-authored-by:  John Ogness <john.ogness@linutronix.de>
>> ---
>> Changes from v2:
>> - Don't use ""
>>
>> Changes from v1:
>> - Set LD_TRACE_PRELINK to an empty string so that it doesn't match any
>>    files and add a comment explaining it.
>> - Formatting change in mtrace-impl.c
>>
>>   malloc/mtrace-impl.c |  6 +++---
>>   malloc/mtrace.pl     | 15 +++++++--------
>>   2 files changed, 10 insertions(+), 11 deletions(-)
>>
>> diff --git a/malloc/mtrace-impl.c b/malloc/mtrace-impl.c
>> index 9dffddfe2d..e7ace7f6fd 100644
>> --- a/malloc/mtrace-impl.c
>> +++ b/malloc/mtrace-impl.c
>> @@ -67,9 +67,9 @@ tr_where (const void *caller, Dl_info *info)
>>                  offset);
>>               }
>> -      fprintf (mallstream, "@ %s%s%s[%p] ", info->dli_fname ? : "",
>> -           info->dli_fname ? ":" : "",
>> -                   buf, caller);
>> +      fprintf (mallstream, "@ %s%s%s[0x%" PRIxPTR "] ",
>> +           info->dli_fname ? : "", info->dli_fname ? ":" : "", buf,
>> +           caller - info->dli_fbase);
>>           }
>>         else
>>           fprintf (mallstream, "@ [%p] ", caller);
>> diff --git a/malloc/mtrace.pl b/malloc/mtrace.pl
>> index 6f49c8338d..b1073a1931 100644
>> --- a/malloc/mtrace.pl
>> +++ b/malloc/mtrace.pl
>> @@ -75,11 +75,15 @@ if ($#ARGV == 0) {
>>       } else {
>>       $prog = "./$binary";
>>       }
>> -    if (open (LOCS, "env LD_TRACE_LOADED_OBJECTS=1 $prog |")) {
>> +    # Set the environment variable LD_TRACE_PRELINKING to an empty 
>> string so
>> +    # that we trigger tracing but do not match with the executable or 
>> any of
>> +    # its dependencies.
>> +    if (open (LOCS, "env LD_TRACE_PRELINKING= $prog |")) {
>>       while (<LOCS>) {
>>           chop;
>> -        if (/^.*=> (.*) .(0x[0123456789abcdef]*).$/) {
>> +        if (/^.*=> (.*) \((0x[0123456789abcdef]*), 
>> (0x[0123456789abcdef]*).*/) {
>>           $locs{$1} = $2;
>> +        $rel{$1} = hex($2) - hex($3);
>>           }
>>       }
>>       close (LOCS);
>> @@ -110,12 +114,7 @@ sub location {
>>       my $addr = $2;
>>       my $searchaddr;
>>       return $cache{$addr} if (exists $cache{$addr});
>> -    if ($locs{$prog} ne "") {
>> -        $searchaddr = sprintf "%#x", $addr - $locs{$prog};
>> -    } else {
>> -        $searchaddr = $addr;
>> -        $prog = $binary;
>> -    }
>> +    $searchaddr = sprintf "%#x", hex($addr) + $rel{$prog};
>>       if ($binary ne "" && open (ADDR, "addr2line -e $prog 
>> $searchaddr|")) {
>>           my $line = <ADDR>;
>>           chomp $line;
>>
> 


      reply	other threads:[~2021-08-23  2:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-12  9:07 [PATCH v3] mtrace: Fix output with PIE and ASLR [BZ #22716] Siddhesh Poyarekar via Libc-alpha
2021-08-12 10:39 ` John Ogness via Libc-alpha
2021-08-17  2:57 ` [ping][PATCH " Siddhesh Poyarekar
2021-08-23  2:45   ` Siddhesh Poyarekar [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/libc/involved.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=beeb152b-e83e-ba90-3d78-bf00f8cf86ee@gotplt.org \
    --to=siddhesh@gotplt.org \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).