From f165a15effaf5669466c43d3e3352fc6bab95124 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Fri, 15 Nov 2013 08:18:34 -0800 Subject: [PATCH 1/2] Fix a -unsigned warning. Looks ugly, but (u32)-(s32)val is what we really want here. Also make a __FUNCTION__ redeclaration warning go away. --- Common/ArmEmitter.cpp | 6 ++++-- Core/MIPS/MIPS.cpp | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Common/ArmEmitter.cpp b/Common/ArmEmitter.cpp index ea793d6b7b..4cffba4226 100644 --- a/Common/ArmEmitter.cpp +++ b/Common/ArmEmitter.cpp @@ -38,7 +38,9 @@ // __FUNCTION__ is misused a lot below, it's no longer a string literal but a virtual // variable so this use fails in some compilers. Just define it away for now. +#ifndef _MSC_VER #define __FUNCTION__ "(n/a)" +#endif namespace ArmGen { @@ -166,8 +168,8 @@ void ARMXEmitter::ADDI2R(ARMReg rd, ARMReg rs, u32 val, ARMReg scratch) // Decompose into two additions. ADD(rd, rs, Operand2((u8)(val >> 8), 12)); // rotation right by 12*2 == rotation left by 8 ADD(rd, rd, Operand2((u8)(val), 0)); - } else if (((-(u32)(s32)val) & 0xFFFF0000) == 0) { - val = -(u32)(s32)val; + } else if ((((u32)-(s32)val) & 0xFFFF0000) == 0) { + val = (u32)-(s32)val; SUB(rd, rs, Operand2((u8)(val >> 8), 12)); SUB(rd, rd, Operand2((u8)(val), 0)); } else { diff --git a/Core/MIPS/MIPS.cpp b/Core/MIPS/MIPS.cpp index edc8d4f5ba..d8b76f4709 100644 --- a/Core/MIPS/MIPS.cpp +++ b/Core/MIPS/MIPS.cpp @@ -169,8 +169,8 @@ void MIPSState::DoState(PointerWrap &p) { p.Do(lo); p.Do(fpcond); if (s <= 1) { - u32 fcr0_unusued = 0; - p.Do(fcr0_unusued); + u32 fcr0_unused = 0; + p.Do(fcr0_unused); } p.Do(fcr31); p.Do(rng.m_w); From b9feae3b62eed6cbb79b14bb49ba6d95c5c13b54 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Fri, 15 Nov 2013 08:19:29 -0800 Subject: [PATCH 2/2] Don't require 32-bit relocs to be aligned. Also, report these situations more, who knows what games they could break. --- Core/ELF/ElfReader.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/ELF/ElfReader.cpp b/Core/ELF/ElfReader.cpp index 1ec733f76e..6b17128c48 100644 --- a/Core/ELF/ElfReader.cpp +++ b/Core/ELF/ElfReader.cpp @@ -69,18 +69,18 @@ bool ElfReader::LoadRelocations(Elf32_Rel *rels, int numRelocs) //0 = code //1 = data - if (readwrite >= ARRAY_SIZE(segmentVAddr)) { + if (readwrite >= (int)ARRAY_SIZE(segmentVAddr)) { if (numErrors < 10) { - ERROR_LOG(LOADER, "Bad segment number %i", readwrite); + ERROR_LOG_REPORT(LOADER, "Bad segment number %i", readwrite); } numErrors++; continue; } addr += segmentVAddr[readwrite]; - if ((addr & 3) || !Memory::IsValidAddress(addr)) { + if (((addr & 3) && type != R_MIPS_32) || !Memory::IsValidAddress(addr)) { if (numErrors < 10) { - WARN_LOG(LOADER, "Suspicious address %08x, skipping reloc", addr); + WARN_LOG_REPORT(LOADER, "Suspicious address %08x, skipping reloc, type = %d", addr, type); } else if (numErrors == 10) { WARN_LOG(LOADER, "Too many bad relocations, skipping logging"); }