mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
Merge remote-tracking branch 'origin/patch'
This commit is contained in:
commit
5690528835
3 changed files with 39 additions and 78 deletions
|
@ -81,8 +81,7 @@ class MemoryBlockSourceInfoDB implements MemoryBlockSourceInfo {
|
|||
@Override
|
||||
public long getFileBytesOffset(Address address) {
|
||||
if (subBlock instanceof FileBytesSubMemoryBlock && contains(address)) {
|
||||
long blockOffset = address.subtract(getMinAddress());
|
||||
long subBlockOffset = blockOffset - subBlock.subBlockOffset;
|
||||
long subBlockOffset = address.subtract(getMinAddress());
|
||||
return ((FileBytesSubMemoryBlock) subBlock).getFileBytesOffset() + subBlockOffset;
|
||||
}
|
||||
return -1;
|
||||
|
|
|
@ -56,7 +56,7 @@ public class MemBlockDBTest extends AbstractGenericTest {
|
|||
txID = handle.startTransaction();
|
||||
|
||||
addressFactory = language.getAddressFactory();
|
||||
AddressMapDB addrMap = (AddressMapDB) program.getAddressMap();
|
||||
AddressMapDB addrMap = program.getAddressMap();
|
||||
Lock lock = new Lock("Test");
|
||||
int openMode = DBConstants.CREATE;
|
||||
mem = new MemoryMapDB(handle, addrMap, openMode, true, lock);
|
||||
|
@ -396,7 +396,7 @@ public class MemBlockDBTest extends AbstractGenericTest {
|
|||
|
||||
sourceInfo = sourceInfos.get(1);
|
||||
assertEquals(fileBytes, sourceInfo.getFileBytes().get());
|
||||
assertEquals(70, sourceInfo.getFileBytesOffset());
|
||||
assertEquals(70, sourceInfo.getFileBytesOffset(sourceInfo.getMinAddress()));
|
||||
assertEquals(10, sourceInfo.getLength());
|
||||
}
|
||||
|
||||
|
|
|
@ -33,19 +33,28 @@
|
|||
</returnaddress>
|
||||
|
||||
<stackpointer register="a10" space="ram"/>
|
||||
|
||||
<prefersplit style="inhalf">
|
||||
<register name="e4"/>
|
||||
<register name="e6"/>
|
||||
</prefersplit>
|
||||
|
||||
<default_proto>
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0" strategy="register">
|
||||
<prototype name="__stdcall" extrapop="0" stackshift="0">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
|
||||
<pentry minsize="4" maxsize="4" storage="hiddenret">
|
||||
<register name="a4"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<pentry minsize="4" maxsize="4" metatype="ptr"> <!-- This is the first pointer -->
|
||||
<register name="a4"/>
|
||||
</pentry>
|
||||
<pentry minsize="4" maxsize="4" metatype="ptr">
|
||||
<register name="a5"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<pentry minsize="4" maxsize="4" metatype="ptr">
|
||||
<register name="a6"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<pentry minsize="4" maxsize="4" metatype="ptr">
|
||||
<register name="a7"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
|
||||
|
@ -54,31 +63,35 @@
|
|||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d5"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
|
||||
<register name="e4"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d6"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d7"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
|
||||
<register name="e4"/>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<register name="e6"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="16" space="ram"/>
|
||||
<addr offset="0" space="stack"/>
|
||||
</pentry>
|
||||
<rule>
|
||||
<datatype name="struct" minsize="17"/>
|
||||
<convert_to_ptr/>
|
||||
</rule>
|
||||
</input>
|
||||
|
||||
<!-- There are issues with locking in function signatures with multiple possible
|
||||
return locations. When the signature is committed/locked, Ghidra will apply the
|
||||
first available location, which is incorrect. The decompiler can figure
|
||||
out between two variable locations but doesn't currently pass back the
|
||||
return storage location. A fix is needed, or use custom storage. -->
|
||||
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="4" metatype="ptr">
|
||||
<pentry minsize="4" maxsize="4" metatype="ptr">
|
||||
<register name="a2"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d2"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8">
|
||||
<register name="e2"/>
|
||||
</pentry>
|
||||
</output>
|
||||
|
@ -91,6 +104,10 @@
|
|||
<register name="d13"/>
|
||||
<register name="d14"/>
|
||||
<register name="d15"/>
|
||||
<register name="a0"/>
|
||||
<register name="a1"/>
|
||||
<register name="a8"/>
|
||||
<register name="a9"/>
|
||||
<register name="a10"/>
|
||||
<register name="a11"/>
|
||||
<register name="a12"/>
|
||||
|
@ -101,64 +118,9 @@
|
|||
</prototype>
|
||||
</default_proto>
|
||||
|
||||
<!-- This will no longer be necessary once fixes are made to support the
|
||||
correct choice of storage location when there are multiple return types -->
|
||||
|
||||
<prototype name="__stdcall_data" extrapop="0" stackshift="0" strategy="register">
|
||||
<input>
|
||||
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
|
||||
<register name="a4"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
|
||||
<register name="d4"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d5"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a5"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a6"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d6"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="a7"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="4">
|
||||
<register name="d7"/>
|
||||
</pentry>
|
||||
<pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
|
||||
<register name="e4"/>
|
||||
</pentry>
|
||||
<pentry minsize="1" maxsize="500" align="4">
|
||||
<addr offset="16" space="ram"/>
|
||||
</pentry>
|
||||
</input>
|
||||
<output>
|
||||
<pentry minsize="1" maxsize="8">
|
||||
<register name="e2"/>
|
||||
</pentry>
|
||||
</output>
|
||||
<unaffected>
|
||||
<register name="d8"/>
|
||||
<register name="d9"/>
|
||||
<register name="d10"/>
|
||||
<register name="d11"/>
|
||||
<register name="d12"/>
|
||||
<register name="d13"/>
|
||||
<register name="d14"/>
|
||||
<register name="d15"/>
|
||||
<register name="a10"/>
|
||||
<register name="a11"/>
|
||||
<register name="a12"/>
|
||||
<register name="a13"/>
|
||||
<register name="a14"/>
|
||||
<register name="a15"/>
|
||||
</unaffected>
|
||||
</prototype>
|
||||
<!-- __stdcall_data calling convention removed, no longer necessary as decompiler will return
|
||||
the correct return storage location when there are multiple return location types
|
||||
-->
|
||||
|
||||
<callotherfixup targetop="saveCallerState">
|
||||
<pcode>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue