v86 0.4.0 → 0.5.11

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 (386) hide show
  1. package/Readme.md +56 -111
  2. package/build/libv86-debug.js +12680 -0
  3. package/build/libv86-debug.mjs +732 -0
  4. package/build/libv86.js +710 -0
  5. package/build/libv86.mjs +637 -0
  6. package/build/v86-debug.wasm +0 -0
  7. package/build/v86-fallback.wasm +0 -0
  8. package/build/v86.wasm +0 -0
  9. package/package.json +12 -35
  10. package/bios/.gitignore +0 -1
  11. package/bios/COPYING.LESSER +0 -165
  12. package/bios/bochs-bios.bin +0 -0
  13. package/bios/bochs-vgabios.bin +0 -0
  14. package/bios/fetch-and-build-seabios.sh +0 -13
  15. package/bios/seabios/.config +0 -113
  16. package/bios/seabios/.config.old +0 -114
  17. package/bios/seabios/.gitignore +0 -4
  18. package/bios/seabios/COPYING +0 -674
  19. package/bios/seabios/COPYING.LESSER +0 -165
  20. package/bios/seabios/Makefile +0 -286
  21. package/bios/seabios/README +0 -17
  22. package/bios/seabios/docs/Build_overview.md +0 -104
  23. package/bios/seabios/docs/Contributing.md +0 -20
  24. package/bios/seabios/docs/Debugging.md +0 -111
  25. package/bios/seabios/docs/Developer_Documentation.md +0 -25
  26. package/bios/seabios/docs/Developer_links.md +0 -86
  27. package/bios/seabios/docs/Download.md +0 -27
  28. package/bios/seabios/docs/Execution_and_code_flow.md +0 -178
  29. package/bios/seabios/docs/Linking_overview.md +0 -160
  30. package/bios/seabios/docs/Mailinglist.md +0 -8
  31. package/bios/seabios/docs/Memory_Model.md +0 -253
  32. package/bios/seabios/docs/README +0 -5
  33. package/bios/seabios/docs/Releases.md +0 -482
  34. package/bios/seabios/docs/Runtime_config.md +0 -193
  35. package/bios/seabios/docs/SeaBIOS.md +0 -17
  36. package/bios/seabios/docs/SeaVGABIOS.md +0 -39
  37. package/bios/seabios/out/autoconf.h +0 -117
  38. package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
  39. package/bios/seabios/out/include/config/acpi.h +0 -0
  40. package/bios/seabios/out/include/config/ahci.h +0 -0
  41. package/bios/seabios/out/include/config/apmbios.h +0 -0
  42. package/bios/seabios/out/include/config/ata/dma.h +0 -0
  43. package/bios/seabios/out/include/config/ata/pio32.h +0 -0
  44. package/bios/seabios/out/include/config/ata.h +0 -0
  45. package/bios/seabios/out/include/config/auto.conf +0 -69
  46. package/bios/seabios/out/include/config/auto.conf.cmd +0 -9
  47. package/bios/seabios/out/include/config/boot.h +0 -0
  48. package/bios/seabios/out/include/config/bootorder.h +0 -0
  49. package/bios/seabios/out/include/config/build/vgabios.h +0 -0
  50. package/bios/seabios/out/include/config/call32/smm.h +0 -0
  51. package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
  52. package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
  53. package/bios/seabios/out/include/config/debug/level.h +0 -0
  54. package/bios/seabios/out/include/config/drives.h +0 -0
  55. package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
  56. package/bios/seabios/out/include/config/esp/scsi.h +0 -0
  57. package/bios/seabios/out/include/config/flash/floppy.h +0 -0
  58. package/bios/seabios/out/include/config/floppy.h +0 -0
  59. package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
  60. package/bios/seabios/out/include/config/hardware/irq.h +0 -0
  61. package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
  62. package/bios/seabios/out/include/config/keyboard.h +0 -0
  63. package/bios/seabios/out/include/config/lpt.h +0 -0
  64. package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
  65. package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
  66. package/bios/seabios/out/include/config/megasas.h +0 -0
  67. package/bios/seabios/out/include/config/mouse.h +0 -0
  68. package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
  69. package/bios/seabios/out/include/config/mptable.h +0 -0
  70. package/bios/seabios/out/include/config/mtrr/init.h +0 -0
  71. package/bios/seabios/out/include/config/optionroms.h +0 -0
  72. package/bios/seabios/out/include/config/override/pci/id.h +0 -0
  73. package/bios/seabios/out/include/config/pcibios.h +0 -0
  74. package/bios/seabios/out/include/config/pirtable.h +0 -0
  75. package/bios/seabios/out/include/config/pmm.h +0 -0
  76. package/bios/seabios/out/include/config/pmtimer.h +0 -0
  77. package/bios/seabios/out/include/config/pnpbios.h +0 -0
  78. package/bios/seabios/out/include/config/ps2port.h +0 -0
  79. package/bios/seabios/out/include/config/pvscsi.h +0 -0
  80. package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
  81. package/bios/seabios/out/include/config/qemu.h +0 -0
  82. package/bios/seabios/out/include/config/rom/size.h +0 -0
  83. package/bios/seabios/out/include/config/rtc/timer.h +0 -0
  84. package/bios/seabios/out/include/config/s3/resume.h +0 -0
  85. package/bios/seabios/out/include/config/sdcard.h +0 -0
  86. package/bios/seabios/out/include/config/serial.h +0 -0
  87. package/bios/seabios/out/include/config/tcgbios.h +0 -0
  88. package/bios/seabios/out/include/config/threads.h +0 -0
  89. package/bios/seabios/out/include/config/tristate.conf +0 -4
  90. package/bios/seabios/out/include/config/tsc/timer.h +0 -0
  91. package/bios/seabios/out/include/config/use/smm.h +0 -0
  92. package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
  93. package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
  94. package/bios/seabios/out/include/config/vga/bochs.h +0 -0
  95. package/bios/seabios/out/include/config/vga/did.h +0 -0
  96. package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
  97. package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
  98. package/bios/seabios/out/include/config/vga/pci.h +0 -0
  99. package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
  100. package/bios/seabios/out/include/config/vga/vbe.h +0 -0
  101. package/bios/seabios/out/include/config/vga/vid.h +0 -0
  102. package/bios/seabios/out/include/config/vgahooks.h +0 -0
  103. package/bios/seabios/out/include/config/virtio/blk.h +0 -0
  104. package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
  105. package/bios/seabios/out/include/config/xen.h +0 -0
  106. package/bios/seabios/out/scripts/kconfig/conf +0 -0
  107. package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
  108. package/bios/seabios/out/scripts/kconfig/zconf.hash.c +0 -289
  109. package/bios/seabios/out/scripts/kconfig/zconf.lex.c +0 -2420
  110. package/bios/seabios/out/scripts/kconfig/zconf.tab.c +0 -2538
  111. package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
  112. package/bios/seabios/scripts/acpi_extract.py +0 -366
  113. package/bios/seabios/scripts/acpi_extract_preprocess.py +0 -41
  114. package/bios/seabios/scripts/buildrom.py +0 -56
  115. package/bios/seabios/scripts/buildversion.py +0 -134
  116. package/bios/seabios/scripts/checkrom.py +0 -95
  117. package/bios/seabios/scripts/checkstack.py +0 -226
  118. package/bios/seabios/scripts/checksum.py +0 -16
  119. package/bios/seabios/scripts/encodeint.py +0 -21
  120. package/bios/seabios/scripts/gen-offsets.sh +0 -17
  121. package/bios/seabios/scripts/kconfig/.gitignore +0 -22
  122. package/bios/seabios/scripts/kconfig/Makefile +0 -331
  123. package/bios/seabios/scripts/kconfig/POTFILES.in +0 -12
  124. package/bios/seabios/scripts/kconfig/check.sh +0 -13
  125. package/bios/seabios/scripts/kconfig/conf.c +0 -718
  126. package/bios/seabios/scripts/kconfig/confdata.c +0 -1250
  127. package/bios/seabios/scripts/kconfig/expr.c +0 -1168
  128. package/bios/seabios/scripts/kconfig/expr.h +0 -241
  129. package/bios/seabios/scripts/kconfig/gconf.c +0 -1542
  130. package/bios/seabios/scripts/kconfig/gconf.glade +0 -661
  131. package/bios/seabios/scripts/kconfig/images.c +0 -326
  132. package/bios/seabios/scripts/kconfig/kxgettext.c +0 -235
  133. package/bios/seabios/scripts/kconfig/lex.zconf.c +0 -2430
  134. package/bios/seabios/scripts/kconfig/list.h +0 -131
  135. package/bios/seabios/scripts/kconfig/lkc.h +0 -200
  136. package/bios/seabios/scripts/kconfig/lkc_proto.h +0 -57
  137. package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +0 -4
  138. package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +0 -4
  139. package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +0 -87
  140. package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +0 -332
  141. package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +0 -257
  142. package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +0 -301
  143. package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +0 -437
  144. package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +0 -408
  145. package/bios/seabios/scripts/kconfig/lxdialog/util.c +0 -713
  146. package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +0 -114
  147. package/bios/seabios/scripts/kconfig/mconf.c +0 -1036
  148. package/bios/seabios/scripts/kconfig/menu.c +0 -697
  149. package/bios/seabios/scripts/kconfig/merge_config.sh +0 -150
  150. package/bios/seabios/scripts/kconfig/nconf.c +0 -1556
  151. package/bios/seabios/scripts/kconfig/nconf.gui.c +0 -656
  152. package/bios/seabios/scripts/kconfig/nconf.h +0 -96
  153. package/bios/seabios/scripts/kconfig/qconf.cc +0 -1795
  154. package/bios/seabios/scripts/kconfig/qconf.h +0 -338
  155. package/bios/seabios/scripts/kconfig/streamline_config.pl +0 -647
  156. package/bios/seabios/scripts/kconfig/symbol.c +0 -1373
  157. package/bios/seabios/scripts/kconfig/util.c +0 -157
  158. package/bios/seabios/scripts/kconfig/zconf.gperf +0 -48
  159. package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +0 -289
  160. package/bios/seabios/scripts/kconfig/zconf.l +0 -363
  161. package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +0 -2420
  162. package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +0 -2538
  163. package/bios/seabios/scripts/kconfig/zconf.y +0 -733
  164. package/bios/seabios/scripts/layoutrom.py +0 -705
  165. package/bios/seabios/scripts/python23compat.py +0 -14
  166. package/bios/seabios/scripts/readserial.py +0 -190
  167. package/bios/seabios/scripts/tarball.sh +0 -36
  168. package/bios/seabios/scripts/test-build.sh +0 -90
  169. package/bios/seabios/scripts/transdump.py +0 -53
  170. package/bios/seabios/scripts/vgafixup.py +0 -96
  171. package/bios/seabios/src/Kconfig +0 -579
  172. package/bios/seabios/src/apm.c +0 -215
  173. package/bios/seabios/src/asm-offsets.c +0 -23
  174. package/bios/seabios/src/biosvar.h +0 -130
  175. package/bios/seabios/src/block.c +0 -623
  176. package/bios/seabios/src/block.h +0 -121
  177. package/bios/seabios/src/bmp.c +0 -117
  178. package/bios/seabios/src/boot.c +0 -793
  179. package/bios/seabios/src/bootsplash.c +0 -255
  180. package/bios/seabios/src/bregs.h +0 -80
  181. package/bios/seabios/src/byteorder.h +0 -71
  182. package/bios/seabios/src/cdrom.c +0 -322
  183. package/bios/seabios/src/clock.c +0 -506
  184. package/bios/seabios/src/code16gcc.s +0 -1
  185. package/bios/seabios/src/config.h +0 -108
  186. package/bios/seabios/src/cp437.c +0 -275
  187. package/bios/seabios/src/cp437.h +0 -1
  188. package/bios/seabios/src/disk.c +0 -779
  189. package/bios/seabios/src/e820map.c +0 -152
  190. package/bios/seabios/src/e820map.h +0 -26
  191. package/bios/seabios/src/entryfuncs.S +0 -165
  192. package/bios/seabios/src/farptr.h +0 -208
  193. package/bios/seabios/src/font.c +0 -139
  194. package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +0 -78
  195. package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +0 -26
  196. package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +0 -36
  197. package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +0 -102
  198. package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +0 -90
  199. package/bios/seabios/src/fw/acpi-dsdt.dsl +0 -342
  200. package/bios/seabios/src/fw/acpi-dsdt.hex +0 -554
  201. package/bios/seabios/src/fw/acpi.c +0 -685
  202. package/bios/seabios/src/fw/biostables.c +0 -491
  203. package/bios/seabios/src/fw/coreboot.c +0 -569
  204. package/bios/seabios/src/fw/csm.c +0 -347
  205. package/bios/seabios/src/fw/dev-pci.h +0 -52
  206. package/bios/seabios/src/fw/dev-piix.h +0 -29
  207. package/bios/seabios/src/fw/dev-q35.h +0 -52
  208. package/bios/seabios/src/fw/lzmadecode.c +0 -398
  209. package/bios/seabios/src/fw/lzmadecode.h +0 -67
  210. package/bios/seabios/src/fw/mptable.c +0 -197
  211. package/bios/seabios/src/fw/mtrr.c +0 -105
  212. package/bios/seabios/src/fw/multiboot.c +0 -111
  213. package/bios/seabios/src/fw/paravirt.c +0 -624
  214. package/bios/seabios/src/fw/paravirt.h +0 -63
  215. package/bios/seabios/src/fw/pciinit.c +0 -1187
  216. package/bios/seabios/src/fw/pirtable.c +0 -103
  217. package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +0 -450
  218. package/bios/seabios/src/fw/romfile_loader.c +0 -259
  219. package/bios/seabios/src/fw/romfile_loader.h +0 -91
  220. package/bios/seabios/src/fw/shadow.c +0 -208
  221. package/bios/seabios/src/fw/smbios.c +0 -585
  222. package/bios/seabios/src/fw/smm.c +0 -269
  223. package/bios/seabios/src/fw/smp.c +0 -194
  224. package/bios/seabios/src/fw/ssdt-misc.dsl +0 -104
  225. package/bios/seabios/src/fw/ssdt-misc.hex +0 -88
  226. package/bios/seabios/src/fw/ssdt-pcihp.dsl +0 -36
  227. package/bios/seabios/src/fw/ssdt-pcihp.hex +0 -38
  228. package/bios/seabios/src/fw/ssdt-proc.dsl +0 -48
  229. package/bios/seabios/src/fw/ssdt-proc.hex +0 -35
  230. package/bios/seabios/src/fw/xen.c +0 -149
  231. package/bios/seabios/src/fw/xen.h +0 -125
  232. package/bios/seabios/src/gen-defs.h +0 -19
  233. package/bios/seabios/src/hw/ahci.c +0 -697
  234. package/bios/seabios/src/hw/ahci.h +0 -201
  235. package/bios/seabios/src/hw/ata.c +0 -1046
  236. package/bios/seabios/src/hw/ata.h +0 -163
  237. package/bios/seabios/src/hw/blockcmd.c +0 -372
  238. package/bios/seabios/src/hw/blockcmd.h +0 -114
  239. package/bios/seabios/src/hw/dma.c +0 -67
  240. package/bios/seabios/src/hw/esp-scsi.c +0 -241
  241. package/bios/seabios/src/hw/esp-scsi.h +0 -8
  242. package/bios/seabios/src/hw/floppy.c +0 -741
  243. package/bios/seabios/src/hw/lsi-scsi.c +0 -221
  244. package/bios/seabios/src/hw/lsi-scsi.h +0 -8
  245. package/bios/seabios/src/hw/megasas.c +0 -405
  246. package/bios/seabios/src/hw/megasas.h +0 -8
  247. package/bios/seabios/src/hw/mpt-scsi.c +0 -319
  248. package/bios/seabios/src/hw/mpt-scsi.h +0 -8
  249. package/bios/seabios/src/hw/nvme-int.h +0 -199
  250. package/bios/seabios/src/hw/nvme.c +0 -708
  251. package/bios/seabios/src/hw/nvme.h +0 -17
  252. package/bios/seabios/src/hw/pci.c +0 -133
  253. package/bios/seabios/src/hw/pci.h +0 -47
  254. package/bios/seabios/src/hw/pci_ids.h +0 -2632
  255. package/bios/seabios/src/hw/pci_regs.h +0 -556
  256. package/bios/seabios/src/hw/pcidevice.c +0 -192
  257. package/bios/seabios/src/hw/pcidevice.h +0 -76
  258. package/bios/seabios/src/hw/pic.c +0 -115
  259. package/bios/seabios/src/hw/pic.h +0 -60
  260. package/bios/seabios/src/hw/ps2port.c +0 -543
  261. package/bios/seabios/src/hw/ps2port.h +0 -67
  262. package/bios/seabios/src/hw/pvscsi.c +0 -333
  263. package/bios/seabios/src/hw/pvscsi.h +0 -8
  264. package/bios/seabios/src/hw/ramdisk.c +0 -108
  265. package/bios/seabios/src/hw/rtc.c +0 -100
  266. package/bios/seabios/src/hw/rtc.h +0 -75
  267. package/bios/seabios/src/hw/sdcard.c +0 -572
  268. package/bios/seabios/src/hw/serialio.c +0 -113
  269. package/bios/seabios/src/hw/serialio.h +0 -29
  270. package/bios/seabios/src/hw/timer.c +0 -259
  271. package/bios/seabios/src/hw/tpm_drivers.c +0 -636
  272. package/bios/seabios/src/hw/tpm_drivers.h +0 -127
  273. package/bios/seabios/src/hw/usb-ehci.c +0 -650
  274. package/bios/seabios/src/hw/usb-ehci.h +0 -177
  275. package/bios/seabios/src/hw/usb-hid.c +0 -442
  276. package/bios/seabios/src/hw/usb-hid.h +0 -29
  277. package/bios/seabios/src/hw/usb-hub.c +0 -205
  278. package/bios/seabios/src/hw/usb-hub.h +0 -64
  279. package/bios/seabios/src/hw/usb-msc.c +0 -222
  280. package/bios/seabios/src/hw/usb-msc.h +0 -10
  281. package/bios/seabios/src/hw/usb-ohci.c +0 -568
  282. package/bios/seabios/src/hw/usb-ohci.h +0 -144
  283. package/bios/seabios/src/hw/usb-uas.c +0 -289
  284. package/bios/seabios/src/hw/usb-uas.h +0 -9
  285. package/bios/seabios/src/hw/usb-uhci.c +0 -571
  286. package/bios/seabios/src/hw/usb-uhci.h +0 -128
  287. package/bios/seabios/src/hw/usb-xhci.c +0 -1161
  288. package/bios/seabios/src/hw/usb-xhci.h +0 -133
  289. package/bios/seabios/src/hw/usb.c +0 -499
  290. package/bios/seabios/src/hw/usb.h +0 -254
  291. package/bios/seabios/src/hw/virtio-blk.c +0 -211
  292. package/bios/seabios/src/hw/virtio-blk.h +0 -43
  293. package/bios/seabios/src/hw/virtio-pci.c +0 -501
  294. package/bios/seabios/src/hw/virtio-pci.h +0 -151
  295. package/bios/seabios/src/hw/virtio-ring.c +0 -147
  296. package/bios/seabios/src/hw/virtio-ring.h +0 -121
  297. package/bios/seabios/src/hw/virtio-scsi.c +0 -220
  298. package/bios/seabios/src/hw/virtio-scsi.h +0 -47
  299. package/bios/seabios/src/jpeg.c +0 -1055
  300. package/bios/seabios/src/kbd.c +0 -599
  301. package/bios/seabios/src/list.h +0 -91
  302. package/bios/seabios/src/malloc.c +0 -561
  303. package/bios/seabios/src/malloc.h +0 -70
  304. package/bios/seabios/src/memmap.h +0 -21
  305. package/bios/seabios/src/misc.c +0 -195
  306. package/bios/seabios/src/mouse.c +0 -342
  307. package/bios/seabios/src/optionroms.c +0 -475
  308. package/bios/seabios/src/output.c +0 -584
  309. package/bios/seabios/src/output.h +0 -68
  310. package/bios/seabios/src/pcibios.c +0 -241
  311. package/bios/seabios/src/pmm.c +0 -176
  312. package/bios/seabios/src/pnpbios.c +0 -88
  313. package/bios/seabios/src/post.c +0 -337
  314. package/bios/seabios/src/resume.c +0 -157
  315. package/bios/seabios/src/romfile.c +0 -146
  316. package/bios/seabios/src/romfile.h +0 -21
  317. package/bios/seabios/src/romlayout.S +0 -698
  318. package/bios/seabios/src/sercon.c +0 -677
  319. package/bios/seabios/src/serial.c +0 -317
  320. package/bios/seabios/src/sha1.c +0 -147
  321. package/bios/seabios/src/sha1.h +0 -8
  322. package/bios/seabios/src/stacks.c +0 -771
  323. package/bios/seabios/src/stacks.h +0 -68
  324. package/bios/seabios/src/std/LegacyBios.h +0 -985
  325. package/bios/seabios/src/std/acpi.h +0 -323
  326. package/bios/seabios/src/std/bda.h +0 -174
  327. package/bios/seabios/src/std/disk.h +0 -175
  328. package/bios/seabios/src/std/mptable.h +0 -77
  329. package/bios/seabios/src/std/multiboot.h +0 -260
  330. package/bios/seabios/src/std/optionrom.h +0 -59
  331. package/bios/seabios/src/std/pirtable.h +0 -35
  332. package/bios/seabios/src/std/pmm.h +0 -19
  333. package/bios/seabios/src/std/pnpbios.h +0 -24
  334. package/bios/seabios/src/std/smbios.h +0 -167
  335. package/bios/seabios/src/std/tcg.h +0 -554
  336. package/bios/seabios/src/std/vbe.h +0 -156
  337. package/bios/seabios/src/std/vga.h +0 -63
  338. package/bios/seabios/src/string.c +0 -251
  339. package/bios/seabios/src/string.h +0 -31
  340. package/bios/seabios/src/system.c +0 -357
  341. package/bios/seabios/src/tcgbios.c +0 -2014
  342. package/bios/seabios/src/tcgbios.h +0 -19
  343. package/bios/seabios/src/types.h +0 -156
  344. package/bios/seabios/src/util.h +0 -251
  345. package/bios/seabios/src/version.c +0 -5
  346. package/bios/seabios/src/vgahooks.c +0 -355
  347. package/bios/seabios/src/x86.c +0 -23
  348. package/bios/seabios/src/x86.h +0 -277
  349. package/bios/seabios/vgasrc/Kconfig +0 -211
  350. package/bios/seabios/vgasrc/bochsdisplay.c +0 -59
  351. package/bios/seabios/vgasrc/bochsvga.c +0 -447
  352. package/bios/seabios/vgasrc/bochsvga.h +0 -57
  353. package/bios/seabios/vgasrc/cbvga.c +0 -337
  354. package/bios/seabios/vgasrc/clext.c +0 -627
  355. package/bios/seabios/vgasrc/geodevga.c +0 -434
  356. package/bios/seabios/vgasrc/geodevga.h +0 -89
  357. package/bios/seabios/vgasrc/ramfb.c +0 -163
  358. package/bios/seabios/vgasrc/stdvga.c +0 -485
  359. package/bios/seabios/vgasrc/stdvga.h +0 -81
  360. package/bios/seabios/vgasrc/stdvgaio.c +0 -186
  361. package/bios/seabios/vgasrc/stdvgamodes.c +0 -534
  362. package/bios/seabios/vgasrc/swcursor.c +0 -96
  363. package/bios/seabios/vgasrc/vbe.c +0 -432
  364. package/bios/seabios/vgasrc/vgabios.c +0 -1131
  365. package/bios/seabios/vgasrc/vgabios.h +0 -88
  366. package/bios/seabios/vgasrc/vgaentry.S +0 -161
  367. package/bios/seabios/vgasrc/vgafb.c +0 -661
  368. package/bios/seabios/vgasrc/vgafb.h +0 -42
  369. package/bios/seabios/vgasrc/vgafonts.c +0 -785
  370. package/bios/seabios/vgasrc/vgahw.h +0 -152
  371. package/bios/seabios/vgasrc/vgainit.c +0 -202
  372. package/bios/seabios/vgasrc/vgalayout.lds.S +0 -23
  373. package/bios/seabios/vgasrc/vgautil.h +0 -103
  374. package/bios/seabios/vgasrc/vgaversion.c +0 -6
  375. package/bios/seabios-debug.bin +0 -0
  376. package/bios/seabios-debug.config +0 -117
  377. package/bios/seabios.bin +0 -0
  378. package/bios/seabios.config +0 -114
  379. package/bios/vgabios-debug.bin +0 -0
  380. package/bios/vgabios.bin +0 -0
  381. package/build/binaries.js +0 -1
  382. package/build/index-debug.cjs +0 -1
  383. package/build/index-debug.js +0 -1
  384. package/build/index.cjs +0 -1
  385. package/build/index.js +0 -1
  386. package/v86.css +0 -259
