splat64 0.32.2__tar.gz → 0.32.3__tar.gz

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 (142) hide show
  1. {splat64-0.32.2 → splat64-0.32.3}/CHANGELOG.md +5 -0
  2. {splat64-0.32.2 → splat64-0.32.3}/PKG-INFO +2 -2
  3. {splat64-0.32.2 → splat64-0.32.3}/README.md +1 -1
  4. {splat64-0.32.2 → splat64-0.32.3}/pyproject.toml +1 -1
  5. {splat64-0.32.2 → splat64-0.32.3}/src/splat/__init__.py +1 -1
  6. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/bss.py +3 -1
  7. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/code.py +2 -0
  8. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/group.py +11 -2
  9. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/segment.py +3 -1
  10. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/options.py +4 -4
  11. {splat64-0.32.2 → splat64-0.32.3}/.github/workflows/black.yml +0 -0
  12. {splat64-0.32.2 → splat64-0.32.3}/.github/workflows/mypy.yml +0 -0
  13. {splat64-0.32.2 → splat64-0.32.3}/.github/workflows/publish_docs_to_wiki.yml +0 -0
  14. {splat64-0.32.2 → splat64-0.32.3}/.github/workflows/pypi.yml +0 -0
  15. {splat64-0.32.2 → splat64-0.32.3}/.github/workflows/test_lib.yml +0 -0
  16. {splat64-0.32.2 → splat64-0.32.3}/.github/workflows/unit_tests.yml +0 -0
  17. {splat64-0.32.2 → splat64-0.32.3}/.gitignore +0 -0
  18. {splat64-0.32.2 → splat64-0.32.3}/LICENSE +0 -0
  19. {splat64-0.32.2 → splat64-0.32.3}/create_config.py +0 -0
  20. {splat64-0.32.2 → splat64-0.32.3}/docs/Adding-Symbols.md +0 -0
  21. {splat64-0.32.2 → splat64-0.32.3}/docs/Advanced.md +0 -0
  22. {splat64-0.32.2 → splat64-0.32.3}/docs/Configuration.md +0 -0
  23. {splat64-0.32.2 → splat64-0.32.3}/docs/Examples.md +0 -0
  24. {splat64-0.32.2 → splat64-0.32.3}/docs/General-Workflow.md +0 -0
  25. {splat64-0.32.2 → splat64-0.32.3}/docs/Home.md +0 -0
  26. {splat64-0.32.2 → splat64-0.32.3}/docs/Quickstart.md +0 -0
  27. {splat64-0.32.2 → splat64-0.32.3}/docs/Segments.md +0 -0
  28. {splat64-0.32.2 → splat64-0.32.3}/docs/VramClasses.md +0 -0
  29. {splat64-0.32.2 → splat64-0.32.3}/mypy.ini +0 -0
  30. {splat64-0.32.2 → splat64-0.32.3}/requirements.txt +0 -0
  31. {splat64-0.32.2 → splat64-0.32.3}/split.py +0 -0
  32. {splat64-0.32.2 → splat64-0.32.3}/src/splat/__main__.py +0 -0
  33. {splat64-0.32.2 → splat64-0.32.3}/src/splat/disassembler/__init__.py +0 -0
  34. {splat64-0.32.2 → splat64-0.32.3}/src/splat/disassembler/disassembler.py +0 -0
  35. {splat64-0.32.2 → splat64-0.32.3}/src/splat/disassembler/disassembler_instance.py +0 -0
  36. {splat64-0.32.2 → splat64-0.32.3}/src/splat/disassembler/disassembler_section.py +0 -0
  37. {splat64-0.32.2 → splat64-0.32.3}/src/splat/disassembler/null_disassembler.py +0 -0
  38. {splat64-0.32.2 → splat64-0.32.3}/src/splat/disassembler/spimdisasm_disassembler.py +0 -0
  39. {splat64-0.32.2 → splat64-0.32.3}/src/splat/platforms/__init__.py +0 -0
  40. {splat64-0.32.2 → splat64-0.32.3}/src/splat/platforms/n64.py +0 -0
  41. {splat64-0.32.2 → splat64-0.32.3}/src/splat/platforms/ps2.py +0 -0
  42. {splat64-0.32.2 → splat64-0.32.3}/src/splat/platforms/psp.py +0 -0
  43. {splat64-0.32.2 → splat64-0.32.3}/src/splat/platforms/psx.py +0 -0
  44. {splat64-0.32.2 → splat64-0.32.3}/src/splat/py.typed +0 -0
  45. {splat64-0.32.2 → splat64-0.32.3}/src/splat/scripts/__init__.py +0 -0
  46. {splat64-0.32.2 → splat64-0.32.3}/src/splat/scripts/capy.py +0 -0
  47. {splat64-0.32.2 → splat64-0.32.3}/src/splat/scripts/create_config.py +0 -0
  48. {splat64-0.32.2 → splat64-0.32.3}/src/splat/scripts/split.py +0 -0
  49. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/__init__.py +0 -0
  50. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/__init__.py +0 -0
  51. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/asm.py +0 -0
  52. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/asmtu.py +0 -0
  53. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/bin.py +0 -0
  54. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/c.py +0 -0
  55. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/codesubsegment.py +0 -0
  56. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/cpp.py +0 -0
  57. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/data.py +0 -0
  58. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/databin.py +0 -0
  59. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/eh_frame.py +0 -0
  60. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/gcc_except_table.py +0 -0
  61. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/hasm.py +0 -0
  62. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/header.py +0 -0
  63. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/lib.py +0 -0
  64. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/linker_offset.py +0 -0
  65. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/pad.py +0 -0
  66. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/rdata.py +0 -0
  67. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/rodata.py +0 -0
  68. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/rodatabin.py +0 -0
  69. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/sbss.py +0 -0
  70. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/sdata.py +0 -0
  71. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/segment.py +0 -0
  72. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/common/textbin.py +0 -0
  73. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/linker_entry.py +0 -0
  74. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/__init__.py +0 -0
  75. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ci.py +0 -0
  76. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ci4.py +0 -0
  77. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ci8.py +0 -0
  78. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/decompressor.py +0 -0
  79. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/gfx.py +0 -0
  80. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/header.py +0 -0
  81. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/i1.py +0 -0
  82. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/i4.py +0 -0
  83. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/i8.py +0 -0
  84. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ia16.py +0 -0
  85. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ia4.py +0 -0
  86. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ia8.py +0 -0
  87. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/img.py +0 -0
  88. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/ipl3.py +0 -0
  89. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/mio0.py +0 -0
  90. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/palette.py +0 -0
  91. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/rgba16.py +0 -0
  92. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/rgba32.py +0 -0
  93. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/rsp.py +0 -0
  94. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/vtx.py +0 -0
  95. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/n64/yay0.py +0 -0
  96. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/ps2/__init__.py +0 -0
  97. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/ps2/ctor.py +0 -0
  98. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/ps2/lit4.py +0 -0
  99. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/ps2/lit8.py +0 -0
  100. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/ps2/vtables.py +0 -0
  101. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/psp/__init__.py +0 -0
  102. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/psx/__init__.py +0 -0
  103. {splat64-0.32.2 → splat64-0.32.3}/src/splat/segtypes/psx/header.py +0 -0
  104. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/__init__.py +0 -0
  105. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/cache_handler.py +0 -0
  106. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/color.py +0 -0
  107. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/compiler.py +0 -0
  108. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/log.py +0 -0
  109. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/n64/__init__.py +0 -0
  110. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/n64/find_code_length.py +0 -0
  111. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/n64/rominfo.py +0 -0
  112. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/palettes.py +0 -0
  113. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/progress_bar.py +0 -0
  114. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/psx/__init__.py +0 -0
  115. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/psx/psxexeinfo.py +0 -0
  116. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/relocs.py +0 -0
  117. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/statistics.py +0 -0
  118. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/symbols.py +0 -0
  119. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/utils.py +0 -0
  120. {splat64-0.32.2 → splat64-0.32.3}/src/splat/util/vram_classes.py +0 -0
  121. {splat64-0.32.2 → splat64-0.32.3}/test/Dockerfile +0 -0
  122. {splat64-0.32.2 → splat64-0.32.3}/test/README.md +0 -0
  123. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/.gitignore +0 -0
  124. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/Makefile +0 -0
  125. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/dummy_ipl3.s +0 -0
  126. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/.splache +0 -0
  127. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/data/main.bss.s +0 -0
  128. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/data/main.data.s +0 -0
  129. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/handwritten.s +0 -0
  130. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/header.s +0 -0
  131. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/nonmatchings/main/D_80000510.s +0 -0
  132. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/nonmatchings/main/func_80000400.s +0 -0
  133. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/asm/nonmatchings/main/func_800004A0.s +0 -0
  134. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/assets/dummy_ipl3.bin +0 -0
  135. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/src/main.c +0 -0
  136. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/undefined_funcs_auto.txt +0 -0
  137. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/expected/undefined_syms_auto.txt +0 -0
  138. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/handwritten.s +0 -0
  139. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/header.s +0 -0
  140. {splat64-0.32.2 → splat64-0.32.3}/test/basic_app/main.c +0 -0
  141. {splat64-0.32.2 → splat64-0.32.3}/test/test_gen_expected.sh +0 -0
  142. {splat64-0.32.2 → splat64-0.32.3}/test.py +0 -0
