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++.
7 The third patch makes the gdb stubs work on Solaris/Sparc, by doing
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)"'
18 +LDFLAGS = @LDFLAGS@ -lsocket
20 # To compile with readline:
21 # linux needs just -lreadline
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
30 -CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@
31 +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@ -fms-extensions
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)
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);
54 BX_INFO (("reg %d set to %x", reg, value));
56 @@ -527,35 +530,36 @@ static void debug_loop(void)
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)
78 - registers[8] = EIP + 1;
79 + WriteHostDWordToLittleEndian(registers + 8, EIP + 1);
84 + WriteHostDWordToLittleEndian(registers + 8, EIP);
86 - registers[9] = BX_CPU_THIS_PTR read_eflags();
88 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
90 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value;
92 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value;
94 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value;
96 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value;
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);