Bochs patches for Solaris.
[pintos-anon] / src / misc / bochs-2.1.1.patch
1 The first two patches are needed for Bochs to properly compile and run
2 under Solaris on Sparc.  The first should probably be handled by
3 Autoconf; I'm not sure why it isn't.  The second is needed to make GCC
4 accept X.h's frequent use of "extern foo(...)", because use of an
5 implicit int return type is forbidden in C++.
6
7 The third patch makes the gdb stubs work on Solaris/Sparc, by doing
8 proper byteswapping.
9
10 diff -urp orig/bochs-2.1.1/Makefile.in bochs-2.1.1/Makefile.in
11 --- orig/bochs-2.1.1/Makefile.in        2004-02-11 14:28:02.000000000 -0800
12 +++ bochs-2.1.1/Makefile.in     2004-09-13 15:05:26.281550000 -0700
13 @@ -92,7 +92,7 @@ CXX = @CXX@
14  CFLAGS = @CFLAGS@ @GUI_CFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"'
15  CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"'
16  
17 -LDFLAGS = @LDFLAGS@
18 +LDFLAGS = @LDFLAGS@ -lsocket
19  LIBS = @LIBS@
20  # To compile with readline:
21  #   linux needs just -lreadline
22
23 diff -urp orig/bochs-2.1.1/gui/Makefile.in bochs-2.1.1/gui/Makefile.in
24 --- orig/bochs-2.1.1/gui/Makefile.in    2003-11-28 07:07:28.000000000 -0800
25 +++ bochs-2.1.1/gui/Makefile.in 2004-09-13 15:05:09.402039000 -0700
26 @@ -44,7 +44,7 @@ SHELL = /bin/sh
27  @SET_MAKE@
28  
29  CXX = @CXX@
30 -CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@  @GUI_CXXFLAGS@
31 +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@  @GUI_CXXFLAGS@ -fms-extensions
32  LOCAL_CXXFLAGS =
33  LDFLAGS = @LDFLAGS@
34  LIBS = @LIBS@
35
36
37 diff -urp orig/bochs-2.1.1/gdbstub.cc bochs-2.1.1/gdbstub.cc
38 --- orig/bochs-2.1.1/gdbstub.cc 2004-02-11 14:28:41.000000000 -0800
39 +++ bochs-2.1.1/gdbstub.cc      2004-09-13 16:41:59.652988000 -0700
40 @@ -474,11 +475,13 @@ static void debug_loop(void)
41            case 'P':
42                {
43                   int reg;
44 -                 int value;
45 +                 Bit8u vbits[4];
46 +                 Bit32u value;
47                   char* ebuf;
48                   
49                   reg = strtoul(&buffer[1], &ebuf, 16);
50 -                 value = ntohl(strtoul(ebuf + 1, &ebuf, 16));
51 +                 hex2mem(ebuf + 1, vbits, sizeof value);
52 +                 ReadHostDWordFromLittleEndian(vbits, value);
53                   
54                   BX_INFO (("reg %d set to %x", reg, value));
55                   
56 @@ -527,35 +530,36 @@ static void debug_loop(void)
57                }
58              
59            case 'g':
60 -            registers[0] = EAX;
61 -            registers[1] = ECX;
62 -            registers[2] = EDX;
63 -            registers[3] = EBX;
64 -            registers[4] = ESP;
65 -            registers[5] = EBP;
66 -            registers[6] = ESI;
67 -            registers[7] = EDI;
68 +            WriteHostDWordToLittleEndian(registers + 0, EAX);
69 +            WriteHostDWordToLittleEndian(registers + 1, ECX);
70 +            WriteHostDWordToLittleEndian(registers + 2, EDX);
71 +            WriteHostDWordToLittleEndian(registers + 3, EBX);
72 +            WriteHostDWordToLittleEndian(registers + 4, ESP);
73 +            WriteHostDWordToLittleEndian(registers + 5, EBP);
74 +            WriteHostDWordToLittleEndian(registers + 6, ESI);
75 +            WriteHostDWordToLittleEndian(registers + 7, EDI);
76              if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT)
77                {
78 -                 registers[8] = EIP + 1;
79 +                WriteHostDWordToLittleEndian(registers + 8, EIP + 1);
80                }
81              else
82                {
83 -                 registers[8] = EIP;
84 +                WriteHostDWordToLittleEndian(registers + 8, EIP);
85                }
86 -            registers[9] = BX_CPU_THIS_PTR read_eflags();
87 -            registers[10] = 
88 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
89 -            registers[11] = 
90 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value;
91 -            registers[12] = 
92 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value;
93 -            registers[13] = 
94 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value;
95 -            registers[14] = 
96 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value;
97 -            registers[15] = 
98 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value;
99 +            WriteHostDWordToLittleEndian(registers + 9,
100 +                                         BX_CPU_THIS_PTR read_eflags());
101 +            WriteHostDWordToLittleEndian(registers + 10,
102 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value);
103 +            WriteHostDWordToLittleEndian(registers + 11,
104 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value);
105 +            WriteHostDWordToLittleEndian(registers + 12,
106 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value);
107 +            WriteHostDWordToLittleEndian(registers + 13,
108 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value);
109 +            WriteHostDWordToLittleEndian(registers + 14,
110 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value);
111 +            WriteHostDWordToLittleEndian(registers + 15,
112 +              BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value);
113              mem2hex((char *)registers, obuf, NUMREGSBYTES);
114              put_reply(obuf);
115              break;