Index: courgette/encoded_program.cc |
diff --git a/courgette/encoded_program.cc b/courgette/encoded_program.cc |
index 129728a79860b47b20f216fbeaa08505f1769eeb..5e84ec34074ae1715fc28e2286e267b9b3b9bb2d 100644 |
--- a/courgette/encoded_program.cc |
+++ b/courgette/encoded_program.cc |
@@ -19,8 +19,8 @@ |
#include "base/numerics/safe_math.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
-#include "courgette/courgette.h" |
#include "courgette/disassembler_elf_32_arm.h" |
+#include "courgette/label_manager.h" |
#include "courgette/streams.h" |
namespace courgette { |
@@ -370,107 +370,107 @@ bool VectorAt(const V& v, size_t index, T* output) { |
} |
CheckBool EncodedProgram::EvaluateRel32ARM(OP op, |
- size_t& ix_rel32_ix, |
- RVA& current_rva, |
+ size_t* ix_rel32_ix, |
+ RVA* current_rva, |
SinkStream* output) { |
switch (op & 0x0000F000) { |
case REL32ARM8: { |
uint32_t index; |
- if (!VectorAt(rel32_ix_, ix_rel32_ix, &index)) |
+ if (!VectorAt(rel32_ix_, *ix_rel32_ix, &index)) |
return false; |
- ++ix_rel32_ix; |
+ ++(*ix_rel32_ix); |
RVA rva; |
if (!VectorAt(rel32_rva_, index, &rva)) |
return false; |
uint32_t decompressed_op; |
if (!DisassemblerElf32ARM::Decompress( |
ARM_OFF8, static_cast<uint16_t>(op), |
- static_cast<uint32_t>(rva - current_rva), &decompressed_op)) { |
+ static_cast<uint32_t>(rva - *current_rva), &decompressed_op)) { |
return false; |
} |
uint16_t op16 = static_cast<uint16_t>(decompressed_op); |
if (!output->Write(&op16, 2)) |
return false; |
- current_rva += 2; |
+ *current_rva += 2; |
break; |
} |
case REL32ARM11: { |
uint32_t index; |
- if (!VectorAt(rel32_ix_, ix_rel32_ix, &index)) |
+ if (!VectorAt(rel32_ix_, *ix_rel32_ix, &index)) |
return false; |
- ++ix_rel32_ix; |
+ ++(*ix_rel32_ix); |
RVA rva; |
if (!VectorAt(rel32_rva_, index, &rva)) |
return false; |
uint32_t decompressed_op; |
if (!DisassemblerElf32ARM::Decompress(ARM_OFF11, (uint16_t)op, |
- (uint32_t)(rva - current_rva), |
+ (uint32_t)(rva - *current_rva), |
&decompressed_op)) { |
return false; |
} |
uint16_t op16 = static_cast<uint16_t>(decompressed_op); |
if (!output->Write(&op16, 2)) |
return false; |
- current_rva += 2; |
+ *current_rva += 2; |
break; |
} |
case REL32ARM24: { |
uint32_t index; |
- if (!VectorAt(rel32_ix_, ix_rel32_ix, &index)) |
+ if (!VectorAt(rel32_ix_, *ix_rel32_ix, &index)) |
return false; |
- ++ix_rel32_ix; |
+ ++(*ix_rel32_ix); |
RVA rva; |
if (!VectorAt(rel32_rva_, index, &rva)) |
return false; |
uint32_t decompressed_op; |
if (!DisassemblerElf32ARM::Decompress(ARM_OFF24, (uint16_t)op, |
- (uint32_t)(rva - current_rva), |
+ (uint32_t)(rva - *current_rva), |
&decompressed_op)) { |
return false; |
} |
if (!output->Write(&decompressed_op, 4)) |
return false; |
- current_rva += 4; |
+ *current_rva += 4; |
break; |
} |
case REL32ARM25: { |
uint32_t index; |
- if (!VectorAt(rel32_ix_, ix_rel32_ix, &index)) |
+ if (!VectorAt(rel32_ix_, *ix_rel32_ix, &index)) |
return false; |
- ++ix_rel32_ix; |
+ ++(*ix_rel32_ix); |
RVA rva; |
if (!VectorAt(rel32_rva_, index, &rva)) |
return false; |
uint32_t decompressed_op; |
if (!DisassemblerElf32ARM::Decompress(ARM_OFF25, (uint16_t)op, |
- (uint32_t)(rva - current_rva), |
+ (uint32_t)(rva - *current_rva), |
&decompressed_op)) { |
return false; |
} |
uint32_t words = (decompressed_op << 16) | (decompressed_op >> 16); |
if (!output->Write(&words, 4)) |
return false; |
- current_rva += 4; |
+ *current_rva += 4; |
break; |
} |
case REL32ARM21: { |
uint32_t index; |
- if (!VectorAt(rel32_ix_, ix_rel32_ix, &index)) |
+ if (!VectorAt(rel32_ix_, *ix_rel32_ix, &index)) |
return false; |
- ++ix_rel32_ix; |
+ ++(*ix_rel32_ix); |
RVA rva; |
if (!VectorAt(rel32_rva_, index, &rva)) |
return false; |
uint32_t decompressed_op; |
if (!DisassemblerElf32ARM::Decompress(ARM_OFF21, (uint16_t)op, |
- (uint32_t)(rva - current_rva), |
+ (uint32_t)(rva - *current_rva), |
&decompressed_op)) { |
return false; |
} |
uint32_t words = (decompressed_op << 16) | (decompressed_op >> 16); |
if (!output->Write(&words, 4)) |
return false; |
- current_rva += 4; |
+ *current_rva += 4; |
break; |
} |
default: |
@@ -503,7 +503,7 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) { |
switch (op) { |
default: |
- if (!EvaluateRel32ARM(op, ix_rel32_ix, current_rva, output)) |
+ if (!EvaluateRel32ARM(op, &ix_rel32_ix, ¤t_rva, output)) |
return false; |
break; |
@@ -675,7 +675,6 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) { |
// RelocBlock has the layout of a block of relocations in the base relocation |
// table file format. |
-// |
struct RelocBlockPOD { |
uint32_t page_rva; |
uint32_t block_size; |