|
34 | 34 |
|
35 | 35 | <stackpointer register="a10" space="ram"/>
|
36 | 36 | <default_proto>
|
37 |
| - <prototype name="__stdcall" extrapop="0" stackshift="0" strategy="register"> |
| 37 | + <prototype name="__stdcall" extrapop="0" stackshift="0"> |
38 | 38 | <input>
|
| 39 | + <pentry minsize="4" maxsize="4" storage="hiddenret"> |
| 40 | + <register name="a4"/> |
| 41 | + </pentry> |
39 | 42 | <pentry minsize="4" maxsize="4" metatype="ptr"> <!-- This is the first pointer -->
|
40 | 43 | <register name="a4"/>
|
41 | 44 | </pentry>
|
|
63 | 66 | <pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer -->
|
64 | 67 | <register name="e4"/>
|
65 | 68 | </pentry>
|
| 69 | + <pentry minsize="5" maxsize="8"> |
| 70 | + <register name="e6"/> |
| 71 | + </pentry> |
66 | 72 | <pentry minsize="1" maxsize="500" align="4">
|
67 |
| - <addr offset="16" space="stack"/> |
| 73 | + <addr offset="0" space="stack"/> |
68 | 74 | </pentry>
|
69 | 75 | </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. --> |
76 | 76 |
|
77 | 77 | <output>
|
78 | 78 | <pentry minsize="4" maxsize="4" metatype="ptr">
|
|
105 | 105 | </prototype>
|
106 | 106 | </default_proto>
|
107 | 107 |
|
108 |
| - <!-- This will no longer be necessary once fixes are made to support the |
109 |
| - correct choice of storage location when there are multiple return types --> |
110 |
| - |
111 |
| - <prototype name="__stdcall_data" extrapop="0" stackshift="0" strategy="register"> |
112 |
| - <input> |
113 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
114 |
| - <register name="a4"/> |
115 |
| - </pentry> |
116 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
117 |
| - <register name="d4"/> |
118 |
| - </pentry> |
119 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
120 |
| - <register name="d5"/> |
121 |
| - </pentry> |
122 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
123 |
| - <register name="a5"/> |
124 |
| - </pentry> |
125 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
126 |
| - <register name="a6"/> |
127 |
| - </pentry> |
128 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
129 |
| - <register name="d6"/> |
130 |
| - </pentry> |
131 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
132 |
| - <register name="a7"/> |
133 |
| - </pentry> |
134 |
| - <pentry minsize="1" maxsize="4" extension="inttype"> |
135 |
| - <register name="d7"/> |
136 |
| - </pentry> |
137 |
| - <pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer --> |
138 |
| - <register name="e4"/> |
139 |
| - </pentry> |
140 |
| - <pentry minsize="1" maxsize="500" align="4"> |
141 |
| - <addr offset="16" space="stack"/> |
142 |
| - </pentry> |
143 |
| - </input> |
144 |
| - <output> |
145 |
| - <pentry minsize="1" maxsize="8" extension="inttype"> |
146 |
| - <register name="e2"/> |
147 |
| - </pentry> |
148 |
| - </output> |
149 |
| - <unaffected> |
150 |
| - <register name="d8"/> |
151 |
| - <register name="d9"/> |
152 |
| - <register name="d10"/> |
153 |
| - <register name="d11"/> |
154 |
| - <register name="d12"/> |
155 |
| - <register name="d13"/> |
156 |
| - <register name="d14"/> |
157 |
| - <register name="d15"/> |
158 |
| - <register name="a0"/> |
159 |
| - <register name="a1"/> |
160 |
| - <register name="a8"/> |
161 |
| - <register name="a9"/> |
162 |
| - <register name="a10"/> |
163 |
| - <register name="a11"/> |
164 |
| - <register name="a12"/> |
165 |
| - <register name="a13"/> |
166 |
| - <register name="a14"/> |
167 |
| - <register name="a15"/> |
168 |
| - </unaffected> |
169 |
| - </prototype> |
| 108 | + <!-- __stdcall_data calling convention removed, no longer necessary as decompiler will return |
| 109 | + the correct return storage location when there are multiple return location types |
| 110 | + --> |
170 | 111 |
|
171 | 112 | <callotherfixup targetop="saveCallerState">
|
172 | 113 | <pcode>
|
|
0 commit comments