Fix renode/C# delegate types in (Kelvin|Mpact)CPU
The old delegate type in Renode that we depended on arent there since
Renode is doing dynamic type generation now.
Change-Id: Ifb504841f2347576eed4d5473cef0f4dec869947
diff --git a/shodan_infrastructure/KelvinCPU.cs b/shodan_infrastructure/KelvinCPU.cs
index 81c2f32..9f338c1 100644
--- a/shodan_infrastructure/KelvinCPU.cs
+++ b/shodan_infrastructure/KelvinCPU.cs
@@ -474,11 +474,29 @@
private IntPtr reg_info_ptr { get; set; }
private IntPtr string_ptr { get; set; }
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 ConstructWithMemory(Int32 param0, UInt64 param1, UInt64 param2, IntPtr param3);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 FuncInt32Int32(Int32 param0);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 GetRegInfo(Int32 param0, Int32 param1, IntPtr param2, IntPtr param3);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate UInt64 Step(Int32 param0, UInt64 param1, IntPtr param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 ReadRegister(Int32 param0, UInt32 param1, IntPtr param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 WriteRegister(Int32 param0, Int32 param1, UInt64 param2);
+
// Functions from cpuLibrary
[Import(UseExceptionWrapper = false)]
// Int32(Int32 max_string_lenth, UInt64 mem_block_size,
// UInt64 mem_size, uint8_t ** mem_block_ptr_list);
- private FuncInt32Int32UInt64UInt64IntPtr construct_with_memory;
+ private ConstructWithMemory construct_with_memory;
[Import(UseExceptionWrapper = false)]
// Int32(Int32 id);
private FuncInt32Int32 destruct;
@@ -490,16 +508,16 @@
private FuncInt32Int32 get_reg_info_size;
[Import(UseExceptionWrapper = false)]
// Int32(Int32 id, Int32 index, char *name, IntPtr *info);
- private FuncInt32Int32Int32IntPtrIntPtr get_reg_info;
+ private GetRegInfo get_reg_info;
[Import(UseExceptionWrapper = false)]
// UInt64(Int32 id, UInt64 step, IntPtr *status);
- private FuncUInt64Int32UInt64IntPtr step;
+ private Step step;
[Import(UseExceptionWrapper = false)]
// Int32(Int32 id, UInt32 reg_id, IntPtr *value);
- private FuncInt32Int32UInt32IntPtr read_register;
+ private ReadRegister read_register;
[Import(UseExceptionWrapper = false)]
// Int32(Int32 id, Int32 reg_id, UInt64 value);
- private FuncInt32Int32Int32UInt64 write_register;
+ private WriteRegister write_register;
// Register access.
private Dictionary<Int32, CPURegister> registerMap = new Dictionary<Int32, CPURegister>();
diff --git a/shodan_infrastructure/MpactCPU.cs b/shodan_infrastructure/MpactCPU.cs
index ebc82e1..098f4ec 100644
--- a/shodan_infrastructure/MpactCPU.cs
+++ b/shodan_infrastructure/MpactCPU.cs
@@ -201,9 +201,9 @@
// Instantiate the simulator, passing in callbacks to read and write
// from/to the system bus.
read_sysmem_delegate =
- new FuncInt32UInt64IntPtrInt32(ReadSysMemory);
+ new FuncInt32UInt64IntPtrInt32_(ReadSysMemory);
write_sysmem_delegate =
- new FuncInt32UInt64IntPtrInt32(WriteSysMemory);
+ new FuncInt32UInt64IntPtrInt32_(WriteSysMemory);
mpact_id = construct_with_sysbus(cpu_type, maxStringLen,
read_sysmem_delegate,
write_sysmem_delegate);
@@ -601,14 +601,38 @@
// Declare some additional function signatures.
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 WriteRegister(Int32 param0, Int32 param1, UInt64 param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 ReadRegister(Int32 param0, Int32 param1, IntPtr param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 MemoryAccess(Int32 param0, UInt64 param1, IntPtr param2, Int32 param3);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate UInt64 Step(Int32 param0, UInt64 param1, IntPtr param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 LoadImage(Int32 param0, String param1, UInt64 param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 GetRegInfoSize(Int32 param0);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 GetRegInfo(Int32 param0, Int32 param1, IntPtr param2, IntPtr param3);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate Int32 FuncInt32UInt64IntPtrInt32_(UInt64 param0, IntPtr param1, Int32 param2);
+
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate Int32 ConnectWithSysbus(string param0, Int32 param1, Int32 param2,
- FuncInt32UInt64IntPtrInt32 param3,
- FuncInt32UInt64IntPtrInt32 param4);
+ FuncInt32UInt64IntPtrInt32_ param3,
+ FuncInt32UInt64IntPtrInt32_ param4);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate Int32 ConstructWithSysbus(string param0, Int32 param1,
- FuncInt32UInt64IntPtrInt32 param2,
- FuncInt32UInt64IntPtrInt32 param3);
+ FuncInt32UInt64IntPtrInt32_ param2,
+ FuncInt32UInt64IntPtrInt32_ param3);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate Int32 SetConfig(Int32 param0, string[] param1,
@@ -621,10 +645,13 @@
public delegate UInt64 LoadElf(Int32 param0, string param1, bool param2,
IntPtr param3);
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate void ActionInt32_(Int32 param0);
+
// Int32 read_sysmem_delegate(UInt64 address, IntPtr buffer, Int32 size)
- private FuncInt32UInt64IntPtrInt32 read_sysmem_delegate;
+ private FuncInt32UInt64IntPtrInt32_ read_sysmem_delegate;
// Int32 write_sysmem_delegate(UInt64 address, IntPtr buffer, Int32 size)
- private FuncInt32UInt64IntPtrInt32 write_sysmem_delegate;
+ private FuncInt32UInt64IntPtrInt32_ write_sysmem_delegate;
// Functions that are imported from the mpact sim library.
#pragma warning disable 649
@@ -642,19 +669,19 @@
[Import(UseExceptionWrapper = false)]
// void destruct(Int32 id);
- private ActionInt32 destruct;
+ private ActionInt32_ destruct;
[Import(UseExceptionWrapper = false)]
// void reset(Int32 id);
- private ActionInt32 reset;
+ private ActionInt32_ reset;
[Import(UseExceptionWrapper = false)]
// Int32 get_reg_info_size(Int32 id)
- private FuncInt32Int32 get_reg_info_size;
+ private GetRegInfoSize get_reg_info_size;
[Import(UseExceptionWrapper = false)]
// Int32 get_reg_info(Int32 id, IntPtr *name, IntPtr *struct);
- private FuncInt32Int32Int32IntPtrIntPtr get_reg_info;
+ private GetRegInfo get_reg_info;
[Import(UseExceptionWrapper = false)]
// UInt64 load_elf(Int32 id, String file_name,
@@ -663,27 +690,27 @@
[Import(UseExceptionWrapper = false)]
// Int32 load_image(Int32 id, String file_name, UInt64 address);
- private FuncInt32Int32StringUInt64 load_image;
+ private LoadImage load_image;
[Import(UseExceptionWrapper = false)]
// UInt64 step(Int32 id, UInt64 step, IntPtr *error);
- private FuncUInt64Int32UInt64IntPtr step;
+ private Step step;
[Import(UseExceptionWrapper = false)]
// Int32 read_register(Int32 id, Int32 reg_id, IntPtr *value);
- private FuncInt32Int32Int32IntPtr read_register;
+ private ReadRegister read_register;
[Import(UseExceptionWrapper = false)]
// Int32 write_register(Int32 id, Int32 reg_id, UInt64 value);
- private FuncInt32Int32Int32UInt64 write_register;
+ private WriteRegister write_register;
[Import(UseExceptionWrapper = false)]
// Int32 read_memory(Int32 id, UInt64 address, IntPtr buffer, Int32 size);
- private FuncInt32Int32UInt64IntPtrInt32 read_memory;
+ private MemoryAccess read_memory;
[Import(UseExceptionWrapper = false)]
// Int32 write_memory(Int32 id, UInt64 address, IntPtr buffer, Int32 size);
- private FuncInt32Int32UInt64IntPtrInt32 write_memory;
+ private MemoryAccess write_memory;
[Import(UseExceptionWrapper = false)]
// Int32 set_config(Int32 id, string[] names string[] values, Int32 size);