diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts index 605db4a7c..9a49130e4 100644 --- a/lib/base-compiler.ts +++ b/lib/base-compiler.ts @@ -630,7 +630,7 @@ export class BaseCompiler { return !!this.objdumperClass; } - getObjdumpOutputFilename(defaultOutputFilename: string): string { + getObjdumpInputFilename(defaultOutputFilename: string, filters?: ParseFiltersAndOutputOptions): string { return defaultOutputFilename; } @@ -648,21 +648,22 @@ export class BaseCompiler { dynamicReloc: boolean, filters: ParseFiltersAndOutputOptions, ) { - outputFilename = this.getObjdumpOutputFilename(outputFilename); + const objdumpInputFile = this.getObjdumpInputFilename(outputFilename, filters); - if (!(await utils.fileExists(outputFilename))) { - result.asm = ''; + if (!(await utils.fileExists(objdumpInputFile))) { + result.asm = ''; return result; } const objdumper = new this.objdumperClass(); const args = objdumper.getArgs( - outputFilename, + objdumpInputFile, demangle, intelAsm, staticReloc, dynamicReloc, this.compiler.objdumperArgs, + filters, ); if (this.externalparser) { @@ -676,7 +677,7 @@ export class BaseCompiler { } else { const execOptions: ExecutionOptions = { maxOutput: maxSize, - customCwd: (result.dirPath as string) || path.dirname(outputFilename), + customCwd: (result.dirPath as string) || path.dirname(objdumpInputFile), }; const objResult = await objdumper.executeObjdump( diff --git a/lib/compilers/assembly.ts b/lib/compilers/assembly.ts index d469143d0..bc890b08d 100644 --- a/lib/compilers/assembly.ts +++ b/lib/compilers/assembly.ts @@ -206,7 +206,7 @@ export class AssemblyCompiler extends BaseCompiler { return this.postProcess(asmResult, outputFilename, filters); } - override getObjdumpOutputFilename(defaultOutputFilename: string): string { + override getObjdumpInputFilename(defaultOutputFilename: string): string { return this.getGeneratedOutputFilename(defaultOutputFilename); } diff --git a/lib/compilers/crystal.ts b/lib/compilers/crystal.ts index b9cb8d631..4f460303d 100644 --- a/lib/compilers/crystal.ts +++ b/lib/compilers/crystal.ts @@ -99,7 +99,7 @@ export class CrystalCompiler extends BaseCompiler { return path.join(dirPath, outputFilebase); } - override getObjdumpOutputFilename(defaultOutputFilename: string) { + override getObjdumpInputFilename(defaultOutputFilename: string) { return this.getExecutableFilename(path.dirname(defaultOutputFilename), this.outputFilebase); } diff --git a/lib/compilers/jakt.ts b/lib/compilers/jakt.ts index 0fe6d84d4..337f6b375 100644 --- a/lib/compilers/jakt.ts +++ b/lib/compilers/jakt.ts @@ -74,7 +74,7 @@ export class JaktCompiler extends BaseCompiler { return ['--binary-dir', path.dirname(outputFilename)]; } - override getObjdumpOutputFilename(defaultOutputFilename: string) { + override getObjdumpInputFilename(defaultOutputFilename: string) { const parsed_path = path.parse(defaultOutputFilename); return path.join(parsed_path.dir, this.outputFilebase); diff --git a/lib/compilers/resolc.ts b/lib/compilers/resolc.ts index c0140831b..01bdc6768 100644 --- a/lib/compilers/resolc.ts +++ b/lib/compilers/resolc.ts @@ -128,7 +128,7 @@ export class ResolcCompiler extends BaseCompiler { return this.getOutputFilenameWithExtension(path.dirname(inputFilename), extension); } - override getObjdumpOutputFilename(defaultOutputFilename: string): string { + override getObjdumpInputFilename(defaultOutputFilename: string): string { return changeExtension(defaultOutputFilename, '.o'); } diff --git a/lib/compilers/spice.ts b/lib/compilers/spice.ts index de4fa1cd2..21b33740e 100644 --- a/lib/compilers/spice.ts +++ b/lib/compilers/spice.ts @@ -119,7 +119,7 @@ export class SpiceCompiler extends BaseCompiler { return path.join(dirPath, 'example-ir-code' + this.optLevelSuffix + '.ll'); } - override getObjdumpOutputFilename(inputFilename: string): string { + override getObjdumpInputFilename(inputFilename: string): string { const dirPath = path.dirname(inputFilename); return path.join(dirPath, this.outputFilebase); } diff --git a/lib/compilers/win32.ts b/lib/compilers/win32.ts index 83fcdfa13..fed83ad15 100644 --- a/lib/compilers/win32.ts +++ b/lib/compilers/win32.ts @@ -34,7 +34,7 @@ import type {PreliminaryCompilerInfo} from '../../types/compiler.interfaces.js'; import {UnprocessedExecResult} from '../../types/execution/execution.interfaces.js'; import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js'; import {SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces.js'; -import {unwrap} from '../assert.js'; +import {assert, unwrap} from '../assert.js'; import {BaseCompiler} from '../base-compiler.js'; import {copyNeededDlls} from '../binaries/win-utils.js'; import {CompilationEnvironment} from '../compilation-env.js'; @@ -99,6 +99,16 @@ export class Win32Compiler extends BaseCompiler { return this.getOutputFilename(dirPath, outputFilebase, key) + '.exe'; } + override getObjdumpInputFilename(baseFilename: string, filters?: ParseFiltersAndOutputOptions): string { + if (filters?.binary) { + return baseFilename + '.exe'; + } + if (filters?.binaryObject) { + return baseFilename + '.obj'; + } + assert(false, 'getObjdumpInputFilename called without binary or binaryObject filter'); + } + override getSharedLibraryPathsAsArguments( libraries: SelectedLibraryVersion[], libDownloadPath: string | undefined, diff --git a/lib/compilers/wine-vc.ts b/lib/compilers/wine-vc.ts index 6cf3e35e4..10b88f068 100644 --- a/lib/compilers/wine-vc.ts +++ b/lib/compilers/wine-vc.ts @@ -76,7 +76,7 @@ export class WineVcCompiler extends BaseCompiler { return this.getOutputFilename(dirPath, outputFilebase) + '.exe'; } - override getObjdumpOutputFilename(defaultOutputFilename: string) { + override getObjdumpInputFilename(defaultOutputFilename: string) { return this.getExecutableFilename(path.dirname(defaultOutputFilename), 'output'); } diff --git a/lib/compilers/z88dk.ts b/lib/compilers/z88dk.ts index 71ee8d1d9..b0b99093d 100644 --- a/lib/compilers/z88dk.ts +++ b/lib/compilers/z88dk.ts @@ -117,7 +117,7 @@ export class z88dkCompiler extends BaseCompiler { return opts; } - override getObjdumpOutputFilename(defaultOutputFilename: string) { + override getObjdumpInputFilename(defaultOutputFilename: string) { return defaultOutputFilename; } @@ -143,7 +143,7 @@ export class z88dkCompiler extends BaseCompiler { dynamicReloc: boolean, filters: ParseFiltersAndOutputOptions, ) { - outputFilename = this.getObjdumpOutputFilename(outputFilename); + outputFilename = this.getObjdumpInputFilename(outputFilename); // sometimes (with +z80 for example) the .bin file is written and the .s file is empty if (await utils.fileExists(outputFilename + '.bin')) { diff --git a/lib/objdumper/vc.ts b/lib/objdumper/vc.ts index 79f4a249c..21456f974 100644 --- a/lib/objdumper/vc.ts +++ b/lib/objdumper/vc.ts @@ -35,7 +35,7 @@ export class VcObjdumper extends BaseObjdumper { } override getArgs( - outputFilename: string, + inputFilename: string, demangle?: boolean, intelAsm?: boolean, staticReloc?: boolean, @@ -45,7 +45,6 @@ export class VcObjdumper extends BaseObjdumper { ) { // Not setting /OUT, as CE wants the output on stdout const args = ['/LINENUMBERS', '/DISASM']; - // TODO: check if this actually does anything: if (filters?.directives) args.push('/DIRECTIVES'); // if (staticReloc || dynamicReloc) args.push('/RELOCATIONS'); @@ -54,7 +53,7 @@ export class VcObjdumper extends BaseObjdumper { // TODO: disable intel-syntax checkbox as selected, dumpbin supports only that if (objdumperArguments) args.push(...objdumperArguments); - args.push(`${outputFilename}.obj`); + args.push(inputFilename); return args; } } diff --git a/package-lock.json b/package-lock.json index a3e71c4ce..64a2cbf71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2879,6 +2879,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -2900,6 +2901,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz", "integrity": "sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.19.0 || >=20.6.0" }, @@ -2912,6 +2914,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.2.0.tgz", "integrity": "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -2927,6 +2930,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.204.0.tgz", "integrity": "sha512-vV5+WSxktzoMP8JoYWKeopChy6G3HKk4UQ2hESCRDUUTZqQ3+nM3u8noVG0LmNfRWwcFBnbZ71GKC7vaYYdJ1g==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.204.0", "import-in-the-middle": "^1.8.1", @@ -3334,6 +3338,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.2.0.tgz", "integrity": "sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -3350,6 +3355,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz", "integrity": "sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/resources": "2.2.0", @@ -3367,6 +3373,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=14" } @@ -3737,6 +3744,7 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -6064,6 +6072,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6111,6 +6120,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6671,6 +6681,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -8221,6 +8232,7 @@ "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -8844,6 +8856,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -11557,7 +11570,8 @@ "version": "0.49.0", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.49.0.tgz", "integrity": "sha512-2I8/T3X/hLxB2oPHgqcNYUVdA/ZEFShT7IAujifIPMfKkNbLOqY8XCoyHCXrsdjb36dW9MwoTwBCFpXKMwNwaQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/monaco-editor-webpack-plugin": { "version": "7.1.0", @@ -12576,6 +12590,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -13895,6 +13910,7 @@ "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -14974,6 +14990,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -15163,6 +15180,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15387,13 +15405,15 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsx": { "version": "4.20.6", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -15557,6 +15577,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15760,6 +15781,7 @@ "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -15876,6 +15898,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15889,6 +15912,7 @@ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", @@ -16009,6 +16033,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -16058,6 +16083,7 @@ "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", diff --git a/test/resolc-tests.ts b/test/resolc-tests.ts index 92902f183..c899bf652 100644 --- a/test/resolc-tests.ts +++ b/test/resolc-tests.ts @@ -70,7 +70,7 @@ describe('Resolc', () => { `${expectedFilenameWithoutExtension}.unoptimized.ll`, ); - expect(compiler.getObjdumpOutputFilename(defaultOutputFilename)).toEqual( + expect(compiler.getObjdumpInputFilename(defaultOutputFilename)).toEqual( `${expectedFilenameWithoutExtension}.o`, ); }