diff options
author | Eric Andersen <andersen@codepoet.org> | 2002-10-14 07:20:58 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2002-10-14 07:20:58 +0000 |
commit | 4b5152b36106aedcbeb844169b3d92a59dcf47e9 (patch) | |
tree | 34f7562a71d1ebc09ef493a9607a745ceba588fe | |
parent | 0f9603991c8c94c318c85a759704b25f13edef1b (diff) |
Patch from Christian MICHON <christian_michon@yahoo.fr> to reimplement
my little initfini.pl script in awk. This eliminates uClibc's
compile-time dependancy on perl, and lets us use the much lighter
weight awk, which facilitates building uClibc standalone environments.
-rwxr-xr-x | extra/scripts/initfini.awk | 77 | ||||
-rw-r--r-- | libc/sysdeps/linux/common/Makefile | 4 |
2 files changed, 79 insertions, 2 deletions
diff --git a/extra/scripts/initfini.awk b/extra/scripts/initfini.awk new file mode 100755 index 000000000..1924da9a5 --- /dev/null +++ b/extra/scripts/initfini.awk @@ -0,0 +1,77 @@ +#! /usr/bin/awk -f +# Contributed by Christian MICHON <christian_michon@yahoo.fr> to +# eliminate the compile time dependancy on perl introduced by +# Erik's older initfini.pl +# vim:ai:sw=2: + +BEGIN \ +{ alignval=""; + endp=0; + end=0; + system("/bin/touch crt[in].S"); + system("/bin/rm -f crt[in].S"); + omitcrti=0; + omitcrtn=0; + while(getline < "initfini.s") + { if(/\.endp/) {endp=1} + if(/\.end/) {end=1} + if(/\.align/) {alignval=$2} + } + close("initfini.s"); +} + +/HEADER_ENDS/{omitcrti=1;omitcrtn=1;getline} +/PROLOG_BEGINS/{omitcrti=0;omitcrtn=0;getline} +/i_am_not_a_leaf/{getline} +/_init:/||/_fini:/{omitcrtn=1} +/PROLOG_PAUSES/{omitcrti=1;getline} +/PROLOG_UNPAUSES/{omitcrti=0;getline} +/PROLOG_ENDS/{omitcrti=1;getline} +/EPILOG_BEGINS/{omitcrtn=0;getline} +/EPILOG_ENDS/{omitcrtn=1;getline} +/TRAILER_BEGINS/{omitcrti=0;omitcrtn=0;getline} + +/END_INIT/ \ +{ if(endp) + { gsub("END_INIT",".endp _init",$0) + } + else + { if(end) + { gsub("END_INIT",".end _init",$0) + } + else + { gsub("END_INIT","",$0) + } + } +} + +/END_FINI/ \ +{ if(endp) + { gsub("END_FINI",".endp _fini",$0) + } + else + { if(end) + { gsub("END_FINI",".end _fini",$0) + } + else + { gsub("END_FINI","",$0) + } + } +} + +/ALIGN/ \ +{ if(alignval!="") + { gsub("ALIGN",sprintf(".align %s",alignval),$0) + } + else + { gsub("ALIGN","",$0) + } +} + +omitcrti==0 {print >> "crti.S"} +omitcrtn==0 {print >> "crtn.S"} + +END \ +{ close("crti.S"); + close("crtn.S"); +} diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile index 984ba8dfc..79bccadf0 100644 --- a/libc/sysdeps/linux/common/Makefile +++ b/libc/sysdeps/linux/common/Makefile @@ -63,8 +63,8 @@ $(COBJS): %.o : %.c initfini.s: initfini.c $(CC) $(SAFECFLAGS) -I$(TOPDIR)include -c initfini.c -S -o initfini.s -crti.S crtn.S: initfini.s $(TOPDIR)/extra/scripts/initfini.pl - $(TOPDIR)/extra/scripts/initfini.pl +crti.S crtn.S: initfini.s $(TOPDIR)/extra/scripts/initfini.awk + $(TOPDIR)/extra/scripts/initfini.awk initfini.s crti.o: crti.S $(CC) $(SAFECFLAGS) -c crti.S -o crti.o |