chromium: debug skia-segfault
This commit is contained in:
@@ -8,4 +8,11 @@ import { local } from './environment/index.js';
|
||||
/**
|
||||
* Local directory for chromium - related debugging.
|
||||
*/
|
||||
export const dir = path.resolve(local, 'chromium')
|
||||
export const dir = path.resolve(local, 'chromium')
|
||||
|
||||
export const chromiumSource = '/home/lyc/swchromium-102.0.5005.115';
|
||||
|
||||
/**
|
||||
* Vendored executable binary of "gn" executable.
|
||||
*/
|
||||
export const gnExe = path.resolve(chromiumSource, 'buildtools', 'linux64', 'gn-linux-sw64');
|
||||
4
src/chromium/skia-segfault.ts
Normal file
4
src/chromium/skia-segfault.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import path from 'path';
|
||||
import * as chromium from '../chromium.js'
|
||||
|
||||
export const dir = path.resolve(chromium.dir, 'skia-segfault');
|
||||
18
src/chromium/skia-segfault/compare.ts
Normal file
18
src/chromium/skia-segfault/compare.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { spawn } from 'child_process';
|
||||
import path from 'path';
|
||||
import { promisifySpawn } from '../../cli.js';
|
||||
import { dir } from '../skia-segfault.js';
|
||||
import { chromiumSource } from '../../chromium.js';
|
||||
|
||||
const chromiumBuild = path.resolve(
|
||||
chromiumSource,
|
||||
'out',
|
||||
'c9094783eb43868cdbcf26b3266b0231d8fbd6e6',
|
||||
'Release',
|
||||
)
|
||||
|
||||
await promisifySpawn(spawn('code-oss', [
|
||||
"--diff",
|
||||
path.resolve(chromiumBuild, 'SkOpts.PU3.s'),
|
||||
path.resolve(dir, 'extract.s'),
|
||||
]))
|
||||
67
src/chromium/skia-segfault/extract.ts
Normal file
67
src/chromium/skia-segfault/extract.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* Try to extract skia SkOpts.ll
|
||||
*/
|
||||
|
||||
import { spawn } from 'child_process';
|
||||
import { llvmToolchain } from '../../toolchain/index.js';
|
||||
import * as compiler from '../../commands/compiler.js';
|
||||
import path from 'path';
|
||||
import { promisifySpawn } from '../../cli.js';
|
||||
import fs from 'fs';
|
||||
import { dir } from '../skia-segfault.js';
|
||||
|
||||
const tc = llvmToolchain('/tmp/llvm-ly-install/c9094783eb43868cdbcf26b3266b0231d8fbd6e6');
|
||||
|
||||
const extractProcess = spawn(tc.LLVM_EXTRACT, [
|
||||
...compiler.extractCommand({
|
||||
asm: true,
|
||||
func: ['_ZN8portable20blit_row_s32a_opaqueEPjPKjij'],
|
||||
output: '-',
|
||||
input: '/home/lyc/swchromium-102.0.5005.115/out/c9094783eb43868cdbcf26b3266b0231d8fbd6e6/Release/SkOpts.ll',
|
||||
})
|
||||
]);
|
||||
|
||||
const llcProcess = spawn(tc.CC, [
|
||||
"-x", "ir",
|
||||
"-",
|
||||
...compiler.generalCommand({
|
||||
outputKind: "assembly",
|
||||
output: "-",
|
||||
}),
|
||||
...compiler.optimizeOptions({
|
||||
optimize: "2"
|
||||
}),
|
||||
...compiler.sw64TargetOptions({
|
||||
simd: true,
|
||||
})
|
||||
]);
|
||||
|
||||
const toObjectProcess = spawn(tc.CC, [
|
||||
"-x", "ir",
|
||||
"-",
|
||||
...compiler.generalCommand({
|
||||
outputKind: "object",
|
||||
output: "-",
|
||||
}),
|
||||
...compiler.optimizeOptions({
|
||||
optimize: "2"
|
||||
}),
|
||||
...compiler.sw64TargetOptions({
|
||||
simd: true,
|
||||
})
|
||||
]);
|
||||
|
||||
await fs.promises.mkdir(dir, { recursive: true });
|
||||
|
||||
[llcProcess, toObjectProcess].map(x => { extractProcess.stdout.pipe(x.stdin); });
|
||||
extractProcess.stdout.pipe(fs.createWriteStream(path.resolve(dir, 'extract.ll')));
|
||||
|
||||
|
||||
llcProcess.stdout.pipe(fs.createWriteStream(path.resolve(dir, 'extract.s')));
|
||||
toObjectProcess.stdout.pipe(fs.createWriteStream(path.resolve(dir, 'extract.o')));
|
||||
|
||||
const processes = [llcProcess, extractProcess, toObjectProcess];
|
||||
|
||||
processes.map(x => x.stderr.pipe(process.stderr));
|
||||
|
||||
await Promise.all(processes.map(promisifySpawn));
|
||||
23
src/chromium/skia-segfault/replaceObject.ts
Normal file
23
src/chromium/skia-segfault/replaceObject.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* 那个,你按照无锡的方法替换一下这个*.o变成scalar,重新生成一个chrome,看看还seg不?
|
||||
* 就是这个o用scalar,和以前的其他o弄到一起
|
||||
*/
|
||||
|
||||
import path from 'path';
|
||||
import { chromiumSource } from '../../chromium.js';
|
||||
import * as fs from 'fs';
|
||||
|
||||
const objects = [
|
||||
"obj/skia/skia_core_and_effects/SkBlitRow_D32.o",
|
||||
"obj/skia/skia_core_and_effects/SkOpts.o",
|
||||
];
|
||||
|
||||
|
||||
// Copy scalar objects to SIMD directory
|
||||
const scalarBuild = path.resolve(chromiumSource, "out", "Release");
|
||||
const simdBuild = path.resolve(chromiumSource, "out", "c9094783eb43868cdbcf26b3266b0231d8fbd6e6", "Release");
|
||||
|
||||
await Promise.all(objects.map(async x => {
|
||||
// Copy object from scalar directory to simd directory
|
||||
await fs.promises.copyFile(path.resolve(scalarBuild, x), path.resolve(simdBuild, x));
|
||||
}))
|
||||
Reference in New Issue
Block a user