23
23
#include < string.h>
24
24
#include < sys/syscall.h>
25
25
26
- #include " counters.h"
27
- #include " tsc.h"
28
-
29
26
#ifdef __APPLE__
30
27
#define REG (l, m ) _ucontext->uc_mcontext->__ss.__##m
31
28
#else
@@ -60,7 +57,6 @@ void StackFrame::ret() { pc() = link(); }
60
57
61
58
bool StackFrame::unwindStub (instruction_t *entry, const char *name,
62
59
uintptr_t &pc, uintptr_t &sp, uintptr_t &fp) {
63
- const u64 startTime = TSC::ticks ();
64
60
instruction_t *ip = (instruction_t *)pc;
65
61
if (ip == entry || *ip == 0xd65f03c0 || strncmp (name, " itable" , 6 ) == 0 ||
66
62
strncmp (name, " vtable" , 6 ) == 0 ||
@@ -71,12 +67,6 @@ bool StackFrame::unwindStub(instruction_t *entry, const char *name,
71
67
strcmp (name, " atomic entry points" ) == 0 ||
72
68
strcmp (name, " InlineCacheBuffer" ) == 0 ) {
73
69
pc = link ();
74
-
75
- const u64 endTime = TSC::ticks ();
76
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
77
- if (duration > 1 ) {
78
- Counters::increment (UNWINDING_TIME, duration);
79
- }
80
70
return true ;
81
71
} else if (strcmp (name, " forward_copy_longs" ) == 0 ||
82
72
strcmp (name, " backward_copy_longs" ) == 0
@@ -93,12 +83,6 @@ bool StackFrame::unwindStub(instruction_t *entry, const char *name,
93
83
// When cstack=vm, unwind stub frames one by one
94
84
pc = link ();
95
85
}
96
-
97
- const u64 endTime = TSC::ticks ();
98
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
99
- if (duration > 1 ) {
100
- Counters::increment (UNWINDING_TIME, duration);
101
- }
102
86
return true ;
103
87
} else if (entry != NULL && entry[0 ] == 0xa9bf7bfd ) {
104
88
// The stub begins with
@@ -107,23 +91,11 @@ bool StackFrame::unwindStub(instruction_t *entry, const char *name,
107
91
if (ip == entry + 1 ) {
108
92
sp += 16 ;
109
93
pc = ((uintptr_t *)sp)[-1 ];
110
-
111
- const u64 endTime = TSC::ticks ();
112
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
113
- if (duration > 1 ) {
114
- Counters::increment (UNWINDING_TIME, duration);
115
- }
116
94
return true ;
117
95
} else if (entry[1 ] == 0x910003fd && withinCurrentStack (fp)) {
118
96
sp = fp + 16 ;
119
97
fp = ((uintptr_t *)sp)[-2 ];
120
98
pc = ((uintptr_t *)sp)[-1 ];
121
-
122
- const u64 endTime = TSC::ticks ();
123
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
124
- if (duration > 1 ) {
125
- Counters::increment (UNWINDING_TIME, duration);
126
- }
127
99
return true ;
128
100
}
129
101
} else if (strncmp (name, " indexof_linear_" , 15 ) == 0 &&
@@ -132,19 +104,7 @@ bool StackFrame::unwindStub(instruction_t *entry, const char *name,
132
104
// Entry and exit are covered by the very first 'if', in all other cases SP is 4 words off.
133
105
sp += 32 ;
134
106
pc = link ();
135
-
136
- const u64 endTime = TSC::ticks ();
137
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
138
- if (duration > 1 ) {
139
- Counters::increment (UNWINDING_TIME, duration);
140
- }
141
107
return true ;
142
- }
143
-
144
- const u64 endTime = TSC::ticks ();
145
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
146
- if (duration > 1 ) {
147
- Counters::increment (UNWINDING_TIME, duration);
148
108
}
149
109
return false ;
150
110
}
@@ -157,7 +117,6 @@ static inline bool isEntryBarrier(instruction_t *ip) {
157
117
158
118
bool StackFrame::unwindCompiled (NMethod *nm, uintptr_t &pc, uintptr_t &sp,
159
119
uintptr_t &fp) {
160
- const u64 startTime = TSC::ticks ();
161
120
instruction_t *ip = (instruction_t *)pc;
162
121
instruction_t *entry = (instruction_t *)nm->entry ();
163
122
if ((*ip & 0xffe07fff ) == 0xa9007bfd ) {
@@ -166,71 +125,34 @@ bool StackFrame::unwindCompiled(NMethod *nm, uintptr_t &pc, uintptr_t &sp,
166
125
unsigned int offset = (*ip >> 12 ) & 0x1f8 ;
167
126
sp += offset + 16 ;
168
127
pc = link ();
169
-
170
- const u64 endTime = TSC::ticks ();
171
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
172
- if (duration > 1 ) {
173
- Counters::increment (UNWINDING_TIME, duration);
174
- }
175
128
} else if (ip > entry && ip[0 ] == 0x910003fd && ip[-1 ] == 0xa9bf7bfd ) {
176
129
// stp x29, x30, [sp, #-16]!
177
130
// mov x29, sp
178
131
sp += 16 ;
179
132
pc = ((uintptr_t *)sp)[-1 ];
180
-
181
- const u64 endTime = TSC::ticks ();
182
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
183
- if (duration > 1 ) {
184
- Counters::increment (UNWINDING_TIME, duration);
185
- }
186
133
} else if (ip > entry + 3 && !nm->isFrameCompleteAt (ip) &&
187
134
(isEntryBarrier (ip) || isEntryBarrier (ip + 1 ))) {
188
135
// Frame should be complete at this point
189
136
sp += nm->frameSize () * sizeof (void *);
190
137
fp = ((uintptr_t *)sp)[-2 ];
191
138
pc = ((uintptr_t *)sp)[-1 ];
192
-
193
- const u64 endTime = TSC::ticks ();
194
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
195
- if (duration > 1 ) {
196
- Counters::increment (UNWINDING_TIME, duration);
197
- }
198
139
} else {
199
140
// Just try
200
141
pc = link ();
201
142
}
202
-
203
- const u64 endTime = TSC::ticks ();
204
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
205
- if (duration > 1 ) {
206
- Counters::increment (UNWINDING_TIME, duration);
207
- }
208
143
return true ;
209
144
}
210
145
211
146
bool StackFrame::unwindAtomicStub (const void *& pc) {
212
147
// VM threads may call generated atomic stubs, which are not normally walkable
213
- const u64 startTime = TSC::ticks ();
214
148
const void * lr = (const void *)link ();
215
149
if (VMStructs::libjvm ()->contains (lr)) {
216
150
NMethod* nm = CodeHeap::findNMethod (pc);
217
151
if (nm != NULL && strncmp (nm->name (), " Stub" , 4 ) == 0 ) {
218
152
pc = lr;
219
-
220
- const u64 endTime = TSC::ticks ();
221
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
222
- if (duration > 1 ) {
223
- Counters::increment (UNWINDING_TIME, duration);
224
- }
225
153
return true ;
226
154
}
227
155
}
228
-
229
- const u64 endTime = TSC::ticks ();
230
- const u64 duration = TSC::ticks_to_millis (endTime - startTime);
231
- if (duration > 1 ) {
232
- Counters::increment (UNWINDING_TIME, duration);
233
- }
234
156
return false ;
235
157
}
236
158
0 commit comments