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