From owner-freebsd-arch Sat Dec 16 20:18: 3 2000 From owner-freebsd-arch@FreeBSD.ORG Sat Dec 16 20:17:59 2000 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mail.jeamland.net (rafe.jeamland.net [203.18.243.114]) by hub.freebsd.org (Postfix) with ESMTP id D72C537B400 for ; Sat, 16 Dec 2000 20:17:58 -0800 (PST) Received: by mail.jeamland.net (Postfix, from userid 1000) id 56FBC70601; Sun, 17 Dec 2000 15:17:57 +1100 (EST) Date: Sun, 17 Dec 2000 15:17:57 +1100 From: Benno Rice To: Marcel Moolenaar Cc: arch@FreeBSD.org Subject: Re: A perlified gensetdefs Message-ID: <20001217151757.D73676@rafe.jeamland.net> References: <3A3C0C70.848F5057@cup.hp.com> <20001217144036.A73676@rafe.jeamland.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="fUYQa+Pmc3FrFX/N" Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20001217144036.A73676@rafe.jeamland.net>; from benno@FreeBSD.org on Sun, Dec 17, 2000 at 02:40:36PM +1100 Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG --fUYQa+Pmc3FrFX/N Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sun, Dec 17, 2000 at 02:40:36PM +1100, Benno Rice wrote: > > I don't have that much objection to it, as it makes supporting big-endian > architectures (eg, PowerPC =)) a fair bit easier. I have however made > the following changes to the script: > * Turned on warnings and 'use strict', and made all changes to silence > the resultant warnings (mainly use of 'my' in more places). > * Renamed some variables to make their purpose clearer. > * Reworked a few blocks to make them easier to comprehend. > * Added some comments. Oops, and this time I actually attached the script. -- Benno Rice benno@FreeBSD.org --fUYQa+Pmc3FrFX/N Content-Type: application/x-perl Content-Disposition: attachment; filename="gensetdefs.pl" #!/usr/bin/perl -w use strict; my %sets = (); my $pointersize = 0; my $objdump = 'objdump'; # Allow objdump to be overridden by the environment. if (defined $ENV{'OBJDUMP'}) { $objdump = $ENV{'OBJDUMP'}; } # Run objdump over each object file to find all defined linker sets. foreach my $objfile (@ARGV) { open(SECTION, "$objdump -h $objfile |"); while(my $line =
) { my ($index, $name, $size, $vma, $lma, $offset, $align) = split(" ", $line); next if not defined $name; if ($name =~ /^.set./) { # We've found a set. $name =~ s/^.set.//; # Initialise it if needed. if (not defined $sets{$name}) { $sets{$name} = 0; } # Add the size of this entry. $sets{$name} = $sets{$name} + eval "0x$size"; if ($pointersize < eval $align) { $pointersize = eval $align; } } } close SECTION; } # Generate our list of set definitions my @setdefs; while (my ($name, $size) = each %sets) { my $elements = $size / $pointersize; push @setdefs, "DEFINE_SET($name, $elements);\n"; } # Create setdefs.h open(SETDEFS_H, "> setdefs.h"); foreach my $setdef (sort @setdefs) { print SETDEFS_H $setdef; } close SETDEFS_H; # Create setdef0.c open(SETDEF0_C, "> setdef0.c"); print SETDEF0_C < setdef1.c"); print SETDEF1_C <