| Index: src/arm/macro-assembler-arm.cc
|
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
|
| index 29e168c51e6aa4147607046d93f43b1e47d75b29..df7565f13526cfe1f57a70a1ec049a15201c1c18 100644
|
| --- a/src/arm/macro-assembler-arm.cc
|
| +++ b/src/arm/macro-assembler-arm.cc
|
| @@ -1548,6 +1548,8 @@ void MacroAssembler::Check(Condition cc, const char* msg) {
|
|
|
|
|
| void MacroAssembler::Abort(const char* msg) {
|
| + Label abort_start;
|
| + bind(&abort_start);
|
| // We want to pass the msg string like a smi to avoid GC
|
| // problems, however msg is not guaranteed to be aligned
|
| // properly. Instead, we pass an aligned pointer that is
|
| @@ -1571,6 +1573,17 @@ void MacroAssembler::Abort(const char* msg) {
|
| push(r0);
|
| CallRuntime(Runtime::kAbort, 2);
|
| // will not return here
|
| + if (is_const_pool_blocked()) {
|
| + // If the calling code cares about the exact number of
|
| + // instructions generated, we insert padding here to keep the size
|
| + // of the Abort macro constant.
|
| + static const int kExpectedAbortInstructions = 10;
|
| + int abort_instructions = InstructionsGeneratedSince(&abort_start);
|
| + ASSERT(abort_instructions <= kExpectedAbortInstructions);
|
| + while (abort_instructions++ < kExpectedAbortInstructions) {
|
| + nop();
|
| + }
|
| + }
|
| }
|
|
|
|
|
|
|