chromium: debug skia-segfault
This commit is contained in:
@@ -9,3 +9,10 @@ import { local } from './environment/index.js';
|
|||||||
* Local directory for chromium - related debugging.
|
* 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