@@ -40,7 +40,9 @@ fn main() {
40
40
. expect ( "KERNEL has no valid file name" )
41
41
. to_str ( )
42
42
. 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) ;
44
46
let kernel_out_path = out_dir. join ( format ! ( "kernel_bin-{}.o" , kernel_file_name) ) ;
45
47
let kernel_archive_path = out_dir. join ( format ! ( "libkernel_bin-{}.a" , kernel_file_name) ) ;
46
48
@@ -76,29 +78,40 @@ fn main() {
76
78
Kernel executable at `{}`\n ", kernel. display( ) ) ;
77
79
}
78
80
79
- // wrap the kernel executable as binary in a new ELF file
81
+ // strip debug symbols from kernel for faster loading
80
82
let objcopy = llvm_tools
81
83
. tool ( & llvm_tools:: exe ( "llvm-objcopy" ) )
82
84
. 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) ;
84
97
cmd. arg ( "-I" ) . arg ( "binary" ) ;
85
98
cmd. arg ( "-O" ) . arg ( "elf64-x86-64" ) ;
86
99
cmd. arg ( "--binary-architecture=i386:x86-64" ) ;
87
100
cmd. arg ( "--rename-section" ) . arg ( ".data=.kernel" ) ;
88
101
cmd. arg ( "--redefine-sym" ) . arg ( format ! (
89
102
"_binary_{}_start=_kernel_start_addr" ,
90
- kernel_file_name_replaced
103
+ kernel_stripped_file_name_replaced
91
104
) ) ;
92
105
cmd. arg ( "--redefine-sym" ) . arg ( format ! (
93
106
"_binary_{}_end=_kernel_end_addr" ,
94
- kernel_file_name_replaced
107
+ kernel_stripped_file_name_replaced
95
108
) ) ;
96
109
cmd. arg ( "--redefine-sym" ) . arg ( format ! (
97
110
"_binary_{}_size=_kernel_size" ,
98
- kernel_file_name_replaced
111
+ kernel_stripped_file_name_replaced
99
112
) ) ;
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 ) ;
102
115
cmd. arg ( & kernel_out_path) ;
103
116
let exit_status = cmd. status ( ) . expect ( "failed to run objcopy" ) ;
104
117
if !exit_status. success ( ) {
0 commit comments