laag-nasm 2.13.03.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +29 -0
  4. data/README.org +34 -0
  5. data/ext/laag/nasm/extconf.rb +16 -0
  6. data/laag-nasm.gemspec +20 -0
  7. data/lib/laag/nasm.rb +29 -0
  8. data/patches/Makefile.in.patch +13 -0
  9. data/vendor/repo.or.cz/nasm/.gitignore +102 -0
  10. data/vendor/repo.or.cz/nasm/AUTHORS +137 -0
  11. data/vendor/repo.or.cz/nasm/CHANGES +2 -0
  12. data/vendor/repo.or.cz/nasm/ChangeLog +2905 -0
  13. data/vendor/repo.or.cz/nasm/INSTALL +102 -0
  14. data/vendor/repo.or.cz/nasm/LICENSE +29 -0
  15. data/vendor/repo.or.cz/nasm/Makefile.in +855 -0
  16. data/vendor/repo.or.cz/nasm/Mkfiles/README +46 -0
  17. data/vendor/repo.or.cz/nasm/Mkfiles/msvc.mak +732 -0
  18. data/vendor/repo.or.cz/nasm/Mkfiles/openwcom.mak +706 -0
  19. data/vendor/repo.or.cz/nasm/README +23 -0
  20. data/vendor/repo.or.cz/nasm/SubmittingPatches +116 -0
  21. data/vendor/repo.or.cz/nasm/TODO +376 -0
  22. data/vendor/repo.or.cz/nasm/aclocal.m4 +139 -0
  23. data/vendor/repo.or.cz/nasm/asm/assemble.c +2957 -0
  24. data/vendor/repo.or.cz/nasm/asm/assemble.h +54 -0
  25. data/vendor/repo.or.cz/nasm/asm/directiv.c +566 -0
  26. data/vendor/repo.or.cz/nasm/asm/directiv.dat +92 -0
  27. data/vendor/repo.or.cz/nasm/asm/error.c +202 -0
  28. data/vendor/repo.or.cz/nasm/asm/eval.c +1014 -0
  29. data/vendor/repo.or.cz/nasm/asm/eval.h +49 -0
  30. data/vendor/repo.or.cz/nasm/asm/exprdump.c +79 -0
  31. data/vendor/repo.or.cz/nasm/asm/exprlib.c +200 -0
  32. data/vendor/repo.or.cz/nasm/asm/float.c +952 -0
  33. data/vendor/repo.or.cz/nasm/asm/float.h +54 -0
  34. data/vendor/repo.or.cz/nasm/asm/labels.c +540 -0
  35. data/vendor/repo.or.cz/nasm/asm/listing.c +346 -0
  36. data/vendor/repo.or.cz/nasm/asm/listing.h +113 -0
  37. data/vendor/repo.or.cz/nasm/asm/nasm.c +1855 -0
  38. data/vendor/repo.or.cz/nasm/asm/parser.c +1167 -0
  39. data/vendor/repo.or.cz/nasm/asm/parser.h +45 -0
  40. data/vendor/repo.or.cz/nasm/asm/phash.pl +109 -0
  41. data/vendor/repo.or.cz/nasm/asm/pptok.dat +96 -0
  42. data/vendor/repo.or.cz/nasm/asm/pptok.pl +271 -0
  43. data/vendor/repo.or.cz/nasm/asm/pragma.c +218 -0
  44. data/vendor/repo.or.cz/nasm/asm/preproc-nop.c +188 -0
  45. data/vendor/repo.or.cz/nasm/asm/preproc.c +5459 -0
  46. data/vendor/repo.or.cz/nasm/asm/preproc.h +55 -0
  47. data/vendor/repo.or.cz/nasm/asm/quote.c +479 -0
  48. data/vendor/repo.or.cz/nasm/asm/quote.h +44 -0
  49. data/vendor/repo.or.cz/nasm/asm/rdstrnum.c +68 -0
  50. data/vendor/repo.or.cz/nasm/asm/segalloc.c +51 -0
  51. data/vendor/repo.or.cz/nasm/asm/stdscan.c +345 -0
  52. data/vendor/repo.or.cz/nasm/asm/stdscan.h +49 -0
  53. data/vendor/repo.or.cz/nasm/asm/strfunc.c +359 -0
  54. data/vendor/repo.or.cz/nasm/asm/tokens.dat +135 -0
  55. data/vendor/repo.or.cz/nasm/asm/tokhash.pl +284 -0
  56. data/vendor/repo.or.cz/nasm/autogen.sh +9 -0
  57. data/vendor/repo.or.cz/nasm/common/common.c +122 -0
  58. data/vendor/repo.or.cz/nasm/config/msvc.h +192 -0
  59. data/vendor/repo.or.cz/nasm/config/unknown.h +51 -0
  60. data/vendor/repo.or.cz/nasm/config/watcom.h +74 -0
  61. data/vendor/repo.or.cz/nasm/configure.ac +253 -0
  62. data/vendor/repo.or.cz/nasm/contrib/MSVC6.txt +25 -0
  63. data/vendor/repo.or.cz/nasm/contrib/VSrules/nasm.README +16 -0
  64. data/vendor/repo.or.cz/nasm/contrib/VSrules/nasm.rules +79 -0
  65. data/vendor/repo.or.cz/nasm/disasm/disasm.c +1735 -0
  66. data/vendor/repo.or.cz/nasm/disasm/disasm.h +49 -0
  67. data/vendor/repo.or.cz/nasm/disasm/ndisasm.c +397 -0
  68. data/vendor/repo.or.cz/nasm/disasm/sync.c +132 -0
  69. data/vendor/repo.or.cz/nasm/disasm/sync.h +45 -0
  70. data/vendor/repo.or.cz/nasm/doc/Makefile.in +86 -0
  71. data/vendor/repo.or.cz/nasm/doc/README +20 -0
  72. data/vendor/repo.or.cz/nasm/doc/afmmetrics.ph +102 -0
  73. data/vendor/repo.or.cz/nasm/doc/changes.src +2588 -0
  74. data/vendor/repo.or.cz/nasm/doc/findfont.ph +180 -0
  75. data/vendor/repo.or.cz/nasm/doc/genps.pl +1294 -0
  76. data/vendor/repo.or.cz/nasm/doc/inslist.pl +108 -0
  77. data/vendor/repo.or.cz/nasm/doc/internal.doc +290 -0
  78. data/vendor/repo.or.cz/nasm/doc/local.css +1 -0
  79. data/vendor/repo.or.cz/nasm/doc/nasmdoc.css +150 -0
  80. data/vendor/repo.or.cz/nasm/doc/nasmdoc.src +8309 -0
  81. data/vendor/repo.or.cz/nasm/doc/nasmlogo.eps +212 -0
  82. data/vendor/repo.or.cz/nasm/doc/nasmlogw.png +0 -0
  83. data/vendor/repo.or.cz/nasm/doc/psfonts.ph +53 -0
  84. data/vendor/repo.or.cz/nasm/doc/pspdf.pl +98 -0
  85. data/vendor/repo.or.cz/nasm/doc/pswidth.ph +25 -0
  86. data/vendor/repo.or.cz/nasm/doc/rdsrc.pl +1111 -0
  87. data/vendor/repo.or.cz/nasm/doc/ttfmetrics.ph +63 -0
  88. data/vendor/repo.or.cz/nasm/headers/c +33 -0
  89. data/vendor/repo.or.cz/nasm/headers/doc +33 -0
  90. data/vendor/repo.or.cz/nasm/headers/mac +33 -0
  91. data/vendor/repo.or.cz/nasm/headers/perl +33 -0
  92. data/vendor/repo.or.cz/nasm/include/compiler.h +277 -0
  93. data/vendor/repo.or.cz/nasm/include/disp8.h +45 -0
  94. data/vendor/repo.or.cz/nasm/include/error.h +135 -0
  95. data/vendor/repo.or.cz/nasm/include/hashtbl.h +85 -0
  96. data/vendor/repo.or.cz/nasm/include/iflag.h +173 -0
  97. data/vendor/repo.or.cz/nasm/include/insns.h +76 -0
  98. data/vendor/repo.or.cz/nasm/include/labels.h +60 -0
  99. data/vendor/repo.or.cz/nasm/include/md5.h +21 -0
  100. data/vendor/repo.or.cz/nasm/include/nasm.h +1246 -0
  101. data/vendor/repo.or.cz/nasm/include/nasmint.h +219 -0
  102. data/vendor/repo.or.cz/nasm/include/nasmlib.h +524 -0
  103. data/vendor/repo.or.cz/nasm/include/opflags.h +271 -0
  104. data/vendor/repo.or.cz/nasm/include/perfhash.h +52 -0
  105. data/vendor/repo.or.cz/nasm/include/raa.h +46 -0
  106. data/vendor/repo.or.cz/nasm/include/rbtree.h +51 -0
  107. data/vendor/repo.or.cz/nasm/include/rdoff.h +169 -0
  108. data/vendor/repo.or.cz/nasm/include/saa.h +94 -0
  109. data/vendor/repo.or.cz/nasm/include/strlist.h +55 -0
  110. data/vendor/repo.or.cz/nasm/include/tables.h +70 -0
  111. data/vendor/repo.or.cz/nasm/include/ver.h +47 -0
  112. data/vendor/repo.or.cz/nasm/install-sh +250 -0
  113. data/vendor/repo.or.cz/nasm/macros/altreg.mac +107 -0
  114. data/vendor/repo.or.cz/nasm/macros/fp.mac +54 -0
  115. data/vendor/repo.or.cz/nasm/macros/ifunc.mac +48 -0
  116. data/vendor/repo.or.cz/nasm/macros/macros.pl +294 -0
  117. data/vendor/repo.or.cz/nasm/macros/smartalign.mac +189 -0
  118. data/vendor/repo.or.cz/nasm/macros/standard.mac +226 -0
  119. data/vendor/repo.or.cz/nasm/misc/Doxyfile +752 -0
  120. data/vendor/repo.or.cz/nasm/misc/Nindent +18 -0
  121. data/vendor/repo.or.cz/nasm/misc/README +2 -0
  122. data/vendor/repo.or.cz/nasm/misc/c16.mac +82 -0
  123. data/vendor/repo.or.cz/nasm/misc/c32.mac +52 -0
  124. data/vendor/repo.or.cz/nasm/misc/crcgen.c +44 -0
  125. data/vendor/repo.or.cz/nasm/misc/exebin.mac +57 -0
  126. data/vendor/repo.or.cz/nasm/misc/exebin2.mac +114 -0
  127. data/vendor/repo.or.cz/nasm/misc/fmtinsns.pl +40 -0
  128. data/vendor/repo.or.cz/nasm/misc/genfma.pl +63 -0
  129. data/vendor/repo.or.cz/nasm/misc/hints.txt +26 -0
  130. data/vendor/repo.or.cz/nasm/misc/magic +6 -0
  131. data/vendor/repo.or.cz/nasm/misc/myC32.mac +121 -0
  132. data/vendor/repo.or.cz/nasm/misc/nasm.sl +320 -0
  133. data/vendor/repo.or.cz/nasm/misc/nasmstab +296 -0
  134. data/vendor/repo.or.cz/nasm/misc/omfdump.c +517 -0
  135. data/vendor/repo.or.cz/nasm/misc/pmw.bat +9 -0
  136. data/vendor/repo.or.cz/nasm/misc/proc32.ash +441 -0
  137. data/vendor/repo.or.cz/nasm/misc/scitech.mac +1223 -0
  138. data/vendor/repo.or.cz/nasm/misc/xcrcgen.c +80 -0
  139. data/vendor/repo.or.cz/nasm/nasm.spec.in +83 -0
  140. data/vendor/repo.or.cz/nasm/nasm.spec.sed +3 -0
  141. data/vendor/repo.or.cz/nasm/nasm.txt +306 -0
  142. data/vendor/repo.or.cz/nasm/nasmlib/badenum.c +43 -0
  143. data/vendor/repo.or.cz/nasm/nasmlib/bsi.c +77 -0
  144. data/vendor/repo.or.cz/nasm/nasmlib/crc64.c +189 -0
  145. data/vendor/repo.or.cz/nasm/nasmlib/file.c +259 -0
  146. data/vendor/repo.or.cz/nasm/nasmlib/file.h +128 -0
  147. data/vendor/repo.or.cz/nasm/nasmlib/filename.c +69 -0
  148. data/vendor/repo.or.cz/nasm/nasmlib/hashtbl.c +232 -0
  149. data/vendor/repo.or.cz/nasm/nasmlib/ilog2.c +168 -0
  150. data/vendor/repo.or.cz/nasm/nasmlib/malloc.c +108 -0
  151. data/vendor/repo.or.cz/nasm/nasmlib/md5c.c +247 -0
  152. data/vendor/repo.or.cz/nasm/nasmlib/mmap.c +139 -0
  153. data/vendor/repo.or.cz/nasm/nasmlib/path.c +186 -0
  154. data/vendor/repo.or.cz/nasm/nasmlib/perfhash.c +55 -0
  155. data/vendor/repo.or.cz/nasm/nasmlib/perfhash.pl +362 -0
  156. data/vendor/repo.or.cz/nasm/nasmlib/raa.c +173 -0
  157. data/vendor/repo.or.cz/nasm/nasmlib/rbtree.c +119 -0
  158. data/vendor/repo.or.cz/nasm/nasmlib/readnum.c +172 -0
  159. data/vendor/repo.or.cz/nasm/nasmlib/realpath.c +135 -0
  160. data/vendor/repo.or.cz/nasm/nasmlib/saa.c +431 -0
  161. data/vendor/repo.or.cz/nasm/nasmlib/srcfile.c +128 -0
  162. data/vendor/repo.or.cz/nasm/nasmlib/string.c +242 -0
  163. data/vendor/repo.or.cz/nasm/nasmlib/strlist.c +100 -0
  164. data/vendor/repo.or.cz/nasm/nasmlib/ver.c +51 -0
  165. data/vendor/repo.or.cz/nasm/nasmlib/zerobuf.c +42 -0
  166. data/vendor/repo.or.cz/nasm/ndisasm.txt +94 -0
  167. data/vendor/repo.or.cz/nasm/nsis/NASMMultiUser.nsh +478 -0
  168. data/vendor/repo.or.cz/nasm/nsis/getpearch.pl +76 -0
  169. data/vendor/repo.or.cz/nasm/nsis/nasm-un.ico +0 -0
  170. data/vendor/repo.or.cz/nasm/nsis/nasm.ico +0 -0
  171. data/vendor/repo.or.cz/nasm/nsis/nasm.nsi +241 -0
  172. data/vendor/repo.or.cz/nasm/output/codeview.c +814 -0
  173. data/vendor/repo.or.cz/nasm/output/dwarf.h +566 -0
  174. data/vendor/repo.or.cz/nasm/output/elf.h +537 -0
  175. data/vendor/repo.or.cz/nasm/output/legacy.c +112 -0
  176. data/vendor/repo.or.cz/nasm/output/nulldbg.c +93 -0
  177. data/vendor/repo.or.cz/nasm/output/nullout.c +51 -0
  178. data/vendor/repo.or.cz/nasm/output/outaout.c +954 -0
  179. data/vendor/repo.or.cz/nasm/output/outaout.mac +37 -0
  180. data/vendor/repo.or.cz/nasm/output/outas86.c +650 -0
  181. data/vendor/repo.or.cz/nasm/output/outas86.mac +37 -0
  182. data/vendor/repo.or.cz/nasm/output/outbin.c +1713 -0
  183. data/vendor/repo.or.cz/nasm/output/outbin.mac +40 -0
  184. data/vendor/repo.or.cz/nasm/output/outcoff.c +1242 -0
  185. data/vendor/repo.or.cz/nasm/output/outcoff.mac +43 -0
  186. data/vendor/repo.or.cz/nasm/output/outdbg.c +425 -0
  187. data/vendor/repo.or.cz/nasm/output/outelf.c +3370 -0
  188. data/vendor/repo.or.cz/nasm/output/outelf.h +156 -0
  189. data/vendor/repo.or.cz/nasm/output/outelf.mac +41 -0
  190. data/vendor/repo.or.cz/nasm/output/outform.c +120 -0
  191. data/vendor/repo.or.cz/nasm/output/outform.h +379 -0
  192. data/vendor/repo.or.cz/nasm/output/outieee.c +1528 -0
  193. data/vendor/repo.or.cz/nasm/output/outlib.c +58 -0
  194. data/vendor/repo.or.cz/nasm/output/outlib.h +63 -0
  195. data/vendor/repo.or.cz/nasm/output/outmacho.c +2387 -0
  196. data/vendor/repo.or.cz/nasm/output/outmacho.mac +49 -0
  197. data/vendor/repo.or.cz/nasm/output/outobj.c +2725 -0
  198. data/vendor/repo.or.cz/nasm/output/outobj.mac +49 -0
  199. data/vendor/repo.or.cz/nasm/output/outrdf.mac +40 -0
  200. data/vendor/repo.or.cz/nasm/output/outrdf2.c +791 -0
  201. data/vendor/repo.or.cz/nasm/output/outrdf2.mac +43 -0
  202. data/vendor/repo.or.cz/nasm/output/pecoff.h +532 -0
  203. data/vendor/repo.or.cz/nasm/output/stabs.h +144 -0
  204. data/vendor/repo.or.cz/nasm/perllib/crc64.ph +158 -0
  205. data/vendor/repo.or.cz/nasm/perllib/gensv.pl +34 -0
  206. data/vendor/repo.or.cz/nasm/perllib/phash.ph +200 -0
  207. data/vendor/repo.or.cz/nasm/perllib/random_sv_vectors.ph +67 -0
  208. data/vendor/repo.or.cz/nasm/rdoff/README +185 -0
  209. data/vendor/repo.or.cz/nasm/rdoff/collectn.c +44 -0
  210. data/vendor/repo.or.cz/nasm/rdoff/collectn.h +22 -0
  211. data/vendor/repo.or.cz/nasm/rdoff/doc/Makefile +37 -0
  212. data/vendor/repo.or.cz/nasm/rdoff/doc/rdoff.texi +137 -0
  213. data/vendor/repo.or.cz/nasm/rdoff/doc/v1-v2.txt +62 -0
  214. data/vendor/repo.or.cz/nasm/rdoff/hash.c +122 -0
  215. data/vendor/repo.or.cz/nasm/rdoff/hash.h +17 -0
  216. data/vendor/repo.or.cz/nasm/rdoff/ldrdf.1 +41 -0
  217. data/vendor/repo.or.cz/nasm/rdoff/ldrdf.c +1395 -0
  218. data/vendor/repo.or.cz/nasm/rdoff/ldsegs.h +59 -0
  219. data/vendor/repo.or.cz/nasm/rdoff/rdf2bin.1 +65 -0
  220. data/vendor/repo.or.cz/nasm/rdoff/rdf2bin.c +431 -0
  221. data/vendor/repo.or.cz/nasm/rdoff/rdf2com.1 +1 -0
  222. data/vendor/repo.or.cz/nasm/rdoff/rdf2ihx.1 +1 -0
  223. data/vendor/repo.or.cz/nasm/rdoff/rdf2ith.1 +1 -0
  224. data/vendor/repo.or.cz/nasm/rdoff/rdf2srec.1 +1 -0
  225. data/vendor/repo.or.cz/nasm/rdoff/rdfdump.1 +24 -0
  226. data/vendor/repo.or.cz/nasm/rdoff/rdfdump.c +347 -0
  227. data/vendor/repo.or.cz/nasm/rdoff/rdflib.1 +39 -0
  228. data/vendor/repo.or.cz/nasm/rdoff/rdflib.c +434 -0
  229. data/vendor/repo.or.cz/nasm/rdoff/rdfload.c +213 -0
  230. data/vendor/repo.or.cz/nasm/rdoff/rdfload.h +29 -0
  231. data/vendor/repo.or.cz/nasm/rdoff/rdfutils.h +165 -0
  232. data/vendor/repo.or.cz/nasm/rdoff/rdlar.c +492 -0
  233. data/vendor/repo.or.cz/nasm/rdoff/rdlar.h +34 -0
  234. data/vendor/repo.or.cz/nasm/rdoff/rdlib.c +290 -0
  235. data/vendor/repo.or.cz/nasm/rdoff/rdlib.h +62 -0
  236. data/vendor/repo.or.cz/nasm/rdoff/rdoff.c +621 -0
  237. data/vendor/repo.or.cz/nasm/rdoff/rdx.1 +21 -0
  238. data/vendor/repo.or.cz/nasm/rdoff/rdx.c +90 -0
  239. data/vendor/repo.or.cz/nasm/rdoff/segtab.c +172 -0
  240. data/vendor/repo.or.cz/nasm/rdoff/segtab.h +45 -0
  241. data/vendor/repo.or.cz/nasm/rdoff/symtab.c +159 -0
  242. data/vendor/repo.or.cz/nasm/rdoff/symtab.h +55 -0
  243. data/vendor/repo.or.cz/nasm/rdoff/test/Makefile +10 -0
  244. data/vendor/repo.or.cz/nasm/rdoff/test/makelib.sh +14 -0
  245. data/vendor/repo.or.cz/nasm/rdoff/test/rdfseg.asm +20 -0
  246. data/vendor/repo.or.cz/nasm/rdoff/test/rdfseg2.asm +12 -0
  247. data/vendor/repo.or.cz/nasm/rdoff/test/rdftest1.asm +54 -0
  248. data/vendor/repo.or.cz/nasm/rdoff/test/rdftest2.asm +33 -0
  249. data/vendor/repo.or.cz/nasm/rdoff/test/rdtlib.asm +48 -0
  250. data/vendor/repo.or.cz/nasm/rdoff/test/rdtmain.asm +47 -0
  251. data/vendor/repo.or.cz/nasm/rdoff/test/testlib.asm +18 -0
  252. data/vendor/repo.or.cz/nasm/stdlib/snprintf.c +29 -0
  253. data/vendor/repo.or.cz/nasm/stdlib/strlcpy.c +51 -0
  254. data/vendor/repo.or.cz/nasm/stdlib/strnlen.c +46 -0
  255. data/vendor/repo.or.cz/nasm/stdlib/vsnprintf.c +51 -0
  256. data/vendor/repo.or.cz/nasm/test/Makefile +106 -0
  257. data/vendor/repo.or.cz/nasm/test/_file_.asm +5 -0
  258. data/vendor/repo.or.cz/nasm/test/_version.asm +2 -0
  259. data/vendor/repo.or.cz/nasm/test/a32offs.asm +9 -0
  260. data/vendor/repo.or.cz/nasm/test/absolute.asm +40 -0
  261. data/vendor/repo.or.cz/nasm/test/addr64x.asm +18 -0
  262. data/vendor/repo.or.cz/nasm/test/align13.asm +19 -0
  263. data/vendor/repo.or.cz/nasm/test/align13s.asm +20 -0
  264. data/vendor/repo.or.cz/nasm/test/alonesym-obj.asm +166 -0
  265. data/vendor/repo.or.cz/nasm/test/andbyte.asm +15 -0
  266. data/vendor/repo.or.cz/nasm/test/aoutso.asm +99 -0
  267. data/vendor/repo.or.cz/nasm/test/aouttest.asm +86 -0
  268. data/vendor/repo.or.cz/nasm/test/aouttest.c +36 -0
  269. data/vendor/repo.or.cz/nasm/test/avx.asm +46 -0
  270. data/vendor/repo.or.cz/nasm/test/avx005.asm +529 -0
  271. data/vendor/repo.or.cz/nasm/test/avx2.asm +1608 -0
  272. data/vendor/repo.or.cz/nasm/test/avx512cd.asm +106 -0
  273. data/vendor/repo.or.cz/nasm/test/avx512er.asm +144 -0
  274. data/vendor/repo.or.cz/nasm/test/avx512f.asm +7000 -0
  275. data/vendor/repo.or.cz/nasm/test/avx512pf.asm +88 -0
  276. data/vendor/repo.or.cz/nasm/test/bcd.asm +23 -0
  277. data/vendor/repo.or.cz/nasm/test/binexe.asm +35 -0
  278. data/vendor/repo.or.cz/nasm/test/bintest.asm +59 -0
  279. data/vendor/repo.or.cz/nasm/test/bisect.sh +22 -0
  280. data/vendor/repo.or.cz/nasm/test/br1879590.asm +25 -0
  281. data/vendor/repo.or.cz/nasm/test/br2003451.asm +17 -0
  282. data/vendor/repo.or.cz/nasm/test/br2030823.asm +7 -0
  283. data/vendor/repo.or.cz/nasm/test/br2148476.asm +221 -0
  284. data/vendor/repo.or.cz/nasm/test/br2222615.asm +19 -0
  285. data/vendor/repo.or.cz/nasm/test/br2496848.asm +42 -0
  286. data/vendor/repo.or.cz/nasm/test/br3005117.asm +26 -0
  287. data/vendor/repo.or.cz/nasm/test/br3026808.asm +20 -0
  288. data/vendor/repo.or.cz/nasm/test/br3028880.asm +8 -0
  289. data/vendor/repo.or.cz/nasm/test/br3041451.asm +59 -0
  290. data/vendor/repo.or.cz/nasm/test/br3058845.asm +14 -0
  291. data/vendor/repo.or.cz/nasm/test/br3066383.asm +70 -0
  292. data/vendor/repo.or.cz/nasm/test/br3074517.asm +12 -0
  293. data/vendor/repo.or.cz/nasm/test/br3092924.asm +25 -0
  294. data/vendor/repo.or.cz/nasm/test/br3104312.asm +11 -0
  295. data/vendor/repo.or.cz/nasm/test/br3109604.asm +9 -0
  296. data/vendor/repo.or.cz/nasm/test/br3174983.asm +9 -0
  297. data/vendor/repo.or.cz/nasm/test/br3187743.asm +7 -0
  298. data/vendor/repo.or.cz/nasm/test/br3189064.asm +7 -0
  299. data/vendor/repo.or.cz/nasm/test/br3200749.asm +9 -0
  300. data/vendor/repo.or.cz/nasm/test/br3385573.asm +11 -0
  301. data/vendor/repo.or.cz/nasm/test/br3392252.asm +43 -0
  302. data/vendor/repo.or.cz/nasm/test/br3392259.asm +8 -0
  303. data/vendor/repo.or.cz/nasm/test/br3392363.asm +4 -0
  304. data/vendor/repo.or.cz/nasm/test/br3392392.asm +16 -0
  305. data/vendor/repo.or.cz/nasm/test/br3392396.asm +5 -0
  306. data/vendor/repo.or.cz/nasm/test/br3392411.asm +22 -0
  307. data/vendor/repo.or.cz/nasm/test/br3392418.asm +3 -0
  308. data/vendor/repo.or.cz/nasm/test/br3392439.asm +25 -0
  309. data/vendor/repo.or.cz/nasm/test/br3392442.asm +6 -0
  310. data/vendor/repo.or.cz/nasm/test/br560575.asm +17 -0
  311. data/vendor/repo.or.cz/nasm/test/br560873.asm +27 -0
  312. data/vendor/repo.or.cz/nasm/test/br890790.asm +7 -0
  313. data/vendor/repo.or.cz/nasm/test/br890790_i.asm +1 -0
  314. data/vendor/repo.or.cz/nasm/test/br978756.asm +7 -0
  315. data/vendor/repo.or.cz/nasm/test/changed.asm +383 -0
  316. data/vendor/repo.or.cz/nasm/test/cofftest.asm +85 -0
  317. data/vendor/repo.or.cz/nasm/test/cofftest.c +35 -0
  318. data/vendor/repo.or.cz/nasm/test/crc32.asm +37 -0
  319. data/vendor/repo.or.cz/nasm/test/cv8struc.asm +14 -0
  320. data/vendor/repo.or.cz/nasm/test/dtbcd.asm +72 -0
  321. data/vendor/repo.or.cz/nasm/test/elf64so.asm +118 -0
  322. data/vendor/repo.or.cz/nasm/test/elfso.asm +100 -0
  323. data/vendor/repo.or.cz/nasm/test/elftest.asm +87 -0
  324. data/vendor/repo.or.cz/nasm/test/elftest.c +38 -0
  325. data/vendor/repo.or.cz/nasm/test/elftest64.c +43 -0
  326. data/vendor/repo.or.cz/nasm/test/elif.asm +39 -0
  327. data/vendor/repo.or.cz/nasm/test/expimp.asm +90 -0
  328. data/vendor/repo.or.cz/nasm/test/far64.asm +10 -0
  329. data/vendor/repo.or.cz/nasm/test/float.asm +186 -0
  330. data/vendor/repo.or.cz/nasm/test/float8.asm +135 -0
  331. data/vendor/repo.or.cz/nasm/test/floatb.asm +35 -0
  332. data/vendor/repo.or.cz/nasm/test/floatexp.asm +382 -0
  333. data/vendor/repo.or.cz/nasm/test/floatize.asm +19 -0
  334. data/vendor/repo.or.cz/nasm/test/floattest.asm +28 -0
  335. data/vendor/repo.or.cz/nasm/test/floatx.asm +525 -0
  336. data/vendor/repo.or.cz/nasm/test/fpu.asm +127 -0
  337. data/vendor/repo.or.cz/nasm/test/fwdopt.asm +133 -0
  338. data/vendor/repo.or.cz/nasm/test/fwdoptpp.asm +150 -0
  339. data/vendor/repo.or.cz/nasm/test/gas2nasm.py +104 -0
  340. data/vendor/repo.or.cz/nasm/test/gather.asm +11 -0
  341. data/vendor/repo.or.cz/nasm/test/gotoff64.asm +25 -0
  342. data/vendor/repo.or.cz/nasm/test/hexfp.asm +25 -0
  343. data/vendor/repo.or.cz/nasm/test/hle.asm +19 -0
  344. data/vendor/repo.or.cz/nasm/test/ifelse.asm +46 -0
  345. data/vendor/repo.or.cz/nasm/test/ifenv.asm +31 -0
  346. data/vendor/repo.or.cz/nasm/test/ifmacro.asm +413 -0
  347. data/vendor/repo.or.cz/nasm/test/iftoken.asm +317 -0
  348. data/vendor/repo.or.cz/nasm/test/iftoken.pl +32 -0
  349. data/vendor/repo.or.cz/nasm/test/ilog2.asm +271 -0
  350. data/vendor/repo.or.cz/nasm/test/imacro.asm +8 -0
  351. data/vendor/repo.or.cz/nasm/test/imm.asm +23 -0
  352. data/vendor/repo.or.cz/nasm/test/imm64.asm +61 -0
  353. data/vendor/repo.or.cz/nasm/test/immwarn.asm +91 -0
  354. data/vendor/repo.or.cz/nasm/test/imul.asm +117 -0
  355. data/vendor/repo.or.cz/nasm/test/inc1.asm +6 -0
  356. data/vendor/repo.or.cz/nasm/test/inc2.asm +8 -0
  357. data/vendor/repo.or.cz/nasm/test/incbin.asm +7 -0
  358. data/vendor/repo.or.cz/nasm/test/incbin.data +2 -0
  359. data/vendor/repo.or.cz/nasm/test/inctest.asm +15 -0
  360. data/vendor/repo.or.cz/nasm/test/insnlbl.asm +12 -0
  361. data/vendor/repo.or.cz/nasm/test/invlpga.asm +11 -0
  362. data/vendor/repo.or.cz/nasm/test/jmp64.asm +19 -0
  363. data/vendor/repo.or.cz/nasm/test/lar_lsl.asm +124 -0
  364. data/vendor/repo.or.cz/nasm/test/larlsl.asm +23 -0
  365. data/vendor/repo.or.cz/nasm/test/lnxhello.asm +54 -0
  366. data/vendor/repo.or.cz/nasm/test/local.asm +19 -0
  367. data/vendor/repo.or.cz/nasm/test/loopoffs.asm +12 -0
  368. data/vendor/repo.or.cz/nasm/test/lwp.asm +213 -0
  369. data/vendor/repo.or.cz/nasm/test/macro-defaults.asm +64 -0
  370. data/vendor/repo.or.cz/nasm/test/macroerr.asm +12 -0
  371. data/vendor/repo.or.cz/nasm/test/macroerr.inc +3 -0
  372. data/vendor/repo.or.cz/nasm/test/mmxsize.asm +38 -0
  373. data/vendor/repo.or.cz/nasm/test/movd.asm +12 -0
  374. data/vendor/repo.or.cz/nasm/test/movd64.asm +15 -0
  375. data/vendor/repo.or.cz/nasm/test/movimm.asm +28 -0
  376. data/vendor/repo.or.cz/nasm/test/movnti.asm +10 -0
  377. data/vendor/repo.or.cz/nasm/test/mpx-64.asm +120 -0
  378. data/vendor/repo.or.cz/nasm/test/mpx.asm +89 -0
  379. data/vendor/repo.or.cz/nasm/test/multisection.asm +96 -0
  380. data/vendor/repo.or.cz/nasm/test/nasmformat.asm +17 -0
  381. data/vendor/repo.or.cz/nasm/test/new +9 -0
  382. data/vendor/repo.or.cz/nasm/test/newrdwr.asm +24 -0
  383. data/vendor/repo.or.cz/nasm/test/nop.asm +17 -0
  384. data/vendor/repo.or.cz/nasm/test/nullfile.asm +4 -0
  385. data/vendor/repo.or.cz/nasm/test/objexe.asm +30 -0
  386. data/vendor/repo.or.cz/nasm/test/objlink.c +33 -0
  387. data/vendor/repo.or.cz/nasm/test/objtest.asm +85 -0
  388. data/vendor/repo.or.cz/nasm/test/optimization.asm +104 -0
  389. data/vendor/repo.or.cz/nasm/test/org.asm +18 -0
  390. data/vendor/repo.or.cz/nasm/test/paste.asm +12 -0
  391. data/vendor/repo.or.cz/nasm/test/pcrel.asm +52 -0
  392. data/vendor/repo.or.cz/nasm/test/perf/label.pl +18 -0
  393. data/vendor/repo.or.cz/nasm/test/perf/macro.pl +18 -0
  394. data/vendor/repo.or.cz/nasm/test/perf/token.pl +23 -0
  395. data/vendor/repo.or.cz/nasm/test/performtest.pl +192 -0
  396. data/vendor/repo.or.cz/nasm/test/pextrw.asm +3 -0
  397. data/vendor/repo.or.cz/nasm/test/pinsr16.asm +53 -0
  398. data/vendor/repo.or.cz/nasm/test/pinsr32.asm +53 -0
  399. data/vendor/repo.or.cz/nasm/test/pinsr64.asm +68 -0
  400. data/vendor/repo.or.cz/nasm/test/popcnt.asm +32 -0
  401. data/vendor/repo.or.cz/nasm/test/ppindirect.asm +42 -0
  402. data/vendor/repo.or.cz/nasm/test/pragma.asm +12 -0
  403. data/vendor/repo.or.cz/nasm/test/prefix66.asm +28 -0
  404. data/vendor/repo.or.cz/nasm/test/ptr.asm +4 -0
  405. data/vendor/repo.or.cz/nasm/test/pushseg.asm +17 -0
  406. data/vendor/repo.or.cz/nasm/test/r13.asm +15 -0
  407. data/vendor/repo.or.cz/nasm/test/radix.asm +54 -0
  408. data/vendor/repo.or.cz/nasm/test/rdpid.asm +21 -0
  409. data/vendor/repo.or.cz/nasm/test/reldef.asm +57 -0
  410. data/vendor/repo.or.cz/nasm/test/relocs.asm +20 -0
  411. data/vendor/repo.or.cz/nasm/test/riprel.asm +5357 -0
  412. data/vendor/repo.or.cz/nasm/test/riprel.pl +29 -0
  413. data/vendor/repo.or.cz/nasm/test/riprel2.asm +11 -0
  414. data/vendor/repo.or.cz/nasm/test/sha-64.asm +30 -0
  415. data/vendor/repo.or.cz/nasm/test/sha.asm +31 -0
  416. data/vendor/repo.or.cz/nasm/test/smartalign16.asm +36 -0
  417. data/vendor/repo.or.cz/nasm/test/smartalign32.asm +36 -0
  418. data/vendor/repo.or.cz/nasm/test/smartalign64.asm +36 -0
  419. data/vendor/repo.or.cz/nasm/test/splitea.asm +11 -0
  420. data/vendor/repo.or.cz/nasm/test/sreg.asm +65 -0
  421. data/vendor/repo.or.cz/nasm/test/strlen.asm +5 -0
  422. data/vendor/repo.or.cz/nasm/test/struc.asm +33 -0
  423. data/vendor/repo.or.cz/nasm/test/test67.asm +38 -0
  424. data/vendor/repo.or.cz/nasm/test/testdos.asm +13 -0
  425. data/vendor/repo.or.cz/nasm/test/testnos3.asm +973 -0
  426. data/vendor/repo.or.cz/nasm/test/time.asm +11 -0
  427. data/vendor/repo.or.cz/nasm/test/times.asm +21 -0
  428. data/vendor/repo.or.cz/nasm/test/timesneg.asm +3 -0
  429. data/vendor/repo.or.cz/nasm/test/tmap.nas +1447 -0
  430. data/vendor/repo.or.cz/nasm/test/uscore.asm +15 -0
  431. data/vendor/repo.or.cz/nasm/test/utf.asm +82 -0
  432. data/vendor/repo.or.cz/nasm/test/vaesenc.asm +22 -0
  433. data/vendor/repo.or.cz/nasm/test/vex.asm +9 -0
  434. data/vendor/repo.or.cz/nasm/test/vgather.asm +76 -0
  435. data/vendor/repo.or.cz/nasm/test/vmread.asm +26 -0
  436. data/vendor/repo.or.cz/nasm/test/weirdpaste.asm +29 -0
  437. data/vendor/repo.or.cz/nasm/test/xchg.asm +96 -0
  438. data/vendor/repo.or.cz/nasm/test/xcrypt.asm +24 -0
  439. data/vendor/repo.or.cz/nasm/test/xmm0.asm +12 -0
  440. data/vendor/repo.or.cz/nasm/test/zerobyte.asm +22 -0
  441. data/vendor/repo.or.cz/nasm/tools/cleanfile +176 -0
  442. data/vendor/repo.or.cz/nasm/tools/cleanpatch +258 -0
  443. data/vendor/repo.or.cz/nasm/tools/mkdep.pl +261 -0
  444. data/vendor/repo.or.cz/nasm/tools/release +105 -0
  445. data/vendor/repo.or.cz/nasm/tools/syncfiles.pl +137 -0
  446. data/vendor/repo.or.cz/nasm/tools/tag-release +58 -0
  447. data/vendor/repo.or.cz/nasm/version +1 -0
  448. data/vendor/repo.or.cz/nasm/version.pl +189 -0
  449. data/vendor/repo.or.cz/nasm/x86/disp8.c +131 -0
  450. data/vendor/repo.or.cz/nasm/x86/insns-iflags.ph +280 -0
  451. data/vendor/repo.or.cz/nasm/x86/insns.dat +5371 -0
  452. data/vendor/repo.or.cz/nasm/x86/insns.pl +1043 -0
  453. data/vendor/repo.or.cz/nasm/x86/regs.dat +138 -0
  454. data/vendor/repo.or.cz/nasm/x86/regs.pl +204 -0
  455. metadata +520 -0
