Skip to content

Commit 74b5eed

Browse files
committed
[WIP] Strip debug symbols from kernel
1 parent 12645da commit 74b5eed

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

Diff for: build.rs

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

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

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

0 commit comments

Comments
 (0)