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:
Mark Andrews
2012-01-31 04:08:07 +00:00
parent 2855e27723
commit c2e614115b
3 changed files with 37 additions and 5 deletions

View File

@@ -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;