@@ -49,45 +49,36 @@ struct callstack_s *callstack_current(void)
49
49
return cs ;
50
50
}
51
51
52
- const char * callstack_string (struct callstack_s * cs )
52
+ void callstack_print (struct callstack_s * cs )
53
53
{
54
- if (cs -> string != NULL ) {
55
- return cs -> string ;
56
- }
57
-
58
- char buffer [10000 ], * p = buffer ;
59
54
int offset , lineno , i ;
60
55
for (i = 0 ; i < cs -> ip_num ; i ++ ) {
61
56
uintptr_t address = cs -> ips [i ];
62
57
if (address == 0 ) {
63
58
break ;
64
59
}
65
60
66
- p += sprintf ( p , " 0x%016lx" , address );
61
+ printf ( " 0x%016lx" , address );
67
62
68
- p += sprintf ( p , " %s" , addr_maps_search (address ));
63
+ printf ( " %s" , addr_maps_search (address ));
69
64
70
65
const char * proc_name = symtab_by_address (address , & offset );
71
66
if (proc_name != NULL ) {
72
- p += sprintf ( p , " %s()+%d" , proc_name , offset );
67
+ printf ( " %s()+%d" , proc_name , offset );
73
68
}
74
69
75
70
/* @address is return-address, so address-1 is calling-line */
76
71
const char * file_name = debug_line_search (address - 1 , & lineno );
77
72
if (file_name != NULL ) {
78
- p += sprintf ( p , " %s:%d" , file_name , lineno );
73
+ printf ( " %s:%d" , file_name , lineno );
79
74
}
80
75
81
- p += sprintf ( p , "\n" );
76
+ printf ( "\n" );
82
77
83
78
if (proc_name && strcmp (proc_name , "main" ) == 0 ) {
84
79
break ;
85
80
}
86
81
}
87
-
88
- cs -> string = malloc (p - buffer + 1 );
89
- memcpy (cs -> string , buffer , p - buffer + 1 );
90
- return cs -> string ;
91
82
}
92
83
93
84
static int callstack_cmp (const void * a , const void * b )
@@ -119,7 +110,7 @@ void callstack_report(void)
119
110
" expired=%d (%d bytes), free_expired=%d (%d bytes)\n"
120
111
" alloc=%d (%d bytes), free=%d (%d bytes)\n"
121
112
" freed memory live time: min=%d max=%d average=%d\n"
122
- " un-freed memory live time: max=%d\n%s\n " ,
113
+ " un-freed memory live time: max=%d\n" ,
123
114
cs -> id ,
124
115
cs -> expired_count - cs -> free_expired_count ,
125
116
cs -> expired_size - cs -> free_expired_size ,
@@ -129,7 +120,8 @@ void callstack_report(void)
129
120
cs -> free_count , cs -> free_size ,
130
121
cs -> free_min , cs -> free_max ,
131
122
cs -> free_count ? cs -> free_total / cs -> free_count : 0 ,
132
- cs -> unfree_max ,
133
- callstack_string (cs ));
123
+ cs -> unfree_max );
124
+ callstack_print (cs );
125
+ printf ("\n" );
134
126
}
135
127
}
0 commit comments