Files
BFM-decomp/docs/struct-twins.md
T

9.2 KiB

Struct twins

tools/type_census.py --check-structs reads this file (TWINS_DOC). G62: layout twins without evidence stay apart.

  • ## Twins: one ### <lhash> section per tier-2 duplicate row (plain or <lhash>:opaque) kept as separate types, with a names: line (the row's names, as a set) and a cause: line naming at least one address (8 hex digits or 0x…). A listed row does not count in dup_classes. An absent lhash, a name-set mismatch or an addressless cause counts in twins_stale.
  • ## Dead kept: - Name — cause bullets; a listed canon name does not count in dead. A name that is not dead or no longer defined in the canonical headers counts in twins_stale.

Twins

f1dcb3a42fc8

names: Rec_801825D8, Rec_80184FF8, S8012C658, S8017FF9C_sp cause: 4 names (20 B, all members placeholders) bound to 5 distinct objects, none bound to two names: ov_SC02_011/0x801890C8:sp, ov_SC04_003/0x8017FF9C:sp, ov_SC06_029/0x801825D8:rec, ov_SC06_029/0x80184FF8:rec, shared/ov/0x8012C658:sp; full list: tools/struct_twins.py --show f1dcb3a42fc8

  • Rec_801825D8: 1 obj — ov_SC06_029/0x801825D8:rec
  • Rec_80184FF8: 1 obj — ov_SC06_029/0x80184FF8:rec
  • S8012C658: 2 obj — ov_SC02_011/0x801890C8:sp, shared/ov/0x8012C658:sp
  • S8017FF9C_sp: 1 obj — ov_SC04_003/0x8017FF9C:sp

b519bad67107:opaque

names: Local_8017EE34, Local_80181C84, Local_801870E8 cause: 3 names (20 B, all members placeholders) bound to 4 distinct objects, none bound to two names: ov_SC03_105/0x8017EE34:local, ov_SC03_105/0x80181C84:local, ov_SC03_105/0x80183D38:local, ov_SC03_105/0x801870E8:local; full list: tools/struct_twins.py --show b519bad67107:opaque

  • Local_8017EE34: 2 obj — ov_SC03_105/0x8017EE34:local, ov_SC03_105/0x80183D38:local
  • Local_80181C84: 1 obj — ov_SC03_105/0x80181C84:local
  • Local_801870E8: 1 obj — ov_SC03_105/0x801870E8:local

c80fac242f04

names: Mat801A8E34, Mat_80183C9C, Mtx_A8CE0 cause: 3 names (32 B, all members placeholders) bound to 4 distinct objects, none bound to two names: md_SC07_004/0x801A8CE0:mtx, md_SC07_004/0x801A8E34:buf, ov_SC06_000/0x80183C9C:mat; full list: tools/struct_twins.py --show c80fac242f04

  • Mat801A8E34: 1 obj — md_SC07_004/0x801A8E34:buf
  • Mat_80183C9C: 1 obj — ov_SC06_000/0x80183C9C:mat
  • Mtx_A8CE0: 2 obj — md_SC07_004/0x801A8CE0:mtx, attribute(ret)

9ba0ae408dd4

names: Drv_8017E330, Drv_8017E550, Drv_8017E878 cause: 3 names (56 B, all members placeholders) bound to 6 distinct objects, none bound to two names: 0x801F80E4, ov_SC06_006/0x8017E330:p, ov_SC06_006/0x8017E550:a0, ov_SC06_006/0x8017E550:p, ov_SC06_006/0x8017E878:a0, ov_SC06_006/0x8017E878:p; full list: tools/struct_twins.py --show 9ba0ae408dd4

  • Drv_8017E330: 2 obj — 0x801F80E4, ov_SC06_006/0x8017E330:p
  • Drv_8017E550: 2 obj — ov_SC06_006/0x8017E550:a0, ov_SC06_006/0x8017E550:p
  • Drv_8017E878: 2 obj — ov_SC06_006/0x8017E878:a0, ov_SC06_006/0x8017E878:p

8944ddcbe454:opaque

