RalfFriedl
IPPF-Urgestein
- Mitglied seit
- 22 Apr 2007
- Beiträge
- 12,343
- Punkte für Reaktionen
- 1
- Punkte
- 0
Sieht aus, als gäbe es da schon länger Probleme und als würde Mono MIPS generell nicht unterstützen.
case OP_LMOVE:
case OP_LCONV_TO_U8:
case OP_LCONV_TO_I8:
case OP_LCONV_TO_OVF_U8_UN:
case OP_LCONV_TO_OVF_I8:
MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, tree->dreg + 1, tree->sreg1 + 2);
MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, tree->dreg + 2, tree->sreg1 + 1);
break;
int i = 1;
long a = i;
long b = a;
Console.WriteLine ("Test: 0x{0:X8}, 0x{1:X8}", a, b);
Test: 0x00000001, 0x00000001
IL_0016: ldc.i4.1
IL_0017: stloc.0
IL_0018: ldloc.0
IL_0019: conv.i8 <-- hier setze ich an
IL_001a: stloc.1
IL_001b: ldloc.1
IL_001c: stloc.2
IL_001d: ldstr "Test: 0x{0:X8}, 0x{1:X8}"
IL_0022: ldloc.1
IL_0023: box [mscorlib]System.Int64
IL_0028: ldloc.2
IL_0029: box [mscorlib]System.Int64
IL_002e: call void [mscorlib]System.Console::WriteLine(string, object, object)
... dass conv.i8 ein OP_LCONV_TO_U8 erzeugt...
long b = 0x201;
int* a = (int*)(void*)&b;
int ms = *a;
int ls = *(a + 1);
Console.WriteLine ("Test: ms=0x{0:X}, ls=0x{1:X}, 0x{2:X}", ms, ls, b);
long b
0x10
0x14
int ms
0x34
int ls
0x30
long b = 0x201;
@ 0x4c 8 iconst v0 <- [513]
@ 0x50 9 storei4_membase_reg [sp + 0x14] <- v0
@ 0x54 10 storei4_membase_reg [sp + 0x10] <- zero
int* a = (int*)(void*)&b;
@ 0x58 11 add_imm v0 <- sp [16]
@ 0x5c 12 move v1 <- v0
int ms = *a;
@ 0x60 13 loadi4_membase v1 <- [v1 + 0x0]
@ 0x64 14 store_membase_reg [sp + 0x34] <- v1
a = a + 1
@ 0x68 15 int_add_imm v0 <- v0 [4]
int ls = *a;
@ 0x6c 16 loadi4_membase v0 <- [v0 + 0x0]
@ 0x70 17 store_membase_reg [sp + 0x30] <- v0
0x28 = box parameter arg0 ms
@ 0x74 18 iconst a0 <- [10279780]
@ 0x7c 19 call v0 <- [mono_object_new_ptrfree_box] [a0 <- R64] clobbers: c
@ 0x8c 20 load_membase v1 <- [sp + 0x34]
@ 0x90 21 storei4_membase_reg [v0 + 0x8] <- v1
@ 0x94 22 store_membase_reg [sp + 0x28] <- v0
0x2C = box parameter arg1 ls
@ 0x98 23 iconst a0 <- [10279780]
@ 0xa0 24 call v0 <- [mono_object_new_ptrfree_box] [a0 <- R68] clobbers: c
@ 0xb0 25 load_membase v1 <- [sp + 0x30]
@ 0xb4 26 storei4_membase_reg [v0 + 0x8] <- v1
@ 0xb8 27 store_membase_reg [sp + 0x2c] <- v0
box parameter arg2 b
@ 0xbc 28 loadi4_membase v0 <- [sp + 0x14]
@ 0xc0 29 store_membase_reg [sp + 0x20] <- v0 -- 0x20 hat 0x201
@ 0xc4 30 loadi4_membase v0 <- [sp + 0x10]
@ 0xc8 31 store_membase_reg [sp + 0x24] <- v0
@ 0xcc 32 iconst a0 <- [10280732]
@ 0xd4 33 call v0 <- [mono_object_new_ptrfree_box] [a0 <- R74] clobbers: c
@ 0xe4 34 move a3 <- v0
@ 0xe8 35 load_membase v0 <- [sp + 0x20]
@ 0xec 36 load_membase v1 <- [sp + 0x24]
@ 0xf0 37 load_membase a1 <- [sp + 0x28]
@ 0xf4 38 load_membase a2 <- [sp + 0x2c]
@ 0xf8 39 storei4_membase_reg [a3 + 0x8] <- v1
@ 0xfc 40 storei4_membase_reg [a3 + 0xc] <- v0
@ 0x100 41 iconst a0 <- [716492640]
@ 0x108 42 voidcall [System.Console:WriteLine (string,object,object,object)] [a0 <- R75] [a1 <- R76] [a2 <- R77] [a3 <- R78] clobbers: c
Hello World False!
Test: ms=0x0, ls=0x0, 0x20100000000
Ist das oben mit oder ohne Deinen Swap? Ändere das mal auf "b = 0x12345678", was kommt dann heraus?Für mich sieht das gut aus. Aber ich erhalte folgendes Ergebnis:
Code:Hello World False! Test: ms=0x0, ls=0x0, 0x20100000000
Kann Mono denn den erzeugten Maschinencode speichern? Dann könnte man den auch auf einem anderen Gerät anschauen.Um tiefer in das Problem einzutauchen, müsste man den Maschinencode untersuchen. Dazu bräuchte man eine Box die man rein für Entwicklungszwecke präparieren müsste (Compiler, Linker, Assembler, Debugger, mini-mono).