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 The fourth patch enables the serial device under Solaris and disables
11 tty setup at the same time. Tty setup is a pain when you want to
12 connect a serial port to stdout and it doesn't work under Solaris
15 diff -urp orig/bochs-2.1.1/Makefile.in bochs-2.1.1/Makefile.in
16 --- orig/bochs-2.1.1/Makefile.in 2004-02-11 14:28:02.000000000 -0800
17 +++ bochs-2.1.1/Makefile.in 2004-09-13 15:05:26.281550000 -0700
18 @@ -92,7 +92,7 @@ CXX = @CXX@
19 CFLAGS = @CFLAGS@ @GUI_CFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"'
20 CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@ $(MCH_CFLAGS) $(FLA_FLAGS) @DEFINE_PLUGIN_PATH@ -DBX_SHARE_PATH='"$(sharedir)"'
23 +LDFLAGS = @LDFLAGS@ -lsocket
25 # To compile with readline:
26 # linux needs just -lreadline
28 diff -urp orig/bochs-2.1.1/gui/Makefile.in bochs-2.1.1/gui/Makefile.in
29 --- orig/bochs-2.1.1/gui/Makefile.in 2003-11-28 07:07:28.000000000 -0800
30 +++ bochs-2.1.1/gui/Makefile.in 2004-09-13 15:05:09.402039000 -0700
31 @@ -44,7 +44,7 @@ SHELL = /bin/sh
35 -CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@
36 +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@ -fms-extensions
42 diff -urp orig/bochs-2.1.1/gdbstub.cc bochs-2.1.1/gdbstub.cc
43 --- orig/bochs-2.1.1/gdbstub.cc 2004-02-11 14:28:41.000000000 -0800
44 +++ bochs-2.1.1/gdbstub.cc 2004-09-13 16:41:59.652988000 -0700
45 @@ -474,11 +475,13 @@ static void debug_loop(void)
54 reg = strtoul(&buffer[1], &ebuf, 16);
55 - value = ntohl(strtoul(ebuf + 1, &ebuf, 16));
56 + hex2mem(ebuf + 1, vbits, sizeof value);
57 + ReadHostDWordFromLittleEndian(vbits, value);
59 BX_INFO (("reg %d set to %x", reg, value));
61 @@ -527,35 +530,36 @@ static void debug_loop(void)
73 + WriteHostDWordToLittleEndian(registers + 0, EAX);
74 + WriteHostDWordToLittleEndian(registers + 1, ECX);
75 + WriteHostDWordToLittleEndian(registers + 2, EDX);
76 + WriteHostDWordToLittleEndian(registers + 3, EBX);
77 + WriteHostDWordToLittleEndian(registers + 4, ESP);
78 + WriteHostDWordToLittleEndian(registers + 5, EBP);
79 + WriteHostDWordToLittleEndian(registers + 6, ESI);
80 + WriteHostDWordToLittleEndian(registers + 7, EDI);
81 if (last_stop_reason == GDBSTUB_EXECUTION_BREAKPOINT)
83 - registers[8] = EIP + 1;
84 + WriteHostDWordToLittleEndian(registers + 8, EIP + 1);
89 + WriteHostDWordToLittleEndian(registers + 8, EIP);
91 - registers[9] = BX_CPU_THIS_PTR read_eflags();
93 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
95 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value;
97 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value;
99 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value;
101 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value;
103 - BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value;
104 + WriteHostDWordToLittleEndian(registers + 9,
105 + BX_CPU_THIS_PTR read_eflags());
106 + WriteHostDWordToLittleEndian(registers + 10,
107 + BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value);
108 + WriteHostDWordToLittleEndian(registers + 11,
109 + BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value);
110 + WriteHostDWordToLittleEndian(registers + 12,
111 + BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value);
112 + WriteHostDWordToLittleEndian(registers + 13,
113 + BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value);
114 + WriteHostDWordToLittleEndian(registers + 14,
115 + BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value);
116 + WriteHostDWordToLittleEndian(registers + 15,
117 + BX_CPU_THIS_PTR sregs[BX_SEG_REG_GS].selector.value);
118 mem2hex((char *)registers, obuf, NUMREGSBYTES);
121 --- tmp/bochs-2.1.1/iodev/serial.cc 2004-02-11 14:28:54.000001000 -0800
122 +++ bochs-2.1.1/iodev/serial.cc 2004-09-14 23:02:04.000001000 -0700
127 -#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(__GNU__) || defined(__APPLE__)
128 +#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(__GNU__) || defined(__APPLE__) || defined(__sun__)
129 #define SERIAL_ENABLE
134 BX_PANIC(("open of %s (%s) failed\n",
135 "com1", bx_options.com[0].Odev->getptr ()));
137 BX_DEBUG(("tty_id: %d",tty_id));
138 tcgetattr(tty_id, &term_orig);
139 bcopy((caddr_t) &term_orig, (caddr_t) &term_new, sizeof(struct termios));
141 term_new.c_cc[VTIME] = 0;
142 //term_new.c_iflag |= IXOFF;
143 tcsetattr(tty_id, TCSAFLUSH, &term_new);
146 #endif /* def SERIAL_ENABLE */