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