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);