From 9121e41f4629b82bf628456b10ab211f5c1e33aa Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 13 Mar 2002 23:43:02 +0000 Subject: Build our own crti.o and crtn.o with a cross arch method that I can live with much better the what glibc does. -Erik --- extra/scripts/initfini.pl | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100755 extra/scripts/initfini.pl (limited to 'extra') diff --git a/extra/scripts/initfini.pl b/extra/scripts/initfini.pl new file mode 100755 index 000000000..9a5c3ba09 --- /dev/null +++ b/extra/scripts/initfini.pl @@ -0,0 +1,140 @@ +#!/usr/bin/perl + +use strict; +use Getopt::Long; + +my($initfini) = "initfini.s"; +my($crti) = "crti.S"; +my($crtn) = "crtn.S"; +my($alignval) = ""; +my($endp) = 0; +my($end) = 0; +my($omitcrti) = 0; +my($omitcrtn) = 0; +my($line); + +# Get commandline parameters +Getopt::Long::Configure("no_ignore_case", "bundling"); +&GetOptions( "initfini=s" => \$initfini, + "crti=s" => \$crti, + "crtn=s" => \$crtn, + ); + +chomp($initfini); +chomp($crti); +chomp($crtn); + + +if ($initfini) { + open(INITFINI,"<$initfini") or + die "(fatal) Can't open $initfini$!"; +} else { + die "(fatal) Please give me an --initfini argument$!"; +} +while($line = ) { + if ($line =~ /^\w\.endp/) { + $endp=1; + next; + } + if ($line =~ /^\w\.end/) { + $end=1; + next; + } + if ($line =~ /\w\.align\(.*\)/) { + $alignval=$1; + next; + } +} +close(INITFINI); + + + + + +if ($initfini) { + open(INITFINI,"<$initfini") or + die "(fatal) Can't open $initfini$!"; +} else { + die "(fatal) Please give me an --initfini argument$!"; +} + +if ($crti) { + open(CRTI,">$crti") or + die "(fatal) Can't open $crti$!"; +} else { + die "(fatal) Please give me a --asm argument$!"; +} +if ($crtn) { + open(CRTN,">$crtn") or + die "(fatal) Can't open $crtn$!"; +} else { + die "(fatal) Please give me a --asm argument$!"; +} + +while() { + if (/HEADER_ENDS/) { + $omitcrti = 1; + $omitcrtn = 1; + next; + } + if (/PROLOG_BEGINS/) { + $omitcrti = 0; + next; + } + if (/PROLOG_ENDS/) { + $omitcrti = 1; + next; + } + if (/EPILOG_BEGINS/) { + $omitcrtn = 0; + next; + } + if (/EPILOG_ENDS/) { + $omitcrtn = 1; + next; + } + if (/TRAILER_BEGINS/) { + $omitcrti = 0; + $omitcrtn = 0; + next; + } + if (/END_INIT/) { + if ($endp) { + s/END_INIT/.endp _init/; + } else { + if($end) { + s/END_INIT/.end _init/; + } else { + s/END_INIT//; + } + } + } + if (/END_FINI/) { + if ($endp) { + s/END_FINI/.endp _fini/; + } else { + if($end) { + s/END_FINI/.end _fini/; + } else { + s/END_FINI//; + } + } + } + if (/ALIGN/) { + if($alignval) { + s/ALIGN/.align $alignval/; + } else { + s/ALIGN//; + } + } + if (!$omitcrti) { + print CRTI; + } + if (!$omitcrtn) { + print CRTN; + } +} +close(INITFINI); +close(CRTI); +close(CRTN); + -- cgit v1.2.3