chromium: debug skia-segfault

This commit is contained in:
2024-09-11 20:13:29 +08:00
parent 09c12f30de
commit 2b34c4774c
5 changed files with 120 additions and 1 deletions

View File

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

View File

@@ -0,0 +1,4 @@
import path from 'path';
import * as chromium from '../chromium.js'
export const dir = path.resolve(chromium.dir, 'skia-segfault');

View 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'),
]))

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

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