Failed to apply patch for src/arm/assembler-arm.cc:
While running git apply --index -3 -p1;
error: patch failed: src/arm/assembler-arm.cc:3489
error: repository lacks the necessary blob to fall back on 3-way merge.
error: src/arm/assembler-arm.cc: patch does not apply
Patch: src/arm/assembler-arm.cc
Index: src/arm/assembler-arm.cc
diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc
index
baaf18af4f7a7178fdd498c9d62ecaee0289fc45..33b61a3480321fcf083ccd0cd7aa1ca5c5056c8f
100644
--- a/src/arm/assembler-arm.cc
+++ b/src/arm/assembler-arm.cc
@@ -228,8 +228,7 @@
//
-----------------------------------------------------------------------------
// Implementation of RelocInfo
-// static
-const int RelocInfo::kApplyMask = 1 << RelocInfo::INTERNAL_REFERENCE;
+const int RelocInfo::kApplyMask = 0;
bool RelocInfo::IsCodedSpecially() {
@@ -797,20 +796,14 @@
// Emitted link to a label, not part of a branch.
return instr;
}
- if ((instr & 7 * B25) == 5 * B25) {
- int imm26 = ((instr & kImm24Mask) << 8) >> 6;
- // b, bl, or blx imm24
- if ((Instruction::ConditionField(instr) == kSpecialCondition) &&
- ((instr & B24) != 0)) {
- // blx uses bit 24 to encode bit 2 of imm26
- imm26 += 2;
- }
- return pos + kPcLoadDelta + imm26;
- }
- // Internal reference to the label.
- DCHECK_EQ(15 * B28 | 7 * B25 | 1 * B0, instr & (15 * B28 | 7 * B25 | 1 *
B0));
- int imm26 = (((instr >> 1) & kImm24Mask) << 8) >> 6;
- return pos + imm26;
+ DCHECK((instr & 7*B25) == 5*B25); // b, bl, or blx imm24
+ int imm26 = ((instr & kImm24Mask) << 8) >> 6;
+ if ((Instruction::ConditionField(instr) == kSpecialCondition) &&
+ ((instr & B24) != 0)) {
+ // blx uses bit 24 to encode bit 2 of imm26
+ imm26 += 2;
+ }
+ return pos + kPcLoadDelta + imm26;
}
@@ -884,25 +877,19 @@
}
return;
}
- if ((instr & 7 * B25) == 5 * B25) {
- // b, bl, or blx imm24
- int imm26 = target_pos - (pos + kPcLoadDelta);
- if (Instruction::ConditionField(instr) == kSpecialCondition) {
- // blx uses bit 24 to encode bit 2 of imm26
- DCHECK((imm26 & 1) == 0);
- instr = (instr & ~(B24 | kImm24Mask)) | ((imm26 & 2) >> 1) * B24;
- } else {
- DCHECK((imm26 & 3) == 0);
- instr &= ~kImm24Mask;
- }
- int imm24 = imm26 >> 2;
- DCHECK(is_int24(imm24));
- instr_at_put(pos, instr | (imm24 & kImm24Mask));
- return;
- }
- // Patch internal reference to label.
- DCHECK_EQ(15 * B28 | 7 * B25 | 1 * B0, instr & (15 * B28 | 7 * B25 | 1 *
B0));
- instr_at_put(pos, reinterpret_cast<Instr>(buffer_ + target_pos));
+ int imm26 = target_pos - (pos + kPcLoadDelta);
+ DCHECK((instr & 7*B25) == 5*B25); // b, bl, or blx imm24
+ if (Instruction::ConditionField(instr) == kSpecialCondition) {
+ // blx uses bit 24 to encode bit 2 of imm26
+ DCHECK((imm26 & 1) == 0);
+ instr = (instr & ~(B24 | kImm24Mask)) | ((imm26 & 2) >> 1)*B24;
+ } else {
+ DCHECK((imm26 & 3) == 0);
+ instr &= ~kImm24Mask;
+ }
+ int imm24 = imm26 >> 2;
+ DCHECK(is_int24(imm24));
+ instr_at_put(pos, instr | (imm24 & kImm24Mask));
}
@@ -3439,16 +3426,9 @@
reloc_info_writer.Reposition(reloc_info_writer.pos() + rc_delta,
reloc_info_writer.last_pc() + pc_delta);
- // Relocate internal references.
- for (RelocIterator it(desc); !it.done(); it.next()) {
- if (it.rinfo()->rmode() == RelocInfo::INTERNAL_REFERENCE) {
- // Don't patch unbound internal references (bit 0 set); those are
still
- // hooked up in the Label chain and will be automatically patched
once
- // the label is bound.
- int32_t* p = reinterpret_cast<int32_t*>(it.rinfo()->pc());
- if ((*p & 1 * B0) == 0) *p += pc_delta;
- }
- }
+ // None of our relocation types are pc relative pointing outside the code
+ // buffer nor pc absolute pointing inside the code buffer, so there is no
need
+ // to relocate any emitted relocation entries.
// Relocate pending relocation entries.
for (int i = 0; i < num_pending_32_bit_reloc_info_; i++) {
@@ -3489,35 +3469,6 @@
CheckBuffer();
*reinterpret_cast<uint32_t*>(pc_) = data;
pc_ += sizeof(uint32_t);
-}
-
-
-void Assembler::dd(Label* label) {
- CheckBuffer();
- RecordRelocInfo(RelocInfo::INTERNAL_REFERENCE);
- if (label->is_bound()) {
- uint32_t data = reinterpret_cast<uint32_t>(buffer_ + label->pos());
- DCHECK_EQ(0u, data & 1 * B0);
- *reinterpret_cast<uint32_t*>(pc_) = data;
- pc_ += sizeof(uint32_t);
- } else {
- int target_pos;
- if (label->is_linked()) {
- // Point to previous instruction that uses the link.
- target_pos = label->pos();
- } else {
- // First entry of the link chain points to itself.
- target_pos = pc_offset();
- }
- label->link_to(pc_offset());
- // Encode internal reference to unbound label. We set the least
significant
- // bit to distinguish unbound internal references in GrowBuffer()
below.
- int imm26 = target_pos - pc_offset();
- DCHECK_EQ(0, imm26 & 3);
- int imm24 = imm26 >> 2;
- DCHECK(is_int24(imm24));
- emit(15 * B28 | 7 * B25 | ((imm24 & kImm24Mask) << 1) | 1 * B0);
- }
}
https://codereview.chromium.org/868803010/
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.