Add Solaris serial support.
[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 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
13 anyway.
14
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)"'
21  
22 -LDFLAGS = @LDFLAGS@
23 +LDFLAGS = @LDFLAGS@ -lsocket
24  LIBS = @LIBS@
25  # To compile with readline:
26  #   linux needs just -lreadline
27
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
32  @SET_MAKE@
33  
34  CXX = @CXX@
35 -CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@  @GUI_CXXFLAGS@
36 +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@  @GUI_CXXFLAGS@ -fms-extensions
37  LOCAL_CXXFLAGS =
38  LDFLAGS = @LDFLAGS@
39  LIBS = @LIBS@
40
41
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)
46            case 'P':
47                {
48                   int reg;
49 -                 int value;
50 +                 Bit8u vbits[4];
51 +                 Bit32u value;
52                   char* ebuf;
53                   
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);
58                   
59                   BX_INFO (("reg %d set to %x", reg, value));
60                   
61 @@ -527,35 +530,36 @@ static void debug_loop(void)
62                }
63              
64            case 'g':
65 -            registers[0] = EAX;
66 -            registers[1] = ECX;
67 -            registers[2] = EDX;
68 -            registers[3] = EBX;
69 -            registers[4] = ESP;
70 -            registers[5] = EBP;
71 -            registers[6] = ESI;
72 -            registers[7] = EDI;
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)
82                {
83 -                 registers[8] = EIP + 1;
84 +                WriteHostDWordToLittleEndian(registers + 8, EIP + 1);
85                }
86              else
87                {
88 -                 registers[8] = EIP;
89 +                WriteHostDWordToLittleEndian(registers + 8, EIP);
90                }
91 -            registers[9] = BX_CPU_THIS_PTR read_eflags();
92 -            registers[10] = 
93 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value;
94 -            registers[11] = 
95 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector.value;
96 -            registers[12] = 
97 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_DS].selector.value;
98 -            registers[13] = 
99 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_ES].selector.value;
100 -            registers[14] = 
101 -              BX_CPU_THIS_PTR sregs[BX_SEG_REG_FS].selector.value;
102 -            registers[15] = 
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);
119              put_reply(obuf);
120              break;
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
123 @@ -53,7 +53,7 @@
124  #endif
125  #endif
126  
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
130  #endif
131  
132 @@ -122,6 +122,7 @@
133      if (tty_id < 0)
134        BX_PANIC(("open of %s (%s) failed\n",
135                  "com1", bx_options.com[0].Odev->getptr ()));
136 +#if 0
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));
140 @@ -145,6 +146,7 @@
141      term_new.c_cc[VTIME] = 0;
142      //term_new.c_iflag |= IXOFF;
143      tcsetattr(tty_id, TCSAFLUSH, &term_new);
144 +#endif
145    }
146  #endif   /* def SERIAL_ENABLE */
147    // nothing for now