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

Side by Side Diff: runtime/vm/constants_arm.h

Issue 1097413004: Use a breakpoint instruction for a stop message on arm instead of (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 8 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 | « runtime/vm/assembler_arm64.cc ('k') | runtime/vm/constants_arm64.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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_CONSTANTS_ARM_H_ 5 #ifndef VM_CONSTANTS_ARM_H_
6 #define VM_CONSTANTS_ARM_H_ 6 #define VM_CONSTANTS_ARM_H_
7 7
8 #include "platform/globals.h" 8 #include "platform/globals.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 10
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 enum Shift { 332 enum Shift {
333 kNoShift = -1, 333 kNoShift = -1,
334 LSL = 0, // Logical shift left 334 LSL = 0, // Logical shift left
335 LSR = 1, // Logical shift right 335 LSR = 1, // Logical shift right
336 ASR = 2, // Arithmetic shift right 336 ASR = 2, // Arithmetic shift right
337 ROR = 3, // Rotate right 337 ROR = 3, // Rotate right
338 kMaxShift = 4 338 kMaxShift = 4
339 }; 339 };
340 340
341 341
342 // Special Supervisor Call 24-bit codes used in the presence of the ARM
343 // simulator for redirection, breakpoints, and stop messages.
344 // See /usr/include/asm/unistd.h
345 const uint32_t kRedirectionSvcCode = 0x90001f; // unused syscall, was sys_stty
346 const uint32_t kBreakpointSvcCode = 0x900020; // unused syscall, was sys_gtty
347 const uint32_t kStopMessageSvcCode = 0x9f0001; // __ARM_NR_breakpoint
348
349 // Constants used for the decoding or encoding of the individual fields of 342 // Constants used for the decoding or encoding of the individual fields of
350 // instructions. Based on the "Figure 3-1 ARM instruction set summary". 343 // instructions. Based on the "Figure 3-1 ARM instruction set summary".
351 enum InstructionFields { 344 enum InstructionFields {
352 kConditionShift = 28, 345 kConditionShift = 28,
353 kConditionBits = 4, 346 kConditionBits = 4,
354 kTypeShift = 25, 347 kTypeShift = 25,
355 kTypeBits = 3, 348 kTypeBits = 3,
356 kLinkShift = 24, 349 kLinkShift = 24,
357 kLinkBits = 1, 350 kLinkBits = 1,
358 kUShift = 23, 351 kUShift = 23,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 public: 433 public:
441 enum { 434 enum {
442 kInstrSize = 4, 435 kInstrSize = 4,
443 kInstrSizeLog2 = 2, 436 kInstrSizeLog2 = 2,
444 kPCReadOffset = 8 437 kPCReadOffset = 8
445 }; 438 };
446 439
447 static const int32_t kNopInstruction = // nop 440 static const int32_t kNopInstruction = // nop
448 ((AL << kConditionShift) | (0x32 << 20) | (0xf << 12)); 441 ((AL << kConditionShift) | (0x32 << 20) | (0xf << 12));
449 442
443 static const int32_t kBreakPointCode = 0xdeb0; // For breakpoint.
444 static const int32_t kStopMessageCode = 0xdeb1; // For Stop(message).
445 static const int32_t kSimulatorBreakCode = 0xdeb2; // For breakpoint in sim.
446 static const int32_t kSimulatorRedirectCode = 0xca11; // For redirection.
447
450 // Breakpoint instruction filling assembler code buffers in debug mode. 448 // Breakpoint instruction filling assembler code buffers in debug mode.
451 static const int32_t kBreakPointInstruction = // bkpt(0xdeb0) 449 static const int32_t kBreakPointInstruction = // bkpt(0xdeb0)
452 ((AL << kConditionShift) | (0x12 << 20) | (0xdeb << 8) | (0x7 << 4)); 450 ((AL << kConditionShift) | (0x12 << 20) | (0xdeb << 8) | (0x7 << 4));
453 451
454 // Breakpoint instruction used by the simulator. 452 // Breakpoint instruction used by the simulator.
455 // Should be distinct from kBreakPointInstruction and from a typical user 453 // Should be distinct from kBreakPointInstruction and from a typical user
456 // breakpoint inserted in generated code for debugging, e.g. bkpt(0). 454 // breakpoint inserted in generated code for debugging, e.g. bkpt(0).
457 static const int32_t kSimulatorBreakpointInstruction = 455 static const int32_t kSimulatorBreakpointInstruction =
458 // svc #kBreakpointSvcCode 456 // svc #kBreakpointSvcCode
459 ((AL << kConditionShift) | (0xf << 24) | kBreakpointSvcCode); 457 ((AL << kConditionShift) | (0xf << 24) | kSimulatorBreakCode);
460 458
461 // Runtime call redirection instruction used by the simulator. 459 // Runtime call redirection instruction used by the simulator.
462 static const int32_t kSimulatorRedirectInstruction = 460 static const int32_t kSimulatorRedirectInstruction =
463 ((AL << kConditionShift) | (0xf << 24) | kRedirectionSvcCode); 461 ((AL << kConditionShift) | (0xf << 24) | kSimulatorRedirectCode);
464 462
465 // Get the raw instruction bits. 463 // Get the raw instruction bits.
466 inline int32_t InstructionBits() const { 464 inline int32_t InstructionBits() const {
467 return *reinterpret_cast<const int32_t*>(this); 465 return *reinterpret_cast<const int32_t*>(this);
468 } 466 }
469 467
470 // Set the raw instruction bits to value. 468 // Set the raw instruction bits to value.
471 inline void SetInstructionBits(int32_t value) { 469 inline void SetInstructionBits(int32_t value) {
472 *reinterpret_cast<int32_t*>(this) = value; 470 *reinterpret_cast<int32_t*>(this) = value;
473 } 471 }
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); } 704 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); }
707 705
708 private: 706 private:
709 DISALLOW_ALLOCATION(); 707 DISALLOW_ALLOCATION();
710 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); 708 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr);
711 }; 709 };
712 710
713 } // namespace dart 711 } // namespace dart
714 712
715 #endif // VM_CONSTANTS_ARM_H_ 713 #endif // VM_CONSTANTS_ARM_H_
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64.cc ('k') | runtime/vm/constants_arm64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698