|
17 | 17 | import ghidra.program.model.data.Undefined6DataType; |
18 | 18 | import ghidra.program.model.data.Undefined7DataType; |
19 | 19 | import ghidra.program.model.data.Undefined8DataType; |
| 20 | +import ghidra.program.model.data.UnsignedInteger16DataType; |
20 | 21 | import ghidra.program.model.lang.Register; |
21 | 22 | import ghidra.program.model.listing.Function; |
22 | 23 | import ghidra.program.model.listing.Instruction; |
@@ -196,7 +197,8 @@ boolean check_inst_builtin_reg_arg(Instruction inst, Map<Register, REG_FLAG> bui |
196 | 197 | (reg.getTypeFlags()&(Register.TYPE_PC|Register.TYPE_SP))==0 && |
197 | 198 | !reg.toString().toUpperCase().contains("SP") && |
198 | 199 | (!program.getLanguage().getProcessor().toString().equals("x86") || |
199 | | - (!compare_register(reg, program.getRegister("BP")))) && |
| 200 | + // XMM15 is used as a zero register. |
| 201 | + (!compare_register(reg, program.getRegister("BP")) && !compare_register(reg, program.getRegister("XMM15")))) && |
200 | 202 | (!program.getLanguage().getProcessor().toString().equals("ARM") || |
201 | 203 | (!compare_register(reg, program.getRegister("lr"))))) { |
202 | 204 | builtin_reg_state.put(reg.getBaseRegister(), REG_FLAG.READ); |
@@ -268,8 +270,10 @@ boolean init_params() { |
268 | 270 | data_type=new Undefined2DataType(); |
269 | 271 | }else if(size==1) { |
270 | 272 | data_type=new Undefined1DataType(); |
| 273 | + }else if(size==16) { |
| 274 | + data_type=new UnsignedInteger16DataType(); |
271 | 275 | }else { |
272 | | - data_type=func.getParameter(i).getDataType(); |
| 276 | + data_type=new Undefined8DataType(); |
273 | 277 | } |
274 | 278 | Register reg=null; |
275 | 279 | if(is_reg_arg_x86) { |
|
0 commit comments