@@ -1,5 +1,10 @@
1
1
  # splat Release Notes
2
2
 
3
+ ### 0.32.3
4
+
5
+ - Fix "unrecognized YAML option" error if disassemble_all is provided via CLI and as a YAML option.
6
+ - Slightly speed up `bss` disassembly for projects over thousands of subsegments in the same top-level segment.
7
+
3
8
  ### 0.32.2
4
9
 
5
10
  * Fix jumptable labels not being properly formatted with the given `symbol_name_format`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splat64
3
- Version: 0.32.2
3
+ Version: 0.32.3
4
4
  Summary: A binary splitting tool to assist with decompilation and modding projects
5
5
  Project-URL: Repository, https://github.com/ethteck/splat
6
6
  Project-URL: Issues, https://github.com/ethteck/splat/issues
@@ -76,7 +76,7 @@ The brackets corresponds to the optional dependencies to install while installin
76
76
  If you use a `requirements.txt` file in your repository, then you can add this library with the following line:
77
77
 
78
78
  ```txt
79
- splat64[mips]>=0.32.2,<1.0.0
79
+ splat64[mips]>=0.32.3,<1.0.0
80
80
  ```
81
81
 
82
82
  ### Optional dependencies
@@ -21,7 +21,7 @@ The brackets corresponds to the optional dependencies to install while installin
21
21
  If you use a `requirements.txt` file in your repository, then you can add this library with the following line:
