summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xextra/scripts/initfini.awk77
-rw-r--r--libc/sysdeps/linux/common/Makefile4
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