3271. [port] darwin: mksymtbl is not always stable, loop several
times before giving up. mksymtbl was using non
portable perl to covert 64 bit hex strings. [RT #27653]
This commit is contained in:
@@ -14,13 +14,13 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: mksymtbl.pl,v 1.4 2009/10/05 22:39:09 jinmei Exp $
|
||||
# $Id: mksymtbl.pl,v 1.5 2012/01/31 04:08:07 marka Exp $
|
||||
|
||||
use strict;
|
||||
use diagnostics;
|
||||
$^W = 1;
|
||||
|
||||
my $rev = '$Id: mksymtbl.pl,v 1.4 2009/10/05 22:39:09 jinmei Exp $';
|
||||
my $rev = '$Id: mksymtbl.pl,v 1.5 2012/01/31 04:08:07 marka Exp $';
|
||||
$rev =~ s/\$//g;
|
||||
$rev =~ s/,v//g;
|
||||
$rev =~ s/Id: //;
|
||||
@@ -95,11 +95,25 @@ while (<SYMBOLS>) {
|
||||
}
|
||||
}
|
||||
|
||||
sub lhex {
|
||||
my $la = substr($a, -8);
|
||||
my $lb = substr($b, -8);
|
||||
my $ha = substr($a, 0, length($a) - length($la));
|
||||
my $hb = substr($b, 0, length($b) - length($lb));
|
||||
$ha = "0" if ($ha eq "");
|
||||
$ha = "0" if ($hb eq "");
|
||||
if (hex($ha) != hex($hb)) {
|
||||
$la = $ha;
|
||||
$lb = $hb;
|
||||
}
|
||||
hex($la) <=> hex($lb)
|
||||
}
|
||||
|
||||
print TBLFILE "/*\n * Generated by $rev \n */\n";
|
||||
print TBLFILE "#include <isc/backtrace.h>\n";
|
||||
print TBLFILE "const int isc__backtrace_nsymbols = $nsyms;\n";
|
||||
print TBLFILE "const isc_backtrace_symmap_t isc__backtrace_symtable[] = {\n";
|
||||
foreach (sort {hex($a) <=> hex($b)} keys(%symmap)) {
|
||||
foreach (sort lhex keys(%symmap)) {
|
||||
my ($addr, $symbol) = ($_, $symmap{$_});
|
||||
if ($need_uscorefix && $symbol =~ /^_(.*)/) {
|
||||
$symbol = $1;
|
||||
|
||||
Reference in New Issue
Block a user