Skip to content

Commit 5690528

Browse files
committed
Merge remote-tracking branch 'origin/patch'
2 parents 955851d + 7c242e3 commit 5690528

File tree

3 files changed

+39
-78
lines changed

3 files changed

+39
-78
lines changed

Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryBlockSourceInfoDB.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ public long getFileBytesOffset() {
8181
@Override
8282
public long getFileBytesOffset(Address address) {
8383
if (subBlock instanceof FileBytesSubMemoryBlock && contains(address)) {
84-
long blockOffset = address.subtract(getMinAddress());
85-
long subBlockOffset = blockOffset - subBlock.subBlockOffset;
84+
long subBlockOffset = address.subtract(getMinAddress());
8685
return ((FileBytesSubMemoryBlock) subBlock).getFileBytesOffset() + subBlockOffset;
8786
}
8887
return -1;

Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/program/database/mem/MemBlockDBTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void setUp() throws Exception {
5656
txID = handle.startTransaction();
5757

5858
addressFactory = language.getAddressFactory();
59-
AddressMapDB addrMap = (AddressMapDB) program.getAddressMap();
59+
AddressMapDB addrMap = program.getAddressMap();
6060
Lock lock = new Lock("Test");
6161
int openMode = DBConstants.CREATE;
6262
mem = new MemoryMapDB(handle, addrMap, openMode, true, lock);
@@ -396,7 +396,7 @@ public void testJoinNonConsecutiveFileBytes() throws Exception {
396396

397397
sourceInfo = sourceInfos.get(1);
398398
assertEquals(fileBytes, sourceInfo.getFileBytes().get());
399-
assertEquals(70, sourceInfo.getFileBytesOffset());
399+
assertEquals(70, sourceInfo.getFileBytesOffset(sourceInfo.getMinAddress()));
400400
assertEquals(10, sourceInfo.getLength());
401401
}
402402

Ghidra/Processors/tricore/data/languages/tricore.cspec

+36-74
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,28 @@
3333
</returnaddress>
3434

3535
<stackpointer register="a10" space="ram"/>
36+
37+
<prefersplit style="inhalf">
38+
<register name="e4"/>
39+
<register name="e6"/>
40+
</prefersplit>
41+
3642
<default_proto>
37-
<prototype name="__stdcall" extrapop="0" stackshift="0" strategy="register">
43+
<prototype name="__stdcall" extrapop="0" stackshift="0">
3844
<input>
39-
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
45+
<pentry minsize="4" maxsize="4" storage="hiddenret">
4046
<register name="a4"/>
4147
</pentry>
42-
<pentry minsize="1" maxsize="4">
48+
<pentry minsize="4" maxsize="4" metatype="ptr"> <!-- This is the first pointer -->
49+
<register name="a4"/>
50+
</pentry>
51+
<pentry minsize="4" maxsize="4" metatype="ptr">
4352
<register name="a5"/>
4453
</pentry>
45-
<pentry minsize="1" maxsize="4">
54+
<pentry minsize="4" maxsize="4" metatype="ptr">
4655
<register name="a6"/>
4756
</pentry>
48-
<pentry minsize="1" maxsize="4">
57+
<pentry minsize="4" maxsize="4" metatype="ptr">
4958
<register name="a7"/>
5059
</pentry>
5160
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
@@ -54,31 +63,35 @@
5463
<pentry minsize="1" maxsize="4">
5564
<register name="d5"/>
5665
</pentry>
66+
<pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
67+
<register name="e4"/>
68+
</pentry>
5769
<pentry minsize="1" maxsize="4">
5870
<register name="d6"/>
5971
</pentry>
6072
<pentry minsize="1" maxsize="4">
6173
<register name="d7"/>
6274
</pentry>
63-
<pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
64-
<register name="e4"/>
75+
<pentry minsize="5" maxsize="8">
76+
<register name="e6"/>
6577
</pentry>
6678
<pentry minsize="1" maxsize="500" align="4">
67-
<addr offset="16" space="ram"/>
79+
<addr offset="0" space="stack"/>
6880
</pentry>
81+
<rule>
82+
<datatype name="struct" minsize="17"/>
83+
<convert_to_ptr/>
84+
</rule>
6985
</input>
70-
71-
<!-- There are issues with locking in function signatures with multiple possible
72-
return locations. When the signature is committed/locked, Ghidra will apply the
73-
first available location, which is incorrect. The decompiler can figure
74-
out between two variable locations but doesn't currently pass back the
75-
return storage location. A fix is needed, or use custom storage. -->
7686

7787
<output>
78-
<pentry minsize="1" maxsize="4" metatype="ptr">
88+
<pentry minsize="4" maxsize="4" metatype="ptr">
7989
<register name="a2"/>
8090
</pentry>
81-
<pentry minsize="1" maxsize="8">
91+
<pentry minsize="1" maxsize="4">
92+
<register name="d2"/>
93+
</pentry>
94+
<pentry minsize="5" maxsize="8">
8295
<register name="e2"/>
8396
</pentry>
8497
</output>
@@ -91,6 +104,10 @@
91104
<register name="d13"/>
92105
<register name="d14"/>
93106
<register name="d15"/>
107+
<register name="a0"/>
108+
<register name="a1"/>
109+
<register name="a8"/>
110+
<register name="a9"/>
94111
<register name="a10"/>
95112
<register name="a11"/>
96113
<register name="a12"/>
@@ -101,64 +118,9 @@
101118
</prototype>
102119
</default_proto>
103120

104-
<!-- This will no longer be necessary once fixes are made to support the
105-
correct choice of storage location when there are multiple return types -->
106-
107-
<prototype name="__stdcall_data" extrapop="0" stackshift="0" strategy="register">
108-
<input>
109-
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
110-
<register name="a4"/>
111-
</pentry>
112-
<pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
113-
<register name="d4"/>
114-
</pentry>
115-
<pentry minsize="1" maxsize="4">
116-
<register name="d5"/>
117-
</pentry>
118-
<pentry minsize="1" maxsize="4">
119-
<register name="a5"/>
120-
</pentry>
121-
<pentry minsize="1" maxsize="4">
122-
<register name="a6"/>
123-
</pentry>
124-
<pentry minsize="1" maxsize="4">
125-
<register name="d6"/>
126-
</pentry>
127-
<pentry minsize="1" maxsize="4">
128-
<register name="a7"/>
129-
</pentry>
130-
<pentry minsize="1" maxsize="4">
131-
<register name="d7"/>
132-
</pentry>
133-
<pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
134-
<register name="e4"/>
135-
</pentry>
136-
<pentry minsize="1" maxsize="500" align="4">
137-
<addr offset="16" space="ram"/>
138-
</pentry>
139-
</input>
140-
<output>
141-
<pentry minsize="1" maxsize="8">
142-
<register name="e2"/>
143-
</pentry>
144-
</output>
145-
<unaffected>
146-
<register name="d8"/>
147-
<register name="d9"/>
148-
<register name="d10"/>
149-
<register name="d11"/>
150-
<register name="d12"/>
151-
<register name="d13"/>
152-
<register name="d14"/>
153-
<register name="d15"/>
154-
<register name="a10"/>
155-
<register name="a11"/>
156-
<register name="a12"/>
157-
<register name="a13"/>
158-
<register name="a14"/>
159-
<register name="a15"/>
160-
</unaffected>
161-
</prototype>
121+
<!-- __stdcall_data calling convention removed, no longer necessary as decompiler will return
122+
the correct return storage location when there are multiple return location types
123+
-->
162124

163125
<callotherfixup targetop="saveCallerState">
164126
<pcode>

0 commit comments

Comments
 (0)