Skip to content

Commit c42447c

Browse files
committed
[WIP] Strip debug symbols from kernel
1 parent f48ec03 commit c42447c

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

build.rs

+21-8
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ fn main() {
3838
.expect("KERNEL has no valid file name")
3939
.to_str()
4040
.expect("kernel file name not valid utf8");
41-
let kernel_file_name_replaced = kernel_file_name.replace('-', "_");
41+
let kernel_stripped_file_name = format!("kernel_stripped-{}", kernel_file_name);
42+
let kernel_stripped_file_name_replaced = kernel_stripped_file_name.replace('-', "_");
43+
let kernel_stripped_out_path = out_dir.join(&kernel_stripped_file_name);
4244
let kernel_out_path = out_dir.join(format!("kernel_bin-{}.o", kernel_file_name));
4345
let kernel_archive_path = out_dir.join(format!("libkernel_bin-{}.a", kernel_file_name));
4446

@@ -74,29 +76,40 @@ fn main() {
7476
Kernel executable at `{}`\n", kernel.display());
7577
}
7678

77-
// wrap the kernel executable as binary in a new ELF file
79+
// strip debug symbols from kernel for faster loading
7880
let objcopy = llvm_tools
7981
.tool(&llvm_tools::exe("llvm-objcopy"))
8082
.expect("llvm-objcopy not found in llvm-tools");
81-
let mut cmd = Command::new(objcopy);
83+
let mut cmd = Command::new(&objcopy);
84+
cmd.arg("--strip-debug");
85+
cmd.arg(&kernel);
86+
cmd.arg(&kernel_stripped_out_path);
87+
let exit_status = cmd.status().expect("failed to run objcopy to strip debug symbols");
88+
if !exit_status.success() {
89+
eprintln!("Error: Stripping debug symbols failed");
90+
process::exit(1);
91+
}
92+
93+
// wrap the kernel executable as binary in a new ELF file
94+
let mut cmd = Command::new(&objcopy);
8295
cmd.arg("-I").arg("binary");
8396
cmd.arg("-O").arg("elf64-x86-64");
8497
cmd.arg("--binary-architecture=i386:x86-64");
8598
cmd.arg("--rename-section").arg(".data=.kernel");
8699
cmd.arg("--redefine-sym").arg(format!(
87100
"_binary_{}_start=_kernel_start_addr",
88-
kernel_file_name_replaced
101+
kernel_stripped_file_name_replaced
89102
));
90103
cmd.arg("--redefine-sym").arg(format!(
91104
"_binary_{}_end=_kernel_end_addr",
92-
kernel_file_name_replaced
105+
kernel_stripped_file_name_replaced
93106
));
94107
cmd.arg("--redefine-sym").arg(format!(
95108
"_binary_{}_size=_kernel_size",
96-
kernel_file_name_replaced
109+
kernel_stripped_file_name_replaced
97110
));
98-
cmd.current_dir(kernel.parent().expect("KERNEL has no valid parent dir"));
99-
cmd.arg(&kernel_file_name);
111+
cmd.current_dir(&out_dir);
112+
cmd.arg(&kernel_stripped_file_name);
100113
cmd.arg(&kernel_out_path);
101114
let exit_status = cmd.status().expect("failed to run objcopy");
102115
if !exit_status.success() {

0 commit comments

Comments
 (0)