This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA?] Windows cleanup
- To: gdb-patches at sources dot redhat dot com
- Subject: [RFA?] Windows cleanup
- From: Christopher Faylor <cgf at redhat dot com>
- Date: Wed, 30 May 2001 23:22:25 -0400
I should probably submit these as two patches. One part cleans up some
cygwin ifdefs, the other eliminates _MSC_VER tests.
I think that all of these qualify as obvious fixes, given that I'm the
Cygwin maintainer and _MSC_VER is no longer supported, however, I'd
like someone to verify that I properly whacked the ifdefs since I can't
really test things like "nindy-share".
Thanks to Eli for pointing all of this out a while ago. I love
eliminating obsolete stuff.
cgf
Wed May 30 23:02:44 2001 Christopher Faylor <cgf@cygnus.com>
* gnu-regex.c: Eliminate obsolete check for _MSC_VER.
* utils.c (quit): Ditto.
* values.c (unpack_double): Ditto.
* defs.h: Ditto.
* m32-rom.c: Ditto.
* p-exp.y: Ditto.
* ser-e7kpc.c: Ditto. Define WIN32_LEAN_AND_MEAN under _WIN32, for
faster compilation.
(get_ds_base): Remove _MSC_VER version of this function.
* utils.c (notice_quit): Ditto.
* values.c (unpack_double): Remove obsolete check for _MSC_VER.
* nindy-share/ttyflush.c: Ditto.
* rdi-share/host.h: Ditto.
* main.c (captured_main): Eliminate special Cygwin checks.
* ser-tcp.c: Remove unneeded __CYGWIN__ guard against system include.
Index: gnu-regex.c
===================================================================
RCS file: /cvs/uberbaum/gdb/gnu-regex.c,v
retrieving revision 1.5
diff -c -2 -0 -p -r1.5 gnu-regex.c
*** gnu-regex.c 2001/03/06 08:21:07 1.5
--- gnu-regex.c 2001/05/30 21:34:57
*************** static reg_errcode_t compile_range _RE_A
*** 1573,1627 ****
relative address offset by the three bytes the jump itself occupies. */
#define STORE_JUMP(op, loc, to) \
store_op1 (op, loc, (int) ((to) - (loc) - 3))
/* Likewise, for a two-argument jump. */
#define STORE_JUMP2(op, loc, to, arg) \
store_op2 (op, loc, (int) ((to) - (loc) - 3), arg)
/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
#define INSERT_JUMP(op, loc, to) \
insert_op1 (op, loc, (int) ((to) - (loc) - 3), b)
/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
#define INSERT_JUMP2(op, loc, to, arg) \
insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b)
/* This is not an arbitrary limit: the arguments which represent offsets
into the pattern are two bytes long. So if 2^16 bytes turns out to
be too small, many things would have to change. */
! /* Any other compiler which, like MSC, has allocation limit below 2^16
! bytes will have to use approach similar to what was done below for
! MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up
! reallocating to 0 bytes. Such thing is not going to work too well.
! You have been warned!! */
! #if defined _MSC_VER && !defined WIN32
! /* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
! The REALLOC define eliminates a flurry of conversion warnings,
! but is not required. */
! # define MAX_BUF_SIZE 65500L
! # define REALLOC(p,s) realloc ((p), (size_t) (s))
! #else
! # define MAX_BUF_SIZE (1L << 16)
! # define REALLOC(p,s) realloc ((p), (s))
! #endif
/* Extend the buffer by twice its current size via realloc and
reset the pointers that pointed into the old block to point to the
correct places in the new one. If extending the buffer results in it
being larger than MAX_BUF_SIZE, then flag memory exhausted. */
#define EXTEND_BUFFER() \
do { \
unsigned char *old_buffer = bufp->buffer; \
if (bufp->allocated == MAX_BUF_SIZE) \
return REG_ESIZE; \
bufp->allocated <<= 1; \
if (bufp->allocated > MAX_BUF_SIZE) \
bufp->allocated = MAX_BUF_SIZE; \
bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
if (bufp->buffer == NULL) \
return REG_ESPACE; \
/* If the buffer moved, move all the pointers into it. */ \
if (old_buffer != bufp->buffer) \
{ \
b = (b - old_buffer) + bufp->buffer; \
--- 1573,1614 ----
relative address offset by the three bytes the jump itself occupies. */
#define STORE_JUMP(op, loc, to) \
store_op1 (op, loc, (int) ((to) - (loc) - 3))
/* Likewise, for a two-argument jump. */
#define STORE_JUMP2(op, loc, to, arg) \
store_op2 (op, loc, (int) ((to) - (loc) - 3), arg)
/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
#define INSERT_JUMP(op, loc, to) \
insert_op1 (op, loc, (int) ((to) - (loc) - 3), b)
/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
#define INSERT_JUMP2(op, loc, to, arg) \
insert_op2 (op, loc, (int) ((to) - (loc) - 3), arg, b)
/* This is not an arbitrary limit: the arguments which represent offsets
into the pattern are two bytes long. So if 2^16 bytes turns out to
be too small, many things would have to change. */
! #define MAX_BUF_SIZE (1L << 16)
! #define REALLOC(p,s) realloc ((p), (s))
/* Extend the buffer by twice its current size via realloc and
reset the pointers that pointed into the old block to point to the
correct places in the new one. If extending the buffer results in it
being larger than MAX_BUF_SIZE, then flag memory exhausted. */
#define EXTEND_BUFFER() \
do { \
unsigned char *old_buffer = bufp->buffer; \
if (bufp->allocated == MAX_BUF_SIZE) \
return REG_ESIZE; \
bufp->allocated <<= 1; \
if (bufp->allocated > MAX_BUF_SIZE) \
bufp->allocated = MAX_BUF_SIZE; \
bufp->buffer = (unsigned char *) REALLOC (bufp->buffer, bufp->allocated);\
if (bufp->buffer == NULL) \
return REG_ESPACE; \
/* If the buffer moved, move all the pointers into it. */ \
if (old_buffer != bufp->buffer) \
{ \
b = (b - old_buffer) + bufp->buffer; \
Index: main.c
===================================================================
RCS file: /cvs/uberbaum/gdb/main.c,v
retrieving revision 1.10
diff -c -2 -0 -p -r1.10 main.c
*** main.c 2001/05/07 19:03:11 1.10
--- main.c 2001/05/30 21:34:58
*************** int dbx_commands = 0;
*** 73,116 ****
struct ui_file *gdb_stdout;
struct ui_file *gdb_stderr;
struct ui_file *gdb_stdlog;
struct ui_file *gdb_stdtarg;
/* Used to initialize error() - defined in utils.c */
extern void error_init (void);
/* Whether to enable writing into executable and core files */
extern int write_files;
static void print_gdb_help (struct ui_file *);
/* These two are used to set the external editor commands when gdb is farming
out files to be edited by another program. */
extern int enable_external_editor;
extern char *external_editor_command;
- #ifdef __CYGWIN__
- #include <sys/cygwin.h> /* for cygwin32_conv_to_posix_path */
- #endif
-
/* Call command_loop. If it happens to return, pass that through as a
non-zero return status. */
static int
captured_command_loop (void *data)
{
if (command_loop_hook == NULL)
command_loop ();
else
command_loop_hook ();
/* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
would clean things up (restoring the cleanup chain) to the state
they were just prior to the call. Technically, this means that
the do_cleanups() below is redundant. Unfortunately, many FUNCs
are not that well behaved. do_cleanups should either be replaced
with a do_cleanups call (to cover the problem) or an assertion
check to detect bad FUNCs code. */
do_cleanups (ALL_CLEANUPS);
/* If the command_loop returned, normally (rather than threw an
error) we try to quit. If the quit is aborted, catch_errors()
--- 73,112 ----
*************** extern int gdbtk_test (char *);
*** 517,571 ****
{
/* Print all the junk at the top, with trailing "..." if we are about
to read a symbol file (possibly slowly). */
print_gdb_version (gdb_stdout);
if (symarg)
printf_filtered ("..");
wrap_here ("");
gdb_flush (gdb_stdout); /* Force to screen during slow operations */
}
error_pre_print = "\n\n";
quit_pre_print = error_pre_print;
/* We may get more than one warning, don't double space all of them... */
warning_pre_print = "\nwarning: ";
/* Read and execute $HOME/.gdbinit file, if it exists. This is done
*before* all the command line arguments are processed; it sets
global parameters, which are independent of what file you are
debugging or what directory you are in. */
- #ifdef __CYGWIN__
- {
- char *tmp = getenv ("HOME");
-
- if (tmp != NULL)
- {
- homedir = (char *) alloca (PATH_MAX + 1);
- cygwin32_conv_to_posix_path (tmp, homedir);
- }
- else
- homedir = NULL;
- }
- #else
homedir = getenv ("HOME");
- #endif
if (homedir)
{
homeinit = (char *) alloca (strlen (homedir) +
strlen (gdbinit) + 10);
strcpy (homeinit, homedir);
strcat (homeinit, "/");
strcat (homeinit, gdbinit);
if (!inhibit_gdbinit)
{
catch_command_errors (source_command, homeinit, 0, RETURN_MASK_ALL);
}
/* Do stats; no need to do them elsewhere since we'll only
need them if homedir is set. Make sure that they are
zero in case one of them fails (this guarantees that they
won't match if either exists). */
memset (&homebuf, 0, sizeof (struct stat));
memset (&cwdbuf, 0, sizeof (struct stat));
--- 513,553 ----
Index: partial-stab.h
===================================================================
RCS file: /cvs/uberbaum/gdb/partial-stab.h,v
retrieving revision 1.7
diff -c -2 -0 -p -r1.7 partial-stab.h
*** partial-stab.h 2001/03/06 08:21:11 1.7
--- partial-stab.h 2001/05/30 21:34:59
*************** switch (CUR_SYMBOL_TYPE)
*** 583,626 ****
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
value for the bottom of the text seg in those cases. */
if (pst && textlow_not_set)
{
pst->textlow =
find_stab_function_addr (namestring, pst->filename, objfile);
textlow_not_set = 0;
}
#endif
/* End kludge. */
/* Keep track of the start of the last function so we
can handle end of function symbols. */
last_function_start = CUR_SYMBOL_VALUE;
/* In reordered executables this function may lie outside
the bounds created by N_SO symbols. If that's the case
use the address of this function as the low bound for
the partial symbol table. */
! if (textlow_not_set
! || (pst && CUR_SYMBOL_VALUE < pst->textlow
! && CUR_SYMBOL_VALUE
! != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile))))
{
pst->textlow = CUR_SYMBOL_VALUE;
textlow_not_set = 0;
}
#endif /* DBXREAD_ONLY */
add_psymbol_to_list (namestring, p - namestring,
VAR_NAMESPACE, LOC_BLOCK,
&objfile->static_psymbols,
0, CUR_SYMBOL_VALUE,
psymtab_language, objfile);
continue;
/* Global functions were ignored here, but now they
are put into the global psymtab like one would expect.
They're also in the minimal symbol table. */
case 'F':
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
#ifdef DBXREAD_ONLY
/* Kludges for ELF/STABS with Sun ACC */
last_function_name = namestring;
--- 583,627 ----
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
/* Do not fix textlow==0 for .o or NLM files, as 0 is a legit
value for the bottom of the text seg in those cases. */
if (pst && textlow_not_set)
{
pst->textlow =
find_stab_function_addr (namestring, pst->filename, objfile);
textlow_not_set = 0;
}
#endif
/* End kludge. */
/* Keep track of the start of the last function so we
can handle end of function symbols. */
last_function_start = CUR_SYMBOL_VALUE;
/* In reordered executables this function may lie outside
the bounds created by N_SO symbols. If that's the case
use the address of this function as the low bound for
the partial symbol table. */
! if (pst
! && (textlow_not_set
! || (pst && CUR_SYMBOL_VALUE < pst->textlow
! && CUR_SYMBOL_VALUE
! != ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)))))
{
pst->textlow = CUR_SYMBOL_VALUE;
textlow_not_set = 0;
}
#endif /* DBXREAD_ONLY */
add_psymbol_to_list (namestring, p - namestring,
VAR_NAMESPACE, LOC_BLOCK,
&objfile->static_psymbols,
0, CUR_SYMBOL_VALUE,
psymtab_language, objfile);
continue;
/* Global functions were ignored here, but now they
are put into the global psymtab like one would expect.
They're also in the minimal symbol table. */
case 'F':
CUR_SYMBOL_VALUE += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
#ifdef DBXREAD_ONLY
/* Kludges for ELF/STABS with Sun ACC */
last_function_name = namestring;
Index: ser-tcp.c
===================================================================
RCS file: /cvs/uberbaum/gdb/ser-tcp.c,v
retrieving revision 1.4
diff -c -2 -0 -p -r1.4 ser-tcp.c
*** ser-tcp.c 2001/04/05 02:02:13 1.4
--- ser-tcp.c 2001/05/30 21:34:59
***************
*** 12,54 ****
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "serial.h"
#include "ser-unix.h"
#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/socket.h>
- #ifndef __CYGWIN__
- #include <netinet/tcp.h>
- #endif
#include <signal.h>
#include "gdb_string.h"
static int tcp_open (serial_t scb, const char *name);
static void tcp_close (serial_t scb);
void _initialize_ser_tcp (void);
/* Open up a raw tcp socket */
static int
tcp_open (serial_t scb, const char *name)
{
char *port_str;
int port;
struct hostent *hostent;
struct sockaddr_in sockaddr;
int tmp;
char hostname[100];
--- 12,51 ----
Index: utils.c
===================================================================
RCS file: /cvs/uberbaum/gdb/utils.c,v
retrieving revision 1.40
diff -c -2 -0 -p -r1.40 utils.c
*** utils.c 2001/04/19 23:56:13 1.40
--- utils.c 2001/05/30 21:35:01
*************** quit (void)
*** 851,918 ****
if (quit_pre_print)
fprintf_unfiltered (gdb_stderr, quit_pre_print);
#ifdef __MSDOS__
/* No steenking SIGINT will ever be coming our way when the
program is resumed. Don't lie. */
fprintf_unfiltered (gdb_stderr, "Quit\n");
#else
if (job_control
/* If there is no terminal switching for this target, then we can't
possibly get screwed by the lack of job control. */
|| current_target.to_terminal_ours == NULL)
fprintf_unfiltered (gdb_stderr, "Quit\n");
else
fprintf_unfiltered (gdb_stderr,
"Quit (expect signal SIGINT when the program is resumed)\n");
#endif
return_to_top_level (RETURN_QUIT);
}
-
- #if defined(_MSC_VER) /* should test for wingdb instead? */
-
- /*
- * Windows translates all keyboard and mouse events
- * into a message which is appended to the message
- * queue for the process.
- */
-
void
notice_quit (void)
{
- int k = win32pollquit ();
- if (k == 1)
- quit_flag = 1;
- else if (k == 2)
- immediate_quit = 1;
- }
-
- #else /* !defined(_MSC_VER) */
-
- void
- notice_quit (void)
- {
/* Done by signals */
}
-
- #endif /* !defined(_MSC_VER) */
/* Control C comes here */
void
request_quit (int signo)
{
quit_flag = 1;
/* Restore the signal handler. Harmless with BSD-style signals, needed
for System V-style signals. So just always do it, rather than worrying
about USG defines and stuff like that. */
signal (signo, request_quit);
#ifdef REQUEST_QUIT
REQUEST_QUIT;
#else
if (immediate_quit)
quit ();
#endif
}
/* Memory management stuff (malloc friends). */
--- 851,895 ----
Index: values.c
===================================================================
RCS file: /cvs/uberbaum/gdb/values.c,v
retrieving revision 1.17
diff -c -2 -0 -p -r1.17 values.c
*** values.c 2001/05/21 20:08:59 1.17
--- values.c 2001/05/30 21:35:03
*************** unpack_double (struct type *type, char *
*** 678,723 ****
*invp = 0; /* Assume valid. */
CHECK_TYPEDEF (type);
code = TYPE_CODE (type);
len = TYPE_LENGTH (type);
nosign = TYPE_UNSIGNED (type);
if (code == TYPE_CODE_FLT)
{
#ifdef INVALID_FLOAT
if (INVALID_FLOAT (valaddr, len))
{
*invp = 1;
return 1.234567891011121314;
}
#endif
return extract_floating (valaddr, len);
}
else if (nosign)
{
/* Unsigned -- be sure we compensate for signed LONGEST. */
- #if !defined (_MSC_VER) || (_MSC_VER > 900)
return (ULONGEST) unpack_long (type, valaddr);
- #else
- /* FIXME!!! msvc22 doesn't support unsigned __int64 -> double */
- return (LONGEST) unpack_long (type, valaddr);
- #endif /* _MSC_VER */
}
else
{
/* Signed -- we are OK with unpack_long. */
return unpack_long (type, valaddr);
}
}
/* Unpack raw data (copied from debugee, target byte order) at VALADDR
as a CORE_ADDR, assuming the raw data is described by type TYPE.
We don't assume any alignment for the raw data. Return value is in
host byte order.
If you want functions and arrays to be coerced to pointers, and
references to be dereferenced, call value_as_pointer() instead.
C++: It is assumed that the front-end has taken care of
all matters concerning pointers to members. A pointer
to member which reaches here is considered to be equivalent
to an INT (or some size). After all, it is only an offset. */
--- 678,718 ----