names: Blk36_800296F8, Blob36, SW20 cause: 3 names (36 B, all members placeholders) bound to 6 distinct objects, none bound to two names: 0x800298BC(arg0), 0x80078E50, 0x80079204, 0x800D4B70, main/0x800296F8:arg0, src/resident/0x800D185C:arg0; full list: tools/struct_twins.py --show 8944ddcbe454:opaque

  • Blk36_800296F8: 3 obj — 0x800298BC(arg0), 0x80079204, main/0x800296F8:arg0
  • Blob36: 2 obj — 0x80078E50, src/resident/0x800D185C:arg0
  • SW20: 1 obj — 0x800D4B70

c2ba48790859

names: W8, W8_, func_8002EE64_b cause: 3 names (1 B, all members placeholders) bound to 4 distinct objects, none bound to two names: 0x80076242, 0x80076243, main/0x8002EE64:b; full list: tools/struct_twins.py --show c2ba48790859

  • W8: 2 obj — 0x80076242, 0x80076243
  • W8_: 1 obj — D_80076242_
  • func_8002EE64_b: 1 obj — main/0x8002EE64:b

ac91ae2d8aa0:opaque

names: S800D22E4, vec cause: 2 names (28 B, all members placeholders) bound to 77 distinct objects, none bound to two names: 0x800D22E4(arg0), 0x8012931C(arg0), 0x8012AD80(arg0), 0x80185238(arg0), 0x801879E8(arg0), md_SC07_004/0x801A72DC:a0, md_SC07_004/0x801ABC8C:a0, md_SC07_004/0x801AC234:a0 …; full list: tools/struct_twins.py --show ac91ae2d8aa0:opaque

  • S800D22E4: 1 obj — 0x800D22E4(arg0)
  • vec: 76 obj — 0x8012931C(arg0), 0x8012AD80(arg0), 0x80185238(arg0), 0x801879E8(arg0), md_SC07_004/0x801A72DC:a0, md_SC07_004/0x801ABC8C:a0, md_SC07_004/0x801AC234:a0, md_SC07_004/0x801AC940:a1 (+68)

82c6e3650290:opaque

names: Gte8_8017F2FC, Rec_80180808 cause: 2 names (8 B, all members placeholders) bound to 3 distinct objects, none bound to two names: 0x801B1B50, ov_SC02_021/0x8017F2FC:sp10, ov_SC06_025/0x80180808:rec; full list: tools/struct_twins.py --show 82c6e3650290:opaque

  • Gte8_8017F2FC: 1 obj — ov_SC02_021/0x8017F2FC:sp10
  • Rec_80180808: 2 obj — 0x801B1B50, ov_SC06_025/0x80180808:rec

aa66418d079c:opaque

names: Blk16_80126940, Pos16_8018743C cause: 2 names (16 B, all members placeholders) bound to 3 distinct objects, none bound to two names: ov_SC06_000/0x80181AB4:sp10, ov_SC06_029/0x8018743C:from, ov_SC06_029/0x8018743C:to; full list: tools/struct_twins.py --show aa66418d079c:opaque

  • Blk16_80126940: 1 obj — ov_SC06_000/0x80181AB4:sp10
  • Pos16_8018743C: 2 obj — ov_SC06_029/0x8018743C:from, ov_SC06_029/0x8018743C:to

1dd90dc86138

