Skip to content

Commit

Permalink
Change expression/address values to signed, use stdint types
Browse files Browse the repository at this point in the history
  • Loading branch information
sp1187 committed Jul 11, 2017
1 parent d3b3b8c commit 4a041eb
Show file tree
Hide file tree
Showing 52 changed files with 295 additions and 308 deletions.
2 changes: 1 addition & 1 deletion Archs/ARM/Arm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ IElfRelocator* CArmArchitecture::getElfRelocator()
return new ArmElfRelocator(version != AARCH_GBA);
}

void CArmArchitecture::addPoolValue(ArmOpcodeCommand* command, u32 value)
void CArmArchitecture::addPoolValue(ArmOpcodeCommand* command, int32_t value)
{
ArmPoolEntry entry;
entry.command = command;
Expand Down
4 changes: 2 additions & 2 deletions Archs/ARM/Arm.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class CArmArchitecture: public CArchitecture

std::vector<ArmPoolEntry> getPoolContent() { return currentPoolContent; }
void clearPoolContent() { currentPoolContent.clear(); }
void addPoolValue(ArmOpcodeCommand* command, u32 value);
void addPoolValue(ArmOpcodeCommand* command, int32_t value);
private:
bool thumb;
ArmArchType version;
Expand All @@ -63,7 +63,7 @@ class CArmArchitecture: public CArchitecture
class ArmOpcodeCommand: public CAssemblerCommand
{
public:
virtual void setPoolAddress(u64 address) = 0;
virtual void setPoolAddress(int64_t address) = 0;
};

extern CArmArchitecture Arm;
2 changes: 1 addition & 1 deletion Archs/ARM/ArmOpcodes.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ typedef struct {
const char* mask;
unsigned int encoding;
unsigned int type:4;
u64 flags;
int64_t flags;
} tArmOpcode;

#define ARM_AMODE_IB 0
Expand Down
10 changes: 5 additions & 5 deletions Archs/ARM/ArmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,13 +234,13 @@ bool ArmParser::parseShift(Parser& parser, ArmOpcodeVariables& vars, bool immedi
std::wstring stringValue = shiftMode.getStringValue();

bool hasNumber = isNumber(stringValue.back());
u64 number;
int64_t number;

// handle modeXX syntax
if (hasNumber)
{
number = 0;
u64 multiplier = 1;
int64_t multiplier = 1;
while (isNumber(stringValue.back()))
{
number += multiplier*(stringValue.back() - '0');
Expand Down Expand Up @@ -390,7 +390,7 @@ bool ArmParser::decodeArmOpcode(const std::wstring& name, const tArmOpcode& opco
vars.Opcode.c = vars.Opcode.a = 0;
vars.Opcode.s = false;

const u8* encoding = (const u8*) opcode.name;
const char* encoding = opcode.name;
size_t pos = 0;

while (*encoding != 0)
Expand Down Expand Up @@ -536,7 +536,7 @@ bool ArmParser::parsePsrTransfer(Parser& parser, ArmOpcodeVariables& vars, bool

bool ArmParser::parseArmParameters(Parser& parser, const tArmOpcode& opcode, ArmOpcodeVariables& vars)
{
const u8* encoding = (const u8*) opcode.mask;
const char* encoding = opcode.mask;

ArmRegisterValue tempRegister;

Expand Down Expand Up @@ -670,7 +670,7 @@ CArmInstruction* ArmParser::parseArmOpcode(Parser& parser)

bool ArmParser::parseThumbParameters(Parser& parser, const tThumbOpcode& opcode, ThumbOpcodeVariables& vars)
{
const u8* encoding = (const u8*) opcode.mask;
const char* encoding = opcode.mask;

ArmRegisterValue tempRegister;
int value;
Expand Down
2 changes: 1 addition & 1 deletion Archs/ARM/ArmRelocator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ bool ArmElfRelocator::relocateOpcode(int type, RelocationData& data)
return true;
}

void ArmElfRelocator::setSymbolAddress(RelocationData& data, u64 symbolAddress, int symbolType)
void ArmElfRelocator::setSymbolAddress(RelocationData& data, int64_t symbolAddress, int symbolType)
{
if (symbolType == STT_FUNC)
{
Expand Down
2 changes: 1 addition & 1 deletion Archs/ARM/ArmRelocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class ArmElfRelocator: public IElfRelocator
public:
ArmElfRelocator(bool arm9): arm9(arm9) { };
virtual bool relocateOpcode(int type, RelocationData& data);
virtual void setSymbolAddress(RelocationData& data, u64 symbolAddress, int symbolType);
virtual void setSymbolAddress(RelocationData& data, int64_t symbolAddress, int symbolType);
virtual CAssemblerCommand* generateCtorStub(std::vector<ElfRelocatorCtor>& ctors);
private:
bool arm9;
Expand Down
4 changes: 2 additions & 2 deletions Archs/ARM/CArmInstruction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ int CArmInstruction::getShiftedImmediate(unsigned int num, int& ShiftAmount)
return -1;
}

void CArmInstruction::setPoolAddress(u64 address)
void CArmInstruction::setPoolAddress(int64_t address)
{
int pos = (int) (address-((RamPos+8) & 0xFFFFFFFD));
if (abs(pos) > 4095)
Expand Down Expand Up @@ -639,5 +639,5 @@ void CArmInstruction::Encode() const
printf("doh");
}

g_fileManager->writeU32((u32)encoding);
g_fileManager->writeU32((uint32_t)encoding);
}
4 changes: 2 additions & 2 deletions Archs/ARM/CArmInstruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ class CArmInstruction: public ArmOpcodeCommand
virtual bool Validate();
virtual void Encode() const;
virtual void writeTempData(TempData& tempData) const;
virtual void setPoolAddress(u64 address);
virtual void setPoolAddress(int64_t address);
private:
void FormatOpcode(char* Dest, const char* Source) const;
void FormatInstruction(const char* encoding, char* dest) const;
int getShiftedImmediate(unsigned int num, int& ShiftAmount);

ArmOpcodeVariables Vars;
tArmOpcode Opcode;
u64 RamPos;
int64_t RamPos;
ArmArchType arch;
};
2 changes: 1 addition & 1 deletion Archs/ARM/CThumbInstruction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ CThumbInstruction::CThumbInstruction(const tThumbOpcode& sourceOpcode, ThumbOpco
OpcodeSize = Opcode.flags & THUMB_LONG ? 4 : 2;
}

void CThumbInstruction::setPoolAddress(u64 address)
void CThumbInstruction::setPoolAddress(int64_t address)
{
int pos = (int) address-((RamPos+4) & 0xFFFFFFFD);
if (pos < 0 || pos > 1020)
Expand Down
4 changes: 2 additions & 2 deletions Archs/ARM/CThumbInstruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@ class CThumbInstruction: public ArmOpcodeCommand
virtual void Encode() const;
virtual void writeTempData(TempData& tempData) const;
size_t GetSize() { return OpcodeSize; };
virtual void setPoolAddress(u64 address);
virtual void setPoolAddress(int64_t address);
private:
void FormatInstruction(const char* encoding, char* dest) const;
void WriteInstruction(unsigned short encoding) const;
ThumbOpcodeVariables Vars;
tThumbOpcode Opcode;
size_t OpcodeSize;
u64 RamPos;
int64_t RamPos;
};
6 changes: 3 additions & 3 deletions Archs/ARM/Pool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ bool ArmStateCommand::Validate()
void ArmStateCommand::writeSymData(SymbolData& symData) const
{
// TODO: find a less ugly way to check for undefined memory positions
if (RamPos == (u64)-1)
if (RamPos == -1)
return;

if (armstate == true)
Expand Down Expand Up @@ -77,7 +77,7 @@ void ArmPoolCommand::Encode() const
{
for (size_t i = 0; i < values.size(); i++)
{
u32 value = values[i];
int32_t value = values[i];
g_fileManager->writeU32(value);
}
}
Expand All @@ -86,7 +86,7 @@ void ArmPoolCommand::writeTempData(TempData& tempData) const
{
for (size_t i = 0; i < values.size(); i++)
{
u32 value = values[i];
int32_t value = values[i];
tempData.writeLine(position+i*4,formatString(L".word 0x%08X",value));
}
}
Expand Down
8 changes: 4 additions & 4 deletions Archs/ARM/Pool.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class ArmStateCommand: public CAssemblerCommand
virtual void writeTempData(TempData& tempData) const { };
virtual void writeSymData(SymbolData& symData) const;
private:
u64 RamPos;
int64_t RamPos;
bool armstate;
};

Expand All @@ -20,7 +20,7 @@ class ArmOpcodeCommand;
struct ArmPoolEntry
{
ArmOpcodeCommand* command;
u32 value;
int32_t value;
};

class ArmPoolCommand: public CAssemblerCommand
Expand All @@ -32,6 +32,6 @@ class ArmPoolCommand: public CAssemblerCommand
virtual void writeTempData(TempData& tempData) const;
virtual void writeSymData(SymbolData& symData) const;
private:
u64 position;
std::vector<u32> values;
int64_t position;
std::vector<int32_t> values;
};
2 changes: 1 addition & 1 deletion Archs/Architecture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ void ArchitectureCommand::writeTempData(TempData& tempData) const
void ArchitectureCommand::writeSymData(SymbolData& symData) const
{
// TODO: find a less ugly way to check for undefined memory positions
if (position == (u64)-1)
if (position == -1)
return;

if (symText.size() != 0)
Expand Down
2 changes: 1 addition & 1 deletion Archs/Architecture.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ArchitectureCommand: public CAssemblerCommand
virtual void writeTempData(TempData& tempData) const;
virtual void writeSymData(SymbolData& symData) const;
private:
u64 position;
int64_t position;
Endianness endianness;
std::wstring tempText;
std::wstring symText;
Expand Down
4 changes: 2 additions & 2 deletions Archs/MIPS/CMipsInstruction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ void CMipsInstruction::encodeNormal() const
encoding |= (registerData.vrt.num & 0x1F) << 16;
}

g_fileManager->writeU32((u32)encoding);
g_fileManager->writeU32((uint32_t)encoding);
}

void CMipsInstruction::encodeVfpu() const
Expand Down Expand Up @@ -340,7 +340,7 @@ void CMipsInstruction::encodeVfpu() const
break;
}

g_fileManager->writeU32((u32)encoding);
g_fileManager->writeU32((uint32_t)encoding);
}

void CMipsInstruction::Encode() const
Expand Down
2 changes: 1 addition & 1 deletion Archs/MIPS/CMipsInstruction.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class CMipsInstruction: public CAssemblerCommand
int floatToHalfFloat(int i);

bool IgnoreLoadDelay;
u64 RamPos;
int64_t RamPos;
bool addNop;

// opcode variables
Expand Down
2 changes: 1 addition & 1 deletion Archs/MIPS/Mips.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ bool MipsElfRelocator::relocateOpcode(int type, RelocationData& data)
return true;
}

void MipsElfRelocator::setSymbolAddress(RelocationData& data, u64 symbolAddress, int symbolType)
void MipsElfRelocator::setSymbolAddress(RelocationData& data, int64_t symbolAddress, int symbolType)
{
data.symbolAddress = symbolAddress;
data.targetSymbolType = symbolType;
Expand Down
2 changes: 1 addition & 1 deletion Archs/MIPS/Mips.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,6 @@ class MipsElfRelocator: public IElfRelocator
{
public:
virtual bool relocateOpcode(int type, RelocationData& data);
virtual void setSymbolAddress(RelocationData& data, u64 symbolAddress, int symbolType);
virtual void setSymbolAddress(RelocationData& data, int64_t symbolAddress, int symbolType);
virtual CAssemblerCommand* generateCtorStub(std::vector<ElfRelocatorCtor>& ctors);
};
30 changes: 15 additions & 15 deletions Archs/MIPS/MipsElfFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ int64_t MipsElfFile::getVirtualAddress()
{
ElfSegment* seg = elf.getSegment(segment);
ElfSection* sect = seg->getSection(section);
size_t addr = seg->getVirtualAddress() + sect->getOffset();
int64_t addr = seg->getVirtualAddress() + sect->getOffset();
return addr+sectionOffset;
}

Expand All @@ -54,7 +54,7 @@ int64_t MipsElfFile::getPhysicalAddress()
{
ElfSegment* seg = elf.getSegment(segment);
ElfSection* sect = seg->getSection(section);
size_t addr = seg->getOffset() + sect->getOffset();
int64_t addr = seg->getOffset() + sect->getOffset();
return addr;
}

Expand All @@ -81,17 +81,17 @@ bool MipsElfFile::seekVirtual(int64_t virtualAddress)
for (size_t i = 0; i < elf.getSegmentCount(); i++)
{
ElfSegment* seg = elf.getSegment(i);
size_t segStart = seg->getVirtualAddress();
size_t segEnd = segStart+seg->getPhysSize();
int64_t segStart = seg->getVirtualAddress();
int64_t segEnd = segStart+seg->getPhysSize();

if (segStart <= virtualAddress && virtualAddress < segEnd)
{
// find section
for (size_t l = 0; l < seg->getSectionCount(); l++)
{
ElfSection* sect = seg->getSection(l);
size_t sectStart = segStart+sect->getOffset();
size_t sectEnd = sectStart+sect->getSize();
int64_t sectStart = segStart+sect->getOffset();
int64_t sectEnd = sectStart+sect->getSize();

if (sectStart <= virtualAddress && virtualAddress < sectEnd)
{
Expand All @@ -118,23 +118,23 @@ bool MipsElfFile::seekPhysical(int64_t physicalAddress)
for (size_t i = 0; i < elf.getSegmentCount(); i++)
{
ElfSegment* seg = elf.getSegment(i);
size_t segStart = seg->getOffset();
size_t segEnd = segStart+seg->getPhysSize();
int64_t segStart = seg->getOffset();
int64_t segEnd = segStart+seg->getPhysSize();

if (segStart <= physicalAddress && physicalAddress < segEnd)
{
// find section
for (size_t l = 0; l < seg->getSectionCount(); l++)
{
ElfSection* sect = seg->getSection(l);
size_t sectStart = segStart+sect->getOffset();
size_t sectEnd = sectStart+sect->getSize();
int64_t sectStart = segStart+sect->getOffset();
int64_t sectEnd = sectStart+sect->getSize();

if (sectStart <= physicalAddress && physicalAddress < sectEnd)
{
segment = (int) i;
section = (int) l;
sectionOffset = (size_t) (physicalAddress-sectStart);
sectionOffset = physicalAddress-sectStart;
return true;
}
}
Expand All @@ -148,14 +148,14 @@ bool MipsElfFile::seekPhysical(int64_t physicalAddress)
for (size_t i = 0; i < elf.getSegmentlessSectionCount(); i++)
{
ElfSection* sect = elf.getSegmentlessSection(i);
size_t sectStart = sect->getOffset();
size_t sectEnd = sectStart+sect->getSize();
int64_t sectStart = sect->getOffset();
int64_t sectEnd = sectStart+sect->getSize();

if (sectStart <= physicalAddress && physicalAddress < sectEnd)
{
segment = -1;
section = (int) i;
sectionOffset = (size_t) (physicalAddress-sectStart);
sectionOffset = physicalAddress-sectStart;
return true;
}
}
Expand All @@ -179,7 +179,7 @@ bool MipsElfFile::write(void* data, size_t length)
ElfSegment* seg = elf.getSegment(segment);
ElfSection* sect = seg->getSection(section);

size_t pos = sect->getOffset()+sectionOffset;
int64_t pos = sect->getOffset()+sectionOffset;
seg->writeToData(pos,data,length);
sectionOffset += length;
return true;
Expand Down
6 changes: 3 additions & 3 deletions Archs/MIPS/MipsMacros.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ MipsMacroCommand::~MipsMacroCommand()

bool MipsMacroCommand::Validate()
{
u64 memoryPos = g_fileManager->getVirtualAddress();
int64_t memoryPos = g_fileManager->getVirtualAddress();
content->applyFileInfo();
bool result = content->Validate();
u64 newMemoryPos = g_fileManager->getVirtualAddress();
int64_t newMemoryPos = g_fileManager->getVirtualAddress();

applyFileInfo();

Expand Down Expand Up @@ -131,7 +131,7 @@ CAssemblerCommand* generateMipsMacroLi(Parser& parser, MipsRegisterData& registe
ExpressionValue value = immediates.secondary.expression.evaluate();
if (value.isFloat())
{
u32 newValue = getFloatBits((float)value.floatValue);
int32_t newValue = getFloatBits((float)value.floatValue);
immediates.secondary.expression = createConstExpression(newValue);
}
}
Expand Down
Loading

0 comments on commit 4a041eb

Please sign in to comment.