mirror of
https://github.com/compiler-explorer/compiler-explorer.git
synced 2025-12-27 07:04:04 -05:00
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:
@@ -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(
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
@@ -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')) {
|
||||
|
||||
@@ -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
30
package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -70,7 +70,7 @@ describe('Resolc', () => {
|
||||
`${expectedFilenameWithoutExtension}.unoptimized.ll`,
|
||||
);
|
||||
|
||||
expect(compiler.getObjdumpOutputFilename(defaultOutputFilename)).toEqual(
|
||||
expect(compiler.getObjdumpInputFilename(defaultOutputFilename)).toEqual(
|
||||
`${expectedFilenameWithoutExtension}.o`,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user