|
33 | 33 | </returnaddress>
|
34 | 34 |
|
35 | 35 | <stackpointer register="a10" space="ram"/>
|
| 36 | + |
| 37 | + <prefersplit style="inhalf"> |
| 38 | + <register name="e4"/> |
| 39 | + <register name="e6"/> |
| 40 | + </prefersplit> |
| 41 | + |
36 | 42 | <default_proto>
|
37 |
| - <prototype name="__stdcall" extrapop="0" stackshift="0" strategy="register"> |
| 43 | + <prototype name="__stdcall" extrapop="0" stackshift="0"> |
38 | 44 | <input>
|
39 |
| - <pentry minsize="1" maxsize="4"> <!-- This is the first non pointer --> |
| 45 | + <pentry minsize="4" maxsize="4" storage="hiddenret"> |
40 | 46 | <register name="a4"/>
|
41 | 47 | </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"> |
43 | 52 | <register name="a5"/>
|
44 | 53 | </pentry>
|
45 |
| - <pentry minsize="1" maxsize="4"> |
| 54 | + <pentry minsize="4" maxsize="4" metatype="ptr"> |
46 | 55 | <register name="a6"/>
|
47 | 56 | </pentry>
|
48 |
| - <pentry minsize="1" maxsize="4"> |
| 57 | + <pentry minsize="4" maxsize="4" metatype="ptr"> |
49 | 58 | <register name="a7"/>
|
50 | 59 | </pentry>
|
51 | 60 | <pentry minsize="1" maxsize="4"> <!-- This is the first non pointer -->
|
|
54 | 63 | <pentry minsize="1" maxsize="4">
|
55 | 64 | <register name="d5"/>
|
56 | 65 | </pentry>
|
| 66 | + <pentry minsize="5" maxsize="8"> <!-- This is the first >4 byte non pointer --> |
| 67 | + <register name="e4"/> |
| 68 | + </pentry> |
57 | 69 | <pentry minsize="1" maxsize="4">
|
58 | 70 | <register name="d6"/>
|
59 | 71 | </pentry>
|
60 | 72 | <pentry minsize="1" maxsize="4">
|
61 | 73 | <register name="d7"/>
|
62 | 74 | </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"/> |
65 | 77 | </pentry>
|
66 | 78 | <pentry minsize="1" maxsize="500" align="4">
|
67 |
| - <addr offset="16" space="ram"/> |
| 79 | + <addr offset="0" space="stack"/> |
68 | 80 | </pentry>
|
| 81 | + <rule> |
| 82 | + <datatype name="struct" minsize="17"/> |
| 83 | + <convert_to_ptr/> |
| 84 | + </rule> |
69 | 85 | </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 | 86 |
|
77 | 87 | <output>
|
78 |
| - <pentry minsize="1" maxsize="4" metatype="ptr"> |
| 88 | + <pentry minsize="4" maxsize="4" metatype="ptr"> |
79 | 89 | <register name="a2"/>
|
80 | 90 | </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"> |
82 | 95 | <register name="e2"/>
|
83 | 96 | </pentry>
|
84 | 97 | </output>
|
|
91 | 104 | <register name="d13"/>
|
92 | 105 | <register name="d14"/>
|
93 | 106 | <register name="d15"/>
|
| 107 | + <register name="a0"/> |
| 108 | + <register name="a1"/> |
| 109 | + <register name="a8"/> |
| 110 | + <register name="a9"/> |
94 | 111 | <register name="a10"/>
|
95 | 112 | <register name="a11"/>
|
96 | 113 | <register name="a12"/>
|
|
101 | 118 | </prototype>
|
102 | 119 | </default_proto>
|
103 | 120 |
|
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 | + --> |
162 | 124 |
|
163 | 125 | <callotherfixup targetop="saveCallerState">
|
164 | 126 | <pcode>
|
|
0 commit comments