@@ -0,0 +1,34 @@
1
+ /*
2
+ * rdlar.h - definitions of new RDOFF library/archive format.
3
+ */
4
+
5
+ #ifndef RDOFF_RDLAR_H
6
+ #define RDOFF_RDLAR_H 1
7
+
8
+ #include "compiler.h"
9
+
10
+ /* For non-POSIX operating systems */
11
+ #ifndef HAVE_GETUID
12
+ # define getuid() 0
13
+ #endif
14
+ #ifndef HAVE_GETGID
15
+ # define getgid() 0
16
+ #endif
17
+
18
+ #define RDLAMAG 0x414C4452 /* Archive magic */
19
+ #define RDLMMAG 0x4D4C4452 /* Member magic */
20
+
21
+ #define MAXMODNAMELEN 256 /* Maximum length of module name */
22
+
23
+ struct rdlm_hdr {
24
+ uint32_t magic; /* Must be RDLAMAG */
25
+ uint32_t hdrsize; /* Header size + sizeof(module_name) */
26
+ uint32_t date; /* Creation date */
27
+ uint32_t owner; /* UID */
28
+ uint32_t group; /* GID */
29
+ uint32_t mode; /* File mode */
30
+ uint32_t size; /* File size */
31
+ /* NULL-terminated module name immediately follows */
32
+ };
33
+
34
+ #endif
@@ -0,0 +1,290 @@
1
+ /* ----------------------------------------------------------------------- *
2
+ *
3
+ * Copyright 1996-2014 The NASM Authors - All Rights Reserved
4
+ * See the file AUTHORS included with the NASM distribution for
5
+ * the specific copyright holders.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following
9
+ * conditions are met:
10
+ *
11
+ * * Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ * * Redistributions in binary form must reproduce the above
14
+ * copyright notice, this list of conditions and the following
15
+ * disclaimer in the documentation and/or other materials provided
16
+ * with the distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ * ----------------------------------------------------------------------- */
33
+
34
+ /*
35
+ * rdlib.c - routines for manipulating RDOFF libraries (.rdl)
36
+ */
37
+
38
+ #include "compiler.h"
39
+
40
+ #include <stdio.h>
41
+ #include <stdlib.h>
42
+ #include <string.h>
43
+
44
+ #include "rdfutils.h"
45
+ #include "rdlib.h"
46
+ #include "rdlar.h"
47
+
48
+ /* See Texinfo documentation about new RDOFF libraries format */
49
+
50
+ int rdl_error = 0;
51
+
52
+ char *rdl_errors[5] = {
53
+ "no error", "could not open file", "invalid file structure",
54
+ "file contains modules of an unsupported RDOFF version",
55
+ "module not found"
56
+ };
57
+
58
+ int rdl_verify(const char *filename)
59
+ {
60
+ FILE *fp;
61
+ char buf[257];
62
+ int i;
63
+ int32_t length;
64
+ static char lastverified[256];
65
+ static int lastresult = -1;
66
+
67
+ if (lastresult != -1 && !strcmp(filename, lastverified))
68
+ return lastresult;
69
+
70
+ fp = fopen(filename, "rb");
71
+ strcpy(lastverified, filename);
72
+
73
+ if (!fp)
74
+ return (rdl_error = lastresult = 1);
75
+
76
+ while (!feof(fp)) {
77
+ i = 0;
78
+
79
+ while (fread(buf + i, 1, 1, fp) == 1 && i < 257 && buf[i])
80
+ i++;
81
+ if (feof(fp))
82
+ break;
83
+
84
+ if (buf[0] == '.') {
85
+ /*
86
+ * A special module, eg a signature block or a directory.
87
+ * Format of such a module is defined to be:
88
+ * six char type identifier
89
+ * int32_t count bytes content
90
+ * content
91
+ * so we can handle it uniformaly with RDOFF2 modules.
92
+ */
93
+ nasm_read(buf, 6, fp);
94
+ buf[6] = 0;
95
+ /* Currently, nothing useful to do with signature block.. */
96
+ } else {
97
+ nasm_read(buf, 6, fp);
98
+ buf[6] = 0;
99
+ if (strncmp(buf, "RDOFF", 5)) {
100
+ fclose(fp);
101
+ return rdl_error = lastresult = 2;
102
+ } else if (buf[5] != '2') {
103
+ fclose(fp);
104
+ return rdl_error = lastresult = 3;
105
+ }
106
+ }
107
+ nasm_read(&length, 4, fp);
108
+ fseek(fp, length, SEEK_CUR); /* skip over the module */
109
+ }
110
+ fclose(fp);
111
+ return lastresult = 0; /* library in correct format */
112
+ }
113
+
114
+ int rdl_open(struct librarynode *lib, const char *name)
115
+ {
116
+ int i = rdl_verify(name);
117
+ if (i)
118
+ return i;
119
+
120
+ lib->fp = NULL;
121
+ lib->name = nasm_strdup(name);
122
+ lib->referenced = 0;
123
+ lib->next = NULL;
124
+ return 0;
125
+ }
126
+
127
+ int rdl_searchlib(struct librarynode *lib, const char *label, rdffile * f)
128
+ {
129
+ char buf[512];
130
+ int i, t;
131
+ void *hdr;
132
+ rdfheaderrec *r;
133
+ int32_t l;
134
+
135
+ rdl_error = 0;
136
+ lib->referenced++;
137
+
138
+ if (!lib->fp) {
139
+ lib->fp = fopen(lib->name, "rb");
140
+
141
+ if (!lib->fp) {
142
+ rdl_error = 1;
143
+ return 0;
144
+ }
145
+ } else
146
+ rewind(lib->fp);
147
+
148
+ while (!feof(lib->fp)) {
149
+ /*
150
+ * read the module name from the file, and prepend
151
+ * the library name and '.' to it.
152
+ */
153
+ strcpy(buf, lib->name);
154
+
155
+ i = strlen(lib->name);
156
+ buf[i++] = '.';
157
+ t = i;
158
+ while (fread(buf + i, 1, 1, lib->fp) == 1 && i < 512 && buf[i])
159
+ i++;
160
+
161
+ buf[i] = 0;
162
+
163
+ if (feof(lib->fp))
164
+ break;
165
+ if (!strcmp(buf + t, ".dir")) { /* skip over directory */
166
+ nasm_read(&l, 4, lib->fp);
167
+ fseek(lib->fp, l, SEEK_CUR);
168
+ continue;
169
+ }
170
+ /*
171
+ * open the RDOFF module
172
+ */
173
+ if (rdfopenhere(f, lib->fp, &lib->referenced, buf)) {
174
+ rdl_error = 16 * rdf_errno;
175
+ return 0;
176
+ }
177
+ /*
178
+ * read in the header, and scan for exported symbols
179
+ */
180
+ hdr = nasm_malloc(f->header_len);
181
+ rdfloadseg(f, RDOFF_HEADER, hdr);
182
+
183
+ while ((r = rdfgetheaderrec(f))) {
184
+ if (r->type != 3) /* not an export */
185
+ continue;
186
+
187
+ if (!strcmp(r->e.label, label)) { /* match! */
188
+ nasm_free(hdr); /* reset to 'just open' */
189
+ f->header_loc = NULL; /* state... */
190
+ f->header_fp = 0;
191
+ return 1;
192
+ }
193
+ }
194
+
195
+ /* find start of next module... */
196
+ i = f->eof_offset;
197
+ rdfclose(f);
198
+ fseek(lib->fp, i, SEEK_SET);
199
+ }
200
+
201
+ /*
202
+ * close the file if nobody else is using it
203
+ */
204
+ lib->referenced--;
205
+ if (!lib->referenced) {
206
+ fclose(lib->fp);
207
+ lib->fp = NULL;
208
+ }
209
+ return 0;
210
+ }
211
+
212
+ int rdl_openmodule(struct librarynode *lib, int moduleno, rdffile * f)
213
+ {
214
+ char buf[512];
215
+ int i, cmod, t;
216
+ int32_t length;
217
+
218
+ lib->referenced++;
219
+
220
+ if (!lib->fp) {
221
+ lib->fp = fopen(lib->name, "rb");
222
+ if (!lib->fp) {
223
+ lib->referenced--;
224
+ return (rdl_error = 1);
225
+ }
226
+ } else
227
+ rewind(lib->fp);
228
+
229
+ cmod = -1;
230
+ while (!feof(lib->fp)) {
231
+ strcpy(buf, lib->name);
232
+ i = strlen(buf);
233
+ buf[i++] = '.';
234
+ t = i;
235
+ while (fread(buf + i, 1, 1, lib->fp) == 1 && i < 512 && buf[i])
236
+ i++;
237
+ buf[i] = 0;
238
+ if (feof(lib->fp))
239
+ break;
240
+
241
+ if (buf[t] != '.') /* special module - not counted in the numbering */
242
+ cmod++; /* of RDOFF modules - must be referred to by name */
243
+
244
+ if (cmod == moduleno) {
245
+ rdl_error = 16 *
246
+ rdfopenhere(f, lib->fp, &lib->referenced, buf);
247
+ lib->referenced--;
248
+ if (!lib->referenced) {
249
+ fclose(lib->fp);
250
+ lib->fp = NULL;
251
+ }
252
+ return rdl_error;
253
+ }
254
+
255
+ nasm_read(buf, 6, lib->fp);
256
+ buf[6] = 0;
257
+ if (buf[t] == '.') {
258
+ /* do nothing */
259
+ } else if (strncmp(buf, "RDOFF", 5)) {
260
+ if (!--lib->referenced) {
261
+ fclose(lib->fp);
262
+ lib->fp = NULL;
263
+ }
264
+ return rdl_error = 2;
265
+ } else if (buf[5] != '2') {
266
+ if (!--lib->referenced) {
267
+ fclose(lib->fp);
268
+ lib->fp = NULL;
269
+ }
270
+ return rdl_error = 3;
271
+ }
272
+
273
+ nasm_read(&length, 4, lib->fp);
274
+ fseek(lib->fp, length, SEEK_CUR); /* skip over the module */
275
+ }
276
+ if (!--lib->referenced) {
277
+ fclose(lib->fp);
278
+ lib->fp = NULL;
279
+ }
280
+ return rdl_error = 4; /* module not found */
281
+ }
282
+
283
+ void rdl_perror(const char *apname, const char *filename)
284
+ {
285
+ if (rdl_error >= 16)
286
+ rdfperror(apname, filename);
287
+ else
288
+ fprintf(stderr, "%s:%s:%s\n", apname, filename,
289
+ rdl_errors[rdl_error]);
290
+ }
@@ -0,0 +1,62 @@
1
+ /* ----------------------------------------------------------------------- *
2
+ *
3
+ * Copyright 1996-2009 The NASM Authors - All Rights Reserved
4
+ * See the file AUTHORS included with the NASM distribution for
5
+ * the specific copyright holders.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following
9
+ * conditions are met:
10
+ *
11
+ * * Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ * * Redistributions in binary form must reproduce the above
14
+ * copyright notice, this list of conditions and the following
15
+ * disclaimer in the documentation and/or other materials provided
16
+ * with the distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ * ----------------------------------------------------------------------- */
33
+
34
+ /*
35
+ * rdlib.h Functions for manipulating libraries of RDOFF object files.
36
+ */
37
+
38
+ #ifndef RDOFF_RDLIB_H
39
+ #define RDOFF_RDLIB_H 1
40
+
41
+ struct librarynode {
42
+ char *name;
43
+ FILE *fp; /* initialised to NULL - always check */
44
+ int referenced; /* & open if required. Close afterwards */
45
+ struct librarynode *next; /* if ! referenced. */
46
+ };
47
+
48
+ extern int rdl_error;
49
+
50
+ #define RDL_EOPEN 1
51
+ #define RDL_EINVALID 2
52
+ #define RDL_EVERSION 3
53
+ #define RDL_ENOTFOUND 4
54
+
55
+ int rdl_verify(const char *filename);
56
+ int rdl_open(struct librarynode *lib, const char *filename);
57
+ int rdl_searchlib(struct librarynode *lib, const char *label, rdffile * f);
58
+ int rdl_openmodule(struct librarynode *lib, int module, rdffile * f);
59
+
60
+ void rdl_perror(const char *apname, const char *filename);
61
+
62
+ #endif
@@ -0,0 +1,621 @@
1
+ /* ----------------------------------------------------------------------- *
2
+ *
3
+ * Copyright 1996-2014 The NASM Authors - All Rights Reserved
4
+ * See the file AUTHORS included with the NASM distribution for
5
+ * the specific copyright holders.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following
9
+ * conditions are met:
10
+ *
11
+ * * Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ * * Redistributions in binary form must reproduce the above
14
+ * copyright notice, this list of conditions and the following
15
+ * disclaimer in the documentation and/or other materials provided
16
+ * with the distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
+ *
32
+ * ----------------------------------------------------------------------- */
33
+
34
+ /*
35
+ * rdoff.c library of routines for manipulating rdoff files
36
+ */
37
+
38
+ /* TODO: The functions in this module assume they are running
39
+ * on a little-endian machine. This should be fixed to
40
+ * make it portable.
41
+ */
42
+
43
+ #include "compiler.h"
44
+
45
+ #include <stdio.h>
46
+ #include <stdlib.h>
47
+ #include <string.h>
48
+ #include <errno.h>
49
+
50
+ #include "rdfutils.h"
51
+
52
+ /*
53
+ * Comment this out to allow the module to read & write header record types
54
+ * that it isn't aware of. With this defined, unrecognised header records
55
+ * will generate error number 8, reported as 'unknown extended header record'.
56
+ */
57
+
58
+ #define STRICT_ERRORS
59
+
60
+ /* ========================================================================
61
+ * Code for memory buffers (for delayed writing of header until we know
62
+ * how int32_t it is).
63
+ * ======================================================================== */
64
+
65
+ static memorybuffer *newmembuf(void)
66
+ {
67
+ memorybuffer *t;
68
+
69
+ t = nasm_malloc(sizeof(memorybuffer));
70
+ if (!t)
71
+ return NULL;
72
+
73
+ t->length = 0;
74
+ t->next = NULL;
75
+ return t;
76
+ }
77
+
78
+ static void membufwrite(memorybuffer * const b, void *data, int bytes)
79
+ {
80
+ uint16_t w;
81
+ int32_t l;
82
+ char *c;
83
+
84
+ if (b->next) { /* memory buffer full - use next buffer */
85
+ membufwrite(b->next, data, bytes);
86
+ return;
87
+ }
88
+
89
+ if ((bytes < 0 && b->length - bytes > BUF_BLOCK_LEN)
90
+ || (bytes > 0 && b->length + bytes > BUF_BLOCK_LEN)) {
91
+
92
+ /* buffer full and no next allocated... allocate and initialise next
93
+ * buffer */
94
+ b->next = newmembuf();
95
+ membufwrite(b->next, data, bytes);
96
+ return;
97
+ }
98
+
99
+ switch (bytes) {
100
+ case -4: /* convert to little-endian */
101
+ l = *(int32_t *)data;
102
+ b->buffer[b->length++] = l & 0xFF;
103
+ l >>= 8;
104
+ b->buffer[b->length++] = l & 0xFF;
105
+ l >>= 8;
106
+ b->buffer[b->length++] = l & 0xFF;
107
+ l >>= 8;
108
+ b->buffer[b->length++] = l & 0xFF;
109
+ break;
110
+
111
+ case -2:
112
+ w = *(uint16_t *) data;
113
+ b->buffer[b->length++] = w & 0xFF;
114
+ w >>= 8;
115
+ b->buffer[b->length++] = w & 0xFF;
116
+ break;
117
+
118
+ default:
119
+ c = data;
120
+ while (bytes--)
121
+ b->buffer[b->length++] = *c++;
122
+ break;
123
+ }
124
+ }
125
+
126
+ static void membufdump(memorybuffer * b, FILE * fp)
127
+ {
128
+ if (!b)
129
+ return;
130
+
131
+ nasm_write(b->buffer, b->length, fp);
132
+ membufdump(b->next, fp);
133
+ }
134
+
135
+ static int membuflength(memorybuffer * b)
136
+ {
137
+ if (!b)
138
+ return 0;
139
+ return b->length + membuflength(b->next);
140
+ }
141
+
142
+ static void freemembuf(memorybuffer * b)
143
+ {
144
+ if (!b)
145
+ return;
146
+ freemembuf(b->next);
147
+ nasm_free(b);
148
+ }
149
+
150
+ /* =========================================================================
151
+ General purpose routines and variables used by the library functions
152
+ ========================================================================= */
153
+
154
+ /*
155
+ * translateint32_t() and translateint16_t()
156
+ *
157
+ * translate from little endian to local representation
158
+ */
159
+ int32_t translateint32_t(int32_t in)
160
+ {
161
+ int32_t r;
162
+ uint8_t *i;
163
+
164
+ i = (uint8_t *)&in;
165
+ r = i[3];
166
+ r = (r << 8) + i[2];
167
+ r = (r << 8) + i[1];
168
+ r = (r << 8) + *i;
169
+
170
+ return r;
171
+ }
172
+
173
+ uint16_t translateint16_t(uint16_t in)
174
+ {
175
+ uint16_t r;
176
+ uint8_t *i;
177
+
178
+ i = (uint8_t *)&in;
179
+ r = (i[1] << 8) + i[0];
180
+
181
+ return r;
182
+ }
183
+
184
+ /* Segment types */
185
+ static char *knownsegtypes[8] = {
186
+ "NULL", "text", "data", "object comment",
187
+ "linked comment", "loader comment",
188
+ "symbolic debug", "line number debug"
189
+ };
190
+
191
+ /* Get a textual string describing the segment type */
192
+ char *translatesegmenttype(uint16_t type)
193
+ {
194
+ if (type < 8)
195
+ return knownsegtypes[type];
196
+ if (type < 0x0020)
197
+ return "reserved";
198
+ if (type < 0x1000)
199
+ return "reserved - Moscow";
200
+ if (type < 0x8000)
201
+ return "reserved - system dependant";
202
+ if (type < 0xFFFF)
203
+ return "reserved - other";
204
+ if (type == 0xFFFF)
205
+ return "invalid type code";
206
+ return "type code out of range";
207
+ }
208
+
209
+ /* This signature is written to the start of RDOFF files */
210
+ const char *RDOFFId = RDOFF2_SIGNATURE;
211
+
212
+ /* Error messages. Must correspond to the codes defined in rdoff.h */
213
+ const char *rdf_errors[11] = {
214
+ /* 0 */ "no error occurred",
215
+ /* 1 */ "could not open file",
216
+ /* 2 */ "invalid file format",
217
+ /* 3 */ "error reading file",
218
+ /* 4 */ "unknown error",
219
+ /* 5 */ "header not read",
220
+ /* 6 */ "out of memory",
221
+ /* 7 */ "RDOFF v1 not supported",
222
+ /* 8 */ "unknown extended header record",
223
+ /* 9 */ "header record of known type but unknown length",
224
+ /* 10 */ "no such segment"
225
+ };
226
+
227
+ int rdf_errno = 0;
228
+
229
+ /* ========================================================================
230
+ * Hook for nasm_error() to work
231
+ * ======================================================================== */
232
+ static void rdoff_verror(int severity, const char *fmt, va_list val)
233
+ {
234
+ vfprintf(stderr, fmt, val);
235
+
236
+ if ((severity & ERR_MASK) >= ERR_FATAL)
237
+ exit(1);
238
+ }
239
+
240
+ void rdoff_init(void)
241
+ {
242
+ nasm_set_verror(rdoff_verror);
243
+ }
244
+
245
+ /* ========================================================================
246
+ The library functions
247
+ ======================================================================== */
248
+
249
+ int rdfopen(rdffile * f, const char *name)
250
+ {
251
+ FILE *fp;
252
+
253
+ fp = fopen(name, "rb");
254
+ if (!fp)
255
+ return rdf_errno = RDF_ERR_OPEN;
256
+
257
+ return rdfopenhere(f, fp, NULL, name);
258
+ }
259
+
260
+ int rdfopenhere(rdffile * f, FILE * fp, int *refcount, const char *name)
261
+ {
262
+ char buf[8];
263
+ int32_t initpos;
264
+ int32_t l;
265
+ uint16_t s;
266
+
267
+ if (translateint32_t(0x01020304) != 0x01020304) {
268
+ /* fix this to be portable! */
269
+ fputs("*** this program requires a little endian machine\n",
270
+ stderr);
271
+ fprintf(stderr, "01020304h = %08"PRIx32"h\n", translateint32_t(0x01020304));
272
+ exit(3);
273
+ }
274
+
275
+ f->fp = fp;
276
+ initpos = ftell(fp);
277
+
278
+ /* read header */
279
+ if (fread(buf, 1, 6, f->fp) != 6) {
280
+ fclose(f->fp);
281
+ return rdf_errno = RDF_ERR_READ;
282
+ }
283
+ buf[6] = 0;
284
+
285
+ if (strcmp(buf, RDOFFId)) {
286
+ fclose(f->fp);
287
+ if (!strcmp(buf, "RDOFF1"))
288
+ return rdf_errno = RDF_ERR_VER;
289
+ return rdf_errno = RDF_ERR_FORMAT;
290
+ }
291
+
292
+ if (fread(&l, 1, 4, f->fp) != 4
293
+ || fread(&f->header_len, 1, 4, f->fp) != 4) {
294
+ fclose(f->fp);
295
+ return rdf_errno = RDF_ERR_READ;
296
+ }
297
+
298
+ f->header_ofs = ftell(f->fp);
299
+ f->eof_offset = f->header_ofs + translateint32_t(l) - 4;
300
+
301
+ if (fseek(f->fp, f->header_len, SEEK_CUR)) {
302
+ fclose(f->fp);
303
+ return rdf_errno = RDF_ERR_FORMAT; /* seek past end of file...? */
304
+ }
305
+
306
+ if (fread(&s, 1, 2, f->fp) != 2) {
307
+ fclose(f->fp);
308
+ return rdf_errno = RDF_ERR_READ;
309
+ }
310
+
311
+ f->nsegs = 0;
312
+
313
+ while (s != 0) {
314
+ f->seg[f->nsegs].type = s;
315
+ if (fread(&f->seg[f->nsegs].number, 1, 2, f->fp) != 2 ||
316
+ fread(&f->seg[f->nsegs].reserved, 1, 2, f->fp) != 2 ||
317
+ fread(&f->seg[f->nsegs].length, 1, 4, f->fp) != 4) {
318
+ fclose(f->fp);
319
+ return rdf_errno = RDF_ERR_READ;
320
+ }
321
+
322
+ f->seg[f->nsegs].offset = ftell(f->fp);
323
+ if (fseek(f->fp, f->seg[f->nsegs].length, SEEK_CUR)) {
324
+ fclose(f->fp);
325
+ return rdf_errno = RDF_ERR_FORMAT;
326
+ }
327
+ f->nsegs++;
328
+
329
+ if (fread(&s, 1, 2, f->fp) != 2) {
330
+ fclose(f->fp);
331
+ return rdf_errno = RDF_ERR_READ;
332
+ }
333
+ }
334
+
335
+ if (f->eof_offset != ftell(f->fp) + 8) { /* +8 = skip null segment header */
336
+ fprintf(stderr, "warning: eof_offset [%"PRId32"] and actual eof offset "
337
+ "[%ld] don't match\n", f->eof_offset, ftell(f->fp) + 8);
338
+ }
339
+ fseek(f->fp, initpos, SEEK_SET);
340
+ f->header_loc = NULL;
341
+
342
+ f->name = nasm_strdup(name);
343
+ f->refcount = refcount;
344
+ if (refcount)
345
+ (*refcount)++;
346
+ return RDF_OK;
347
+ }
348
+
349
+ int rdfclose(rdffile * f)
350
+ {
351
+ if (!f->refcount || !--(*f->refcount)) {
352
+ fclose(f->fp);
353
+ f->fp = NULL;
354
+ }
355
+ nasm_free(f->name);
356
+
357
+ return 0;
358
+ }
359
+
360
+ /*
361
+ * Print the message for last error (from rdf_errno)
362
+ */
363
+ void rdfperror(const char *app, const char *name)
364
+ {
365
+ fprintf(stderr, "%s:%s: %s\n", app, name, rdf_errors[rdf_errno]);
366
+ if (rdf_errno == RDF_ERR_OPEN || rdf_errno == RDF_ERR_READ) {
367
+ perror(app);
368
+ }
369
+ }
370
+
371
+ /*
372
+ * Find the segment by its number.
373
+ * Returns segment array index, or -1 if segment with such number was not found.
374
+ */
375
+ int rdffindsegment(rdffile * f, int segno)
376
+ {
377
+ int i;
378
+ for (i = 0; i < f->nsegs; i++)
379
+ if (f->seg[i].number == segno)
380
+ return i;
381
+ return -1;
382
+ }
383
+
384
+ /*
385
+ * Load the segment. Returns status.
386
+ */
387
+ int rdfloadseg(rdffile * f, int segment, void *buffer)
388
+ {
389
+ int32_t fpos;
390
+ size_t slen;
391
+
392
+ switch (segment) {
393
+ case RDOFF_HEADER:
394
+ fpos = f->header_ofs;
395
+ slen = f->header_len;
396
+ f->header_loc = (uint8_t *) buffer;
397
+ f->header_fp = 0;
398
+ break;
399
+ default:
400
+ if (segment < f->nsegs) {
401
+ fpos = f->seg[segment].offset;
402
+ slen = f->seg[segment].length;
403
+ f->seg[segment].data = (uint8_t *) buffer;
404
+ } else {
405
+ return rdf_errno = RDF_ERR_SEGMENT;
406
+ }
407
+ }
408
+
409
+ if (fseek(f->fp, fpos, SEEK_SET))
410
+ return rdf_errno = RDF_ERR_UNKNOWN;
411
+
412
+ if (fread(buffer, 1, slen, f->fp) != slen)
413
+ return rdf_errno = RDF_ERR_READ;
414
+
415
+ return RDF_OK;
416
+ }
417
+
418
+ /* Macros for reading integers from header in memory */
419
+
420
+ #define RI8(v) v = f->header_loc[f->header_fp++]
421
+ #define RI16(v) { v = (f->header_loc[f->header_fp] + \
422
+ (f->header_loc[f->header_fp+1] << 8)); \
423
+ f->header_fp += 2; }
424
+
425
+ #define RI32(v) { v = (f->header_loc[f->header_fp] + \
426
+ (f->header_loc[f->header_fp+1] << 8) + \
427
+ (f->header_loc[f->header_fp+2] << 16) + \
428
+ (f->header_loc[f->header_fp+3] << 24)); \
429
+ f->header_fp += 4; }
430
+
431
+ #define RS(str,max) { for(i=0;i<max;i++){\
432
+ RI8(str[i]); if (!str[i]) break;} str[i]=0; }
433
+
434
+ /*
435
+ * Read a header record.
436
+ * Returns the address of record, or NULL in case of error.
437
+ */
438
+ rdfheaderrec *rdfgetheaderrec(rdffile * f)
439
+ {
440
+ static rdfheaderrec r;
441
+ int i;
442
+
443
+ if (!f->header_loc) {
444
+ rdf_errno = RDF_ERR_HEADER;
445
+ return NULL;
446
+ }
447
+
448
+ if (f->header_fp >= f->header_len)
449
+ return 0;
450
+
451
+ RI8(r.type);
452
+ RI8(r.g.reclen);
453
+
454
+ switch (r.type) {
455
+ case RDFREC_RELOC: /* Relocation record */
456
+ case RDFREC_SEGRELOC:
457
+ if (r.r.reclen != 8) {
458
+ rdf_errno = RDF_ERR_RECLEN;
459
+ return NULL;
460
+ }
461
+ RI8(r.r.segment);
462
+ RI32(r.r.offset);
463
+ RI8(r.r.length);
464
+ RI16(r.r.refseg);
465
+ break;
466
+
467
+ case RDFREC_IMPORT: /* Imported symbol record */
468
+ case RDFREC_FARIMPORT:
469
+ RI8(r.i.flags);
470
+ RI16(r.i.segment);
471
+ RS(r.i.label, EXIM_LABEL_MAX);
472
+ break;
473
+
474
+ case RDFREC_GLOBAL: /* Exported symbol record */
475
+ RI8(r.e.flags);
476
+ RI8(r.e.segment);
477
+ RI32(r.e.offset);
478
+ RS(r.e.label, EXIM_LABEL_MAX);
479
+ break;
480
+
481
+ case RDFREC_DLL: /* DLL record */
482
+ RS(r.d.libname, MODLIB_NAME_MAX);
483
+ break;
484
+
485
+ case RDFREC_BSS: /* BSS reservation record */
486
+ if (r.r.reclen != 4) {
487
+ rdf_errno = RDF_ERR_RECLEN;
488
+ return NULL;
489
+ }
490
+ RI32(r.b.amount);
491
+ break;
492
+
493
+ case RDFREC_MODNAME: /* Module name record */
494
+ RS(r.m.modname, MODLIB_NAME_MAX);
495
+ break;
496
+
497
+ case RDFREC_COMMON: /* Common variable */
498
+ RI16(r.c.segment);
499
+ RI32(r.c.size);
500
+ RI16(r.c.align);
501
+ RS(r.c.label, EXIM_LABEL_MAX);
502
+ break;
503
+
504
+ default:
505
+ #ifdef STRICT_ERRORS
506
+ rdf_errno = RDF_ERR_RECTYPE; /* unknown header record */
507
+ return NULL;
508
+ #else
509
+ for (i = 0; i < r.g.reclen; i++)
510
+ RI8(r.g.data[i]);
511
+ #endif
512
+ }
513
+ return &r;
514
+ }
515
+
516
+ /*
517
+ * Rewind to the beginning of the file
518
+ */
519
+ void rdfheaderrewind(rdffile * f)
520
+ {
521
+ f->header_fp = 0;
522
+ }
523
+
524
+ rdf_headerbuf *rdfnewheader(void)
525
+ {
526
+ rdf_headerbuf *hb = nasm_malloc(sizeof(rdf_headerbuf));
527
+ if (hb == NULL)
528
+ return NULL;
529
+
530
+ hb->buf = newmembuf();
531
+ hb->nsegments = 0;
532
+ hb->seglength = 0;
533
+
534
+ return hb;
535
+ }
536
+
537
+ int rdfaddheader(rdf_headerbuf * h, rdfheaderrec * r)
538
+ {
539
+ #ifndef STRICT_ERRORS
540
+ int i;
541
+ #endif
542
+ membufwrite(h->buf, &r->type, 1);
543
+ membufwrite(h->buf, &r->g.reclen, 1);
544
+
545
+ switch (r->type) {
546
+ case RDFREC_GENERIC: /* generic */
547
+ membufwrite(h->buf, &r->g.data, r->g.reclen);
548
+ break;
549
+ case RDFREC_RELOC:
550
+ case RDFREC_SEGRELOC:
551
+ membufwrite(h->buf, &r->r.segment, 1);
552
+ membufwrite(h->buf, &r->r.offset, -4);
553
+ membufwrite(h->buf, &r->r.length, 1);
554
+ membufwrite(h->buf, &r->r.refseg, -2); /* 9 bytes written */
555
+ break;
556
+
557
+ case RDFREC_IMPORT: /* import */
558
+ case RDFREC_FARIMPORT:
559
+ membufwrite(h->buf, &r->i.flags, 1);
560
+ membufwrite(h->buf, &r->i.segment, -2);
561
+ membufwrite(h->buf, &r->i.label, strlen(r->i.label) + 1);
562
+ break;
563
+
564
+ case RDFREC_GLOBAL: /* export */
565
+ membufwrite(h->buf, &r->e.flags, 1);
566
+ membufwrite(h->buf, &r->e.segment, 1);
567
+ membufwrite(h->buf, &r->e.offset, -4);
568
+ membufwrite(h->buf, &r->e.label, strlen(r->e.label) + 1);
569
+ break;
570
+
571
+ case RDFREC_DLL: /* DLL */
572
+ membufwrite(h->buf, &r->d.libname, strlen(r->d.libname) + 1);
573
+ break;
574
+
575
+ case RDFREC_BSS: /* BSS */
576
+ membufwrite(h->buf, &r->b.amount, -4);
577
+ break;
578
+
579
+ case RDFREC_MODNAME: /* Module name */
580
+ membufwrite(h->buf, &r->m.modname, strlen(r->m.modname) + 1);
581
+ break;
582
+
583
+ default:
584
+ #ifdef STRICT_ERRORS
585
+ return rdf_errno = RDF_ERR_RECTYPE;
586
+ #else
587
+ for (i = 0; i < r->g.reclen; i++)
588
+ membufwrite(h->buf, r->g.data[i], 1);
589
+ #endif
590
+ }
591
+ return 0;
592
+ }
593
+
594
+ int rdfaddsegment(rdf_headerbuf * h, int32_t seglength)
595
+ {
596
+ h->nsegments++;
597
+ h->seglength += seglength;
598
+ return 0;
599
+ }
600
+
601
+ int rdfwriteheader(FILE * fp, rdf_headerbuf * h)
602
+ {
603
+ int32_t l, l2;
604
+
605
+ nasm_write(RDOFFId, strlen(RDOFFId), fp);
606
+
607
+ l = membuflength(h->buf);
608
+ l2 = l + 14 + 10 * h->nsegments + h->seglength;
609
+ fwriteint32_t(l, fp);
610
+ fwriteint32_t(l2, fp);
611
+
612
+ membufdump(h->buf, fp);
613
+
614
+ return 0; /* no error handling in here... CHANGE THIS! */
615
+ }
616
+
617
+ void rdfdoneheader(rdf_headerbuf * h)
618
+ {
619
+ freemembuf(h->buf);
620
+ nasm_free(h);
621
+ }