| Index: courgette/encoded_program.cc
|
| diff --git a/courgette/encoded_program.cc b/courgette/encoded_program.cc
|
| index a4c00891f09b6eb652e64e871e0bb0b2ef1767a2..209fe2faeb6cd3e3d6ecb115bb66caf4b2b9525c 100644
|
| --- a/courgette/encoded_program.cc
|
| +++ b/courgette/encoded_program.cc
|
| @@ -4,6 +4,9 @@
|
|
|
| #include "courgette/encoded_program.h"
|
|
|
| +#include <stddef.h>
|
| +#include <stdint.h>
|
| +
|
| #include <algorithm>
|
| #include <map>
|
| #include <string>
|
| @@ -42,7 +45,7 @@ CheckBool WriteVector(const V& items, SinkStream* buffer) {
|
|
|
| template<typename V>
|
| bool ReadVector(V* items, SourceStream* buffer) {
|
| - uint32 count;
|
| + uint32_t count;
|
| if (!buffer->ReadVarint32(&count))
|
| return false;
|
|
|
| @@ -50,7 +53,7 @@ bool ReadVector(V* items, SourceStream* buffer) {
|
|
|
| bool ok = items->reserve(count);
|
| for (size_t i = 0; ok && i < count; ++i) {
|
| - uint32 item;
|
| + uint32_t item;
|
| ok = buffer->ReadVarint32(&item);
|
| if (ok)
|
| ok = items->push_back(static_cast<typename V::value_type>(item));
|
| @@ -64,10 +67,10 @@ template<typename V>
|
| CheckBool WriteSigned32Delta(const V& set, SinkStream* buffer) {
|
| size_t count = set.size();
|
| bool ok = buffer->WriteSizeVarint32(count);
|
| - uint32 prev = 0;
|
| + uint32_t prev = 0;
|
| for (size_t i = 0; ok && i < count; ++i) {
|
| - uint32 current = set[i];
|
| - int32 delta = current - prev;
|
| + uint32_t current = set[i];
|
| + int32_t delta = current - prev;
|
| ok = buffer->WriteVarint32Signed(delta);
|
| prev = current;
|
| }
|
| @@ -76,19 +79,19 @@ CheckBool WriteSigned32Delta(const V& set, SinkStream* buffer) {
|
|
|
| template <typename V>
|
| static CheckBool ReadSigned32Delta(V* set, SourceStream* buffer) {
|
| - uint32 count;
|
| + uint32_t count;
|
|
|
| if (!buffer->ReadVarint32(&count))
|
| return false;
|
|
|
| set->clear();
|
| bool ok = set->reserve(count);
|
| - uint32 prev = 0;
|
| + uint32_t prev = 0;
|
| for (size_t i = 0; ok && i < count; ++i) {
|
| - int32 delta;
|
| + int32_t delta;
|
| ok = buffer->ReadVarint32Signed(&delta);
|
| if (ok) {
|
| - uint32 current = static_cast<uint32>(prev + delta);
|
| + uint32_t current = static_cast<uint32_t>(prev + delta);
|
| ok = set->push_back(current);
|
| prev = current;
|
| }
|
| @@ -116,7 +119,7 @@ CheckBool WriteVectorU8(const V& items, SinkStream* buffer) {
|
|
|
| template<typename V>
|
| bool ReadVectorU8(V* items, SourceStream* buffer) {
|
| - uint32 count;
|
| + uint32_t count;
|
| if (!buffer->ReadVarint32(&count))
|
| return false;
|
|
|
| @@ -190,7 +193,7 @@ CheckBool EncodedProgram::AddOrigin(RVA origin) {
|
| }
|
|
|
| CheckBool EncodedProgram::AddCopy(size_t count, const void* bytes) {
|
| - const uint8* source = static_cast<const uint8*>(bytes);
|
| + const uint8_t* source = static_cast<const uint8_t*>(bytes);
|
|
|
| bool ok = true;
|
|
|
| @@ -240,7 +243,7 @@ CheckBool EncodedProgram::AddRel32(int label_index) {
|
| return ops_.push_back(REL32) && rel32_ix_.push_back(label_index);
|
| }
|
|
|
| -CheckBool EncodedProgram::AddRel32ARM(uint16 op, int label_index) {
|
| +CheckBool EncodedProgram::AddRel32ARM(uint16_t op, int label_index) {
|
| return ops_.push_back(static_cast<OP>(op)) &&
|
| rel32_ix_.push_back(label_index);
|
| }
|
| @@ -295,7 +298,7 @@ static FieldSelect GetFieldSelect() {
|
| scoped_ptr<base::Environment> env(base::Environment::Create());
|
| std::string s;
|
| env->GetVar("A_FIELDS", &s);
|
| - uint64 fields;
|
| + uint64_t fields;
|
| if (!base::StringToUint64(s, &fields))
|
| return static_cast<FieldSelect>(~0);
|
| return static_cast<FieldSelect>(fields);
|
| @@ -314,8 +317,8 @@ CheckBool EncodedProgram::WriteTo(SinkStreamSet* streams) {
|
| // the rest can be interleaved.
|
|
|
| if (select & INCLUDE_MISC) {
|
| - uint32 high = static_cast<uint32>(image_base_ >> 32);
|
| - uint32 low = static_cast<uint32>(image_base_ & 0xffffffffU);
|
| + uint32_t high = static_cast<uint32_t>(image_base_ >> 32);
|
| + uint32_t low = static_cast<uint32_t>(image_base_ & 0xffffffffU);
|
|
|
| if (!streams->stream(kStreamMisc)->WriteVarint32(high) ||
|
| !streams->stream(kStreamMisc)->WriteVarint32(low)) {
|
| @@ -360,14 +363,14 @@ CheckBool EncodedProgram::WriteTo(SinkStreamSet* streams) {
|
| }
|
|
|
| bool EncodedProgram::ReadFrom(SourceStreamSet* streams) {
|
| - uint32 high;
|
| - uint32 low;
|
| + uint32_t high;
|
| + uint32_t low;
|
|
|
| if (!streams->stream(kStreamMisc)->ReadVarint32(&high) ||
|
| !streams->stream(kStreamMisc)->ReadVarint32(&low)) {
|
| return false;
|
| }
|
| - image_base_ = (static_cast<uint64>(high) << 32) | low;
|
| + image_base_ = (static_cast<uint64_t>(high) << 32) | low;
|
|
|
| if (!ReadSigned32Delta(&abs32_rva_, streams->stream(kStreamAbs32Addresses)))
|
| return false;
|
| @@ -411,58 +414,56 @@ CheckBool EncodedProgram::EvaluateRel32ARM(OP op,
|
| SinkStream* output) {
|
| switch (op & 0x0000F000) {
|
| case REL32ARM8: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(rel32_ix_, ix_rel32_ix, &index))
|
| return false;
|
| ++ix_rel32_ix;
|
| RVA rva;
|
| if (!VectorAt(rel32_rva_, index, &rva))
|
| return false;
|
| - uint32 decompressed_op;
|
| - if (!DisassemblerElf32ARM::Decompress(ARM_OFF8,
|
| - static_cast<uint16>(op),
|
| - static_cast<uint32>(rva -
|
| - current_rva),
|
| - &decompressed_op)) {
|
| + uint32_t decompressed_op;
|
| + if (!DisassemblerElf32ARM::Decompress(
|
| + ARM_OFF8, static_cast<uint16_t>(op),
|
| + static_cast<uint32_t>(rva - current_rva), &decompressed_op)) {
|
| return false;
|
| }
|
| - uint16 op16 = static_cast<uint16>(decompressed_op);
|
| + uint16_t op16 = static_cast<uint16_t>(decompressed_op);
|
| if (!output->Write(&op16, 2))
|
| return false;
|
| current_rva += 2;
|
| break;
|
| }
|
| case REL32ARM11: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(rel32_ix_, ix_rel32_ix, &index))
|
| return false;
|
| ++ix_rel32_ix;
|
| RVA rva;
|
| if (!VectorAt(rel32_rva_, index, &rva))
|
| return false;
|
| - uint32 decompressed_op;
|
| - if (!DisassemblerElf32ARM::Decompress(ARM_OFF11, (uint16) op,
|
| - (uint32) (rva - current_rva),
|
| + uint32_t decompressed_op;
|
| + if (!DisassemblerElf32ARM::Decompress(ARM_OFF11, (uint16_t)op,
|
| + (uint32_t)(rva - current_rva),
|
| &decompressed_op)) {
|
| return false;
|
| }
|
| - uint16 op16 = static_cast<uint16>(decompressed_op);
|
| + uint16_t op16 = static_cast<uint16_t>(decompressed_op);
|
| if (!output->Write(&op16, 2))
|
| return false;
|
| current_rva += 2;
|
| break;
|
| }
|
| case REL32ARM24: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(rel32_ix_, ix_rel32_ix, &index))
|
| return false;
|
| ++ix_rel32_ix;
|
| RVA rva;
|
| if (!VectorAt(rel32_rva_, index, &rva))
|
| return false;
|
| - uint32 decompressed_op;
|
| - if (!DisassemblerElf32ARM::Decompress(ARM_OFF24, (uint16) op,
|
| - (uint32) (rva - current_rva),
|
| + uint32_t decompressed_op;
|
| + if (!DisassemblerElf32ARM::Decompress(ARM_OFF24, (uint16_t)op,
|
| + (uint32_t)(rva - current_rva),
|
| &decompressed_op)) {
|
| return false;
|
| }
|
| @@ -472,40 +473,40 @@ CheckBool EncodedProgram::EvaluateRel32ARM(OP op,
|
| break;
|
| }
|
| case REL32ARM25: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(rel32_ix_, ix_rel32_ix, &index))
|
| return false;
|
| ++ix_rel32_ix;
|
| RVA rva;
|
| if (!VectorAt(rel32_rva_, index, &rva))
|
| return false;
|
| - uint32 decompressed_op;
|
| - if (!DisassemblerElf32ARM::Decompress(ARM_OFF25, (uint16) op,
|
| - (uint32) (rva - current_rva),
|
| + uint32_t decompressed_op;
|
| + if (!DisassemblerElf32ARM::Decompress(ARM_OFF25, (uint16_t)op,
|
| + (uint32_t)(rva - current_rva),
|
| &decompressed_op)) {
|
| return false;
|
| }
|
| - uint32 words = (decompressed_op << 16) | (decompressed_op >> 16);
|
| + uint32_t words = (decompressed_op << 16) | (decompressed_op >> 16);
|
| if (!output->Write(&words, 4))
|
| return false;
|
| current_rva += 4;
|
| break;
|
| }
|
| case REL32ARM21: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(rel32_ix_, ix_rel32_ix, &index))
|
| return false;
|
| ++ix_rel32_ix;
|
| RVA rva;
|
| if (!VectorAt(rel32_rva_, index, &rva))
|
| return false;
|
| - uint32 decompressed_op;
|
| - if (!DisassemblerElf32ARM::Decompress(ARM_OFF21, (uint16) op,
|
| - (uint32) (rva - current_rva),
|
| + uint32_t decompressed_op;
|
| + if (!DisassemblerElf32ARM::Decompress(ARM_OFF21, (uint16_t)op,
|
| + (uint32_t)(rva - current_rva),
|
| &decompressed_op)) {
|
| return false;
|
| }
|
| - uint32 words = (decompressed_op << 16) | (decompressed_op >> 16);
|
| + uint32_t words = (decompressed_op << 16) | (decompressed_op >> 16);
|
| if (!output->Write(&words, 4))
|
| return false;
|
| current_rva += 4;
|
| @@ -530,7 +531,7 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
| RVA current_rva = 0;
|
|
|
| bool pending_pe_relocation_table = false;
|
| - uint8 pending_pe_relocation_table_type = 0x03; // IMAGE_REL_BASED_HIGHLOW
|
| + uint8_t pending_pe_relocation_table_type = 0x03; // IMAGE_REL_BASED_HIGHLOW
|
| Elf32_Word pending_elf_relocation_table_type = 0;
|
| SinkStream bytes_following_relocation_table;
|
|
|
| @@ -560,7 +561,7 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
| return false;
|
| ++ix_copy_counts;
|
| for (size_t i = 0; i < count; ++i) {
|
| - uint8 b;
|
| + uint8_t b;
|
| if (!VectorAt(copy_bytes_, ix_copy_bytes, &b))
|
| return false;
|
| ++ix_copy_bytes;
|
| @@ -572,7 +573,7 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
| }
|
|
|
| case COPY1: {
|
| - uint8 b;
|
| + uint8_t b;
|
| if (!VectorAt(copy_bytes_, ix_copy_bytes, &b))
|
| return false;
|
| ++ix_copy_bytes;
|
| @@ -583,14 +584,14 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
| }
|
|
|
| case REL32: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(rel32_ix_, ix_rel32_ix, &index))
|
| return false;
|
| ++ix_rel32_ix;
|
| RVA rva;
|
| if (!VectorAt(rel32_rva_, index, &rva))
|
| return false;
|
| - uint32 offset = (rva - (current_rva + 4));
|
| + uint32_t offset = (rva - (current_rva + 4));
|
| if (!output->Write(&offset, 4))
|
| return false;
|
| current_rva += 4;
|
| @@ -599,7 +600,7 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
|
|
| case ABS32:
|
| case ABS64: {
|
| - uint32 index;
|
| + uint32_t index;
|
| if (!VectorAt(abs32_ix_, ix_abs32_ix, &index))
|
| return false;
|
| ++ix_abs32_ix;
|
| @@ -607,18 +608,18 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
| if (!VectorAt(abs32_rva_, index, &rva))
|
| return false;
|
| if (op == ABS32) {
|
| - base::CheckedNumeric<uint32> abs32 = image_base_;
|
| + base::CheckedNumeric<uint32_t> abs32 = image_base_;
|
| abs32 += rva;
|
| - uint32 safe_abs32 = abs32.ValueOrDie();
|
| + uint32_t safe_abs32 = abs32.ValueOrDie();
|
| if (!abs32_relocs_.push_back(current_rva) ||
|
| !output->Write(&safe_abs32, 4)) {
|
| return false;
|
| }
|
| current_rva += 4;
|
| } else {
|
| - base::CheckedNumeric<uint64> abs64 = image_base_;
|
| + base::CheckedNumeric<uint64_t> abs64 = image_base_;
|
| abs64 += rva;
|
| - uint64 safe_abs64 = abs64.ValueOrDie();
|
| + uint64_t safe_abs64 = abs64.ValueOrDie();
|
| if (!abs32_relocs_.push_back(current_rva) ||
|
| !output->Write(&safe_abs64, 8)) {
|
| return false;
|
| @@ -715,9 +716,9 @@ CheckBool EncodedProgram::AssembleTo(SinkStream* final_buffer) {
|
| // table file format.
|
| //
|
| struct RelocBlockPOD {
|
| - uint32 page_rva;
|
| - uint32 block_size;
|
| - uint16 relocs[4096]; // Allow up to one relocation per byte of a 4k page.
|
| + uint32_t page_rva;
|
| + uint32_t block_size;
|
| + uint16_t relocs[4096]; // Allow up to one relocation per byte of a 4k page.
|
| };
|
|
|
| static_assert(offsetof(RelocBlockPOD, relocs) == 8, "reloc block header size");
|
| @@ -729,7 +730,7 @@ class RelocBlock {
|
| pod.block_size = 8;
|
| }
|
|
|
| - void Add(uint16 item) {
|
| + void Add(uint16_t item) {
|
| pod.relocs[(pod.block_size-8)/2] = item;
|
| pod.block_size += 2;
|
| }
|
| @@ -749,21 +750,21 @@ class RelocBlock {
|
| };
|
|
|
| CheckBool EncodedProgram::GeneratePeRelocations(SinkStream* buffer,
|
| - uint8 type) {
|
| + uint8_t type) {
|
| std::sort(abs32_relocs_.begin(), abs32_relocs_.end());
|
|
|
| RelocBlock block;
|
|
|
| bool ok = true;
|
| for (size_t i = 0; ok && i < abs32_relocs_.size(); ++i) {
|
| - uint32 rva = abs32_relocs_[i];
|
| - uint32 page_rva = rva & ~0xFFF;
|
| + uint32_t rva = abs32_relocs_[i];
|
| + uint32_t page_rva = rva & ~0xFFF;
|
| if (page_rva != block.pod.page_rva) {
|
| ok &= block.Flush(buffer);
|
| block.pod.page_rva = page_rva;
|
| }
|
| if (ok)
|
| - block.Add(((static_cast<uint16>(type)) << 12) | (rva & 0xFFF));
|
| + block.Add(((static_cast<uint16_t>(type)) << 12) | (rva & 0xFFF));
|
| }
|
| ok &= block.Flush(buffer);
|
| return ok;
|
|
|