diff options
Diffstat (limited to 'malloc/mtrace.pl')
-rw-r--r-- | malloc/mtrace.pl | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/malloc/mtrace.pl b/malloc/mtrace.pl index 075da0d9f1..32b4da935f 100644 --- a/malloc/mtrace.pl +++ b/malloc/mtrace.pl @@ -1,6 +1,12 @@ -#! @PERL@ -eval "exec @PERL@ -S $0 $@" - if 0; +#! /bin/sh +# -*- perl -*- +eval "q () { + : +}"; +q { + exec perl -e '$_ = shift; $_ = "./$_" unless m,^/,; do $_' "$0" "$@" +} +; # Copyright (C) 1997-2024 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Based on the mtrace.awk script. @@ -22,7 +28,7 @@ eval "exec @PERL@ -S $0 $@" $VERSION = "@VERSION@"; $PKGVERSION = "@PKGVERSION@"; $REPORT_BUGS_TO = '@REPORT_BUGS_TO@'; -$progname = $0; +$progname = $_; sub usage { print "Usage: mtrace [OPTION]... [Binary] MtraceData\n"; @@ -34,6 +40,11 @@ sub usage { exit 0; } +sub fatal { + print STDERR "$_[0]\n"; + exit 1; +} + # We expect two arguments: # #1: the complete path to the binary # #2: the mtrace data filename @@ -76,7 +87,7 @@ if ($#ARGV == 0) { } # Set the environment variable LD_TRACE_LOADED_OBJECTS to 2 so the # executable is also printed. - if (open (locs, "env LD_TRACE_LOADED_OBJECTS=2 $prog |")) { + if (open (locs, "-|", "env", "LD_TRACE_LOADED_OBJECTS=2", $prog)) { while (<locs>) { chop; if (/^.*=> (.*) .(0x[0123456789abcdef]*).$/) { @@ -87,13 +98,13 @@ if ($#ARGV == 0) { close (LOCS); } } else { - die "Wrong number of arguments, run $progname --help for help."; + fatal "Wrong number of arguments, run $progname --help for help."; } sub addr2line { my $addr = pop(@_); my $prog = pop(@_); - if (open (ADDR, "addr2line -e $prog $addr|")) { + if (open (ADDR, "-|", "addr2line", "-e", $prog, $addr)) { my $line = <ADDR>; chomp $line; close (ADDR); @@ -149,7 +160,8 @@ sub location { } $nr=0; -open(DATA, "<$data") || die "Cannot open mtrace data file"; +open(DATA, "<$data") + or fatal "$progname: Cannot open mtrace data file $data: $!"; while (<DATA>) { my @cols = split (' '); my $n, $where; |