Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: src/ia32/debug-ia32.cc

Issue 301633005: Merge Debugger and Debug. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/full-codegen.cc ('k') | src/isolate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #if V8_TARGET_ARCH_IA32 7 #if V8_TARGET_ARCH_IA32
8 8
9 #include "codegen.h" 9 #include "codegen.h"
10 #include "debug.h" 10 #include "debug.h"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 165
166 // Now that the break point has been handled, resume normal execution by 166 // Now that the break point has been handled, resume normal execution by
167 // jumping to the target address intended by the caller and that was 167 // jumping to the target address intended by the caller and that was
168 // overwritten by the address of DebugBreakXXX. 168 // overwritten by the address of DebugBreakXXX.
169 ExternalReference after_break_target = 169 ExternalReference after_break_target =
170 ExternalReference::debug_after_break_target_address(masm->isolate()); 170 ExternalReference::debug_after_break_target_address(masm->isolate());
171 __ jmp(Operand::StaticVariable(after_break_target)); 171 __ jmp(Operand::StaticVariable(after_break_target));
172 } 172 }
173 173
174 174
175 void Debug::GenerateCallICStubDebugBreak(MacroAssembler* masm) { 175 void DebugCodegen::GenerateCallICStubDebugBreak(MacroAssembler* masm) {
176 // Register state for CallICStub 176 // Register state for CallICStub
177 // ----------- S t a t e ------------- 177 // ----------- S t a t e -------------
178 // -- edx : type feedback slot (smi) 178 // -- edx : type feedback slot (smi)
179 // -- edi : function 179 // -- edi : function
180 // ----------------------------------- 180 // -----------------------------------
181 Generate_DebugBreakCallHelper(masm, edx.bit() | edi.bit(), 181 Generate_DebugBreakCallHelper(masm, edx.bit() | edi.bit(),
182 0, false); 182 0, false);
183 } 183 }
184 184
185 185
186 void Debug::GenerateLoadICDebugBreak(MacroAssembler* masm) { 186 void DebugCodegen::GenerateLoadICDebugBreak(MacroAssembler* masm) {
187 // Register state for IC load call (from ic-ia32.cc). 187 // Register state for IC load call (from ic-ia32.cc).
188 // ----------- S t a t e ------------- 188 // ----------- S t a t e -------------
189 // -- ecx : name 189 // -- ecx : name
190 // -- edx : receiver 190 // -- edx : receiver
191 // ----------------------------------- 191 // -----------------------------------
192 Generate_DebugBreakCallHelper(masm, ecx.bit() | edx.bit(), 0, false); 192 Generate_DebugBreakCallHelper(masm, ecx.bit() | edx.bit(), 0, false);
193 } 193 }
194 194
195 195
196 void Debug::GenerateStoreICDebugBreak(MacroAssembler* masm) { 196 void DebugCodegen::GenerateStoreICDebugBreak(MacroAssembler* masm) {
197 // Register state for IC store call (from ic-ia32.cc). 197 // Register state for IC store call (from ic-ia32.cc).
198 // ----------- S t a t e ------------- 198 // ----------- S t a t e -------------
199 // -- eax : value 199 // -- eax : value
200 // -- ecx : name 200 // -- ecx : name
201 // -- edx : receiver 201 // -- edx : receiver
202 // ----------------------------------- 202 // -----------------------------------
203 Generate_DebugBreakCallHelper( 203 Generate_DebugBreakCallHelper(
204 masm, eax.bit() | ecx.bit() | edx.bit(), 0, false); 204 masm, eax.bit() | ecx.bit() | edx.bit(), 0, false);
205 } 205 }
206 206
207 207
208 void Debug::GenerateKeyedLoadICDebugBreak(MacroAssembler* masm) { 208 void DebugCodegen::GenerateKeyedLoadICDebugBreak(MacroAssembler* masm) {
209 // Register state for keyed IC load call (from ic-ia32.cc). 209 // Register state for keyed IC load call (from ic-ia32.cc).
210 // ----------- S t a t e ------------- 210 // ----------- S t a t e -------------
211 // -- ecx : key 211 // -- ecx : key
212 // -- edx : receiver 212 // -- edx : receiver
213 // ----------------------------------- 213 // -----------------------------------
214 Generate_DebugBreakCallHelper(masm, ecx.bit() | edx.bit(), 0, false); 214 Generate_DebugBreakCallHelper(masm, ecx.bit() | edx.bit(), 0, false);
215 } 215 }
216 216
217 217
218 void Debug::GenerateKeyedStoreICDebugBreak(MacroAssembler* masm) { 218 void DebugCodegen::GenerateKeyedStoreICDebugBreak(MacroAssembler* masm) {
219 // Register state for keyed IC load call (from ic-ia32.cc). 219 // Register state for keyed IC load call (from ic-ia32.cc).
220 // ----------- S t a t e ------------- 220 // ----------- S t a t e -------------
221 // -- eax : value 221 // -- eax : value
222 // -- ecx : key 222 // -- ecx : key
223 // -- edx : receiver 223 // -- edx : receiver
224 // ----------------------------------- 224 // -----------------------------------
225 Generate_DebugBreakCallHelper( 225 Generate_DebugBreakCallHelper(
226 masm, eax.bit() | ecx.bit() | edx.bit(), 0, false); 226 masm, eax.bit() | ecx.bit() | edx.bit(), 0, false);
227 } 227 }
228 228
229 229
230 void Debug::GenerateCompareNilICDebugBreak(MacroAssembler* masm) { 230 void DebugCodegen::GenerateCompareNilICDebugBreak(MacroAssembler* masm) {
231 // Register state for CompareNil IC 231 // Register state for CompareNil IC
232 // ----------- S t a t e ------------- 232 // ----------- S t a t e -------------
233 // -- eax : value 233 // -- eax : value
234 // ----------------------------------- 234 // -----------------------------------
235 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, false); 235 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, false);
236 } 236 }
237 237
238 238
239 void Debug::GenerateReturnDebugBreak(MacroAssembler* masm) { 239 void DebugCodegen::GenerateReturnDebugBreak(MacroAssembler* masm) {
240 // Register state just before return from JS function (from codegen-ia32.cc). 240 // Register state just before return from JS function (from codegen-ia32.cc).
241 // ----------- S t a t e ------------- 241 // ----------- S t a t e -------------
242 // -- eax: return value 242 // -- eax: return value
243 // ----------------------------------- 243 // -----------------------------------
244 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, true); 244 Generate_DebugBreakCallHelper(masm, eax.bit(), 0, true);
245 } 245 }
246 246
247 247
248 void Debug::GenerateCallFunctionStubDebugBreak(MacroAssembler* masm) { 248 void DebugCodegen::GenerateCallFunctionStubDebugBreak(MacroAssembler* masm) {
249 // Register state for CallFunctionStub (from code-stubs-ia32.cc). 249 // Register state for CallFunctionStub (from code-stubs-ia32.cc).
250 // ----------- S t a t e ------------- 250 // ----------- S t a t e -------------
251 // -- edi: function 251 // -- edi: function
252 // ----------------------------------- 252 // -----------------------------------
253 Generate_DebugBreakCallHelper(masm, edi.bit(), 0, false); 253 Generate_DebugBreakCallHelper(masm, edi.bit(), 0, false);
254 } 254 }
255 255
256 256
257 void Debug::GenerateCallConstructStubDebugBreak(MacroAssembler* masm) { 257 void DebugCodegen::GenerateCallConstructStubDebugBreak(MacroAssembler* masm) {
258 // Register state for CallConstructStub (from code-stubs-ia32.cc). 258 // Register state for CallConstructStub (from code-stubs-ia32.cc).
259 // eax is the actual number of arguments not encoded as a smi see comment 259 // eax is the actual number of arguments not encoded as a smi see comment
260 // above IC call. 260 // above IC call.
261 // ----------- S t a t e ------------- 261 // ----------- S t a t e -------------
262 // -- eax: number of arguments (not smi) 262 // -- eax: number of arguments (not smi)
263 // -- edi: constructor function 263 // -- edi: constructor function
264 // ----------------------------------- 264 // -----------------------------------
265 // The number of arguments in eax is not smi encoded. 265 // The number of arguments in eax is not smi encoded.
266 Generate_DebugBreakCallHelper(masm, edi.bit(), eax.bit(), false); 266 Generate_DebugBreakCallHelper(masm, edi.bit(), eax.bit(), false);
267 } 267 }
268 268
269 269
270 void Debug::GenerateCallConstructStubRecordDebugBreak(MacroAssembler* masm) { 270 void DebugCodegen::GenerateCallConstructStubRecordDebugBreak(
271 MacroAssembler* masm) {
271 // Register state for CallConstructStub (from code-stubs-ia32.cc). 272 // Register state for CallConstructStub (from code-stubs-ia32.cc).
272 // eax is the actual number of arguments not encoded as a smi see comment 273 // eax is the actual number of arguments not encoded as a smi see comment
273 // above IC call. 274 // above IC call.
274 // ----------- S t a t e ------------- 275 // ----------- S t a t e -------------
275 // -- eax: number of arguments (not smi) 276 // -- eax: number of arguments (not smi)
276 // -- ebx: feedback array 277 // -- ebx: feedback array
277 // -- edx: feedback slot (smi) 278 // -- edx: feedback slot (smi)
278 // -- edi: constructor function 279 // -- edi: constructor function
279 // ----------------------------------- 280 // -----------------------------------
280 // The number of arguments in eax is not smi encoded. 281 // The number of arguments in eax is not smi encoded.
281 Generate_DebugBreakCallHelper(masm, ebx.bit() | edx.bit() | edi.bit(), 282 Generate_DebugBreakCallHelper(masm, ebx.bit() | edx.bit() | edi.bit(),
282 eax.bit(), false); 283 eax.bit(), false);
283 } 284 }
284 285
285 286
286 void Debug::GenerateSlot(MacroAssembler* masm) { 287 void DebugCodegen::GenerateSlot(MacroAssembler* masm) {
287 // Generate enough nop's to make space for a call instruction. 288 // Generate enough nop's to make space for a call instruction.
288 Label check_codesize; 289 Label check_codesize;
289 __ bind(&check_codesize); 290 __ bind(&check_codesize);
290 __ RecordDebugBreakSlot(); 291 __ RecordDebugBreakSlot();
291 __ Nop(Assembler::kDebugBreakSlotLength); 292 __ Nop(Assembler::kDebugBreakSlotLength);
292 ASSERT_EQ(Assembler::kDebugBreakSlotLength, 293 ASSERT_EQ(Assembler::kDebugBreakSlotLength,
293 masm->SizeOfCodeGeneratedSince(&check_codesize)); 294 masm->SizeOfCodeGeneratedSince(&check_codesize));
294 } 295 }
295 296
296 297
297 void Debug::GenerateSlotDebugBreak(MacroAssembler* masm) { 298 void DebugCodegen::GenerateSlotDebugBreak(MacroAssembler* masm) {
298 // In the places where a debug break slot is inserted no registers can contain 299 // In the places where a debug break slot is inserted no registers can contain
299 // object pointers. 300 // object pointers.
300 Generate_DebugBreakCallHelper(masm, 0, 0, true); 301 Generate_DebugBreakCallHelper(masm, 0, 0, true);
301 } 302 }
302 303
303 304
304 void Debug::GeneratePlainReturnLiveEdit(MacroAssembler* masm) { 305 void DebugCodegen::GeneratePlainReturnLiveEdit(MacroAssembler* masm) {
305 masm->ret(0); 306 masm->ret(0);
306 } 307 }
307 308
308 309
309 void Debug::GenerateFrameDropperLiveEdit(MacroAssembler* masm) { 310 void DebugCodegen::GenerateFrameDropperLiveEdit(MacroAssembler* masm) {
310 ExternalReference restarter_frame_function_slot = 311 ExternalReference restarter_frame_function_slot =
311 ExternalReference::debug_restarter_frame_function_pointer_address( 312 ExternalReference::debug_restarter_frame_function_pointer_address(
312 masm->isolate()); 313 masm->isolate());
313 __ mov(Operand::StaticVariable(restarter_frame_function_slot), Immediate(0)); 314 __ mov(Operand::StaticVariable(restarter_frame_function_slot), Immediate(0));
314 315
315 // We do not know our frame height, but set esp based on ebp. 316 // We do not know our frame height, but set esp based on ebp.
316 __ lea(esp, Operand(ebp, -1 * kPointerSize)); 317 __ lea(esp, Operand(ebp, -1 * kPointerSize));
317 318
318 __ pop(edi); // Function. 319 __ pop(edi); // Function.
319 __ pop(ebp); 320 __ pop(ebp);
(...skipping 10 matching lines...) Expand all
330 __ jmp(edx); 331 __ jmp(edx);
331 } 332 }
332 333
333 const bool Debug::kFrameDropperSupported = true; 334 const bool Debug::kFrameDropperSupported = true;
334 335
335 #undef __ 336 #undef __
336 337
337 } } // namespace v8::internal 338 } } // namespace v8::internal
338 339
339 #endif // V8_TARGET_ARCH_IA32 340 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/full-codegen.cc ('k') | src/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698