@@ -1,705 +0,0 @@
1
- #!/usr/bin/env python
2
- # Script to analyze code and arrange ld sections.
3
- #
4
- # Copyright (C) 2008-2014 Kevin O'Connor <kevin@koconnor.net>
5
- #
6
- # This file may be distributed under the terms of the GNU GPLv3 license.
7
-
8
- import operator
9
- import sys
10
-
11
- # LD script headers/trailers
12
- COMMONHEADER = """
13
- /* DO NOT EDIT! This is an autogenerated file. See scripts/layoutrom.py. */
14
- OUTPUT_FORMAT("elf32-i386")
15
- OUTPUT_ARCH("i386")
16
- SECTIONS
17
- {
18
- """
19
- COMMONTRAILER = """
20
-
21
- /* Discard regular data sections to force a link error if
22
- * code attempts to access data not marked with VAR16 (or other
23
- * appropriate macro)
24
- */
25
- /DISCARD/ : {
26
- *(.text*) *(.data*) *(.bss*) *(.rodata*)
27
- *(COMMON) *(.discard*) *(.eh_frame) *(.note*)
28
- }
29
- }
30
- """
31
-
32
-
33
- ######################################################################
34
- # Determine section locations
35
- ######################################################################
36
-
37
- # Align 'pos' up to 'alignbytes' offset
38
- def alignpos(pos, alignbytes):
39
- mask = alignbytes - 1
40
- return (pos + mask) & ~mask
41
-
42
- # Align 'pos' down to 'alignbytes' offset
43
- def aligndown(pos, alignbytes):
44
- mask = alignbytes - 1
45
- return pos & ~mask
46
-
47
- # Determine the final addresses for a list of sections that end at an
48
- # address.
49
- def setSectionsStart(sections, endaddr, minalign=1, segoffset=0):
50
- totspace = 0
51
- for section in sections:
52
- minalign = max(minalign, section.align)
53
- totspace = alignpos(totspace, section.align) + section.size
54
- startaddr = int((endaddr - totspace) / minalign) * minalign
55
- curaddr = startaddr
56
- for section in sections:
57
- curaddr = alignpos(curaddr, section.align)
58
- section.finalloc = curaddr
59
- section.finalsegloc = curaddr - segoffset
60
- curaddr += section.size
61
- return startaddr, minalign
62
-
63
- # The 16bit code can't exceed 64K of space.
64
- BUILD_BIOS_ADDR = 0xf0000
65
- BUILD_BIOS_SIZE = 0x10000
66
- BUILD_ROM_START = 0xc0000
67
- BUILD_LOWRAM_END = 0xa0000
68
- # Space to reserve in f-segment for dynamic allocations
69
- BUILD_MIN_BIOSTABLE = 2048
70
-
71
- # Layout the 16bit code. This ensures sections with fixed offset
72
- # requirements are placed in the correct location. It also places the
73
- # 16bit code as high as possible in the f-segment.
74
- def fitSections(sections, fillsections):
75
- # fixedsections = [(addr, section), ...]
76
- fixedsections = []
77
- for section in sections:
78
- if section.name.startswith('.fixedaddr.'):
79
- addr = int(section.name[11:], 16)
80
- section.finalloc = addr + BUILD_BIOS_ADDR
81
- section.finalsegloc = addr
82
- fixedsections.append((addr, section))
83
- if section.align != 1:
84
- print("Error: Fixed section %s has non-zero alignment (%d)" % (
85
- section.name, section.align))
86
- sys.exit(1)
87
- fixedsections.sort(key=operator.itemgetter(0))
88
- firstfixed = fixedsections[0][0]
89
-
90
- # Find freespace in fixed address area
91
- # fixedAddr = [(freespace, section), ...]
92
- fixedAddr = []
93
- for i in range(len(fixedsections)):
94
- fixedsectioninfo = fixedsections[i]
95
- addr, section = fixedsectioninfo
96
- if i == len(fixedsections) - 1:
97
- nextaddr = BUILD_BIOS_SIZE
98
- else:
99
- nextaddr = fixedsections[i+1][0]
100
- avail = nextaddr - addr - section.size
101
- fixedAddr.append((avail, section))
102
- fixedAddr.sort(key=operator.itemgetter(0))
103
-
104
- # Attempt to fit other sections into fixed area
105
- canrelocate = [(section.size, section.align, section.name, section)
106
- for section in fillsections]
107
- canrelocate.sort()
108
- canrelocate = [section for size, align, name, section in canrelocate]
109
- totalused = 0
110
- for freespace, fixedsection in fixedAddr:
111
- addpos = fixedsection.finalsegloc + fixedsection.size
112
- totalused += fixedsection.size
113
- nextfixedaddr = addpos + freespace
114
- # print("Filling section %x uses %d, next=%x, available=%d" % (
115
- # fixedsection.finalloc, fixedsection.size, nextfixedaddr, freespace))
116
- while 1:
117
- canfit = None
118
- for fitsection in canrelocate:
119
- if addpos + fitsection.size > nextfixedaddr:
120
- # Can't fit and nothing else will fit.
121
- break
122
- fitnextaddr = alignpos(addpos, fitsection.align) + fitsection.size
123
- # print("Test %s - %x vs %x" % (
124
- # fitsection.name, fitnextaddr, nextfixedaddr))
125
- if fitnextaddr > nextfixedaddr:
126
- # This item can't fit.
127
- continue
128
- canfit = (fitnextaddr, fitsection)
129
- if canfit is None:
130
- break
131
- # Found a section that can fit.
132
- fitnextaddr, fitsection = canfit
133
- canrelocate.remove(fitsection)
134
- fitsection.finalloc = addpos + BUILD_BIOS_ADDR
135
- fitsection.finalsegloc = addpos
136
- addpos = fitnextaddr
137
- totalused += fitsection.size
138
- # print(" Adding %s (size %d align %d) pos=%x avail=%d" % (
139
- # fitsection[2], fitsection[0], fitsection[1]
140
- # , fitnextaddr, nextfixedaddr - fitnextaddr))
141
-
142
- # Report stats
143
- total = BUILD_BIOS_SIZE-firstfixed
144
- slack = total - totalused
145
- print ("Fixed space: 0x%x-0x%x total: %d slack: %d"
146
- " Percent slack: %.1f%%" % (
147
- firstfixed, BUILD_BIOS_SIZE, total, slack,
148
- (float(slack) / total) * 100.0))
149
-
150
- return firstfixed + BUILD_BIOS_ADDR
151
-
152
- # Return the subset of sections with a given category
153
- def getSectionsCategory(sections, category):
154
- return [section for section in sections if section.category == category]
155
-
156
- # Return the subset of sections with a given fileid
157
- def getSectionsFileid(sections, fileid):
158
- return [section for section in sections if section.fileid == fileid]
159
-
160
- # Return the subset of sections with a given name prefix
161
- def getSectionsPrefix(sections, prefix):
162
- return [section for section in sections
163
- if section.name.startswith(prefix)]
164
-
165
- # The sections (and associated information) to be placed in output rom
166
- class LayoutInfo:
167
- sections = None
168
- config = None
169
- genreloc = None
170
- sec32init_start = sec32init_end = sec32init_align = None
171
- sec32low_start = sec32low_end = None
172
- zonelow_base = final_sec32low_start = None
173
- zonefseg_start = zonefseg_end = None
174
- final_readonly_start = None
175
- varlowsyms = entrysym = None
176
-
177
- # Determine final memory addresses for sections
178
- def doLayout(sections, config, genreloc):
179
- li = LayoutInfo()
180
- li.config = config
181
- li.sections = sections
182
- li.genreloc = genreloc
183
- # Determine 16bit positions
184
- sections16 = getSectionsCategory(sections, '16')
185
- textsections = getSectionsPrefix(sections16, '.text.')
186
- rodatasections = getSectionsPrefix(sections16, '.rodata')
187
- datasections = getSectionsPrefix(sections16, '.data16.')
188
- fixedsections = getSectionsCategory(sections, 'fixed')
189
-
190
- firstfixed = fitSections(fixedsections, textsections)
191
- remsections = [s for s in textsections+rodatasections+datasections
192
- if s.finalloc is None]
193
- sec16_start, sec16_align = setSectionsStart(
194
- remsections, firstfixed, segoffset=BUILD_BIOS_ADDR)
195
-
196
- # Determine 32seg positions
197
- sections32seg = getSectionsCategory(sections, '32seg')
198
- textsections = getSectionsPrefix(sections32seg, '.text.')
199
- rodatasections = getSectionsPrefix(sections32seg, '.rodata')
200
- datasections = getSectionsPrefix(sections32seg, '.data32seg.')
201
-
202
- sec32seg_start, sec32seg_align = setSectionsStart(
203
- textsections + rodatasections + datasections, sec16_start
204
- , segoffset=BUILD_BIOS_ADDR)
205
-
206
- # Determine 32bit "fseg memory" data positions
207
- sections32textfseg = getSectionsCategory(sections, '32textfseg')
208
- sec32textfseg_start, sec32textfseg_align = setSectionsStart(
209
- sections32textfseg, sec32seg_start, 16)
210
-
211
- sections32fseg = getSectionsCategory(sections, '32fseg')
212
- sec32fseg_start, sec32fseg_align = setSectionsStart(
213
- sections32fseg, sec32textfseg_start, 16
214
- , segoffset=BUILD_BIOS_ADDR)
215
-
216
- # Determine 32flat runtime positions
217
- sections32flat = getSectionsCategory(sections, '32flat')
218
- textsections = getSectionsPrefix(sections32flat, '.text.')
219
- rodatasections = getSectionsPrefix(sections32flat, '.rodata')
220
- datasections = getSectionsPrefix(sections32flat, '.data.')
221
- bsssections = getSectionsPrefix(sections32flat, '.bss.')
222
-
223
- sec32flat_start, sec32flat_align = setSectionsStart(
224
- textsections + rodatasections + datasections + bsssections
225
- , sec32fseg_start, 16)
226
-
227
- # Determine 32flat init positions
228
- sections32init = getSectionsCategory(sections, '32init')
229
- init32_textsections = getSectionsPrefix(sections32init, '.text.')
230
- init32_rodatasections = getSectionsPrefix(sections32init, '.rodata')
231
- init32_datasections = getSectionsPrefix(sections32init, '.data.')
232
- init32_bsssections = getSectionsPrefix(sections32init, '.bss.')
233
-
234
- sec32init_start, sec32init_align = setSectionsStart(
235
- init32_textsections + init32_rodatasections
236
- + init32_datasections + init32_bsssections
237
- , sec32flat_start, 16)
238
-
239
- # Determine location of ZoneFSeg memory.
240
- zonefseg_end = sec32flat_start
241
- if not genreloc:
242
- zonefseg_end = sec32init_start
243
- zonefseg_start = BUILD_BIOS_ADDR
244
- if zonefseg_start + BUILD_MIN_BIOSTABLE > zonefseg_end:
245
- # Not enough ZoneFSeg space - force a minimum space.
246
- zonefseg_end = sec32fseg_start
247
- zonefseg_start = zonefseg_end - BUILD_MIN_BIOSTABLE
248
- sec32flat_start, sec32flat_align = setSectionsStart(
249
- textsections + rodatasections + datasections + bsssections
250
- , zonefseg_start, 16)
251
- sec32init_start, sec32init_align = setSectionsStart(
252
- init32_textsections + init32_rodatasections
253
- + init32_datasections + init32_bsssections
254
- , sec32flat_start, 16)
255
- li.sec32init_start = sec32init_start
256
- li.sec32init_end = sec32flat_start
257
- li.sec32init_align = sec32init_align
258
- final_readonly_start = min(BUILD_BIOS_ADDR, sec32flat_start)
259
- if not genreloc:
260
- final_readonly_start = min(BUILD_BIOS_ADDR, sec32init_start)
261
- li.zonefseg_start = zonefseg_start
262
- li.zonefseg_end = zonefseg_end
263
- li.final_readonly_start = final_readonly_start
264
-
265
- # Determine "low memory" data positions
266
- sections32low = getSectionsCategory(sections, '32low')
267
- sec32low_end = sec32init_start
268
- if config.get('CONFIG_MALLOC_UPPERMEMORY'):
269
- final_sec32low_end = final_readonly_start
270
- zonelow_base = final_sec32low_end - 64*1024
271
- zonelow_base = max(BUILD_ROM_START, alignpos(zonelow_base, 2*1024))
272
- else:
273
- final_sec32low_end = BUILD_LOWRAM_END
274
- zonelow_base = final_sec32low_end - 64*1024
275
- relocdelta = final_sec32low_end - sec32low_end
276
- li.sec32low_start, sec32low_align = setSectionsStart(
277
- sections32low, sec32low_end, 16
278
- , segoffset=zonelow_base - relocdelta)
279
- li.sec32low_end = sec32low_end
280
- li.zonelow_base = zonelow_base
281
- li.final_sec32low_start = li.sec32low_start + relocdelta
282
-
283
- # Print statistics
284
- size16 = BUILD_BIOS_ADDR + BUILD_BIOS_SIZE - sec16_start
285
- size32seg = sec16_start - sec32seg_start
286
- size32textfseg = sec32seg_start - sec32textfseg_start
287
- size32fseg = sec32textfseg_start - sec32fseg_start
288
- size32flat = sec32fseg_start - sec32flat_start
289
- size32init = sec32flat_start - sec32init_start
290
- sizelow = li.sec32low_end - li.sec32low_start
291
- print("16bit size: %d" % size16)
292
- print("32bit segmented size: %d" % size32seg)
293
- print("32bit flat size: %d" % (size32flat + size32textfseg))
294
- print("32bit flat init size: %d" % size32init)
295
- print("Lowmem size: %d" % sizelow)
296
- print("f-segment var size: %d" % size32fseg)
297
- return li
298
-
299
-
300
- ######################################################################
301
- # Linker script output
302
- ######################################################################
303
-
304
- # Write LD script includes for the given cross references
305
- def outXRefs(sections, useseg=0, exportsyms=[], forcedelta=0):
306
- xrefs = dict([(symbol.name, symbol) for symbol in exportsyms])
307
- out = ""
308
- for section in sections:
309
- for reloc in section.relocs:
310
- symbol = reloc.symbol
311
- if (symbol.section is not None
312
- and (symbol.section.fileid != section.fileid
313
- or symbol.name != reloc.symbolname)):
314
- xrefs[reloc.symbolname] = symbol
315
- for symbolname, symbol in xrefs.items():
316
- loc = symbol.section.finalloc
317
- if useseg:
318
- loc = symbol.section.finalsegloc
319
- out += "%s = 0x%x ;\n" % (symbolname, loc + forcedelta + symbol.offset)
320
- return out
321
-
322
- # Write LD script includes for the given sections
323
- def outSections(sections, useseg=0):
324
- out = ""
325
- for section in sections:
326
- loc = section.finalloc
327
- if useseg:
328
- loc = section.finalsegloc
329
- out += "%s 0x%x : { *(%s) }\n" % (section.name, loc, section.name)
330
- return out
331
-
332
- # Write LD script includes for the given sections using relative offsets
333
- def outRelSections(sections, startsym, useseg=0):
334
- sections = [(section.finalloc, section) for section in sections
335
- if section.finalloc is not None]
336
- sections.sort(key=operator.itemgetter(0))
337
- out = ""
338
- for addr, section in sections:
339
- loc = section.finalloc
340
- if useseg:
341
- loc = section.finalsegloc
342
- out += ". = ( 0x%x - %s ) ;\n" % (loc, startsym)
343
- if section.name in ('.rodata.str1.1', '.rodata'):
344
- out += "_rodata%s = . ;\n" % (section.fileid,)
345
- out += "*%s.*(%s)\n" % (section.fileid, section.name)
346
- return out
347
-
348
- # Build linker script output for a list of relocations.
349
- def strRelocs(outname, outrel, relocs):
350
- relocs.sort()
351
- return (" %s_start = ABSOLUTE(.) ;\n" % (outname,)
352
- + "".join(["LONG(0x%x - %s)\n" % (pos, outrel)
353
- for pos in relocs])
354
- + " %s_end = ABSOLUTE(.) ;\n" % (outname,))
355
-
356
- # Find relocations to the given sections
357
- def getRelocs(sections, tosection, type=None):
358
- return [section.finalloc + reloc.offset
359
- for section in sections
360
- for reloc in section.relocs
361
- if (reloc.symbol.section in tosection
362
- and (type is None or reloc.type == type))]
363
-
364
- # Output the linker scripts for all required sections.
365
- def writeLinkerScripts(li, out16, out32seg, out32flat):
366
- # Write 16bit linker script
367
- filesections16 = getSectionsFileid(li.sections, '16')
368
- out = outXRefs(filesections16, useseg=1) + """
369
- zonelow_base = 0x%x ;
370
- _zonelow_seg = 0x%x ;
371
-
372
- %s
373
- """ % (li.zonelow_base,
374
- int(li.zonelow_base / 16),
375
- outSections(filesections16, useseg=1))
376
- outfile = open(out16, 'w')
377
- outfile.write(COMMONHEADER + out + COMMONTRAILER)
378
- outfile.close()
379
-
380
- # Write 32seg linker script
381
- filesections32seg = getSectionsFileid(li.sections, '32seg')
382
- out = (outXRefs(filesections32seg, useseg=1)
383
- + outSections(filesections32seg, useseg=1))
384
- outfile = open(out32seg, 'w')
385
- outfile.write(COMMONHEADER + out + COMMONTRAILER)
386
- outfile.close()
387
-
388
- # Write 32flat linker script
389
- sec32all_start = li.sec32low_start
390
- relocstr = ""
391
- if li.genreloc:
392
- # Generate relocations
393
- initsections = dict([
394
- (s, 1) for s in getSectionsCategory(li.sections, '32init')])
395
- noninitsections = dict([(s, 1) for s in li.sections
396
- if s not in initsections])
397
- absrelocs = getRelocs(initsections, initsections, type='R_386_32')
398
- relrelocs = getRelocs(initsections, noninitsections, type='R_386_PC32')
399
- initrelocs = getRelocs(noninitsections, initsections)
400
- relocstr = (strRelocs("_reloc_abs", "code32init_start", absrelocs)
401
- + strRelocs("_reloc_rel", "code32init_start", relrelocs)
402
- + strRelocs("_reloc_init", "code32flat_start", initrelocs))
403
- numrelocs = len(absrelocs + relrelocs + initrelocs)
404
- sec32all_start -= numrelocs * 4
405
- filesections32flat = getSectionsFileid(li.sections, '32flat')
406
- out = outXRefs([], exportsyms=li.varlowsyms
407
- , forcedelta=li.final_sec32low_start-li.sec32low_start)
408
- multiboot_header = ""
409
- if li.config.get('CONFIG_MULTIBOOT'):
410
- multiboot_header = "LONG(0x1BADB002) LONG(0) LONG(-0x1BADB002)"
411
- sec32all_start -= 3 * 4
412
- sec32all_align = max([section.align for section in li.sections])
413
- sec32all_start = aligndown(sec32all_start, sec32all_align)
414
- out += outXRefs(filesections32flat, exportsyms=[li.entrysym]) + """
415
- _reloc_min_align = 0x%x ;
416
- zonefseg_start = 0x%x ;
417
- zonefseg_end = 0x%x ;
418
- zonelow_base = 0x%x ;
419
- final_varlow_start = 0x%x ;
420
- final_readonly_start = 0x%x ;
421
- varlow_start = 0x%x ;
422
- varlow_end = 0x%x ;
423
- code32init_start = 0x%x ;
424
- code32init_end = 0x%x ;
425
-
426
- code32flat_start = 0x%x ;
427
- .text code32flat_start : {
428
- %s
429
- %s
430
- %s
431
- code32flat_end = ABSOLUTE(.) ;
432
- } :text
433
- """ % (li.sec32init_align,
434
- li.zonefseg_start,
435
- li.zonefseg_end,
436
- li.zonelow_base,
437
- li.final_sec32low_start,
438
- li.final_readonly_start,
439
- li.sec32low_start,
440
- li.sec32low_end,
441
- li.sec32init_start,
442
- li.sec32init_end,
443
- sec32all_start,
444
- multiboot_header,
445
- relocstr,
446
- outRelSections(li.sections, 'code32flat_start'))
447
- out = COMMONHEADER + out + COMMONTRAILER + """
448
- ENTRY(%s)
449
- PHDRS
450
- {
451
- text PT_LOAD AT ( code32flat_start ) ;
452
- }
453
- """ % (li.entrysym.name,)
454
- outfile = open(out32flat, 'w')
455
- outfile.write(out)
456
- outfile.close()
457
-
458
-
459
- ######################################################################
460
- # Detection of unused sections and init sections
461
- ######################################################################
462
-
463
- # Visit all sections reachable from a given set of start sections
464
- def findReachable(anchorsections, checkreloc, data):
465
- anchorsections = dict([(section, []) for section in anchorsections])
466
- pending = list(anchorsections)
467
- while pending:
468
- section = pending.pop()
469
- for reloc in section.relocs:
470
- chain = anchorsections[section] + [section.name]
471
- if not checkreloc(reloc, section, data, chain):
472
- continue
473
- nextsection = reloc.symbol.section
474
- if nextsection not in anchorsections:
475
- anchorsections[nextsection] = chain
476
- pending.append(nextsection)
477
- return anchorsections
478
-
479
- # Find "runtime" sections (ie, not init only sections).
480
- def checkRuntime(reloc, rsection, data, chain):
481
- section = reloc.symbol.section
482
- if section is None or '.init.' in section.name:
483
- return 0
484
- if '.data.varinit.' in section.name:
485
- print("ERROR: %s is VARVERIFY32INIT but used from %s" % (
486
- section.name, chain))
487
- sys.exit(1)
488
- return 1
489
-
490
- # Find and keep the section associated with a symbol (if available).
491
- def checkKeepSym(reloc, syms, fileid, isxref):
492
- symbolname = reloc.symbolname
493
- mustbecfunc = symbolname.startswith('_cfunc')
494
- if mustbecfunc:
495
- symprefix = '_cfunc' + fileid + '_'
496
- if not symbolname.startswith(symprefix):
497
- return 0
498
- symbolname = symbolname[len(symprefix):]
499
- symbol = syms.get(symbolname)
500
- if (symbol is None or symbol.section is None
501
- or symbol.section.name.startswith('.discard.')):
502
- return 0
503
- isdestcfunc = (symbol.section.name.startswith('.text.')
504
- and not symbol.section.name.startswith('.text.asm.'))
505
- if ((mustbecfunc and not isdestcfunc)
506
- or (not mustbecfunc and isdestcfunc and isxref)):
507
- return 0
508
-
509
- reloc.symbol = symbol
510
- return 1
511
-
512
- # Resolve a relocation and check if it should be kept in the final binary.
513
- def checkKeep(reloc, section, symbols, chain):
514
- ret = checkKeepSym(reloc, symbols[section.fileid], section.fileid, 0)
515
- if ret:
516
- return ret
517
- # Not in primary sections - it may be a cross 16/32 reference
518
- for fileid in ('16', '32seg', '32flat'):
519
- if fileid != section.fileid:
520
- ret = checkKeepSym(reloc, symbols[fileid], fileid, 1)
521
- if ret:
522
- return ret
523
- return 0
524
-
525
-
526
- ######################################################################
527
- # Startup and input parsing
528
- ######################################################################
529
-
530
- class Section:
531
- name = size = alignment = fileid = relocs = None
532
- finalloc = finalsegloc = category = None
533
- class Reloc:
534
- offset = type = symbolname = symbol = None
535
- class Symbol:
536
- name = offset = section = None
537
-
538
- # Read in output from objdump
539
- def parseObjDump(file, fileid):
540
- # sections = [section, ...]
541
- sections = []
542
- sectionmap = {}
543
- # symbols[symbolname] = symbol
544
- symbols = {}
545
-
546
- state = None
547
- for line in file.readlines():
548
- line = line.rstrip()
549
- if line == 'Sections:':
550
- state = 'section'
551
- continue
552
- if line == 'SYMBOL TABLE:':
553
- state = 'symbol'
554
- continue
555
- if line.startswith('RELOCATION RECORDS FOR ['):
556
- sectionname = line[24:-2]
557
- if sectionname.startswith('.debug_'):
558
- # Skip debugging sections (to reduce parsing time)
559
- state = None
560
- continue
561
- state = 'reloc'
562
- relocsection = sectionmap[sectionname]
563
- continue
564
-
565
- if state == 'section':
566
- try:
567
- idx, name, size, vma, lma, fileoff, align = line.split()
568
- if align[:3] != '2**':
569
- continue
570
- section = Section()
571
- section.name = name
572
- section.size = int(size, 16)
573
- section.align = 2**int(align[3:])
574
- section.fileid = fileid
575
- section.relocs = []
576
- sections.append(section)
577
- sectionmap[name] = section
578
- except ValueError:
579
- pass
580
- continue
581
- if state == 'symbol':
582
- try:
583
- parts = line[17:].split()
584
- if len(parts) == 3:
585
- sectionname, size, name = parts
586
- elif len(parts) == 4 and parts[2] == '.hidden':
587
- sectionname, size, hidden, name = parts
588
- else:
589
- continue
590
- symbol = Symbol()
591
- symbol.size = int(size, 16)
592
- symbol.offset = int(line[:8], 16)
593
- symbol.name = name
594
- symbol.section = sectionmap.get(sectionname)
595
- symbols[name] = symbol
596
- except ValueError:
597
- pass
598
- continue
599
- if state == 'reloc':
600
- try:
601
- off, type, symbolname = line.split()
602
- reloc = Reloc()
603
- reloc.offset = int(off, 16)
604
- reloc.type = type
605
- reloc.symbolname = symbolname
606
- reloc.symbol = symbols.get(symbolname)
607
- if reloc.symbol is None:
608
- # Some binutils (2.20.1) give section name instead
609
- # of a symbol - create a dummy symbol.
610
- reloc.symbol = symbol = Symbol()
611
- symbol.size = 0
612
- symbol.offset = 0
613
- symbol.name = symbolname
614
- symbol.section = sectionmap.get(symbolname)
615
- symbols[symbolname] = symbol
616
- relocsection.relocs.append(reloc)
617
- except ValueError:
618
- pass
619
- return sections, symbols
620
-
621
- # Parser for constants in simple C header files.
622
- def scanconfig(file):
623
- f = open(file, 'r')
624
- opts = {}
625
- for l in f.readlines():
626
- parts = l.split()
627
- if len(parts) != 3:
628
- continue
629
- if parts[0] != '#define':
630
- continue
631
- value = parts[2]
632
- if value.isdigit() or (value.startswith('0x') and value[2:].isdigit()):
633
- value = int(value, 0)
634
- opts[parts[1]] = value
635
- return opts
636
-
637
- def main():
638
- # Get output name
639
- in16, in32seg, in32flat, cfgfile, out16, out32seg, out32flat = sys.argv[1:]
640
-
641
- # Read in the objdump information
642
- infile16 = open(in16, 'r')
643
- infile32seg = open(in32seg, 'r')
644
- infile32flat = open(in32flat, 'r')
645
-
646
- # infoX = (sections, symbols)
647
- info16 = parseObjDump(infile16, '16')
648
- info32seg = parseObjDump(infile32seg, '32seg')
649
- info32flat = parseObjDump(infile32flat, '32flat')
650
-
651
- # Read kconfig config file
652
- config = scanconfig(cfgfile)
653
-
654
- # Figure out which sections to keep.
655
- allsections = info16[0] + info32seg[0] + info32flat[0]
656
- symbols = {'16': info16[1], '32seg': info32seg[1], '32flat': info32flat[1]}
657
- if config.get('CONFIG_COREBOOT'):
658
- entrysym = symbols['16'].get('entry_elf')
659
- elif config.get('CONFIG_CSM'):
660
- entrysym = symbols['16'].get('entry_csm')
661
- else:
662
- entrysym = symbols['16'].get('reset_vector')
663
- anchorsections = [entrysym.section] + [
664
- section for section in allsections
665
- if section.name.startswith('.fixedaddr.')]
666
- keepsections = findReachable(anchorsections, checkKeep, symbols)
667
- sections = [section for section in allsections if section in keepsections]
668
-
669
- # Separate 32bit flat into runtime, init, and special variable parts
670
- anchorsections = [
671
- section for section in sections
672
- if ('.data.varlow.' in section.name or '.data.varfseg.' in section.name
673
- or '.fixedaddr.' in section.name or '.runtime.' in section.name)]
674
- runtimesections = findReachable(anchorsections, checkRuntime, None)
675
- for section in sections:
676
- if section.name.startswith('.data.varlow.'):
677
- section.category = '32low'
678
- elif section.name.startswith('.data.varfseg.'):
679
- section.category = '32fseg'
680
- elif section.name.startswith('.text.32fseg.'):
681
- section.category = '32textfseg'
682
- elif section.name.startswith('.fixedaddr.'):
683
- section.category = 'fixed'
684
- elif section.fileid == '32flat' and section not in runtimesections:
685
- section.category = '32init'
686
- else:
687
- section.category = section.fileid
688
-
689
- # Determine the final memory locations of each kept section.
690
- genreloc = '_reloc_abs_start' in symbols['32flat']
691
- li = doLayout(sections, config, genreloc)
692
-
693
- # Exported symbols
694
- li.varlowsyms = [symbol for symbol in symbols['32flat'].values()
695
- if (symbol.section is not None
696
- and symbol.section.finalloc is not None
697
- and '.data.varlow.' in symbol.section.name
698
- and symbol.name != symbol.section.name)]
699
- li.entrysym = entrysym
700
-
701
- # Write out linker script files.
702
- writeLinkerScripts(li, out16, out32seg, out32flat)
703
-
704
- if __name__ == '__main__':
705
- main()