Basic Eraser support.
[pintos-anon] / src / misc / bochs-2.1.1-bigendian.patch
1 The third patch makes the gdb stubs work on Solaris/Sparc, by doing
2 proper byteswapping.  It should be harmless elsewhere.
3
4 diff -urp orig/bochs-2.1.1/gdbstub.cc bochs-2.1.1/gdbstub.cc
5 --- orig/bochs-2.1.1/gdbstub.cc 2004-02-11 14:28:41.000000000 -0800
6 +++ bochs-2.1.1/gdbstub.cc      2004-09-13 16:41:59.652988000 -0700
7 @@ -474,11 +475,13 @@ static void debug_loop(void)
8            case 'P':
9                {
10                   int reg;
11 -                 int value;
12 +                 Bit8u vbits[4];
13 +                 Bit32u value;
14                   char* ebuf;
15                   
16                   reg = strtoul(&buffer[1], &ebuf, 16);
17 -                 value = ntohl(strtoul(ebuf + 1, &ebuf, 16));
18 +                 hex2mem(ebuf + 1, vbits, sizeof value);
19 +                 ReadHostDWordFromLittleEndian(vbits, value);
20                   
21                   BX_INFO (("reg %d set to %x", reg, value));
22                   
23 @@ -527,35 +530,36 @@ static void debug_loop(void)
24                }
25              
26            case 'g':
27 -            registers[0] = EAX;
28 -            registers[1] = ECX;
29 -            registers[2] = EDX;
30 -            registers[3] = EBX;
31 -            registers[4] = ESP;
32 -            registers[5] = EBP;
33 -            registers[6] = ESI;
34 -            registers[7] = EDI;
35 +            WriteHostDWordToLittleEndian(registers + 0, EAX);
36 +            WriteHostDWordToLittleEndian(registers + 1, ECX);
37 +            WriteHostDWordToLittleEndian(registers + 2, EDX);
38 +            WriteHostDWordToLittleEndian(registers + 3, EBX);
39 +            WriteHostDWordToLittleEndian(registers + 4, ESP);
40 +            WriteHostDWordToLittleEndian(registers + 5, EBP);
41 +            WriteHostDWordToLittleEndian(registers + 6, ESI);
42 +            WriteHostDWordToLittleEndian(registers + 7, EDI);
43              if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT)
44                {
45 -                 registers[8] = EIP + 1;
46 +                WriteHostDWordToLittleEndian(registers + 8, EIP + 1);
47                }
48              else
49                {
50 -                 registers[8] = EIP;
51 +                WriteHostDWordToLittleEndian(registers + 8, EIP);
52                }
53 -            registers[9] = BX_CPU_THIS_PTR read_eflags();
54 -            registers[10] = 
55 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
56 -            registers[11] = 
57 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value;
58 -            registers[12] = 
59 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value;
60 -            registers[13] = 
61 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value;
62 -            registers[14] = 
63 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value;
64 -            registers[15] = 
65 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value;
66 +            WriteHostDWordToLittleEndian(registers + 9,
67 +                                         BX_CPU_THIS_PTR read_eflags());
68 +            WriteHostDWordToLittleEndian(registers + 10,
69 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value);
70 +            WriteHostDWordToLittleEndian(registers + 11,
71 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value);
72 +            WriteHostDWordToLittleEndian(registers + 12,
73 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value);
74 +            WriteHostDWordToLittleEndian(registers + 13,
75 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value);
76 +            WriteHostDWordToLittleEndian(registers + 14,
77 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value);
78 +            WriteHostDWordToLittleEndian(registers + 15,
79 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value);
80              mem2hex((char *)registers, obuf, NUMREGSBYTES);
81              put_reply(obuf);
82              break;
83