mustflow 2.116.1 → 2.116.3
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.
- package/package.json +1 -1
- package/templates/default/i18n.toml +72 -6
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +37 -11
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/SKILL.md +477 -0
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/compiler-diagnostics-abi-linker-checklist.md +778 -0
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/compiler-generators-properties-checklist.md +501 -0
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/compiler-test-strategy-differential-checklist.md +498 -0
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/debug-symbol-symbolication-checklist.md +412 -0
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/ir-design-ssa-pass-pipeline-checklist.md +759 -0
- package/templates/default/locales/en/.mustflow/skills/compiler-engineering-review/references/miscompile-reduction-ir-checklist.md +434 -0
- package/templates/default/locales/en/.mustflow/skills/cross-platform-filesystem-safety/SKILL.md +55 -36
- package/templates/default/locales/en/.mustflow/skills/cross-platform-filesystem-safety/references/path-containment-handle-checklist.md +251 -0
- package/templates/default/locales/en/.mustflow/skills/file-upload-security-review/SKILL.md +133 -32
- package/templates/default/locales/en/.mustflow/skills/file-upload-security-review/references/file-upload-parser-ssrf-resource-checklist.md +306 -0
- package/templates/default/locales/en/.mustflow/skills/formal-verification-review/SKILL.md +310 -0
- package/templates/default/locales/en/.mustflow/skills/formal-verification-review/references/formal-concurrency-model-checking-smt-checklist.md +457 -0
- package/templates/default/locales/en/.mustflow/skills/formal-verification-review/references/formal-contracts-modeling-checklist.md +434 -0
- package/templates/default/locales/en/.mustflow/skills/formal-verification-review/references/formal-memory-bounds-ci-checklist.md +509 -0
- package/templates/default/locales/en/.mustflow/skills/fuzz-harness-review/SKILL.md +439 -0
- package/templates/default/locales/en/.mustflow/skills/fuzz-harness-review/references/fuzz-harness-campaign-checklist.md +379 -0
- package/templates/default/locales/en/.mustflow/skills/fuzz-harness-review/references/fuzz-oracle-triage-ci-checklist.md +307 -0
- package/templates/default/locales/en/.mustflow/skills/idempotency-integrity-review/SKILL.md +48 -28
- package/templates/default/locales/en/.mustflow/skills/idempotency-integrity-review/references/operation-ordering-stale-write-checklist.md +259 -0
- package/templates/default/locales/en/.mustflow/skills/input-boundary-validation-review/SKILL.md +329 -0
- package/templates/default/locales/en/.mustflow/skills/input-boundary-validation-review/references/input-boundary-security-checklist.md +319 -0
- package/templates/default/locales/en/.mustflow/skills/input-event-synchronization-review/SKILL.md +306 -0
- package/templates/default/locales/en/.mustflow/skills/input-event-synchronization-review/references/input-session-state-checklist.md +298 -0
- package/templates/default/locales/en/.mustflow/skills/input-event-synchronization-review/references/remote-input-transport-interaction-checklist.md +328 -0
- package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/SKILL.md +353 -0
- package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-diagnostics-recovery-checklist.md +267 -0
- package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-execution-closure-performance-checklist.md +428 -0
- package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-gc-verification-checklist.md +457 -0
- package/templates/default/locales/en/.mustflow/skills/interpreter-engineering-review/references/interpreter-semantics-runtime-checklist.md +391 -0
- package/templates/default/locales/en/.mustflow/skills/modal-loop-reentrancy-review/SKILL.md +294 -0
- package/templates/default/locales/en/.mustflow/skills/modal-loop-reentrancy-review/references/modal-loop-reentrancy-checklist.md +290 -0
- package/templates/default/locales/en/.mustflow/skills/modal-loop-reentrancy-review/references/nested-modal-state-lifetime-checklist.md +297 -0
- package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/SKILL.md +252 -0
- package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/references/dns-network-resolution-checklist.md +394 -0
- package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/references/language-symbol-resolution-checklist.md +282 -0
- package/templates/default/locales/en/.mustflow/skills/name-resolution-integrity-review/references/module-package-loader-resolution-checklist.md +352 -0
- package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/SKILL.md +103 -17
- package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/cst-ast-lowering-checklist.md +260 -0
- package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/lexer-tokenization-checklist.md +397 -0
- package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/tree-serialization-compatibility-checklist.md +164 -0
- package/templates/default/locales/en/.mustflow/skills/parser-engineering-review/references/tree-traversal-rewrite-checklist.md +209 -0
- package/templates/default/locales/en/.mustflow/skills/race-condition-review/SKILL.md +68 -11
- package/templates/default/locales/en/.mustflow/skills/race-condition-review/references/race-reproduction-memory-model-checklist.md +268 -0
- package/templates/default/locales/en/.mustflow/skills/routes.toml +151 -0
- package/templates/default/locales/en/.mustflow/skills/session-handoff-integrity-review/SKILL.md +343 -0
- package/templates/default/locales/en/.mustflow/skills/session-handoff-integrity-review/references/session-auth-stream-resume-checklist.md +413 -0
- package/templates/default/locales/en/.mustflow/skills/session-handoff-integrity-review/references/session-handoff-protocol-checklist.md +485 -0
- package/templates/default/locales/en/.mustflow/skills/two-phase-transition-integrity-review/SKILL.md +267 -0
- package/templates/default/locales/en/.mustflow/skills/two-phase-transition-integrity-review/references/admission-decision-recovery-checklist.md +308 -0
- package/templates/default/locales/en/.mustflow/skills/two-phase-transition-integrity-review/references/two-phase-transition-checklist.md +229 -0
- package/templates/default/locales/en/.mustflow/skills/ui-dispatch-lifecycle-review/SKILL.md +300 -0
- package/templates/default/locales/en/.mustflow/skills/ui-dispatch-lifecycle-review/references/ui-affinity-event-loop-checklist.md +277 -0
- package/templates/default/locales/en/.mustflow/skills/ui-dispatch-lifecycle-review/references/ui-dispatch-lifecycle-checklist.md +292 -0
- package/templates/default/manifest.toml +115 -1
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
# Debug Symbols, Stripping, and Symbolication Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist for debug-information generation, separated symbol artifacts, stripping,
|
|
4
|
+
symbolication, crash capture, unwind evidence, dead-code elimination, identical-code folding, LTO,
|
|
5
|
+
and symbol-store retention.
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
1. [Symbol asset taxonomy](#symbol-asset-taxonomy)
|
|
10
|
+
2. [Binary identity and matching keys](#binary-identity-and-matching-keys)
|
|
11
|
+
3. [Artifact lineage](#artifact-lineage)
|
|
12
|
+
4. [ELF separated debug information](#elf-separated-debug-information)
|
|
13
|
+
5. [PE and PDB artifacts](#pe-and-pdb-artifacts)
|
|
14
|
+
6. [Mach-O and dSYM artifacts](#mach-o-and-dsym-artifacts)
|
|
15
|
+
7. [Public private and source assets](#public-private-and-source-assets)
|
|
16
|
+
8. [Crash capture boundary](#crash-capture-boundary)
|
|
17
|
+
9. [Address and frame semantics](#address-and-frame-semantics)
|
|
18
|
+
10. [Immutable symbol store](#immutable-symbol-store)
|
|
19
|
+
11. [Stripping policy](#stripping-policy)
|
|
20
|
+
12. [Elimination pipeline](#elimination-pipeline)
|
|
21
|
+
13. [Reachability roots](#reachability-roots)
|
|
22
|
+
14. [Identical-code folding](#identical-code-folding)
|
|
23
|
+
15. [LTO identity and ABI](#lto-identity-and-abi)
|
|
24
|
+
16. [Optimized debug limits](#optimized-debug-limits)
|
|
25
|
+
17. [Cross-platform artifact matrix](#cross-platform-artifact-matrix)
|
|
26
|
+
18. [Symbolication canary](#symbolication-canary)
|
|
27
|
+
19. [Failure matrix](#failure-matrix)
|
|
28
|
+
20. [Invariants](#invariants)
|
|
29
|
+
21. [Skill handoffs](#skill-handoffs)
|
|
30
|
+
|
|
31
|
+
## Symbol asset taxonomy
|
|
32
|
+
|
|
33
|
+
Do not model symbols as one Boolean. Track separate assets and consumers:
|
|
34
|
+
|
|
35
|
+
| Asset | Primary consumer | Contract |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| Loader-visible exports and imports | Dynamic loader | Runtime binding names, versions, ordinals, dependencies, and relocations. |
|
|
38
|
+
| Regular link-time symbols | Static linker and binary tools | Local and global definitions, undefined references, archive indexes, values, sizes, and sections. |
|
|
39
|
+
| Public names | External debugger or profiler | Intentionally shareable function and data identities without private implementation details. |
|
|
40
|
+
| Line tables | Symbolicator | Address-to-file-and-line mapping with inline provenance where available. |
|
|
41
|
+
| Full debug information | Debugger and dump analyzer | Types, variables, lexical scopes, call-site data, and source provenance. |
|
|
42
|
+
| Unwind information | Runtime unwinder and stack walker | Frame recovery, saved registers, personality, and exception cleanup metadata. |
|
|
43
|
+
| Source bundle or source index | Debugger and responder | Exact source, generated source, patched dependency source, and path mapping for the compiled inputs. |
|
|
44
|
+
| Link provenance | Build and release diagnostics | Link map, selected members, collected sections, ICF or LTO decisions, and final layout. |
|
|
45
|
+
|
|
46
|
+
Removing one asset does not imply the others disappeared. A stripped image can retain loader-visible
|
|
47
|
+
names and unwind records, while a private debug file can exist without usable source or complete
|
|
48
|
+
unwind coverage.
|
|
49
|
+
|
|
50
|
+
Define retention, access control, privacy, and support lifetime independently for each asset class.
|
|
51
|
+
|
|
52
|
+
## Binary identity and matching keys
|
|
53
|
+
|
|
54
|
+
Match symbol artifacts to the exact final binary identity, not to a commit, package version, filename,
|
|
55
|
+
job number, or rebuild claim. Record:
|
|
56
|
+
|
|
57
|
+
- platform-native binary identity for every image and architecture slice;
|
|
58
|
+
- image architecture, object format, and loadable module identity;
|
|
59
|
+
- debug-artifact identity and any age, revision, or checksum component;
|
|
60
|
+
- final linked-image digest;
|
|
61
|
+
- load address or relocation slide from the crash;
|
|
62
|
+
- symbolicator and parser version;
|
|
63
|
+
- source-bundle tree digest;
|
|
64
|
+
- build, link, strip, and packaging lineage.
|
|
65
|
+
|
|
66
|
+
The same source revision can produce different layouts after toolchain, link order, LTO, ICF, feature,
|
|
67
|
+
timestamp, or environment changes. Never reconstruct release symbols by rebuilding and assuming the
|
|
68
|
+
addresses stayed equal.
|
|
69
|
+
|
|
70
|
+
Universal or multi-architecture artifacts require identity per slice. A matching container filename
|
|
71
|
+
does not prove that the crash architecture and debug slice match.
|
|
72
|
+
|
|
73
|
+
## Artifact lineage
|
|
74
|
+
|
|
75
|
+
Build the debug package from the exact final-link lineage:
|
|
76
|
+
|
|
77
|
+
1. preserve the final unstripped linked image or an equivalent immutable source artifact;
|
|
78
|
+
2. derive separated debug information from that image under the platform contract;
|
|
79
|
+
3. derive the distributable stripped image from the same lineage;
|
|
80
|
+
4. attach or record the debug association and matching key;
|
|
81
|
+
5. validate image, debug artifact, architecture, source bundle, and association metadata together;
|
|
82
|
+
6. publish the immutable set before deleting intermediate artifacts;
|
|
83
|
+
7. verify retrieval and symbolication from outside the build workspace.
|
|
84
|
+
|
|
85
|
+
Record each artifact's digest and parent. A build log saying upload succeeded does not prove that the
|
|
86
|
+
uploaded file contains usable debug information or belongs to the distributed image.
|
|
87
|
+
|
|
88
|
+
## ELF separated debug information
|
|
89
|
+
|
|
90
|
+
For ELF-family artifacts, keep these surfaces distinct:
|
|
91
|
+
|
|
92
|
+
- regular and dynamic symbol tables;
|
|
93
|
+
- line, type, range, location, call-site, and string debug sections;
|
|
94
|
+
- unwind and exception-frame sections;
|
|
95
|
+
- build identity and separated-debug association;
|
|
96
|
+
- skeleton units and external split-debug units;
|
|
97
|
+
- packaged split-debug indexes;
|
|
98
|
+
- source paths and compilation-directory remapping.
|
|
99
|
+
|
|
100
|
+
When split debug information is enabled, external units are release assets rather than disposable
|
|
101
|
+
build cache. Package every unit required by the final image, preserve the index used to find them,
|
|
102
|
+
and bind that package to the final binary identity.
|
|
103
|
+
|
|
104
|
+
Validate the separated-debug association and its checksum or equivalent integrity mechanism. Do not
|
|
105
|
+
accept a debug file merely because a debugger finds one at a conventional path.
|
|
106
|
+
|
|
107
|
+
## PE and PDB artifacts
|
|
108
|
+
|
|
109
|
+
For PE and PDB-family artifacts, preserve:
|
|
110
|
+
|
|
111
|
+
- executable or library image identity;
|
|
112
|
+
- PDB name, unique signature, and age or revision component;
|
|
113
|
+
- image debug-directory reference;
|
|
114
|
+
- architecture and linker mode;
|
|
115
|
+
- complete versus partial or build-workspace-dependent debug information;
|
|
116
|
+
- public versus private symbol content;
|
|
117
|
+
- object and library dependencies required by any non-self-contained debug mode;
|
|
118
|
+
- source indexing or source-link metadata;
|
|
119
|
+
- runtime and compiler library identity relevant to dump analysis.
|
|
120
|
+
|
|
121
|
+
A PDB that depends on build-machine objects and libraries is not a durable release symbol artifact
|
|
122
|
+
unless those inputs are retained and retrievable under the same lifetime policy. Prefer a
|
|
123
|
+
self-contained release artifact for remote crash analysis.
|
|
124
|
+
|
|
125
|
+
Do not reuse one PDB across binaries built with different optimization, folding, link, or debug
|
|
126
|
+
options. The identity must reject the mismatch even if the source revision and output filename agree.
|
|
127
|
+
|
|
128
|
+
## Mach-O and dSYM artifacts
|
|
129
|
+
|
|
130
|
+
For Mach-O-family artifacts, preserve:
|
|
131
|
+
|
|
132
|
+
- UUID for every architecture slice;
|
|
133
|
+
- dSYM bundle and matching debug slice;
|
|
134
|
+
- linked image and distribution transformations;
|
|
135
|
+
- load address and slide for each image;
|
|
136
|
+
- bitcode or provider-side rebuild boundary when applicable to the supported release path;
|
|
137
|
+
- source mapping and generated-source bundle;
|
|
138
|
+
- symbol upload receipt tied to UUID, not only application version.
|
|
139
|
+
|
|
140
|
+
Collect and publish the dSYM from the archived release lineage rather than recovering a similarly
|
|
141
|
+
named artifact from an unrelated temporary build directory. Retain symbols for at least the lifetime
|
|
142
|
+
of supported and still-reporting deployed binaries.
|
|
143
|
+
|
|
144
|
+
## Public private and source assets
|
|
145
|
+
|
|
146
|
+
Separate audiences:
|
|
147
|
+
|
|
148
|
+
- public names sufficient for customer-visible stack labels;
|
|
149
|
+
- line-level symbols for internal symbolication;
|
|
150
|
+
- full private types and variables for controlled dump analysis;
|
|
151
|
+
- source bundles and generated inputs for responders;
|
|
152
|
+
- raw crash data and memory dumps with their own privacy boundary.
|
|
153
|
+
|
|
154
|
+
A public symbol artifact can intentionally omit local names, types, variables, and source lines. Do
|
|
155
|
+
not use it as the only internal crash-analysis artifact.
|
|
156
|
+
|
|
157
|
+
Debug information usually records source paths and metadata rather than the complete source body.
|
|
158
|
+
Preserve exact generated sources, patched dependencies, code-generation outputs, and source tree
|
|
159
|
+
digest. Normalize build paths to prevent usernames, workspace roots, and cache locations from leaking,
|
|
160
|
+
while retaining a reversible mapping for authorized responders.
|
|
161
|
+
|
|
162
|
+
Apply separate access controls and retention to private symbols, source, and dumps. A public symbol
|
|
163
|
+
server must not become a side channel for proprietary names, paths, types, or customer data.
|
|
164
|
+
|
|
165
|
+
## Crash capture boundary
|
|
166
|
+
|
|
167
|
+
Keep the in-process crash path minimal. At the fault boundary, prefer recording:
|
|
168
|
+
|
|
169
|
+
- raw program counter and register state;
|
|
170
|
+
- stack memory or platform dump artifact;
|
|
171
|
+
- exception, signal, or fault metadata;
|
|
172
|
+
- module list with binary identity, architecture, load address, and mapped range;
|
|
173
|
+
- thread identities and minimal scheduling context;
|
|
174
|
+
- whether each address is a precise faulting instruction, return address, sampled instruction, or
|
|
175
|
+
uncertain frame candidate;
|
|
176
|
+
- capture-format version and truncation status.
|
|
177
|
+
|
|
178
|
+
Do not depend on general allocation, loader traversal, demangling, filesystem discovery, networking,
|
|
179
|
+
or full symbolication inside a corrupted or reentrant process unless the platform contract proves a
|
|
180
|
+
safe bounded path. Perform symbol lookup and source expansion in another process or service.
|
|
181
|
+
|
|
182
|
+
If dynamic modules change during normal execution, maintain a separately synchronized module ledger
|
|
183
|
+
before crashes rather than discovering the entire set after memory or loader state is damaged.
|
|
184
|
+
|
|
185
|
+
## Address and frame semantics
|
|
186
|
+
|
|
187
|
+
Symbolication must know what each address represents:
|
|
188
|
+
|
|
189
|
+
- precise faulting program counter;
|
|
190
|
+
- return address after a call;
|
|
191
|
+
- sampled instruction pointer;
|
|
192
|
+
- asynchronous unwind candidate;
|
|
193
|
+
- architecture-tagged or signed pointer representation;
|
|
194
|
+
- relocated image-relative or absolute virtual address;
|
|
195
|
+
- inlined call-site chain;
|
|
196
|
+
- folded or aliased function address.
|
|
197
|
+
|
|
198
|
+
Do not apply one unconditional subtraction or adjustment to every address. Return-address adjustment
|
|
199
|
+
is architecture- and unwinder-aware and must not corrupt the precise faulting PC.
|
|
200
|
+
|
|
201
|
+
Preserve every inline frame and mark approximate, unavailable, or ambiguous mappings. One machine
|
|
202
|
+
address can represent several semantic functions after inlining or folding.
|
|
203
|
+
|
|
204
|
+
## Immutable symbol store
|
|
205
|
+
|
|
206
|
+
Treat the symbol store as an immutable identity-indexed database. Store:
|
|
207
|
+
|
|
208
|
+
- platform-native lookup key and architecture;
|
|
209
|
+
- stripped and unstripped image identities where retained;
|
|
210
|
+
- public and private debug artifacts in separate access domains;
|
|
211
|
+
- unwind and source bundles;
|
|
212
|
+
- link map, discarded-section, LTO, and folding provenance;
|
|
213
|
+
- artifact digests and lineage manifest;
|
|
214
|
+
- upload and validation receipts;
|
|
215
|
+
- symbolicator version and normalized canary result;
|
|
216
|
+
- retention and deletion policy tied to deployed-support lifetime.
|
|
217
|
+
|
|
218
|
+
Reject overwrites for an existing binary identity. A corrected upload must create an auditable new
|
|
219
|
+
record or repair transaction without silently replacing evidence used for earlier crash reports.
|
|
220
|
+
|
|
221
|
+
Preserve raw crash addresses so improved symbol parsers and source mappings can reprocess historical
|
|
222
|
+
reports.
|
|
223
|
+
|
|
224
|
+
## Stripping policy
|
|
225
|
+
|
|
226
|
+
Define artifact classes before selecting a stripping operation:
|
|
227
|
+
|
|
228
|
+
- relocatable object or archive that may be linked again;
|
|
229
|
+
- final unstripped linked image;
|
|
230
|
+
- final distributable image;
|
|
231
|
+
- separated private debug file;
|
|
232
|
+
- public symbol artifact;
|
|
233
|
+
- unwind-only or minimal-symbol runtime artifact.
|
|
234
|
+
|
|
235
|
+
Different strip modes remove debug sections, local symbols, relocation-unneeded symbols, or broader
|
|
236
|
+
metadata. A policy safe for the final distributable image can destroy a relocatable input needed for
|
|
237
|
+
later links, partial links, plugin packaging, or post-link analysis.
|
|
238
|
+
|
|
239
|
+
Verify the post-strip runtime export/import surface, unwind coverage, binary identity, separated-debug
|
|
240
|
+
association, and symbolication canary. Do not infer the effect from the option name.
|
|
241
|
+
|
|
242
|
+
## Elimination pipeline
|
|
243
|
+
|
|
244
|
+
Separate deletion stages:
|
|
245
|
+
|
|
246
|
+
| Stage | Primary visibility | Typical decision evidence |
|
|
247
|
+
| --- | --- | --- |
|
|
248
|
+
| Translation-unit optimization | One compilation unit or language module | IR pass trace and per-unit output. |
|
|
249
|
+
| Whole-program or link-time optimization | Cross-module IR and linker-provided liveness | Import index, internalization, preserved-symbol set, and backend output. |
|
|
250
|
+
| Archive extraction | Ordered unresolved demand | Member-selection trace and archive index. |
|
|
251
|
+
| Section collection | Final section reference graph and roots | Collected and discarded section report. |
|
|
252
|
+
| Identical-code folding | Eligible semantic or byte-identical sections | Fold groups, safe or aggressive mode, and address aliases. |
|
|
253
|
+
| Stripping | Final artifact metadata policy | Before/after structural field inventory. |
|
|
254
|
+
|
|
255
|
+
Small function or data sections enable finer collection but do not themselves delete content. An
|
|
256
|
+
unextracted archive member never enters the section graph, so a retain marker inside that member
|
|
257
|
+
cannot prove extraction.
|
|
258
|
+
|
|
259
|
+
Persist stage evidence for release-size and missing-registration investigations. Looking only at the
|
|
260
|
+
final binary discards the reason a definition vanished.
|
|
261
|
+
|
|
262
|
+
## Reachability roots
|
|
263
|
+
|
|
264
|
+
String-based lookup, reflection, plugin conventions, external assembly, JIT callbacks, registration
|
|
265
|
+
tables, and provider-required entry points may have no ordinary relocation edge. Declare them through
|
|
266
|
+
the platform's actual preservation contract:
|
|
267
|
+
|
|
268
|
+
- final export allowlist;
|
|
269
|
+
- explicit undefined or required-symbol root;
|
|
270
|
+
- retained section or link-script root;
|
|
271
|
+
- registration anchor referenced by a live object;
|
|
272
|
+
- whole-archive or force-load scope limited to the required library;
|
|
273
|
+
- linker or LTO preserved-symbol list;
|
|
274
|
+
- runtime manifest verified against the final image.
|
|
275
|
+
|
|
276
|
+
Compiler-level "used" evidence does not necessarily create a linker root, and a linker-retain marker
|
|
277
|
+
does not necessarily extract its archive member. Assert both extraction and section survival.
|
|
278
|
+
|
|
279
|
+
Treat whole-archive as a semantic change, not only a size change. It can activate constructors,
|
|
280
|
+
registrars, test hooks, duplicate definitions, and initialization-order behavior.
|
|
281
|
+
|
|
282
|
+
## Identical-code folding
|
|
283
|
+
|
|
284
|
+
Identical-code folding can make distinct semantic functions share one address. Review:
|
|
285
|
+
|
|
286
|
+
- safe versus aggressive eligibility;
|
|
287
|
+
- relocation and section properties included in equivalence;
|
|
288
|
+
- address-significance rules;
|
|
289
|
+
- function-pointer equality assumptions;
|
|
290
|
+
- profiler, debugger, sanitizer, and coverage attribution;
|
|
291
|
+
- exported, registration, or type-identity functions;
|
|
292
|
+
- fold-group evidence and symbolication ambiguity.
|
|
293
|
+
|
|
294
|
+
Do not use function address as a durable type, registration, or protocol identifier when folding is
|
|
295
|
+
permitted. Provide explicit stable IDs.
|
|
296
|
+
|
|
297
|
+
Keep a diagnostic configuration that can disable or narrow folding when address-distinct evidence is
|
|
298
|
+
required, without claiming that diagnostic binaries reproduce the exact release layout.
|
|
299
|
+
|
|
300
|
+
## LTO identity and ABI
|
|
301
|
+
|
|
302
|
+
Whole-program optimization can internalize, eliminate, inline, clone, merge, and change internal
|
|
303
|
+
calling conventions based on its visibility model. Record:
|
|
304
|
+
|
|
305
|
+
- LTO mode and toolchain identities;
|
|
306
|
+
- module summaries and import decisions;
|
|
307
|
+
- export and preserved-symbol inputs from the linker;
|
|
308
|
+
- external assembly, JIT, reflection, and runtime lookup roots;
|
|
309
|
+
- internalization and dead-definition decisions;
|
|
310
|
+
- generated native objects and final link inputs;
|
|
311
|
+
- cache inputs, policy, hits, and invalidation;
|
|
312
|
+
- ABI shims excluded from internal calling-convention freedom.
|
|
313
|
+
|
|
314
|
+
An FFI or plugin entry point should use an explicit stable ABI shim and final-image export contract.
|
|
315
|
+
Source-level visibility or a string lookup convention alone does not prove LTO preservation.
|
|
316
|
+
|
|
317
|
+
Treat ThinLTO or equivalent caches as disposable acceleration, not binary or symbol identity. The
|
|
318
|
+
final linked image produces the symbol-store key.
|
|
319
|
+
|
|
320
|
+
## Optimized debug limits
|
|
321
|
+
|
|
322
|
+
Debug information describes an optimized program, not an idealized source execution history.
|
|
323
|
+
Optimization may:
|
|
324
|
+
|
|
325
|
+
- inline or clone functions;
|
|
326
|
+
- remove or constant-fold variables;
|
|
327
|
+
- split variable locations across ranges;
|
|
328
|
+
- tail-call away physical frames;
|
|
329
|
+
- merge functions or basic blocks;
|
|
330
|
+
- reorder instructions across source lines;
|
|
331
|
+
- produce approximate, missing, or zero line locations;
|
|
332
|
+
- retain a semantic inline chain without a physical call frame.
|
|
333
|
+
|
|
334
|
+
Symbolicators must preserve inline chains and availability state. Do not fabricate a variable value,
|
|
335
|
+
frame, or exact line when metadata says optimized out, unavailable, or ambiguous.
|
|
336
|
+
|
|
337
|
+
Debug-generation options can also change linker optimization defaults on some toolchains. Record the
|
|
338
|
+
complete optimization, folding, dead-code, and debug option set; do not call a binary "the same
|
|
339
|
+
release plus symbols" without structural evidence.
|
|
340
|
+
|
|
341
|
+
## Cross-platform artifact matrix
|
|
342
|
+
|
|
343
|
+
| Contract | ELF family | PE/PDB family | Mach-O family |
|
|
344
|
+
| --- | --- | --- | --- |
|
|
345
|
+
| Runtime names | Dynamic symbol and relocation metadata. | Export, import, and image metadata. | Exported-name, indirect-symbol, stub, and load-command metadata. |
|
|
346
|
+
| Full link-time names | Regular symbols and object/archive indexes. | COFF object and library symbols. | Object symbol and link metadata. |
|
|
347
|
+
| Debug identity | Build identity plus separated-debug association. | Image reference plus PDB signature and age. | UUID per architecture slice. |
|
|
348
|
+
| Detailed debug | Embedded or separated DWARF, including split units. | Private or public PDB with completeness policy. | dSYM debug bundle for matching slice. |
|
|
349
|
+
| Unwind | Platform frame and exception metadata, independent of ordinary debug sections. | Architecture-specific image unwind metadata. | Compact or DWARF unwind and exception metadata. |
|
|
350
|
+
| Load layout | Module base, mapped segments, and relocation slide. | Image base and loaded module range. | Image load address and slide per UUID. |
|
|
351
|
+
|
|
352
|
+
Keep the platform vocabulary explicit. A similarly named artifact on another platform is not evidence
|
|
353
|
+
that identity, public/private content, or unwind semantics match.
|
|
354
|
+
|
|
355
|
+
## Symbolication canary
|
|
356
|
+
|
|
357
|
+
For each release lineage, retain a small known-address fixture or reproducible crash artifact that
|
|
358
|
+
exercises:
|
|
359
|
+
|
|
360
|
+
- top precise program counter;
|
|
361
|
+
- lower return address;
|
|
362
|
+
- at least one inline chain;
|
|
363
|
+
- one public and one private symbol under the intended access policy;
|
|
364
|
+
- source file and line;
|
|
365
|
+
- module identity and load-address normalization;
|
|
366
|
+
- architecture slice;
|
|
367
|
+
- stripped-image to debug-artifact association;
|
|
368
|
+
- source retrieval and path remapping;
|
|
369
|
+
- expected unavailable data in an optimized region.
|
|
370
|
+
|
|
371
|
+
Resolve the canary through the same external symbol-store path used for production analysis. Upload
|
|
372
|
+
success, file existence, or a function-name-only result is insufficient.
|
|
373
|
+
|
|
374
|
+
## Failure matrix
|
|
375
|
+
|
|
376
|
+
| Symptom | Required evidence |
|
|
377
|
+
| --- | --- |
|
|
378
|
+
| Stripped binary still shows function names. | Identify whether names come from loader exports, public names, unwind, regular symbols, or debug data. |
|
|
379
|
+
| PDB or dSYM exists but lines are missing. | Match binary identity and architecture, then inspect public/private content, line tables, source, and optimized availability. |
|
|
380
|
+
| Rebuilt symbols produce plausible wrong lines. | Reject by final binary identity and artifact lineage before symbolication. |
|
|
381
|
+
| Split-debug build loses types after cleanup. | Verify every external unit and packaged index is retained under the binary identity. |
|
|
382
|
+
| Stack top is right but lower frames are shifted. | Distinguish precise PC from return addresses and apply architecture-aware normalization. |
|
|
383
|
+
| Registrar disappears only in release. | Prove archive extraction, section root, LTO preservation, collection, and strip stage separately. |
|
|
384
|
+
| Two functions have one address. | Inspect ICF or optimization fold group and remove address-identity assumptions. |
|
|
385
|
+
| Adding debug output changes binary behavior. | Compare complete optimization, dead-code, folding, and link option sets, not only source. |
|
|
386
|
+
| Symbol upload succeeded but production stacks remain raw. | Run external retrieval and known-address symbolication canary using crash module identities. |
|
|
387
|
+
| Crash handler deadlocks while formatting a stack. | Move loader traversal, allocation, demangling, I/O, and symbol lookup outside the damaged process. |
|
|
388
|
+
|
|
389
|
+
## Invariants
|
|
390
|
+
|
|
391
|
+
- Every symbol claim names the asset class and consumer.
|
|
392
|
+
- Every symbolication lookup uses the exact final binary identity and architecture.
|
|
393
|
+
- Every separated-debug artifact is derived from and verified against one immutable final-link lineage.
|
|
394
|
+
- Every crash module records identity, load range, and address semantics before offline lookup.
|
|
395
|
+
- Every source-line claim has matching debug data and retrievable exact source.
|
|
396
|
+
- Every retention root is proven at archive extraction, LTO, section collection, and final export stages
|
|
397
|
+
that apply.
|
|
398
|
+
- Every strip policy is scoped to an artifact class and checks runtime names, unwind, and debug linkage.
|
|
399
|
+
- Every symbol-store upload is followed by an external retrieval and symbolication canary.
|
|
400
|
+
- Every optimized result reports unavailable and ambiguous state instead of inventing source history.
|
|
401
|
+
|
|
402
|
+
## Skill handoffs
|
|
403
|
+
|
|
404
|
+
- Use `compiler-engineering-review` for the compiler, object, link, debug, and symbolication contract.
|
|
405
|
+
- Use [Diagnostics, ABI, Codegen, and Linker Checklist](compiler-diagnostics-abi-linker-checklist.md)
|
|
406
|
+
for linker resolution, plugin ABI, relocations, visibility, exports, and loader binding.
|
|
407
|
+
- Use `release-publish-change` for actual symbol upload, retention, publication, or release workflow
|
|
408
|
+
changes after the artifact contract is defined.
|
|
409
|
+
- Use `privacy-security-review` or the matching security skill for private symbols, dumps, source,
|
|
410
|
+
paths, and customer-data access control.
|
|
411
|
+
- Use `observability-debuggability-review` for production crash telemetry and responder workflows.
|
|
412
|
+
- Use `test-maintenance` for symbolication fixtures and release canaries.
|