22
22
 
23
23
  ```txt
24
- splat64[mips]>=0.32.2,<1.0.0
24
+ splat64[mips]>=0.32.3,<1.0.0
25
25
  ```
26
26
 
27
27
  ### Optional dependencies
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "splat64"
3
3
  # Should be synced with src/splat/__init__.py
4
- version = "0.32.2"
4
+ version = "0.32.3"
5
5
  description = "A binary splitting tool to assist with decompilation and modding projects"
6
6
  readme = "README.md"
7
7
  license = {file = "LICENSE"}
@@ -1,7 +1,7 @@
1
1
  __package_name__ = __name__
2
2
 
3
3
  # Should be synced with pyproject.toml
4
- __version__ = "0.32.2"
4
+ __version__ = "0.32.3"
5
5
  __author__ = "ethteck"
6
6
 
7
7
  from . import util as util
@@ -60,7 +60,9 @@ class CommonSegBss(CommonSegData):
60
60
  f"Segment '{self.name}' (type '{self.type}') requires a vram address. Got '{self.vram_start}'"
61
61
  )
62
62
 
63
- next_subsegment = self.parent.get_next_subsegment_for_ram(self.vram_start)
63
+ next_subsegment = self.parent.get_next_subsegment_for_ram(
64
+ self.vram_start, self.index_within_group
65
+ )
64
66
  if next_subsegment is None:
