Skip to content

Commit 1986a80

Browse files
committed
Enable cfg for x86 LLVM based compilers and gcc.
1 parent f523db6 commit 1986a80

File tree

7 files changed

+29
-4
lines changed

7 files changed

+29
-4
lines changed

lib/base-compiler.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,8 @@ class BaseCompiler {
493493
.then(result => filters.demangle ? this.postProcessAsm(result, filters) : result)
494494
.then(result => {
495495
if (this.compiler.supportsCfg && backendOptions && backendOptions.produceCfg) {
496-
result.cfg = cfg.generateStructure(this.compiler.version, result.asm);
496+
result.cfg = cfg.generateStructure(this.compiler.compilerType,
497+
this.compiler.version, result.asm);
497498
}
498499
return result;
499500
})
@@ -566,6 +567,7 @@ class BaseCompiler {
566567
isCfgCompiler(compilerVersion) {
567568
return compilerVersion.includes("clang") ||
568569
compilerVersion.indexOf("g++") === 0 ||
570+
compilerVersion.indexOf("gcc") === 0 ||
569571
compilerVersion.indexOf("gdc") === 0;
570572
}
571573

lib/cfg.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,17 @@ function makeEdges(asmArr, arrOfCanonicalBasicBlock, rules) {
273273
return edges;
274274
}
275275

276+
function isLLVMBased(compilerType, version) {
277+
return version.includes('clang') ||
278+
version.includes('LLVM') ||
279+
version.includes('rustc') ||
280+
compilerType === 'swift' ||
281+
compilerType === 'zig' ||
282+
compilerType === 'ispc';
283+
}
276284

277-
function generateCfgStructure(version, asmArr) {
278-
const rules = (version.includes('clang') || version.includes('LLVM')) ? clangX86 : gccX86;
285+
function generateCfgStructure(compilerType, version, asmArr) {
286+
const rules = isLLVMBased(compilerType, version) ? clangX86 : gccX86;
279287
const code = rules.filterData(asmArr);
280288
const funcs = splitToFunctions(code, rules.isFunctionEnd);
281289
if (!funcs.length) {

lib/compilers/ispc.js

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class ISPCCompiler extends BaseCompiler {
2828
optionsForFilter(filters, outputFilename) {
2929
return ['--target=sse2-i32x4', '--emit-asm', '-g', '-o', this.filename(outputFilename)];
3030
}
31+
32+
isCfgCompiler(/*compilerVersion*/) {
33+
return true;
34+
}
3135
}
3236

3337
module.exports = ISPCCompiler;

lib/compilers/rust.js

+4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ class RustCompiler extends BaseCompiler {
4545
options = options.concat(['--crate-type', 'rlib']);
4646
return options;
4747
}
48+
49+
isCfgCompiler(/*compilerVersion*/) {
50+
return true;
51+
}
4852
}
4953

5054
module.exports = RustCompiler;

lib/compilers/swift.js

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
const BaseCompiler = require('../base-compiler');
2626

2727
class SwiftCompiler extends BaseCompiler {
28+
isCfgCompiler(/*compilerVersion*/) {
29+
return true;
30+
}
2831
}
2932

3033
module.exports = SwiftCompiler;

lib/compilers/zig.js

+4
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ class ZigCompiler extends BaseCompiler {
8484
const blacklist = /^(((--(cache-dir|name|output|verbose))|(-mllvm)).*)$/;
8585
return _.filter(userOptions, option => !blacklist.test(option));
8686
}
87+
88+
isCfgCompiler(/*compilerVersion*/) {
89+
return true;
90+
}
8791
}
8892

8993
module.exports = ZigCompiler;

test/cfg-tests.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function common(cases, filterArg, cfgArg) {
3838
const file = fs.readFileSync(filename, 'utf-8');
3939
if (file) {
4040
const contents = JSON.parse(file);
41-
assert.deepEqual(cfg.generateStructure(cfgArg, contents.asm), contents.cfg, `${filename}`);
41+
assert.deepEqual(cfg.generateStructure('', cfgArg, contents.asm), contents.cfg, `${filename}`);
4242
}
4343
});
4444
}

0 commit comments

Comments
 (0)