فهرست منبع

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.

Eric Andersen 23 سال پیش
والد
کامیت
4b5152b361
2فایلهای تغییر یافته به همراه79 افزوده شده و 2 حذف شده
  1. 77 0
      extra/scripts/initfini.awk
  2. 2 2
      libc/sysdeps/linux/common/Makefile

+ 77 - 0
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");
+}

+ 2 - 2
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