@@ -197,6 +197,9 @@ static void print_map(struct ksyms *ksyms, struct syms_cache *syms_cache,
197
197
int err , i , ifd , sfd ;
198
198
unsigned long * ip ;
199
199
struct val_t val ;
200
+ char * dso_name ;
201
+ unsigned long dso_offset ;
202
+ int idx ;
200
203
201
204
ip = calloc (env .perf_max_stack_depth , sizeof (* ip ));
202
205
if (!ip ) {
@@ -207,6 +210,8 @@ static void print_map(struct ksyms *ksyms, struct syms_cache *syms_cache,
207
210
ifd = bpf_map__fd (obj -> maps .info );
208
211
sfd = bpf_map__fd (obj -> maps .stackmap );
209
212
while (!bpf_map_get_next_key (ifd , & lookup_key , & next_key )) {
213
+ idx = 0 ;
214
+
210
215
err = bpf_map_lookup_elem (ifd , & next_key , & val );
211
216
if (err < 0 ) {
212
217
fprintf (stderr , "failed to lookup info: %d\n" , err );
@@ -219,9 +224,17 @@ static void print_map(struct ksyms *ksyms, struct syms_cache *syms_cache,
219
224
fprintf (stderr , " [Missed Kernel Stack]\n" );
220
225
goto print_ustack ;
221
226
}
227
+
222
228
for (i = 0 ; i < env .perf_max_stack_depth && ip [i ]; i ++ ) {
223
229
ksym = ksyms__map_addr (ksyms , ip [i ]);
224
- printf (" %s\n" , ksym ? ksym -> name : "Unknown" );
230
+ if (!env .verbose ) {
231
+ printf (" %s\n" , ksym ? ksym -> name : "unknown" );
232
+ } else {
233
+ if (ksym )
234
+ printf (" #%-2d 0x%lx %s+0x%lx\n" , idx ++ , ip [i ], ksym -> name , ip [i ] - ksym -> addr );
235
+ else
236
+ printf (" #%-2d 0x%lx [unknown]\n" , idx ++ , ip [i ]);
237
+ }
225
238
}
226
239
227
240
print_ustack :
@@ -235,15 +248,30 @@ static void print_map(struct ksyms *ksyms, struct syms_cache *syms_cache,
235
248
236
249
syms = syms_cache__get_syms (syms_cache , next_key .tgid );
237
250
if (!syms ) {
238
- fprintf (stderr , "failed to get syms\n" );
251
+ if (!env .verbose ) {
252
+ fprintf (stderr , "failed to get syms\n" );
253
+ } else {
254
+ for (i = 0 ; i < env .perf_max_stack_depth && ip [i ]; i ++ )
255
+ printf (" #%-2d 0x%016lx [unknown]\n" , idx ++ , ip [i ]);
256
+ }
239
257
goto skip_ustack ;
240
258
}
241
259
for (i = 0 ; i < env .perf_max_stack_depth && ip [i ]; i ++ ) {
242
- sym = syms__map_addr (syms , ip [i ]);
243
- if (sym )
244
- printf (" %s\n" , sym -> name );
245
- else
246
- printf (" [unknown]\n" );
260
+ if (!env .verbose ) {
261
+ sym = syms__map_addr (syms , ip [i ]);
262
+ if (sym )
263
+ printf (" %s\n" , sym -> name );
264
+ else
265
+ printf (" [unknown]\n" );
266
+ } else {
267
+ sym = syms__map_addr_dso (syms , ip [i ], & dso_name , & dso_offset );
268
+ printf (" #%-2d 0x%016lx" , idx ++ , ip [i ]);
269
+ if (sym )
270
+ printf (" %s+0x%lx" , sym -> name , sym -> offset );
271
+ if (dso_name )
272
+ printf (" (%s+0x%lx)" , dso_name , dso_offset );
273
+ printf ("\n" );
274
+ }
247
275
}
248
276
249
277
skip_ustack :
0 commit comments