PPCSymbolDB. Bugfix. Fix .data symbols not loading, unless they were aligned to 4 bytes.

.data symbols point to memory values and can be any byte or length of bytes (such as a string).
This commit is contained in:
TryTwo 2023-12-02 23:59:49 -07:00
parent 163acb5d2c
commit 92532c8d3a

View File

@ -407,9 +407,16 @@ bool PPCSymbolDB::LoadMap(const Core::CPUThreadGuard& guard, const std::string&
// Check if this is a valid entry.
if (strlen(name) > 0)
{
bool good;
const Common::Symbol::Type type = section_name == ".text" || section_name == ".init" ?
Common::Symbol::Type::Function :
Common::Symbol::Type::Data;
if (type == Common::Symbol::Type::Function)
{
// Can't compute the checksum if not in RAM
bool good = !bad && PowerPC::MMU::HostIsInstructionRAMAddress(guard, vaddress) &&
good = !bad && PowerPC::MMU::HostIsInstructionRAMAddress(guard, vaddress) &&
PowerPC::MMU::HostIsInstructionRAMAddress(guard, vaddress + size - 4);
if (!good)
{
@ -423,12 +430,17 @@ bool PPCSymbolDB::LoadMap(const Core::CPUThreadGuard& guard, const std::string&
good = read_result.valid && read_result.hex == 0x4e800020;
}
}
}
else
{
// Data type, can have any length.
good = !bad && PowerPC::MMU::HostIsRAMAddress(guard, vaddress) &&
PowerPC::MMU::HostIsRAMAddress(guard, vaddress + size - 1);
}
if (good)
{
++good_count;
const Common::Symbol::Type type = section_name == ".text" || section_name == ".init" ?
Common::Symbol::Type::Function :
Common::Symbol::Type::Data;
AddKnownSymbol(guard, vaddress, size, name, type);
}
else