initfini.awk 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #! /usr/bin/awk -f
  2. # Contributed by Christian MICHON <christian_michon@yahoo.fr> to
  3. # eliminate the compile time dependancy on perl introduced by
  4. # Erik's older initfini.pl
  5. # vim:ai:sw=2:
  6. BEGIN \
  7. { alignval="";
  8. endp=0;
  9. end=0;
  10. system("/bin/touch crt[in].S");
  11. system("/bin/rm -f crt[in].S");
  12. omitcrti=0;
  13. omitcrtn=0;
  14. while(getline < "initfini.s")
  15. { if(/\.endp/) {endp=1}
  16. if(/\.end/) {end=1}
  17. if(/\.align/) {alignval=$2}
  18. }
  19. close("initfini.s");
  20. }
  21. /HEADER_ENDS/{omitcrti=1;omitcrtn=1;getline}
  22. /PROLOG_BEGINS/{omitcrti=0;omitcrtn=0;getline}
  23. /i_am_not_a_leaf/{getline}
  24. /_init:/||/_fini:/{omitcrtn=1}
  25. /PROLOG_PAUSES/{omitcrti=1;getline}
  26. /PROLOG_UNPAUSES/{omitcrti=0;getline}
  27. /PROLOG_ENDS/{omitcrti=1;getline}
  28. /EPILOG_BEGINS/{omitcrtn=0;getline}
  29. /EPILOG_ENDS/{omitcrtn=1;getline}
  30. /TRAILER_BEGINS/{omitcrti=0;omitcrtn=0;getline}
  31. /END_INIT/ \
  32. { if(endp)
  33. { gsub("END_INIT",".endp _init",$0)
  34. }
  35. else
  36. { if(end)
  37. { gsub("END_INIT",".end _init",$0)
  38. }
  39. else
  40. { gsub("END_INIT","",$0)
  41. }
  42. }
  43. }
  44. /END_FINI/ \
  45. { if(endp)
  46. { gsub("END_FINI",".endp _fini",$0)
  47. }
  48. else
  49. { if(end)
  50. { gsub("END_FINI",".end _fini",$0)
  51. }
  52. else
  53. { gsub("END_FINI","",$0)
  54. }
  55. }
  56. }
  57. /ALIGN/ \
  58. { if(alignval!="")
  59. { gsub("ALIGN",sprintf(".align %s",alignval),$0)
  60. }
  61. else
  62. { gsub("ALIGN","",$0)
  63. }
  64. }
  65. omitcrti==0 {print >> "crti.S"}
  66. omitcrtn==0 {print >> "crtn.S"}
  67. END \
  68. { close("crti.S");
  69. close("crtn.S");
  70. }