@specy/x86 2.2.1 → 2.3.0
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/dist/index.d.mts +67 -14
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +235 -52
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -259,16 +259,27 @@ type X86EmulatorEventHandler<T extends X86EmulatorEventName> = (event: X86Emulat
|
|
|
259
259
|
* line of source for NASM; the same work in its own module takes single-digit
|
|
260
260
|
* milliseconds, and produces byte-identical output.
|
|
261
261
|
*
|
|
262
|
-
* The object
|
|
263
|
-
* linker expects
|
|
262
|
+
* The object files come back as bytes for the caller to stage wherever the
|
|
263
|
+
* linker expects them, so the linker can keep running inside blink unchanged.
|
|
264
264
|
*/
|
|
265
265
|
interface WasmAssembler {
|
|
266
266
|
assemble(project: X86Project): Promise<WasmAssemblyResult>;
|
|
267
267
|
}
|
|
268
|
+
/** One translation unit's object, and the Project File it was assembled from. */
|
|
269
|
+
type WasmAssemblyUnit = {
|
|
270
|
+
path: string;
|
|
271
|
+
object: Uint8Array;
|
|
272
|
+
};
|
|
268
273
|
type WasmAssemblyResult = {
|
|
269
|
-
/** The assembler's exit status: 0 when
|
|
274
|
+
/** The assembler's exit status: 0 when every translation unit assembled. */status: number; /** What it wrote to stdout, verbatim. */
|
|
270
275
|
stdout: string; /** What it wrote to stderr, verbatim - the diagnostics a parser reads. */
|
|
271
|
-
stderr: string;
|
|
276
|
+
stderr: string;
|
|
277
|
+
/**
|
|
278
|
+
* The objects to link, Entry first. Empty when any translation unit failed:
|
|
279
|
+
* a partial link would report missing symbols that are only missing because
|
|
280
|
+
* the File defining them is the one that did not assemble.
|
|
281
|
+
*/
|
|
282
|
+
units: WasmAssemblyUnit[]; /** The Entry's object, or null when the assembly failed. */
|
|
272
283
|
object: Uint8Array | null;
|
|
273
284
|
};
|
|
274
285
|
//#endregion
|
|
@@ -277,6 +288,14 @@ interface Binary {
|
|
|
277
288
|
file: ResourceSource;
|
|
278
289
|
commands: string;
|
|
279
290
|
}
|
|
291
|
+
interface LinkerBinary {
|
|
292
|
+
file: ResourceSource;
|
|
293
|
+
/**
|
|
294
|
+
* The command that links however many objects the Project's translation units produced. Every
|
|
295
|
+
* path it is given is one this package generated, so none of them needs escaping.
|
|
296
|
+
*/
|
|
297
|
+
link(objects: readonly string[]): string;
|
|
298
|
+
}
|
|
280
299
|
interface DiagnosticLine {
|
|
281
300
|
file?: string;
|
|
282
301
|
line: number;
|
|
@@ -304,7 +323,7 @@ interface AssemblerMode {
|
|
|
304
323
|
* portable C. Fasm is written in x86 assembly and has no such build.
|
|
305
324
|
*/
|
|
306
325
|
assembler?: Binary;
|
|
307
|
-
linker?:
|
|
326
|
+
linker?: LinkerBinary;
|
|
308
327
|
};
|
|
309
328
|
/** Runs outside blink, and takes precedence over `binaries.assembler`. */
|
|
310
329
|
wasmAssembler?: WasmAssembler;
|
|
@@ -322,7 +341,7 @@ declare const assemblers: {
|
|
|
322
341
|
};
|
|
323
342
|
linker: {
|
|
324
343
|
file: URL;
|
|
325
|
-
|
|
344
|
+
link: (objects: readonly string[]) => string;
|
|
326
345
|
};
|
|
327
346
|
};
|
|
328
347
|
};
|
|
@@ -346,7 +365,7 @@ declare const assemblers: {
|
|
|
346
365
|
binaries: {
|
|
347
366
|
linker: {
|
|
348
367
|
file: URL;
|
|
349
|
-
|
|
368
|
+
link: (objects: readonly string[]) => string;
|
|
350
369
|
};
|
|
351
370
|
};
|
|
352
371
|
wasmAssembler: WasmAssembler;
|
|
@@ -357,6 +376,17 @@ declare const DEFAULT_ASSEMBLER_ID: AssemblerId;
|
|
|
357
376
|
declare function nasmDiagnostics(str: string): DiagnosticLine[];
|
|
358
377
|
declare function gnuDiagnostics(str: string): DiagnosticLine[];
|
|
359
378
|
declare function fasmDiagnostics(str: string): DiagnosticLine[];
|
|
379
|
+
/**
|
|
380
|
+
* What `ld` said, as diagnostics. Nothing else in the toolchain reports a symbol that no
|
|
381
|
+
* translation unit defines: NASM accepts every `extern` on the author's word, and the mistake
|
|
382
|
+
* only surfaces here. Without this the link simply failed and the build looked like it had
|
|
383
|
+
* succeeded, leaving the program unrunnable and nothing on screen to say why.
|
|
384
|
+
*
|
|
385
|
+
* `ld` writes a location as `file:line:(section+offset):`, and writes the notes that introduce an
|
|
386
|
+
* error - "in function `_start':" - as lines ending in a colon, which are skipped in favour of
|
|
387
|
+
* the error itself.
|
|
388
|
+
*/
|
|
389
|
+
declare function ldDiagnostics(str: string): DiagnosticLine[];
|
|
360
390
|
/**
|
|
361
391
|
* The one-based column a diagnostic belongs on. NASM reports a line and no
|
|
362
392
|
* column, but it names the thing it is complaining about: `msg' in "symbol
|
|
@@ -522,7 +552,9 @@ declare class BlinkRuntime {
|
|
|
522
552
|
private sourceMap;
|
|
523
553
|
private sourceProject;
|
|
524
554
|
private assembleOnly;
|
|
525
|
-
private
|
|
555
|
+
private assembledObjects;
|
|
556
|
+
/** What the linker said, kept apart from the assembler's log so `ld`'s own parser reads it. */
|
|
557
|
+
private linkerLogs;
|
|
526
558
|
private readonly defaultArgc;
|
|
527
559
|
private readonly defaultArgv;
|
|
528
560
|
private constructor();
|
|
@@ -542,13 +574,21 @@ declare class BlinkRuntime {
|
|
|
542
574
|
private checkProjectWithWasmAssembler;
|
|
543
575
|
private buildProject;
|
|
544
576
|
/**
|
|
545
|
-
* The
|
|
546
|
-
* rather than the assembler's own words.
|
|
577
|
+
* The objects this build's assembler wrote, for the checks that read them
|
|
578
|
+
* rather than the assembler's own words. Empty when the assembly failed, and
|
|
547
579
|
* when the assembler writes an executable directly and never produces one.
|
|
548
|
-
* Read once per build, so a previous build's
|
|
549
|
-
*
|
|
580
|
+
* Read once per build, so a previous build's objects can never stand in for
|
|
581
|
+
* ones that were never written.
|
|
582
|
+
*/
|
|
583
|
+
private takeAssembledObjects;
|
|
584
|
+
/**
|
|
585
|
+
* What the link had to say. A link that failed leaves no program to run, so a build that
|
|
586
|
+
* reported nothing would hand the caller a success it cannot act on - the state stays `Ready`
|
|
587
|
+
* and the next step or run fails with a message about the emulator rather than the mistake.
|
|
588
|
+
* The fallback covers a linker that fails in a way its parser does not recognise, so a failed
|
|
589
|
+
* link is always visible as an error whatever `ld` chose to say about it.
|
|
550
590
|
*/
|
|
551
|
-
private
|
|
591
|
+
private linkDiagnostics;
|
|
552
592
|
/**
|
|
553
593
|
* Nothing in the toolchain treats a missing entry point as a failure: NASM
|
|
554
594
|
* has no opinion on it and `ld` only warns, then starts the program at the
|
|
@@ -564,6 +604,12 @@ declare class BlinkRuntime {
|
|
|
564
604
|
* the object itself.
|
|
565
605
|
*/
|
|
566
606
|
private assembleWithWasmAssembler;
|
|
607
|
+
/**
|
|
608
|
+
* Starts the link, and starts a log of its own for it. The assembler's parser cannot read
|
|
609
|
+
* `ld`'s diagnostics and `ld`'s cannot read the assembler's, so what each of them said has to
|
|
610
|
+
* stay separable even though both reach the caller as one report.
|
|
611
|
+
*/
|
|
612
|
+
private beginLinking;
|
|
567
613
|
private collectAssemblerDiagnostics;
|
|
568
614
|
private emitAssemblerOutput;
|
|
569
615
|
private parseAssemblerDiagnostics;
|
|
@@ -626,6 +672,13 @@ declare function validateX86Project(project: X86Project): void;
|
|
|
626
672
|
* preprocessor macros.
|
|
627
673
|
*/
|
|
628
674
|
declare function stageX86Project(fs: EmscriptenFS, project: X86Project): void;
|
|
675
|
+
/**
|
|
676
|
+
* Points the assembler at one staged Project File and leaves that File's own directory as the
|
|
677
|
+
* working directory, so its `%include`s and `incbin`s resolve from where it was written rather
|
|
678
|
+
* than from wherever the Entry happens to live. The Entry keeps its `/assembly.s` identity, which
|
|
679
|
+
* is the path its existing diagnostics and source maps are written in terms of.
|
|
680
|
+
*/
|
|
681
|
+
declare function selectX86Source(fs: EmscriptenFS, project: X86Project, path: string): string;
|
|
629
682
|
/** Maps a path emitted by NASM or DWARF back to the exact Project path. */
|
|
630
683
|
declare function x86ProjectSourcePath(sourcePath: string | undefined, project: Pick<X86Project, 'entry' | 'files'>): string;
|
|
631
684
|
declare function x86ProjectText(project: X86Project, path: string): string;
|
|
@@ -710,5 +763,5 @@ declare class X86Emulator extends BaseEmulator<BlinkRuntime, X86RegisterName, X8
|
|
|
710
763
|
}
|
|
711
764
|
declare function createX86Emulator(options?: X86EmulatorOptions): Promise<X86Emulator>;
|
|
712
765
|
//#endregion
|
|
713
|
-
export { AssemblerId, AssemblerMode, BaseEmulator, Binary, BlinkRunOptions, BlinkRuntime, BlinkRuntimeCallbacks, BlinkRuntimeOptions, BlinkState, BlinkenlibModule, BlinkenlibModuleOptions, CompilationError, DEFAULT_ASSEMBLER_ID, DiagnosticLine, DiagnosticSeverity, DiagnosticsParser, DisassemblySnapshot, EmscriptenFS, EmulatorConfig, EmulatorDecoration, EmulatorStatus, ExecutionStep, Instruction, MaybePromise, MemoryReadResult, MemoryWriteResult, MonacoError, MutationOperation, NativeControlFlowKind, NativeInstruction, NativeMemoryWrite, NativeRunControls, NativeRunStop, NativeRunStopKind, NativeStepInfo, NativeSymbol, RegisterHex, RegisterSize, RegisterSnapshot, ResourceSource, StackFrame, StatusRegister, StopReason, StopReasonKind, X86Breakpoint, X86CompilationDiagnostic, X86CompileResult, X86Emulator, X86EmulatorEventHandler, X86EmulatorEventMap, X86EmulatorEventName, X86EmulatorOptions, X86Project, X86ProjectFile, X86RegisterName, X86SourceLocation, X86_PROJECT_ROOT, X86_REGISTER_NAMES, assemblers, createX86Emulator, defaultResourceUrl, fasmDiagnostics, gnuDiagnostics, isNodeRuntime, locateDiagnosticColumn, nasmDiagnostics, observeCallbackResult, readResourceBytes, stageX86Project, toResourceUrl, validateX86Project, x86ProjectSourcePath, x86ProjectText };
|
|
766
|
+
export { AssemblerId, AssemblerMode, BaseEmulator, Binary, BlinkRunOptions, BlinkRuntime, BlinkRuntimeCallbacks, BlinkRuntimeOptions, BlinkState, BlinkenlibModule, BlinkenlibModuleOptions, CompilationError, DEFAULT_ASSEMBLER_ID, DiagnosticLine, DiagnosticSeverity, DiagnosticsParser, DisassemblySnapshot, EmscriptenFS, EmulatorConfig, EmulatorDecoration, EmulatorStatus, ExecutionStep, Instruction, LinkerBinary, MaybePromise, MemoryReadResult, MemoryWriteResult, MonacoError, MutationOperation, NativeControlFlowKind, NativeInstruction, NativeMemoryWrite, NativeRunControls, NativeRunStop, NativeRunStopKind, NativeStepInfo, NativeSymbol, RegisterHex, RegisterSize, RegisterSnapshot, ResourceSource, StackFrame, StatusRegister, StopReason, StopReasonKind, X86Breakpoint, X86CompilationDiagnostic, X86CompileResult, X86Emulator, X86EmulatorEventHandler, X86EmulatorEventMap, X86EmulatorEventName, X86EmulatorOptions, X86Project, X86ProjectFile, X86RegisterName, X86SourceLocation, X86_PROJECT_ROOT, X86_REGISTER_NAMES, assemblers, createX86Emulator, defaultResourceUrl, fasmDiagnostics, gnuDiagnostics, isNodeRuntime, ldDiagnostics, locateDiagnosticColumn, nasmDiagnostics, observeCallbackResult, readResourceBytes, selectX86Source, stageX86Project, toResourceUrl, validateX86Project, x86ProjectSourcePath, x86ProjectText };
|
|
714
767
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/resources.ts","../src/interface.ts","../src/callbacks.ts","../src/types.ts","../src/wasm-assembler.ts","../src/assemblers.ts","../src/wasm-types.ts","../src/blink-runtime.ts","../src/project.ts","../src/x86-emulator.ts"],"mappings":";KAAY,cAAA,YAA0B,GAAA,GAAM,WAAA,GAAc,UAAA;AAAA,iBAE1C,aAAA,CAAA;AAAA,iBAQA,aAAA,CAAc,MAAA,WAAiB,GAAA,GAAM,GAAA;AAAA,iBAS/B,iBAAA,CAAkB,MAAA,EAAQ,cAAA,GAAiB,OAAA,CAAQ,UAAA;AAAA,iBAiCzD,kBAAA,CAAmB,YAAA,UAAsB,OAAA,WAAkB,GAAA;;;KCpD/D,cAAA;EACR,IAAA;EACA,KAAA;EACA,IAAA;AAAA;AAAA,KAEQ,kBAAA;AAAA,KAEA,WAAA;EDPwD,oECShE,IAAA;EACA,SAAA;EACA,MAAA;EACA,IAAA;IACI,IAAA;IACA,UAAA;EAAA;EAEJ,OAAA;EACA,SAAA,UDfyB;ECiBzB,QAAA,GAAW,kBAAA,EDTC;ECWZ,IAAA;EAEA,IAAA;AAAA;AAAA,KAGQ,UAAA;EACR,IAAA;EACA,OAAA;EACA,WAAA;EACA,EAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,KAGQ,WAAA,IAAe,EAAA,UAAY,EAAA;AAAA,aAE3B,YAAA;EACR,IAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;AAAA;AAAA,KAGQ,aAAA;EACR,SAAA,EAAW,iBAAA;EACX,EAAA;EACA,OAAA;IACI,IAAA;EAAA;EAEJ,OAAA;IACI,IAAA;EAAA;EAEJ,IAAA;EACA,IAAA;AAAA;AAAA,KAGQ,iBAAA;EAEF,IAAA;EACA,KAAA;IACI,QAAA;IACA,GAAA;IACA,IAAA,EAAM,YAAA;EAAA;AAAA;EAIV,IAAA;EACA,KAAA;IACI,OAAA;IACA,GAAA;IACA,IAAA,EAAM,YAAA;EAAA;AAAA;EAIV,IAAA;EACA,KAAA;IACI,OAAA;IACA,GAAA;EAAA;AAAA;EAIJ,IAAA;EACA,KAAA;IACI,EAAA;IACA,IAAA;EAAA;AAAA;EAIJ,IAAA;EACA,KAAA;IACI,EAAA;IACA,IAAA;EAAA;AAAA;EAIJ,IAAA;EACA,KAAA;AAAA;AAAA,KAIE,kBAAA;EACR,IAAA;EACA,IAAA;EACA,SAAA;EACA,EAAA;AAAA;AAAA,KAIQ,gBAAA;EACR,IAAA;EACA,OAAA;AAAA;AAAA,aAGQ,cAAA;EACR,UAAA;EACA,OAAA;EACA,eAAA;EACA,QAAA;AAAA;AAAA,KAGQ,WAAA;EACR,OAAA;EACA,UAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,UAAA;EACR,IAAA;AAAA;AAAA,KAGQ,cAAA;EACR,UAAA,EAAY,YAAA;EACZ,aAAA,EAAe,CAAA;EACf,UAAA;EACA,eAAA,GAAkB,CAAA;AAAA;AAAA,uBAGA,YAAA;EAGA,EAAA;AAAA;EAAe,EAAA;EAAW,MAAA,EAAQ,gBAAA;EAAoB,MAAA;AAAA;EAAA,UAG9D,cAAA,EAAgB,CAAA;EAAA,UAChB,WAAA,EAAa,YAAA;EAAA,UACb,WAAA;cAEE,OAAA,EAAS,cAAA,CAAe,CAAA;EAMpC,aAAA,CAAA,GAAiB,YAAA;EAIjB,aAAA,CAAA;EAMA,gBAAA,CAAA,GAAoB,CAAA;EAAA,SAIX,UAAA,CAAW,QAAA;EAAA,SAEX,eAAA,CAAA;IAAqB,WAAA,EAAa,kBAAA;IAAsB,IAAA;EAAA;EAAA,SAExD,OAAA,CAAA;EAAA,SAEA,cAAA,CAAe,KAAA;EAAA,SAEf,OAAA,CAAQ,IAAA,WAAe,OAAA,CAAQ,aAAA;EAAA,SAE/B,SAAA,CAAU,IAAA,WAAe,OAAA,CAAQ,WAAA;EAAA,SAEjC,IAAA,CAAA;EAAA,SAEA,OAAA,CAAA;EAAA,SAEA,IAAA,CAAA,GAAQ,OAAA;IAAU,UAAA;EAAA;EAAA,SAElB,SAAA,CAAA,GAAa,cAAA;EAAA,SAEb,gBAAA,CAAiB,OAAA,UAAiB,IAAA,EAAM,UAAA;EAAA,SAExC,eAAA,CAAgB,OAAA,UAAiB,MAAA,WAAiB,UAAA;EAAA,SAElD,kBAAA,CAAA,GAAsB,WAAA;EAAA,SAEtB,cAAA,CAAe,GAAA,WAAc,aAAA;EAAA,SAE7B,KAAA,CAAA;EAAA,SAEA,KAAA,CAAA;EAAA,SAEA,QAAA,CAAA;IAAa,IAAA;IAAc,KAAA;IAAe,IAAA;EAAA;EAAA,SAE1C,YAAA,CAAA,GAAgB,UAAA;EAAA,SAEhB,gBAAA,CAAiB,OAAA,WAAkB,WAAA;EAAA,SAEnC,iBAAA,CAAA;EAAA,SAEA,uBAAA,CAAA,GAA2B,MAAA,CAAO,CAAA;EAAA,SAElC,gBAAA,CAAiB,QAAA,EAAU,CAAA,EAAG,IAAA,GAAO,YAAA;EAAA,SAErC,gBAAA,CAAiB,QAAA,EAAU,CAAA,EAAG,KAAA,UAAe,IAAA,GAAO,YAAA;EAAA,SAEpD,aAAA,CAAA;EAAA,SAEA,GAAA,CACL,KAAA,WACA,WAAA,GAAc,KAAA;IAAiB,IAAA;IAAc,IAAA;EAAA,KAC9C,OAAA,CAAQ,cAAA;AAAA;;;KC3NH,YAAA,MAAkB,CAAA,GAAI,WAAA,CAAY,CAAA;AAAA,iBAE9B,qBAAA,CAAsB,MAAA,EAAQ,YAAA;;;cCCjC,kBAAA;AAAA,KAoBD,eAAA,WAA0B,kBAAA;AAAA,aAE1B,UAAA;EACR,QAAA;EACA,KAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,oBAAA;EACA,cAAA;AAAA;AAAA,KAGQ,cAAA;AAAA,KAEA,UAAA;EACR,QAAA;EACA,QAAA;EACA,OAAA;EACA,IAAA,GAAO,cAAA;EACP,OAAA;EACA,UAAA;EACA,IAAA;EACA,oBAAA;AAAA;AAAA,KAGQ,wBAAA;EACR,IAAA;EACA,KAAA,UHjCmC;EGmCnC,IAAA,WHnC4C;EGqC5C,QAAA,EAAU,kBAAA,EHrCmD;EGuC7D,YAAA;AAAA;AAAA,KAGQ,cAAA,YAA0B,UAAA;AAAA,KAE1B,UAAA;EACR,KAAA;EACA,KAAA,EAAO,QAAA,CAAS,MAAA,SAAe,cAAA;AAAA;AAAA,KAGvB,iBAAA;EACR,IAAA,UHjB8B;EGmB9B,IAAA;AAAA;AAAA,KAGQ,aAAA,YAAyB,iBAAA;;;;;;KAOzB,gBAAA;EACJ,EAAA;EAAU,MAAA;EAAgB,WAAA,EAAa,wBAAA;AAAA;EACvC,EAAA;EAAW,MAAA,EAAQ,wBAAA;EAA4B,MAAA;EAAgB,WAAA,EAAa,wBAAA;AAAA;AAAA,KAExE,mBAAA;EACR,WAAA;IAAe,KAAA,EAAO,UAAA;IAAY,QAAA,EAAU,UAAA;EAAA;EAC5C,MAAA;EACA,MAAA;EACA,MAAA;IAAU,MAAA;IAAgB,IAAA;EAAA;EAC1B,YAAA;IAAgB,QAAA;EAAA;AAAA;AAAA,KAGR,oBAAA,SAA6B,mBAAA;AAAA,KAE7B,uBAAA,WAAkC,oBAAA,KAC1C,KAAA,EAAO,mBAAA,CAAoB,CAAA,MAC1B,YAAA;;;AHjGL;;;;;;;;;AAAA,UIaiB,aAAA;EACb,QAAA,CAAS,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,kBAAA;AAAA;AAAA,KAG/B,kBAAA;EJfI,mEIiBZ,MAAA;EAEA,MAAA,UJnByB;EIqBzB,MAAA,UJbyB;EIezB,MAAA,EAAQ,UAAA;AAAA;;;UCrBK,MAAA;EACb,IAAA,EAAM,cAAA;EACN,QAAA;AAAA;AAAA,UAGa,cAAA;EACb,IAAA;EACA,IAAA;EACA,KAAA;ELZsD;EKctD,QAAA,EAAU,kBAAA;ELdsD;AAEpE;;;;EKkBI,YAAA;AAAA;AAAA,KAGQ,iBAAA,IAAqB,aAAA,aAA0B,cAAA;AAAA,UAE1C,aAAA;EACb,EAAA;EACA,WAAA;EACA,WAAA;EACA,iBAAA,GAAoB,iBAAA;EACpB,QAAA;ILpBoD;AASxD;;;;;IKkBQ,SAAA,GAAY,MAAA;IACZ,MAAA,GAAS,MAAA;EAAA;ELnB+B;EKsB5C,aAAA,GAAgB,aAAA;AAAA;AAAA,cAMP,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4CD,WAAA,gBAA2B,UAAA;AAAA,cAE1B,oBAAA,EAAsB,WAAA;AAAA,iBAEnB,eAAA,CAAgB,GAAA,WAAc,cAAA;AAAA,iBAuB9B,cAAA,CAAe,GAAA,WAAc,cAAA;AAAA,iBAkB7B,eAAA,CAAgB,GAAA,WAAc,cAAA;;;;;;;;;;iBAiC9B,sBAAA,CAAuB,OAAA,UAAiB,IAAA,UAAc,YAAA;;;KCvK1D,YAAA;EACR,IAAA,CAAK,KAAA,uBAA4B,MAAA,GAAS,QAAA,mBAA2B,MAAA,GAAS,QAAA;EAC9E,SAAA,CAAU,IAAA,UAAc,IAAA,WAAe,UAAA;EACvC,IAAA,CAAK,IAAA,UAAc,KAAA;EACnB,KAAA,CAAM,MAAA,WAAiB,IAAA,EAAM,UAAA,EAAY,MAAA,UAAgB,MAAA,UAAgB,QAAA;EACzE,KAAA,CAAM,MAAA;EACN,KAAA,CAAM,IAAA,UAAc,IAAA;EACpB,QAAA,CAAS,IAAA,UAAc,OAAA;IAAY,QAAA;EAAA,IAAiC,UAAA;EACpE,SAAA,CAAU,IAAA;EACV,MAAA,CAAO,IAAA;EACP,KAAA,CAAM,IAAA;AAAA;AAAA,KAGE,uBAAA;EACR,YAAA;EACA,MAAA,IAAU,MAAA,EAAQ,gBAAA;EAClB,eAAA,IACI,OAAA,EAAS,WAAA,CAAY,OAAA,EACrB,eAAA,GAAkB,QAAA,EAAU,WAAA,CAAY,QAAA,EAAU,MAAA,GAAS,WAAA,CAAY,MAAA;AAAA;AAAA,KAInE,gBAAA;EACR,SAAA,EAAW,MAAA,CAAO,eAAA;EAClB,GAAA;EACA,GAAA;EACA,EAAA;EACA,KAAA;AAAA;AAAA,KAGQ,gBAAA;EACJ,EAAA;EAAU,KAAA;AAAA;EACV,EAAA;EAAW,KAAA;EAAe,SAAA;AAAA;AAAA,KAEtB,iBAAA;EACJ,EAAA;EAAU,YAAA;AAAA;EACV,EAAA;EAAW,KAAA;EAAe,YAAA;AAAA;AAAA,KAEtB,iBAAA;AAAA,KAEA,aAAA;EACR,IAAA,EAAM,iBAAA;EACN,OAAA;EACA,oBAAA;AAAA;AAAA,KAGQ,iBAAA;EACR,WAAA;AAAA;AAAA,KAGQ,qBAAA;AAAA,KAEA,iBAAA;EACR,OAAA;EACA,IAAA;EACA,GAAA;EACA,SAAA;AAAA;AAAA,KAGQ,cAAA;EAEF,KAAA;EACA,YAAA,EAAc,iBAAA;AAAA;EAGd,KAAA;EACA,QAAA;EACA,OAAA;EACA,QAAA;EACA,OAAA;EACA,WAAA;EACA,UAAA;EACA,WAAA,EAAa,qBAAA;EACb,qBAAA;EACA,YAAA,EAAc,iBAAA;AAAA;AAAA,KAGZ,YAAA;EACR,OAAA;EACA,IAAA;AAAA;AAAA,KAGQ,iBAAA;EACR,OAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,KAGQ,mBAAA;EACR,KAAA;EACA,WAAA;AAAA;AAAA,KAGQ,gBAAA;EACR,EAAA,EAAI,YAAA;EACJ,QAAA,CAAS,IAAA;EACT,WAAA,CAAY,EAAA,MAAQ,IAAA,oBAAwB,SAAA;EAC5C,oBAAA;EACA,eAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,qBAAA,CAAsB,QAAA,EAAU,eAAA;EAChC,qBAAA,CAAsB,QAAA,EAAU,eAAA,EAAiB,KAAA;EACjD,kBAAA,CAAmB,KAAA;EACnB,0BAAA,CAA2B,OAAA;EAC3B,6BAAA,IAAiC,gBAAA;EACjC,yBAAA,CAA0B,OAAA,UAAiB,MAAA,WAAiB,gBAAA;EAC5D,0BAAA,CAA2B,OAAA,UAAiB,KAAA,EAAO,UAAA,cAAwB,iBAAA;EAC3E,wBAAA,IAA4B,mBAAA;EAC5B,0BAAA,CAA2B,QAAA,UAAkB,IAAA,UAAc,IAAA;EAC3D,0BAAA;EACA,wBAAA,CAAyB,KAAA,UAAe,mBAAA;EACxC,wBAAA,IAA4B,iBAAA;EAC5B,oBAAA,IAAwB,aAAA;EACxB,yBAAA,IAA6B,cAAA;EAC7B,0BAAA,CAA2B,OAAA,WAAkB,iBAAA;EAC7C,uBAAA,CAAwB,OAAA,WAAkB,YAAA;AAAA;;;KCjElC,qBAAA;EACR,KAAA;EACA,MAAA,IAAU,QAAA,aAAqB,YAAA;EAC/B,MAAA,IAAU,QAAA,aAAqB,YAAA;EAC/B,MAAA,IAAU,MAAA,UAAgB,IAAA,aAAiB,YAAA;EAC3C,WAAA,IAAe,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,UAAA,KAAe,YAAA;EAC3D,YAAA,IAAgB,KAAA;IAAS,QAAA;EAAA,MAAuB,YAAA;AAAA;AAAA,KAGxC,mBAAA;EACR,IAAA,GAAO,aAAA,GAAgB,WAAA;EACvB,SAAA,GAAY,qBAAA;EACZ,SAAA,IAAa,QAAA;AAAA;AAAA,KAGL,eAAA;EACR,KAAA;EACA,mBAAA;AAAA;AAAA,cAQS,YAAA;EAAA,SACA,MAAA,EAAQ,gBAAA;EAEjB,IAAA,EAAM,aAAA;EACN,KAAA,EAAK,UAAA;EACL,UAAA,EAAY,UAAA;EACZ,aAAA;EPrEmC;EOuEnC,eAAA,EAAiB,wBAAA;EPvE2B;EOyE5C,oBAAA,EAAsB,wBAAA;EAAA,iBAEL,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,YAAA;EAAA,iBACA,UAAA;EAAA,QACT,SAAA;EAAA,QACA,aAAA;EAAA,QACA,YAAA;EAAA,QACA,eAAA;EAAA,iBAES,WAAA;EAAA,iBACA,WAAA;EAAA,QAEV,WAAA,CAAA;EAAA,OAYM,MAAA,CAAO,OAAA,GAAS,mBAAA,GAA2B,OAAA,CAAQ,YAAA;EA8C1D,OAAA,CAAQ,IAAA,EAAM,aAAA,GAAgB,WAAA,GAAc,OAAA;EAc5C,eAAA,CAAgB,IAAA,WAAe,OAAA,CAAQ,gBAAA;EAIvC,cAAA,CAAe,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,gBAAA;EPlIoB;;;;;;ACpD3E;;EMkMU,YAAA,CAAa,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,gBAAA;EAAA,QAKnC,6BAAA;EAAA,QAWA,YAAA;ENhNd;;;;AAGJ;;;EAHI,QM0PQ,mBAAA;ENvPkB;AAE9B;;;;;;EAF8B,QMoQlB,qBAAA;EAAA,QA6BM,eAAA;ENzRV;;;;;EAAA,QMiTU,yBAAA;EAAA,QAiCN,2BAAA;EAAA,QAOA,mBAAA;EAAA,QAQA,yBAAA;EAUR,OAAA,CAAQ,IAAA,EAAM,WAAA,GAAc,UAAA;EAS5B,MAAA,CAAA;EAIA,YAAA,CAAA;EAKA,GAAA,CAAA;EAIA,IAAA,CAAA;EAQA,QAAA,CAAA;EAQM,eAAA,CAAgB,OAAA,GAAS,eAAA,GAAuB,OAAA,CAAQ,UAAA;EAe9D,YAAA,CAAa,IAAA;EAQb,eAAA,CAAgB,OAAA,UAAiB,MAAA,WAAiB,UAAA;EAQlD,gBAAA,CAAiB,OAAA,UAAiB,IAAA,EAAM,UAAA;EAKxC,mBAAA,CAAA;EAIA,yBAAA,CAAA;EAIA,mBAAA,CAAA,GAAuB,gBAAA;EAIvB,WAAA,CAAY,QAAA,QAAgB,gBAAA;EAI5B,WAAA,CAAY,QAAA,QAAgB,gBAAA,eAA+B,KAAA;EAM3D,QAAA,CAAS,KAAA;EAIT,gBAAA,CAAiB,OAAA;EAIjB,KAAA,CAAA;EAIA,KAAA,CAAA;EAIA,QAAA,CAAA;EAIA,gBAAA,CAAA;EAIA,gBAAA,CAAiB,OAAA,WAAkB,iBAAA;EAInC,eAAA,CAAA,GAAmB,cAAA;EAInB,aAAA,CAAc,OAAA,WAAkB,YAAA;EAIhC,uBAAA,CAAwB,OAAA;EAIxB,2BAAA,CAA4B,OAAA,WAAkB,iBAAA;EAW9C,yBAAA,CAA0B,SAAA;EAI1B,6BAAA,CAA8B,QAAA,EAAU,iBAAA;EAQxC,wBAAA,CAAA;EAIA,kBAAA,CAAmB,OAAA,UAAiB,QAAA,EAAU,iBAAA;EAa9C,aAAA,CAAc,OAAA,UAAiB,oBAAA;EAe/B,wBAAA,CAAA;EAAA,QAWQ,YAAA;EAAA,QAYM,eAAA;EAAA,QAIN,mBAAA;EAAA,QAOA,gBAAA;EAAA,QAIA,oBAAA;EAAA,QAQA,mBAAA;EAAA,QAMA,YAAA;EAAA,QAuDA,UAAA;EAAA,QAmBA,mBAAA;EAAA,QA4BA,gBAAA;EAAA,QASA,QAAA;EAAA,QAQA,YAAA;EAAA,QAOA,mBAAA;EAAA,QAUA,qBAAA;EAAA,QAUA,sBAAA;EAAA,QAIA,gBAAA;AAAA;;;cC9vBC,gBAAA;AAAA,iBAIG,kBAAA,CAAmB,OAAA,EAAS,UAAA;;;;;;iBAqB5B,eAAA,CAAgB,EAAA,EAAI,YAAA,EAAc,OAAA,EAAS,UAAA;;iBA8B3C,oBAAA,CACZ,UAAA,sBACA,OAAA,EAAS,IAAA,CAAK,UAAA;AAAA,iBA4DF,cAAA,CAAe,OAAA,EAAS,UAAA,EAAY,IAAA;;;KCxExC,kBAAA,GAAqB,IAAA,CAAK,mBAAA;EAClC,IAAA,GAAO,aAAA,GAAgB,WAAA;EACvB,SAAA,GAAY,qBAAA;AAAA;AAAA,cAGH,WAAA,SAAoB,YAAA,CAAa,YAAA,EAAc,eAAA,EAAiB,gBAAA;EAAA,SAChE,OAAA,EAAS,YAAA;EAAA,iBAED,aAAA;EAAA,QAUT,iBAAA;EAAA,QACA,cAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;EAAA,QAED,WAAA,CAAA;EAAA,OASM,MAAA,CAAO,OAAA,GAAS,kBAAA,GAA0B,OAAA,CAAQ,WAAA;EAAA,IAqC3D,MAAA,CAAA,GAAU,gBAAA;EAAA,IAIV,KAAA,CAAA,GAAS,UAAA;EAAA,IAIT,UAAA,CAAA,GAAc,UAAA;EAIlB,EAAA,WAAa,oBAAA,CAAA,CACT,SAAA,EAAW,CAAA,EACX,OAAA,EAAS,uBAAA,CAAwB,CAAA;EAM/B,OAAA,CAAQ,IAAA,EAAM,aAAA,GAAgB,WAAA,GAAc,OAAA;EAK5C,OAAA,CAAQ,IAAA,WAAe,OAAA,CAAQ,gBAAA;EAI/B,cAAA,CAAe,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,gBAAA;EAOnD,OAAA,CAAQ,IAAA,EAAM,WAAA,GAAc,UAAA;EAKtB,eAAA,CAAA,GAAmB,OAAA,CAAQ,cAAA;EAMjC,YAAA,CAAa,IAAA;EAIb,UAAA,CAAW,QAAA;EAOX,eAAA,CAAA;IAAqB,WAAA,EAAa,kBAAA;IAAsB,IAAA;EAAA;EAIxD,OAAA,CAAA;EAUA,cAAA,CAAe,KAAA;EAKT,SAAA,CAAU,IAAA,WAAe,OAAA,CAAQ,WAAA;ET/KK;;;;;ESwLtC,YAAA,CAAa,OAAA,EAAS,UAAA,GAAa,OAAA,CAAQ,WAAA;EAyBjD,IAAA,CAAA;EAoBA,OAAA,CAAA;EAKM,IAAA,CAAA,GAAQ,OAAA;IAAU,UAAA;EAAA;EAUxB,SAAA,CAAA,GAAa,cAAA;EAOb,gBAAA,CAAiB,OAAA,UAAiB,IAAA,EAAM,UAAA;EAIxC,eAAA,CAAgB,OAAA,UAAiB,MAAA,WAAiB,UAAA;EAIlD,kBAAA,CAAA,GAAsB,WAAA;EAKtB,cAAA,CAAe,GAAA,WAAc,aAAA;EAM7B,KAAA,CAAA;EAIA,KAAA,CAAA;EAIA,QAAA,CAAA;IAAc,IAAA;IAAc,KAAA;IAAe,IAAA;EAAA;EAW3C,YAAA,CAAA,GAAgB,UAAA;EAIhB,gBAAA,CAAiB,OAAA,WAAkB,WAAA;ERrT/B;EQoUJ,uBAAA,CAAA,GAA2B,WAAA;EAW3B,iBAAA,CAAA;EAIA,uBAAA,CAAA,GAA2B,MAAA,CAAO,eAAA;EAMlC,gBAAA,CAAiB,QAAA,EAAU,eAAA,EAAiB,IAAA,GAAM,YAAA;EAIlD,gBAAA,CAAiB,QAAA,EAAU,eAAA,EAAiB,KAAA,UAAe,IAAA,GAAM,YAAA;EAOjE,aAAA,CAAA;EAIM,GAAA,CAAI,KAAA,WAAgB,WAAA,GAAa,aAAA,KAAuB,OAAA,CAAQ,cAAA;EAAA,QAS9D,gBAAA;EAAA,QAOA,0BAAA;EAAA,QAkBM,kBAAA;EAAA,QA6BA,cAAA;EAAA,QA6BN,gBAAA;EAAA,QAIA,mBAAA;EAAA,QAKA,wBAAA;EAAA,QAUA,WAAA;EAAA,QAaA,UAAA;EAAA,QAoDA,qBAAA;EAAA,QAyBA,yBAAA;EAAA,QA8BA,IAAA;AAAA;AAAA,iBAKU,iBAAA,CAAkB,OAAA,GAAS,kBAAA,GAA0B,OAAA,CAAQ,WAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/resources.ts","../src/interface.ts","../src/callbacks.ts","../src/types.ts","../src/wasm-assembler.ts","../src/assemblers.ts","../src/wasm-types.ts","../src/blink-runtime.ts","../src/project.ts","../src/x86-emulator.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -39,6 +39,16 @@ function stageX86Project(fs, project) {
|
|
|
39
39
|
fs.chdir(projectDirectory(project.entry));
|
|
40
40
|
stagedFiles.set(fs, current);
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Points the assembler at one staged Project File and leaves that File's own directory as the
|
|
44
|
+
* working directory, so its `%include`s and `incbin`s resolve from where it was written rather
|
|
45
|
+
* than from wherever the Entry happens to live. The Entry keeps its `/assembly.s` identity, which
|
|
46
|
+
* is the path its existing diagnostics and source maps are written in terms of.
|
|
47
|
+
*/
|
|
48
|
+
function selectX86Source(fs, project, path) {
|
|
49
|
+
fs.chdir(projectDirectory(path));
|
|
50
|
+
return path === project.entry ? "/assembly.s" : `${X86_PROJECT_ROOT}/${path}`;
|
|
51
|
+
}
|
|
42
52
|
/** Maps a path emitted by NASM or DWARF back to the exact Project path. */
|
|
43
53
|
function x86ProjectSourcePath(sourcePath, project) {
|
|
44
54
|
if (!sourcePath || sourcePath === "/assembly.s" || sourcePath === "assembly.s") return project.entry;
|
|
@@ -81,52 +91,155 @@ function x86ProjectText(project, path) {
|
|
|
81
91
|
return typeof contents === "string" ? contents : "";
|
|
82
92
|
}
|
|
83
93
|
//#endregion
|
|
94
|
+
//#region src/translation-units.ts
|
|
95
|
+
/**
|
|
96
|
+
* Extensions that make a Project File assembler input in its own right. `.inc` is deliberately
|
|
97
|
+
* absent: it is what an include fragment is conventionally called, and a fragment assembled on
|
|
98
|
+
* its own would define its symbols a second time. A fragment under any other name is caught by
|
|
99
|
+
* the dependency scan instead.
|
|
100
|
+
*/
|
|
101
|
+
const SOURCE_EXTENSIONS = [
|
|
102
|
+
".asm",
|
|
103
|
+
".s",
|
|
104
|
+
".nasm"
|
|
105
|
+
];
|
|
106
|
+
function isX86Source(path) {
|
|
107
|
+
const lower = path.toLowerCase();
|
|
108
|
+
return SOURCE_EXTENSIONS.some((extension) => lower.endsWith(extension));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Every File that could be its own translation unit: assembled separately and linked with the
|
|
112
|
+
* rest, which is what makes `global` in one File and `extern` in another resolve to each other.
|
|
113
|
+
* The Entry comes first so it leads the link, and the rest follow in a stable order so two builds
|
|
114
|
+
* of the same Project lay out identically.
|
|
115
|
+
*/
|
|
116
|
+
function x86TranslationUnitCandidates(project) {
|
|
117
|
+
const others = Object.keys(project.files).filter((path) => path !== project.entry).filter((path) => typeof project.files[path] === "string" && isX86Source(path)).sort();
|
|
118
|
+
return [project.entry, ...others];
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The Files named by one `nasm -M` run, as Project paths. A File that another source `%include`s
|
|
122
|
+
* is already part of that source: assembling it again would define every one of its symbols a
|
|
123
|
+
* second time, so the link would fail on duplicate definitions rather than on anything the author
|
|
124
|
+
* wrote. Asking NASM rather than scanning for `%include` ourselves is what keeps macro-generated
|
|
125
|
+
* and conditional includes right, since NASM is the only thing that knows which ones it took.
|
|
126
|
+
*/
|
|
127
|
+
function parseDependencyList(output, project) {
|
|
128
|
+
const separator = output.indexOf(":");
|
|
129
|
+
if (separator < 0) return [];
|
|
130
|
+
return output.slice(separator + 1).replace(/\\\r?\n/g, " ").split(/\s+/).filter(Boolean).map((written) => x86ProjectSourcePath(written, project));
|
|
131
|
+
}
|
|
132
|
+
//#endregion
|
|
84
133
|
//#region src/wasm-assembler.ts
|
|
85
|
-
const SOURCE_PATH = "/assembly.s";
|
|
86
134
|
const OBJECT_PATH = "/program.o";
|
|
87
135
|
/**
|
|
88
136
|
* `-g -F dwarf` is what makes the source map possible: the debugger reads
|
|
89
137
|
* `.debug_line` out of the linked executable to map an address back to the line
|
|
90
|
-
* it was written on. The
|
|
91
|
-
*
|
|
138
|
+
* it was written on. The working directory `selectX86Source` selects is what
|
|
139
|
+
* lets NASM resolve `%include` itself.
|
|
92
140
|
*/
|
|
93
141
|
const NASM_ARGS = [
|
|
94
142
|
"-g",
|
|
95
143
|
"-F",
|
|
96
144
|
"dwarf",
|
|
97
|
-
"-felf64"
|
|
98
|
-
SOURCE_PATH,
|
|
99
|
-
"-o",
|
|
100
|
-
OBJECT_PATH
|
|
145
|
+
"-felf64"
|
|
101
146
|
];
|
|
102
|
-
|
|
147
|
+
async function createNasmModule() {
|
|
103
148
|
let stdout = "";
|
|
104
149
|
let stderr = "";
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
150
|
+
return {
|
|
151
|
+
module: await createNasm({
|
|
152
|
+
noInitialRun: true,
|
|
153
|
+
print: (line) => {
|
|
154
|
+
stdout += `${line}\n`;
|
|
155
|
+
},
|
|
156
|
+
printErr: (line) => {
|
|
157
|
+
stderr += `${line}\n`;
|
|
158
|
+
}
|
|
159
|
+
}),
|
|
160
|
+
stdout: () => stdout,
|
|
161
|
+
stderr: () => stderr
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Emscripten's Node path sets `process.exitCode` from the status the module
|
|
166
|
+
* exits with, so an assembly that failed would leave the host process exiting
|
|
167
|
+
* non-zero for a reason of its own. NASM's status belongs to the caller of this
|
|
168
|
+
* function, never to the host.
|
|
169
|
+
*/
|
|
170
|
+
function callNasm(module, args) {
|
|
115
171
|
const host = globalThis.process;
|
|
116
172
|
const hostExitCode = host?.exitCode;
|
|
117
|
-
const status = module.callMain(
|
|
173
|
+
const status = module.callMain(args);
|
|
118
174
|
if (host) host.exitCode = hostExitCode;
|
|
119
|
-
|
|
175
|
+
return status;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Which Files the Project's candidate translation units `%include`, so that a fragment is
|
|
179
|
+
* assembled as part of whatever includes it and never a second time on its own. Every candidate
|
|
180
|
+
* is scanned before any of them is treated as a unit, because a fragment can be included by a
|
|
181
|
+
* File that sorts after it.
|
|
182
|
+
*/
|
|
183
|
+
async function scanIncludedFiles(project, candidates) {
|
|
184
|
+
const included = /* @__PURE__ */ new Set();
|
|
185
|
+
if (candidates.length < 2) return included;
|
|
186
|
+
for (const path of candidates) {
|
|
187
|
+
const { module, stdout } = await createNasmModule();
|
|
188
|
+
stageX86Project(module.FS, project);
|
|
189
|
+
const source = selectX86Source(module.FS, project, path);
|
|
190
|
+
callNasm(module, [
|
|
191
|
+
"-M",
|
|
192
|
+
...NASM_ARGS,
|
|
193
|
+
source,
|
|
194
|
+
"-o",
|
|
195
|
+
OBJECT_PATH
|
|
196
|
+
]);
|
|
197
|
+
for (const dependency of parseDependencyList(stdout(), project)) if (dependency !== path) included.add(dependency);
|
|
198
|
+
}
|
|
199
|
+
return included;
|
|
200
|
+
}
|
|
201
|
+
const nasmWasmAssembler = { async assemble(project) {
|
|
202
|
+
const candidates = x86TranslationUnitCandidates(project);
|
|
203
|
+
const included = await scanIncludedFiles(project, candidates);
|
|
204
|
+
const units = candidates.filter((path) => path === project.entry || !included.has(path));
|
|
205
|
+
let stdout = "";
|
|
206
|
+
let stderr = "";
|
|
207
|
+
let status = 0;
|
|
208
|
+
const assembled = [];
|
|
209
|
+
for (const path of units) {
|
|
210
|
+
const { module, stdout: readStdout, stderr: readStderr } = await createNasmModule();
|
|
211
|
+
stageX86Project(module.FS, project);
|
|
212
|
+
const source = selectX86Source(module.FS, project, path);
|
|
213
|
+
const unitStatus = callNasm(module, [
|
|
214
|
+
...NASM_ARGS,
|
|
215
|
+
source,
|
|
216
|
+
"-o",
|
|
217
|
+
OBJECT_PATH
|
|
218
|
+
]);
|
|
219
|
+
stdout += readStdout();
|
|
220
|
+
stderr += readStderr();
|
|
221
|
+
if (!(unitStatus === 0 && module.FS.analyzePath(OBJECT_PATH).exists)) {
|
|
222
|
+
if (status === 0) status = unitStatus === 0 ? 1 : unitStatus;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
assembled.push({
|
|
226
|
+
path,
|
|
227
|
+
object: module.FS.readFile(OBJECT_PATH)
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
const ok = status === 0 && assembled.length === units.length;
|
|
120
231
|
return {
|
|
121
232
|
status,
|
|
122
233
|
stdout,
|
|
123
234
|
stderr,
|
|
124
|
-
|
|
235
|
+
units: ok ? assembled : [],
|
|
236
|
+
object: ok ? assembled[0]?.object ?? null : null
|
|
125
237
|
};
|
|
126
238
|
} };
|
|
127
239
|
//#endregion
|
|
128
240
|
//#region src/assemblers.ts
|
|
129
241
|
const assemblerAsset = (filename) => new URL(`./assets/assemblers/${filename}`, import.meta.url);
|
|
242
|
+
const linkCommand = (objects) => `/linker ${objects.join(" ")} -o /program`;
|
|
130
243
|
const assemblers = {
|
|
131
244
|
GNU_trunk: {
|
|
132
245
|
id: "GNU_trunk",
|
|
@@ -140,7 +253,7 @@ const assemblers = {
|
|
|
140
253
|
},
|
|
141
254
|
linker: {
|
|
142
255
|
file: assemblerAsset("gnu-ld.2.43.50.elf"),
|
|
143
|
-
|
|
256
|
+
link: linkCommand
|
|
144
257
|
}
|
|
145
258
|
}
|
|
146
259
|
},
|
|
@@ -161,7 +274,7 @@ const assemblers = {
|
|
|
161
274
|
diagnosticsParser: nasmDiagnostics,
|
|
162
275
|
binaries: { linker: {
|
|
163
276
|
file: assemblerAsset("gnu-ld.2.43.50.elf"),
|
|
164
|
-
|
|
277
|
+
link: linkCommand
|
|
165
278
|
} },
|
|
166
279
|
wasmAssembler: nasmWasmAssembler
|
|
167
280
|
}
|
|
@@ -231,6 +344,36 @@ function fasmDiagnostics(str) {
|
|
|
231
344
|
return diagnostics;
|
|
232
345
|
}
|
|
233
346
|
/**
|
|
347
|
+
* What `ld` said, as diagnostics. Nothing else in the toolchain reports a symbol that no
|
|
348
|
+
* translation unit defines: NASM accepts every `extern` on the author's word, and the mistake
|
|
349
|
+
* only surfaces here. Without this the link simply failed and the build looked like it had
|
|
350
|
+
* succeeded, leaving the program unrunnable and nothing on screen to say why.
|
|
351
|
+
*
|
|
352
|
+
* `ld` writes a location as `file:line:(section+offset):`, and writes the notes that introduce an
|
|
353
|
+
* error - "in function `_start':" - as lines ending in a colon, which are skipped in favour of
|
|
354
|
+
* the error itself.
|
|
355
|
+
*/
|
|
356
|
+
function ldDiagnostics(str) {
|
|
357
|
+
const diagnostics = [];
|
|
358
|
+
const locatedRegex = /^(.*?):(\d+):(?:\([^)]*\))?:\s*(.+)$/;
|
|
359
|
+
for (const line of str.split(/\r?\n/)) {
|
|
360
|
+
const text = line.trim().replace(/^\/linker:\s*/, "");
|
|
361
|
+
if (!text || text.startsWith("$ ") || text.endsWith(":")) continue;
|
|
362
|
+
const located = text.match(locatedRegex);
|
|
363
|
+
const message = (located?.[3] ?? text).trim();
|
|
364
|
+
if (!message) continue;
|
|
365
|
+
if (message.includes("cannot find entry symbol")) continue;
|
|
366
|
+
const isWarning = message.startsWith("warning:");
|
|
367
|
+
diagnostics.push({
|
|
368
|
+
...located?.[1] ? { file: located[1] } : {},
|
|
369
|
+
line: located ? Number.parseInt(located[2] ?? "0", 10) : 1,
|
|
370
|
+
error: isWarning ? message.slice(8).trim() : message,
|
|
371
|
+
severity: isWarning ? "warning" : "error"
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return diagnostics;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
234
377
|
* The one-based column a diagnostic belongs on. NASM reports a line and no
|
|
235
378
|
* column, but it names the thing it is complaining about: `msg' in "symbol
|
|
236
379
|
* `msg' not defined", `.data' in a section warning. Finding that name in the
|
|
@@ -846,7 +989,9 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
846
989
|
sourceMap = null;
|
|
847
990
|
sourceProject = null;
|
|
848
991
|
assembleOnly = false;
|
|
849
|
-
|
|
992
|
+
assembledObjects = [];
|
|
993
|
+
/** What the linker said, kept apart from the assembler's log so `ld`'s own parser reads it. */
|
|
994
|
+
linkerLogs = null;
|
|
850
995
|
defaultArgc = "/program";
|
|
851
996
|
defaultArgv = "";
|
|
852
997
|
constructor(module, mode, callbacks, scheduler) {
|
|
@@ -922,7 +1067,7 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
922
1067
|
const sourceProject = copyX86Project(project);
|
|
923
1068
|
const assembled = await this.mode.wasmAssembler.assemble(sourceProject);
|
|
924
1069
|
const report = assembled.stdout + assembled.stderr;
|
|
925
|
-
return toCompileResult([...this.parseAssemblerDiagnostics(report, sourceProject), ...this.entryPointDiagnostics(assembled.object, sourceProject)], report);
|
|
1070
|
+
return toCompileResult([...this.parseAssemblerDiagnostics(report, sourceProject), ...this.entryPointDiagnostics(assembled.units.map((unit) => unit.object), sourceProject)], report);
|
|
926
1071
|
}
|
|
927
1072
|
async buildProject(project, options) {
|
|
928
1073
|
this.assertReadyForCompile();
|
|
@@ -932,7 +1077,8 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
932
1077
|
this.assemblerLogs = "";
|
|
933
1078
|
this.assemblerErrors = [];
|
|
934
1079
|
this.assemblerDiagnostics = [];
|
|
935
|
-
this.
|
|
1080
|
+
this.assembledObjects = [];
|
|
1081
|
+
this.linkerLogs = null;
|
|
936
1082
|
this.sourceMap = null;
|
|
937
1083
|
this.assembleOnly = !options.link;
|
|
938
1084
|
try {
|
|
@@ -942,24 +1088,49 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
942
1088
|
this.assembleOnly = false;
|
|
943
1089
|
this.module.FS.chdir("/");
|
|
944
1090
|
}
|
|
945
|
-
const diagnostics = [
|
|
946
|
-
...diagnostic
|
|
947
|
-
|
|
948
|
-
|
|
1091
|
+
const diagnostics = [
|
|
1092
|
+
...this.assemblerDiagnostics.map((diagnostic) => ({
|
|
1093
|
+
...diagnostic,
|
|
1094
|
+
file: x86ProjectSourcePath(diagnostic.file, sourceProject)
|
|
1095
|
+
})),
|
|
1096
|
+
...this.entryPointDiagnostics(this.takeAssembledObjects(), sourceProject),
|
|
1097
|
+
...this.linkDiagnostics(sourceProject)
|
|
1098
|
+
];
|
|
949
1099
|
if (this.state === "PROGRAM_LOADED") this.sourceMap = this.tryReadSourceMap();
|
|
950
1100
|
return toCompileResult(diagnostics, this.assemblerLogs);
|
|
951
1101
|
}
|
|
952
1102
|
/**
|
|
953
|
-
* The
|
|
954
|
-
* rather than the assembler's own words.
|
|
1103
|
+
* The objects this build's assembler wrote, for the checks that read them
|
|
1104
|
+
* rather than the assembler's own words. Empty when the assembly failed, and
|
|
955
1105
|
* when the assembler writes an executable directly and never produces one.
|
|
956
|
-
* Read once per build, so a previous build's
|
|
957
|
-
*
|
|
1106
|
+
* Read once per build, so a previous build's objects can never stand in for
|
|
1107
|
+
* ones that were never written.
|
|
958
1108
|
*/
|
|
959
|
-
|
|
960
|
-
const
|
|
961
|
-
this.
|
|
962
|
-
return
|
|
1109
|
+
takeAssembledObjects() {
|
|
1110
|
+
const objects = this.assembledObjects;
|
|
1111
|
+
this.assembledObjects = [];
|
|
1112
|
+
return objects;
|
|
1113
|
+
}
|
|
1114
|
+
/**
|
|
1115
|
+
* What the link had to say. A link that failed leaves no program to run, so a build that
|
|
1116
|
+
* reported nothing would hand the caller a success it cannot act on - the state stays `Ready`
|
|
1117
|
+
* and the next step or run fails with a message about the emulator rather than the mistake.
|
|
1118
|
+
* The fallback covers a linker that fails in a way its parser does not recognise, so a failed
|
|
1119
|
+
* link is always visible as an error whatever `ld` chose to say about it.
|
|
1120
|
+
*/
|
|
1121
|
+
linkDiagnostics(sourceProject) {
|
|
1122
|
+
if (this.linkerLogs === null) return [];
|
|
1123
|
+
const diagnostics = ldDiagnostics(this.linkerLogs).map((diagnostic) => ({
|
|
1124
|
+
...diagnostic,
|
|
1125
|
+
file: x86ProjectSourcePath(diagnostic.file, sourceProject)
|
|
1126
|
+
}));
|
|
1127
|
+
if (this.state === "PROGRAM_LOADED" || diagnostics.some((diagnostic) => diagnostic.severity === "error")) return diagnostics;
|
|
1128
|
+
return [...diagnostics, {
|
|
1129
|
+
line: 1,
|
|
1130
|
+
file: sourceProject.entry,
|
|
1131
|
+
severity: "error",
|
|
1132
|
+
error: "linking failed, so there is no program to run."
|
|
1133
|
+
}];
|
|
963
1134
|
}
|
|
964
1135
|
/**
|
|
965
1136
|
* Nothing in the toolchain treats a missing entry point as a failure: NASM
|
|
@@ -968,9 +1139,9 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
968
1139
|
* is the least explicable thing a program can do to someone learning, so it
|
|
969
1140
|
* is reported as an error here and the mistake is usually a misspelling.
|
|
970
1141
|
*/
|
|
971
|
-
entryPointDiagnostics(
|
|
972
|
-
if (!
|
|
973
|
-
const globals = readDefinedGlobalSymbols(object);
|
|
1142
|
+
entryPointDiagnostics(objects, sourceProject) {
|
|
1143
|
+
if (!objects.length || !this.mode.binaries.linker) return [];
|
|
1144
|
+
const globals = objects.flatMap((object) => readDefinedGlobalSymbols(object));
|
|
974
1145
|
if (globals.includes("_start")) return [];
|
|
975
1146
|
const nearest = findNearestSymbol(DEFAULT_ENTRY_SYMBOL, globals);
|
|
976
1147
|
const nearestHint = nearest ? ` Did you mean \`${DEFAULT_ENTRY_SYMBOL}\` where you wrote \`${nearest}\`?` : "";
|
|
@@ -991,7 +1162,7 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
991
1162
|
this.module._blinkenlib_run_fast();
|
|
992
1163
|
await this.waitForState((state) => state !== "ASSEMBLING" && state !== "LINKING");
|
|
993
1164
|
if (this.assemblerErrors.length === 0) try {
|
|
994
|
-
this.
|
|
1165
|
+
this.assembledObjects = [this.module.FS.readFile("/program.o")];
|
|
995
1166
|
} catch {}
|
|
996
1167
|
}
|
|
997
1168
|
/**
|
|
@@ -1005,23 +1176,32 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
1005
1176
|
this.emitAssemblerOutput(assembled.stdout, this.callbacks.stdout);
|
|
1006
1177
|
this.emitAssemblerOutput(assembled.stderr, this.callbacks.stderr);
|
|
1007
1178
|
this.collectAssemblerDiagnostics();
|
|
1008
|
-
if (!assembled.
|
|
1179
|
+
if (!assembled.units.length) {
|
|
1009
1180
|
this.setState("READY");
|
|
1010
1181
|
return;
|
|
1011
1182
|
}
|
|
1183
|
+
this.assembledObjects = assembled.units.map((unit) => unit.object);
|
|
1012
1184
|
if (!options.link) {
|
|
1013
|
-
this.assembledObject = assembled.object;
|
|
1014
1185
|
this.setState("READY");
|
|
1015
1186
|
return;
|
|
1016
1187
|
}
|
|
1017
|
-
|
|
1018
|
-
this.writeExecutableSync(
|
|
1019
|
-
this.
|
|
1188
|
+
const objectPaths = assembled.units.map((_, index) => index === 0 ? "/program.o" : `/program.${index}.o`);
|
|
1189
|
+
assembled.units.forEach((unit, index) => this.writeExecutableSync(objectPaths[index], unit.object));
|
|
1190
|
+
this.beginLinking();
|
|
1020
1191
|
await defer();
|
|
1021
|
-
this.setEmulationArgs("/linker", this.mode.binaries.linker?.
|
|
1192
|
+
this.setEmulationArgs("/linker", this.mode.binaries.linker?.link(objectPaths) ?? "", "");
|
|
1022
1193
|
this.module._blinkenlib_run_fast();
|
|
1023
1194
|
await this.waitForState((state) => state !== "LINKING");
|
|
1024
1195
|
}
|
|
1196
|
+
/**
|
|
1197
|
+
* Starts the link, and starts a log of its own for it. The assembler's parser cannot read
|
|
1198
|
+
* `ld`'s diagnostics and `ld`'s cannot read the assembler's, so what each of them said has to
|
|
1199
|
+
* stay separable even though both reach the caller as one report.
|
|
1200
|
+
*/
|
|
1201
|
+
beginLinking() {
|
|
1202
|
+
this.linkerLogs = "";
|
|
1203
|
+
this.setState("LINKING");
|
|
1204
|
+
}
|
|
1025
1205
|
collectAssemblerDiagnostics() {
|
|
1026
1206
|
this.assemblerDiagnostics = this.mode.diagnosticsParser?.(this.assemblerLogs) ?? [];
|
|
1027
1207
|
this.assemblerErrors = this.assemblerDiagnostics.filter((diagnostic) => diagnostic.severity === "error");
|
|
@@ -1218,7 +1398,10 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
1218
1398
|
this.module.blinkenlibSetRunControls(BigInt(limit), (options.breakpointAddresses ?? []).map((address) => address.toString()));
|
|
1219
1399
|
}
|
|
1220
1400
|
collectAssemblerLog(charCode) {
|
|
1221
|
-
if (this.state
|
|
1401
|
+
if (this.state !== "ASSEMBLING" && this.state !== "LINKING") return;
|
|
1402
|
+
const character = String.fromCharCode(charCode);
|
|
1403
|
+
this.assemblerLogs += character;
|
|
1404
|
+
if (this.state === "LINKING" && this.linkerLogs !== null) this.linkerLogs += character;
|
|
1222
1405
|
}
|
|
1223
1406
|
handleSignal(signal, code) {
|
|
1224
1407
|
if (signal !== SIGNALS.SIGTRAP) {
|
|
@@ -1297,9 +1480,9 @@ var BlinkRuntime = class BlinkRuntime {
|
|
|
1297
1480
|
this.setState("PROGRAM_LOADED");
|
|
1298
1481
|
return;
|
|
1299
1482
|
}
|
|
1300
|
-
this.
|
|
1483
|
+
this.beginLinking();
|
|
1301
1484
|
this.scheduler(() => {
|
|
1302
|
-
this.setEmulationArgs("/linker", this.mode.binaries.linker?.
|
|
1485
|
+
this.setEmulationArgs("/linker", this.mode.binaries.linker?.link(["/program.o"]) ?? "", "");
|
|
1303
1486
|
this.module._blinkenlib_run_fast();
|
|
1304
1487
|
});
|
|
1305
1488
|
}
|
|
@@ -2020,6 +2203,6 @@ async function createX86Emulator(options = {}) {
|
|
|
2020
2203
|
return X86Emulator.create(options);
|
|
2021
2204
|
}
|
|
2022
2205
|
//#endregion
|
|
2023
|
-
export { BaseEmulator, BlinkRuntime, BlinkState, DEFAULT_ASSEMBLER_ID, EmulatorStatus, RegisterSize, X86Emulator, X86_PROJECT_ROOT, X86_REGISTER_NAMES, assemblers, createX86Emulator, defaultResourceUrl, fasmDiagnostics, gnuDiagnostics, isNodeRuntime, locateDiagnosticColumn, nasmDiagnostics, observeCallbackResult, readResourceBytes, stageX86Project, toResourceUrl, validateX86Project, x86ProjectSourcePath, x86ProjectText };
|
|
2206
|
+
export { BaseEmulator, BlinkRuntime, BlinkState, DEFAULT_ASSEMBLER_ID, EmulatorStatus, RegisterSize, X86Emulator, X86_PROJECT_ROOT, X86_REGISTER_NAMES, assemblers, createX86Emulator, defaultResourceUrl, fasmDiagnostics, gnuDiagnostics, isNodeRuntime, ldDiagnostics, locateDiagnosticColumn, nasmDiagnostics, observeCallbackResult, readResourceBytes, selectX86Source, stageX86Project, toResourceUrl, validateX86Project, x86ProjectSourcePath, x86ProjectText };
|
|
2024
2207
|
|
|
2025
2208
|
//# sourceMappingURL=index.mjs.map
|