| 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; | 
|  |