diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-07-27 07:33:58 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-07-27 07:33:58 +0000 |
commit | 6a904bbfc610f98ee2f467844434117a7bca5982 (patch) | |
tree | 4d3b5d6981355f75e3c6a180dd5c9cd2d35b6695 /malloc/mtrace.pl | |
parent | adef37445c9c4e1c134e9a2bd1ca8c70472ffb55 (diff) | |
download | glibc-6a904bbfc610f98ee2f467844434117a7bca5982.tar.gz |
Update.
2001-07-27 Ulrich Drepper <drepper@redhat.com>
* malloc/mtrace.pl: Extract addresses from DSOs.
2001-07-26 Ulrich Drepper <drepper@redhat.com>
* malloc/mcheck.c (checkhdr): Disable mcheck before reporting an
error. Don't run any tests if mcheck is disabled.
* elf/dl-support.c (_dl_important_hwcaps): Avoid using malloc
early in the program.
>>>>>>> 1.5525
Diffstat (limited to 'malloc/mtrace.pl')
-rw-r--r-- | malloc/mtrace.pl | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/malloc/mtrace.pl b/malloc/mtrace.pl index a254c6e860..e3ed5771dd 100644 --- a/malloc/mtrace.pl +++ b/malloc/mtrace.pl @@ -68,6 +68,21 @@ if ($#ARGV == 0) { } elsif ($#ARGV == 1) { $binary=$ARGV[0]; $data=$ARGV[1]; + + if ($binary =~ /^.*[\/].*$/) { + $prog = $binary; + } else { + $prog = "./$binary"; + } + if (open (LOCS, "env LD_TRACE_LOADED_OBJECTS=1 $prog |")) { + while (<LOCS>) { + chop; + if (/^.*=> (.*) .(0x[0123456789abcdef]*).$/) { + $locs{$1} = $2; + } + } + close (LOCS); + } } else { die "Wrong number of arguments, run $progname --help for help."; } @@ -89,10 +104,18 @@ sub location { } } $cache{$addr} = $str = "$fct @ $addr"; - } elsif ($str =~ /^.*[[](0x[^]]*)]$/) { - my $addr = $1; + } elsif ($str =~ /^(.*):.*[[](0x[^]]*)]$/) { + my $prog = $1; + my $addr = $2; + my $searchaddr; return $cache{$addr} if (exists $cache{$addr}); - if ($binary ne "" && open (ADDR, "addr2line -e $binary $addr|")) { + if ($locs{$prog} ne "") { + $searchaddr = sprintf "%#x", $addr - $locs{$prog}; + } else { + $searchaddr = $addr; + $prog = $binary; + } + if ($binary ne "" && open (ADDR, "addr2line -e $prog $searchaddr|")) { my $line = <ADDR>; chomp $line; close (ADDR); |