65
67
  bss_end = self.get_most_parent().vram_end
66
68
  else:
@@ -270,6 +270,8 @@ class CommonSegCode(CommonSegGroup):
270
270
  sibling.siblings[segment.get_linker_section_linksection()] = segment
271
271
 
272
272
  ret = self._insert_all_auto_sections(ret, base_segments, readonly_before)
273
+ for i, seg in enumerate(ret):
274
+ seg.index_within_group = i
273
275
 
274
276
  return ret
275
277
 
@@ -110,11 +110,16 @@ class CommonSegGroup(CommonSegment):
110
110
  self.special_vram_segment = True
111
111
  segment.is_auto_segment = is_auto_segment
112
112
 
113
+ segment.index_within_group = len(ret)
114
+
113
115
  ret.append(segment)
114
116
  prev_start = start
115
117
  if end is not None:
116
118
  last_rom_end = end
117
119
 
120
+ for i, seg in enumerate(ret):
121
+ seg.index_within_group = i
122
+
118
123
  return ret
119
124
 
120
125
  @property
@@ -165,13 +170,17 @@ class CommonSegGroup(CommonSegment):
165
170
  return sub
166
171
  return None
167
172
 
168
- def get_next_subsegment_for_ram(self, addr: int) -> Optional[Segment]:
173
+ def get_next_subsegment_for_ram(
174
+ self, addr: int, current_subseg_index: Optional[int]
175
+ ) -> Optional[Segment]:
169
176
  """
170
177
  Returns the first subsegment which comes after the specified address,
171
178
  or None in case this address belongs to the last subsegment of this group
172
179
  """
173
180
 
174
- for sub in self.subsegments:
181
+ start = current_subseg_index if current_subseg_index is not None else 0
182
+
183
+ for sub in self.subsegments[start:]:
175
184
  if sub.vram_start is None:
176
185
  continue
177
186
  assert isinstance(sub.vram_start, int)
@@ -255,7 +255,7 @@ class Segment:
255
255
 
256
256
  @staticmethod
257
257
  def parse_suggestion_rodata_section_start(
258
- yaml: Union[dict, list]
258
+ yaml: Union[dict, list],
259
259
  ) -> Optional[bool]:
260
260
  if isinstance(yaml, dict):
261
261
  suggestion_rodata_section_start = yaml.get(
@@ -354,6 +354,8 @@ class Segment:
354
354
  # Is an automatic segment, generated automatically or declared on the yaml by the user
355
355
  self.is_auto_segment: bool = False
356
356
 
357
+ self.index_within_group: Optional[int] = None
358
+
357
359
  if self.rom_start is not None and self.rom_end is not None:
358
360
  if self.rom_start > self.rom_end:
359
361
  log.error(
@@ -554,10 +554,10 @@ def _parse_yaml(
554
554
  detect_redundant_function_end=p.parse_opt(
555
555
  "detect_redundant_function_end", bool, True
556
556
  ),
557
- # Command line argument takes precedence over yaml option
558
- disassemble_all=(
559
- disasm_all if disasm_all else p.parse_opt("disassemble_all", bool, False)
560
- ),
557
+ # Setting either option will produce a full disassembly,
558
+ # but we still have to check the yaml option first to avoid leaving option unparsed,
559
+ # because splat would complain about an unrecognized yaml option otherwise.
560
+ disassemble_all=p.parse_opt("disassemble_all", bool, False) or disasm_all,
561
561
  global_vram_start=p.parse_optional_opt("global_vram_start", int),
562
562
  global_vram_end=p.parse_optional_opt("global_vram_end", int),
563
563
  use_gp_rel_macro_nonmatching=p.parse_opt(
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes