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,54 @@
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
+ * float.h header file for the floating-point constant module of
36
+ * the Netwide Assembler
37
+ */
38
+
39
+ #ifndef NASM_FLOAT_H
40
+ #define NASM_FLOAT_H
41
+
42
+ #include "nasm.h"
43
+
44
+ enum float_round {
45
+ FLOAT_RC_NEAR,
46
+ FLOAT_RC_ZERO,
47
+ FLOAT_RC_DOWN,
48
+ FLOAT_RC_UP
49
+ };
50
+
51
+ int float_const(const char *string, int sign, uint8_t *result, int bytes);
52
+ int float_option(const char *option);
53
+
54
+ #endif
@@ -0,0 +1,540 @@
1
+ /* ----------------------------------------------------------------------- *
2
+ *
3
+ * Copyright 1996-2017 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
+ * labels.c label handling for the Netwide Assembler
36
+ */
37
+
38
+ #include "compiler.h"
39
+
40
+ #include <stdio.h>
41
+ #include <string.h>
42
+ #include <stdlib.h>
43
+
44
+ #include "nasm.h"
45
+ #include "nasmlib.h"
46
+ #include "error.h"
47
+ #include "hashtbl.h"
48
+ #include "labels.h"
49
+
50
+ /*
51
+ * A local label is one that begins with exactly one period. Things
52
+ * that begin with _two_ periods are NASM-specific things.
53
+ *
54
+ * If TASM compatibility is enabled, a local label can also begin with
55
+ * @@, so @@local is a TASM compatible local label. Note that we only
56
+ * check for the first @ symbol, although TASM requires both.
57
+ */
58
+ #define islocal(l) \
59
+ (tasm_compatible_mode ? \
60
+ (((l)[0] == '.' || (l)[0] == '@') && (l)[1] != '.') : \
61
+ ((l)[0] == '.' && (l)[1] != '.'))
62
+ #define islocalchar(c) \
63
+ (tasm_compatible_mode ? \
64
+ ((c) == '.' || (c) == '@') : \
65
+ ((c) == '.'))
66
+
67
+ #define LABEL_BLOCK 128 /* no. of labels/block */
68
+ #define LBLK_SIZE (LABEL_BLOCK * sizeof(union label))
69
+
70
+ #define END_LIST -3 /* don't clash with NO_SEG! */
71
+ #define END_BLOCK -2
72
+ #define BOGUS_VALUE -4
73
+
74
+ #define PERMTS_SIZE 16384 /* size of text blocks */
75
+ #if (PERMTS_SIZE < IDLEN_MAX)
76
+ #error "IPERMTS_SIZE must be greater than or equal to IDLEN_MAX"
77
+ #endif
78
+
79
+ /* values for label.defn.is_global */
80
+ #define DEFINED_BIT 1
81
+ #define GLOBAL_BIT 2
82
+ #define EXTERN_BIT 4
83
+ #define COMMON_BIT 8
84
+
85
+ #define NOT_DEFINED_YET 0
86
+ #define TYPE_MASK 3
87
+ #define LOCAL_SYMBOL (DEFINED_BIT)
88
+ #define GLOBAL_PLACEHOLDER (GLOBAL_BIT)
89
+ #define GLOBAL_SYMBOL (DEFINED_BIT | GLOBAL_BIT)
90
+
91
+ union label { /* actual label structures */
92
+ struct {
93
+ int32_t segment;
94
+ int64_t offset;
95
+ char *label, *special;
96
+ int is_global, is_norm;
97
+ } defn;
98
+ struct {
99
+ int32_t movingon;
100
+ int64_t dummy;
101
+ union label *next;
102
+ } admin;
103
+ };
104
+
105
+ struct permts { /* permanent text storage */
106
+ struct permts *next; /* for the linked list */
107
+ int size, usage; /* size and used space in ... */
108
+ char data[PERMTS_SIZE]; /* ... the data block itself */
109
+ };
110
+
111
+ uint64_t global_offset_changed; /* counter for global offset changes */
112
+
113
+ static struct hash_table ltab; /* labels hash table */
114
+ static union label *ldata; /* all label data blocks */
115
+ static union label *lfree; /* labels free block */
116
+ static struct permts *perm_head; /* start of perm. text storage */
117
+ static struct permts *perm_tail; /* end of perm. text storage */
118
+
119
+ static void init_block(union label *blk);
120
+ static char *perm_copy(const char *string);
121
+
122
+ static char *prevlabel;
123
+
124
+ static bool initialized = false;
125
+
126
+ char lprefix[PREFIX_MAX] = { 0 };
127
+ char lpostfix[PREFIX_MAX] = { 0 };
128
+
129
+ /*
130
+ * Emit a symdef to the output and the debug format backends.
131
+ */
132
+ static void out_symdef(char *name, int32_t segment, int64_t offset,
133
+ int is_global, char *special)
134
+ {
135
+ ofmt->symdef(name, segment, offset, is_global, special);
136
+
137
+ /*
138
+ * NASM special symbols are not passed to the debug format; none
139
+ * of the current backends want to see them.
140
+ */
141
+ if (!(name[0] == '.' && name[1] == '.' && name[2] != '@'))
142
+ dfmt->debug_deflabel(name, segment, offset, is_global, special);
143
+ }
144
+
145
+ /*
146
+ * Internal routine: finds the `union label' corresponding to the
147
+ * given label name. Creates a new one, if it isn't found, and if
148
+ * `create' is true.
149
+ */
150
+ static union label *find_label(const char *label, int create, int *created)
151
+ {
152
+ char *prev;
153
+ int prevlen, len;
154
+ union label *lptr, **lpp;
155
+ char label_str[IDLEN_MAX];
156
+ struct hash_insert ip;
157
+
158
+ if (islocal(label)) {
159
+ prev = prevlabel;
160
+ prevlen = strlen(prev);
161
+ len = strlen(label);
162
+ if (prevlen + len >= IDLEN_MAX) {
163
+ nasm_error(ERR_NONFATAL, "identifier length exceed %i bytes",
164
+ IDLEN_MAX);
165
+ return NULL;
166
+ }
167
+ memcpy(label_str, prev, prevlen);
168
+ memcpy(label_str+prevlen, label, len+1);
169
+ label = label_str;
170
+ } else {
171
+ prev = "";
172
+ prevlen = 0;
173
+ }
174
+
175
+ lpp = (union label **) hash_find(&ltab, label, &ip);
176
+ lptr = lpp ? *lpp : NULL;
177
+
178
+ if (lptr || !create) {
179
+ if (created)
180
+ *created = 0;
181
+ return lptr;
182
+ }
183
+
184
+ /* Create a new label... */
185
+ if (lfree->admin.movingon == END_BLOCK) {
186
+ /*
187
+ * must allocate a new block
188
+ */
189
+ lfree->admin.next = nasm_malloc(LBLK_SIZE);
190
+ lfree = lfree->admin.next;
191
+ init_block(lfree);
192
+ }
193
+
194
+ if (created)
195
+ *created = 1;
196
+
197
+ lfree->admin.movingon = BOGUS_VALUE;
198
+ lfree->defn.label = perm_copy(label);
199
+ lfree->defn.special = NULL;
200
+ lfree->defn.is_global = NOT_DEFINED_YET;
201
+
202
+ hash_add(&ip, lfree->defn.label, lfree);
203
+ return lfree++;
204
+ }
205
+
206
+ bool lookup_label(const char *label, int32_t *segment, int64_t *offset)
207
+ {
208
+ union label *lptr;
209
+
210
+ if (!initialized)
211
+ return false;
212
+
213
+ lptr = find_label(label, 0, NULL);
214
+ if (lptr && (lptr->defn.is_global & DEFINED_BIT)) {
215
+ *segment = lptr->defn.segment;
216
+ *offset = lptr->defn.offset;
217
+ return true;
218
+ }
219
+
220
+ return false;
221
+ }
222
+
223
+ bool is_extern(const char *label)
224
+ {
225
+ union label *lptr;
226
+
227
+ if (!initialized)
228
+ return false;
229
+
230
+ lptr = find_label(label, 0, NULL);
231
+ return (lptr && (lptr->defn.is_global & EXTERN_BIT));
232
+ }
233
+
234
+ void redefine_label(char *label, int32_t segment, int64_t offset, char *special,
235
+ bool is_norm, bool isextrn)
236
+ {
237
+ union label *lptr;
238
+ int exi, created;
239
+
240
+ /* This routine possibly ought to check for phase errors. Most assemblers
241
+ * check for phase errors at this point. I don't know whether phase errors
242
+ * are even possible, nor whether they are checked somewhere else
243
+ */
244
+
245
+ (void)special; /* Don't warn that this parameter is unused */
246
+ (void)is_norm; /* Don't warn that this parameter is unused */
247
+ (void)isextrn; /* Don't warn that this parameter is unused */
248
+
249
+ #ifdef DEBUG
250
+ #if DEBUG < 3
251
+ if (!strncmp(label, "debugdump", 9))
252
+ #endif
253
+ nasm_error(ERR_DEBUG, "redefine_label (%s, %"PRIx32", %"PRIx64", %s, %d, %d)",
254
+ label, segment, offset, special, is_norm, isextrn);
255
+ #endif
256
+
257
+ lptr = find_label(label, 1, &created);
258
+ if (!lptr)
259
+ nasm_panic(0, "can't find label `%s' on pass two", label);
260
+
261
+ if (created)
262
+ nasm_error(ERR_WARNING, "label `%s' defined on pass two", label);
263
+
264
+ if (!islocal(label)) {
265
+ if (!islocalchar(*label) && lptr->defn.is_norm)
266
+ prevlabel = lptr->defn.label;
267
+ }
268
+
269
+ if (lptr->defn.offset != offset)
270
+ global_offset_changed++;
271
+
272
+ lptr->defn.offset = offset;
273
+ lptr->defn.segment = segment;
274
+
275
+ if (pass0 == 1) {
276
+ exi = !!(lptr->defn.is_global & GLOBAL_BIT);
277
+ if (exi) {
278
+ char *xsymbol;
279
+ int slen;
280
+ slen = strlen(lprefix);
281
+ slen += strlen(lptr->defn.label);
282
+ slen += strlen(lpostfix);
283
+ slen++; /* room for that null char */
284
+ xsymbol = nasm_malloc(slen);
285
+ snprintf(xsymbol, slen, "%s%s%s", lprefix, lptr->defn.label,
286
+ lpostfix);
287
+
288
+ out_symdef(xsymbol, segment, offset, exi,
289
+ special ? special : lptr->defn.special);
290
+ /** nasm_free(xsymbol); ! outobj.c stores the pointer; ouch!!! **/
291
+ } else {
292
+ if ((lptr->defn.is_global & (GLOBAL_BIT | EXTERN_BIT)) != EXTERN_BIT) {
293
+ out_symdef(lptr->defn.label, segment, offset, exi,
294
+ special ? special : lptr->defn.special);
295
+ }
296
+ }
297
+ } /* if (pass0 == 1) */
298
+ }
299
+
300
+ void define_label(char *label, int32_t segment, int64_t offset, char *special,
301
+ bool is_norm, bool isextrn)
302
+ {
303
+ union label *lptr;
304
+ int exi;
305
+
306
+ #ifdef DEBUG
307
+ #if DEBUG<3
308
+ if (!strncmp(label, "debugdump", 9))
309
+ #endif
310
+ nasm_error(ERR_DEBUG, "define_label (%s, %"PRIx32", %"PRIx64", %s, %d, %d)",
311
+ label, segment, offset, special, is_norm, isextrn);
312
+ #endif
313
+ lptr = find_label(label, 1, NULL);
314
+ if (!lptr)
315
+ return;
316
+ if (lptr->defn.is_global & DEFINED_BIT) {
317
+ nasm_error(ERR_NONFATAL, "symbol `%s' redefined", label);
318
+ return;
319
+ }
320
+ lptr->defn.is_global |= DEFINED_BIT;
321
+ if (isextrn)
322
+ lptr->defn.is_global |= EXTERN_BIT;
323
+
324
+ if (!islocalchar(label[0]) && is_norm) {
325
+ /* not local, but not special either */
326
+ prevlabel = lptr->defn.label;
327
+ } else if (islocal(label) && !*prevlabel) {
328
+ nasm_error(ERR_NONFATAL, "attempt to define a local label before any"
329
+ " non-local labels");
330
+ }
331
+
332
+ lptr->defn.segment = segment;
333
+ lptr->defn.offset = offset;
334
+ lptr->defn.is_norm = (!islocalchar(label[0]) && is_norm);
335
+
336
+ if (pass0 == 1 || (!is_norm && !isextrn && (segment > 0) && (segment & 1))) {
337
+ exi = !!(lptr->defn.is_global & GLOBAL_BIT);
338
+ if (exi) {
339
+ char *xsymbol;
340
+ int slen;
341
+ slen = strlen(lprefix);
342
+ slen += strlen(lptr->defn.label);
343
+ slen += strlen(lpostfix);
344
+ slen++; /* room for that null char */
345
+ xsymbol = nasm_malloc(slen);
346
+ snprintf(xsymbol, slen, "%s%s%s", lprefix, lptr->defn.label,
347
+ lpostfix);
348
+
349
+ out_symdef(xsymbol, segment, offset, exi,
350
+ special ? special : lptr->defn.special);
351
+ /** nasm_free(xsymbol); ! outobj.c stores the pointer; ouch!!! **/
352
+ } else {
353
+ if ((lptr->defn.is_global & (GLOBAL_BIT | EXTERN_BIT)) != EXTERN_BIT) {
354
+ out_symdef(lptr->defn.label, segment, offset, exi,
355
+ special ? special : lptr->defn.special);
356
+ }
357
+ }
358
+ } /* if (pass0 == 1) */
359
+ }
360
+
361
+ void define_common(char *label, int32_t segment, int32_t size, char *special)
362
+ {
363
+ union label *lptr;
364
+
365
+ lptr = find_label(label, 1, NULL);
366
+ if (!lptr)
367
+ return;
368
+ if ((lptr->defn.is_global & DEFINED_BIT) &&
369
+ (passn == 1 || !(lptr->defn.is_global & COMMON_BIT))) {
370
+ nasm_error(ERR_NONFATAL, "symbol `%s' redefined", label);
371
+ return;
372
+ }
373
+ lptr->defn.is_global |= DEFINED_BIT|COMMON_BIT;
374
+
375
+ if (!islocalchar(label[0])) {
376
+ prevlabel = lptr->defn.label;
377
+ } else {
378
+ nasm_error(ERR_NONFATAL, "attempt to define a local label as a "
379
+ "common variable");
380
+ return;
381
+ }
382
+
383
+ lptr->defn.segment = segment;
384
+ lptr->defn.offset = 0;
385
+
386
+ if (pass0 == 0)
387
+ return;
388
+
389
+ out_symdef(lptr->defn.label, segment, size, 2,
390
+ special ? special : lptr->defn.special);
391
+ }
392
+
393
+ void declare_as_global(char *label, char *special)
394
+ {
395
+ union label *lptr;
396
+
397
+ if (islocal(label)) {
398
+ nasm_error(ERR_NONFATAL, "attempt to declare local symbol `%s' as"
399
+ " global", label);
400
+ return;
401
+ }
402
+ lptr = find_label(label, 1, NULL);
403
+ if (!lptr)
404
+ return;
405
+ switch (lptr->defn.is_global & TYPE_MASK) {
406
+ case NOT_DEFINED_YET:
407
+ lptr->defn.is_global = GLOBAL_PLACEHOLDER;
408
+ lptr->defn.special = special ? perm_copy(special) : NULL;
409
+ break;
410
+ case GLOBAL_PLACEHOLDER: /* already done: silently ignore */
411
+ case GLOBAL_SYMBOL:
412
+ break;
413
+ case LOCAL_SYMBOL:
414
+ if (!(lptr->defn.is_global & EXTERN_BIT)) {
415
+ nasm_error(ERR_WARNING, "symbol `%s': GLOBAL directive "
416
+ "after symbol definition is an experimental feature", label);
417
+ lptr->defn.is_global = GLOBAL_SYMBOL;
418
+ }
419
+ break;
420
+ }
421
+ }
422
+
423
+ int init_labels(void)
424
+ {
425
+ hash_init(&ltab, HASH_LARGE);
426
+
427
+ ldata = lfree = nasm_malloc(LBLK_SIZE);
428
+ init_block(lfree);
429
+
430
+ perm_head = perm_tail =
431
+ nasm_malloc(sizeof(struct permts));
432
+
433
+ perm_head->next = NULL;
434
+ perm_head->size = PERMTS_SIZE;
435
+ perm_head->usage = 0;
436
+
437
+ prevlabel = "";
438
+
439
+ initialized = true;
440
+
441
+ return 0;
442
+ }
443
+
444
+ void cleanup_labels(void)
445
+ {
446
+ union label *lptr, *lhold;
447
+
448
+ initialized = false;
449
+
450
+ hash_free(&ltab);
451
+
452
+ lptr = lhold = ldata;
453
+ while (lptr) {
454
+ lptr = &lptr[LABEL_BLOCK-1];
455
+ lptr = lptr->admin.next;
456
+ nasm_free(lhold);
457
+ lhold = lptr;
458
+ }
459
+
460
+ while (perm_head) {
461
+ perm_tail = perm_head;
462
+ perm_head = perm_head->next;
463
+ nasm_free(perm_tail);
464
+ }
465
+ }
466
+
467
+ static void init_block(union label *blk)
468
+ {
469
+ int j;
470
+
471
+ for (j = 0; j < LABEL_BLOCK - 1; j++)
472
+ blk[j].admin.movingon = END_LIST;
473
+ blk[LABEL_BLOCK - 1].admin.movingon = END_BLOCK;
474
+ blk[LABEL_BLOCK - 1].admin.next = NULL;
475
+ }
476
+
477
+ static char *perm_copy(const char *string)
478
+ {
479
+ char *p;
480
+ int len = strlen(string)+1;
481
+
482
+ nasm_assert(len <= PERMTS_SIZE);
483
+
484
+ if (perm_tail->size - perm_tail->usage < len) {
485
+ perm_tail->next =
486
+ nasm_malloc(sizeof(struct permts));
487
+ perm_tail = perm_tail->next;
488
+ perm_tail->next = NULL;
489
+ perm_tail->size = PERMTS_SIZE;
490
+ perm_tail->usage = 0;
491
+ }
492
+ p = perm_tail->data + perm_tail->usage;
493
+ memcpy(p, string, len);
494
+ perm_tail->usage += len;
495
+
496
+ return p;
497
+ }
498
+
499
+ char *local_scope(char *label)
500
+ {
501
+ return islocal(label) ? prevlabel : "";
502
+ }
503
+
504
+ /*
505
+ * Notes regarding bug involving redefinition of external segments.
506
+ *
507
+ * Up to and including v0.97, the following code didn't work. From 0.97
508
+ * developers release 2 onwards, it will generate an error.
509
+ *
510
+ * EXTERN extlabel
511
+ * newlabel EQU extlabel + 1
512
+ *
513
+ * The results of allowing this code through are that two import records
514
+ * are generated, one for 'extlabel' and one for 'newlabel'.
515
+ *
516
+ * The reason for this is an inadequacy in the defined interface between
517
+ * the label manager and the output formats. The problem lies in how the
518
+ * output format driver tells that a label is an external label for which
519
+ * a label import record must be produced. Most (all except bin?) produce
520
+ * the record if the segment number of the label is not one of the internal
521
+ * segments that the output driver is producing.
522
+ *
523
+ * A simple fix to this would be to make the output formats keep track of
524
+ * which symbols they've produced import records for, and make them not
525
+ * produce import records for segments that are already defined.
526
+ *
527
+ * The best way, which is slightly harder but reduces duplication of code
528
+ * and should therefore make the entire system smaller and more stable is
529
+ * to change the interface between assembler, define_label(), and
530
+ * the output module. The changes that are needed are:
531
+ *
532
+ * The semantics of the 'isextern' flag passed to define_label() need
533
+ * examining. This information may or may not tell us what we need to
534
+ * know (ie should we be generating an import record at this point for this
535
+ * label). If these aren't the semantics, the semantics should be changed
536
+ * to this.
537
+ *
538
+ * The output module interface needs changing, so that the `isextern' flag
539
+ * is passed to the module, so that it can be easily tested for.
540
+ */