names: Ent80183F28, Ent_80184058 cause: 2 names (236 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x80183F28(arg0), 0x80184058(arg0); full list: tools/struct_twins.py --show 1dd90dc86138

  • Ent80183F28: 1 obj — 0x80183F28(arg0)
  • Ent_80184058: 1 obj — 0x80184058(arg0)

d60a32e09c91

names: P8, S72 cause: 2 names (8 B, all members placeholders) bound to 5 distinct objects, none bound to two names: 0x80185D28, 0x80185D2A, 0x80185D2C, 0x80185D2E, 0x80185D72; full list: tools/struct_twins.py --show d60a32e09c91

  • P8: 4 obj — 0x80185D28, 0x80185D2A, 0x80185D2C, 0x80185D2E
  • S72: 1 obj — 0x80185D72

08944be666a1

names: Sub8017EBC4, Sub_80181BA0 cause: 2 names (20 B, all members placeholders) bound to 3 distinct objects, none bound to two names: ov_SC04_011/0x80181BA0:p, ov_SC06_029/0x8017EBC4:func_8012C1B8, ov_SC06_029/0x8017EBC4:sp; full list: tools/struct_twins.py --show 08944be666a1

  • Sub8017EBC4: 2 obj — ov_SC06_029/0x8017EBC4:func_8012C1B8, ov_SC06_029/0x8017EBC4:sp
  • Sub_80181BA0: 1 obj — ov_SC04_011/0x80181BA0:p

474e1fa40ab6

names: Actor_8017E550, Actor_8017E878 cause: 2 names (156 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x8017E550(arg0), 0x8017E878(arg0); full list: tools/struct_twins.py --show 474e1fa40ab6

  • Actor_8017E550: 1 obj — 0x8017E550(arg0)
  • Actor_8017E878: 1 obj — 0x8017E878(arg0)

12fe36cd7e07

names: Struct801E79D8, Struct801EF318 cause: 2 names (16 B, all members placeholders) bound to 3 distinct objects, none bound to two names: 0x801E2498, 0x801E79D8, 0x801EF318; full list: tools/struct_twins.py --show 12fe36cd7e07

  • Struct801E79D8: 1 obj — 0x801E79D8
  • Struct801EF318: 2 obj — 0x801E2498, 0x801EF318

c6e867e46e6f

names: V16x4, Vec4s16_8018423C cause: 2 names (8 B, all members placeholders) bound to 7 distinct objects, none bound to two names: 0x80188984, ov_SC03_105/0x8018423C:out, ov_SC03_105/0x8018423C:pos, ov_SC03_105/0x8018423C:tmp, ov_SC03_105/0x8018423C:vec, ov_SC06_025/0x8017F664:a, ov_SC06_025/0x8017F664:b; full list: tools/struct_twins.py --show c6e867e46e6f

  • V16x4: 3 obj — 0x80188984, ov_SC06_025/0x8017F664:a, ov_SC06_025/0x8017F664:b
  • Vec4s16_8018423C: 4 obj — ov_SC03_105/0x8018423C:out, ov_SC03_105/0x8018423C:pos, ov_SC03_105/0x8018423C:tmp, ov_SC03_105/0x8018423C:vec

64db0612c4d4

names: Work_801832E0, Work_80183634 cause: 2 names (236 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x801832E0(arg0), 0x80183634(arg0); full list: tools/struct_twins.py --show 64db0612c4d4

  • Work_801832E0: 1 obj — 0x801832E0(arg0)
  • Work_80183634: 1 obj — 0x80183634(arg0)

cc89b444f3c5

names: EntA, Ent_SC07_010_8017AE2C cause: 2 names (256 B, all members placeholders) bound to 4 distinct objects, none bound to two names: ov_SC07_010/0x8017E5B8:func_8012C588, ov_SC07_010/0x8017E5B8:p, ov_SC07_010/0x8017E70C:func_8012C588, ov_SC07_010/0x8017E70C:p; full list: tools/struct_twins.py --show cc89b444f3c5

  • EntA: 2 obj — ov_SC07_010/0x8017E5B8:func_8012C588, ov_SC07_010/0x8017E5B8:p
  • Ent_SC07_010_8017AE2C: 2 obj — ov_SC07_010/0x8017E70C:func_8012C588, ov_SC07_010/0x8017E70C:p

2816963b1259

names: Obj800D302C, Struct800D2FEC cause: 2 names (44 B, all members placeholders) bound to 2 distinct objects, none bound to two names: 0x800D2FEC(arg0), 0x800D302C(arg0); full list: tools/struct_twins.py --show 2816963b1259

  • Obj800D302C: 1 obj — 0x800D302C(arg0)
  • Struct800D2FEC: 1 obj — 0x800D2FEC(arg0)

2e57efa3d051

names: Voice336A8, VoiceF80 cause: 2 names (72 B, all members placeholders) bound to 4 distinct objects, none bound to two names: 0x800A4988, main/0x80030F80:e, main/0x80030F80:i, main/0x800336A8:vo; full list: tools/struct_twins.py --show 2e57efa3d051

  • Voice336A8: 2 obj — 0x800A4988, main/0x800336A8:vo
  • VoiceF80: 2 obj — main/0x80030F80:e, main/0x80030F80:i

Dead kept