Fix for win32 link-binary (#8236)

(+ a rename).
Turns out when 'Link to Binary' was checked, msvc objdumped the obj (not
exe) file. This fixes it.
This commit is contained in:
Ofek
2025-11-01 12:54:31 +02:00
committed by GitHub
parent 7615e89598
commit 901b7e1826
12 changed files with 57 additions and 21 deletions

View File

@@ -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 = '<No output file ' + outputFilename + '>';
if (!(await utils.fileExists(objdumpInputFile))) {
result.asm = '<No output file ' + objdumpInputFile + '>';
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(

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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');
}

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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');
}

View File

@@ -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')) {

View File

@@ -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;
}
}

30
package-lock.json generated
View File

@@ -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",

View File

@@ -70,7 +70,7 @@ describe('Resolc', () => {
`${expectedFilenameWithoutExtension}.unoptimized.ll`,
);
expect(compiler.getObjdumpOutputFilename(defaultOutputFilename)).toEqual(
expect(compiler.getObjdumpInputFilename(defaultOutputFilename)).toEqual(
`${expectedFilenameWithoutExtension}.o`,
);
}