@@ -229,6 +229,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
229
229
unsigned char buf2 [BUFSZ ];
230
230
size_t ret_len ;
231
231
u64 objdump_addr ;
232
+ const char * objdump_name ;
233
+ char decomp_name [KMOD_DECOMP_LEN ];
232
234
int ret ;
233
235
234
236
pr_debug ("Reading object code for memory address: %#" PRIx64 "\n" , addr );
@@ -289,9 +291,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
289
291
state -> done [state -> done_cnt ++ ] = al .map -> start ;
290
292
}
291
293
294
+ objdump_name = al .map -> dso -> long_name ;
295
+ if (dso__needs_decompress (al .map -> dso )) {
296
+ if (dso__decompress_kmodule_path (al .map -> dso , objdump_name ,
297
+ decomp_name ,
298
+ sizeof (decomp_name )) < 0 ) {
299
+ pr_debug ("decompression failed\n" );
300
+ return -1 ;
301
+ }
302
+
303
+ objdump_name = decomp_name ;
304
+ }
305
+
292
306
/* Read the object code using objdump */
293
307
objdump_addr = map__rip_2objdump (al .map , al .addr );
294
- ret = read_via_objdump (al .map -> dso -> long_name , objdump_addr , buf2 , len );
308
+ ret = read_via_objdump (objdump_name , objdump_addr , buf2 , len );
309
+
310
+ if (dso__needs_decompress (al .map -> dso ))
311
+ unlink (objdump_name );
312
+
295
313
if (ret > 0 ) {
296
314
/*
297
315
* The kernel maps are inaccurate - assume objdump is right in
0 commit comments