diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d4027b3c1c..a5c88af573 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +Thu May 28 17:19:14 1998 Keith Seitz + + * main.c (main): Check for NULL from getenv on CYGWIN32. + +Thu May 28 09:41:44 1998 Nick Clifton + + * monitor.c (monitor_vsprintf): Handle %%. Patch courtesy of + Felix Lee (flee@cygnus.com) + Thu May 28 00:27:35 1998 Peter Schauer * mips-tdep.c (mips_push_dummy_frame): Fix calculation of diff --git a/gdb/ChangeLog-gdbtk b/gdb/ChangeLog-gdbtk index 0833e5442f..2d5876cda0 100644 --- a/gdb/ChangeLog-gdbtk +++ b/gdb/ChangeLog-gdbtk @@ -1,3 +1,12 @@ +Thu May 28 17:19:14 1998 Keith Seitz + + * gdbtk.c (_initialize_gdbtk): Get rid of the console. Patch from + Chris Faylor (cgf@cygnus.com). + + * configure.in: Link cygwin32 with subsystem console. + + * configure: Regenerated + Sun May 24 14:00:24 1998 Keith Seitz * ser-unix.c (wait_for): Do not reset timeout_remaining for cygwin32 so that diff --git a/gdb/configure b/gdb/configure index 446e444116..85c9fd2916 100755 --- a/gdb/configure +++ b/gdb/configure @@ -5143,7 +5143,7 @@ fi if test x$gdb_cv_os_cygwin32 = xyes; then WIN32LIBS="${WIN32LIBS} -lshell32 -lgdi32 -lcomdlg32 -ladvapi32 -luser32" - WIN32LDAPP="-Wl,--subsystem,windows" + WIN32LDAPP="-Wl,--subsystem,console" CONFIG_OBS="${CONFIG_OBS} gdbres.o" fi fi diff --git a/gdb/configure.in b/gdb/configure.in index 535d393e28..cb61339434 100644 --- a/gdb/configure.in +++ b/gdb/configure.in @@ -427,7 +427,7 @@ if test "${enable_gdbtk}" = "yes"; then if test x$gdb_cv_os_cygwin32 = xyes; then WIN32LIBS="${WIN32LIBS} -lshell32 -lgdi32 -lcomdlg32 -ladvapi32 -luser32" - WIN32LDAPP="-Wl,--subsystem,windows" + WIN32LDAPP="-Wl,--subsystem,console" CONFIG_OBS="${CONFIG_OBS} gdbres.o" fi fi diff --git a/gdb/gdbtk.c b/gdb/gdbtk.c index 4ca7a63b5a..bbecaf8696 100644 --- a/gdb/gdbtk.c +++ b/gdb/gdbtk.c @@ -3467,6 +3467,9 @@ _initialize_gdbtk () /* Tell the rest of the world that Gdbtk is now set up. */ init_ui_hook = gdbtk_init; +#ifdef __CYGWIN32__ + (void) FreeConsole (); +#endif } #ifdef __CYGWIN32__ else diff --git a/gdb/main.c b/gdb/main.c index 11b5f87e87..00d4695c6a 100644 --- a/gdb/main.c +++ b/gdb/main.c @@ -42,8 +42,8 @@ static int top_level_val; ugly if it had to use catch_errors each time. */ #define SET_TOP_LEVEL() \ - (((top_level_val = setjmp (error_return)) \ - ? (PTR) 0 : (PTR) memcpy (quit_return, error_return, sizeof (jmp_buf))) \ + (((top_level_val = SIGSETJMP (error_return)) \ + ? (PTR) 0 : (PTR) memcpy (quit_return, error_return, sizeof (SIGJMP_BUF))) \ , top_level_val) /* If nonzero, display time usage both at startup and for each command. */ @@ -54,7 +54,12 @@ int display_time; int display_space; -extern void gdb_init PARAMS ((void)); +static void print_gdb_help PARAMS ((GDB_FILE *)); +extern void gdb_init PARAMS ((char *)); +#ifdef __CYGWIN32__ +#include /* for MAX_PATH */ +extern void cygwin32_conv_to_posix_path (const char *, char *); +#endif int main (argc, argv) @@ -333,7 +338,7 @@ main (argc, argv) quiet = 1; } - gdb_init (); + gdb_init (argv[0]); /* Do these (and anything which might call wrap_here or *_filtered) after initialize_all_files. */ @@ -347,52 +352,8 @@ main (argc, argv) if (print_help) { - /* --version is intentionally not documented here, because we - are printing the version here, and the help is long enough - already. */ - - print_gdb_version (gdb_stdout); - /* Make sure the output gets printed. */ - wrap_here (""); - printf_filtered ("\n"); - - /* But don't use *_filtered here. We don't want to prompt for continue - no matter how small the screen or how much we're going to print. */ - fputs_unfiltered ("\ -This is the GNU debugger. Usage:\n\ - gdb [options] [executable-file [core-file or process-id]]\n\ -Options:\n\ - --help Print this message.\n\ - --quiet Do not print version number on startup.\n\ - --fullname Output information used by emacs-GDB interface.\n\ - --epoch Output information used by epoch emacs-GDB interface.\n\ -", gdb_stdout); - fputs_unfiltered ("\ - --batch Exit after processing options.\n\ - --nx Do not read .gdbinit file.\n\ - --tty=TTY Use TTY for input/output by the program being debugged.\n\ - --cd=DIR Change current directory to DIR.\n\ - --directory=DIR Search for source files in DIR.\n\ -", gdb_stdout); - fputs_unfiltered ("\ - --command=FILE Execute GDB commands from FILE.\n\ - --symbols=SYMFILE Read symbols from SYMFILE.\n\ - --exec=EXECFILE Use EXECFILE as the executable.\n\ - --se=FILE Use FILE as symbol file and executable file.\n\ -", gdb_stdout); - fputs_unfiltered ("\ - --core=COREFILE Analyze the core dump COREFILE.\n\ - -b BAUDRATE Set serial port baud rate used for remote debugging.\n\ - --mapped Use mapped symbol files if supported on this system.\n\ - --readnow Fully read symbol files on first access.\n\ - --nw Do not use a window interface.\n\ -", gdb_stdout); -#ifdef ADDITIONAL_OPTION_HELP - fputs_unfiltered (ADDITIONAL_OPTION_HELP, gdb_stdout); -#endif - fputs_unfiltered ("\n\ -For more information, type \"help\" from within GDB, or consult the\n\ -GDB manual (available as on-line info or a printed manual).\n", gdb_stdout); + print_gdb_help (gdb_stdout); + fputs_unfiltered ("\n", gdb_stdout); exit (0); } @@ -400,7 +361,6 @@ GDB manual (available as on-line info or a printed manual).\n", gdb_stdout); { /* Print all the junk at the top, with trailing "..." if we are about to read a symbol file (possibly slowly). */ - print_gnu_advertisement (); print_gdb_version (gdb_stdout); if (symarg) printf_filtered (".."); @@ -418,12 +378,26 @@ GDB manual (available as on-line info or a printed manual).\n", gdb_stdout); *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. */ - homedir = getenv ("HOME"); +#ifdef __CYGWIN32__ + { + char * tmp = getenv ("HOME"); + + if (tmp != NULL) + { + homedir = (char *) alloca (MAX_PATH+1); + cygwin32_conv_to_posix_path (tmp, homedir); + } else { + homedir = NULL; + } + } +#else + homedir = getenv ("HOME"); +#endif if (homedir) { - homeinit = (char *) alloca (strlen (getenv ("HOME")) + + homeinit = (char *) alloca (strlen (homedir) + strlen (gdbinit) + 10); - strcpy (homeinit, getenv ("HOME")); + strcpy (homeinit, homedir); strcat (homeinit, "/"); strcat (homeinit, gdbinit); @@ -583,7 +557,7 @@ GDB manual (available as on-line info or a printed manual).\n", gdb_stdout); /* The default command loop. The WIN32 Gui calls this main to set up gdb's state, and has its own command loop. */ -#ifndef _WIN32 +#if !defined _WIN32 || defined __GNUC__ while (1) { if (!SET_TOP_LEVEL ()) @@ -604,6 +578,57 @@ GDB manual (available as on-line info or a printed manual).\n", gdb_stdout); #endif } + +/* Don't use *_filtered for printing help. We don't want to prompt + for continue no matter how small the screen or how much we're going + to print. */ + +static void +print_gdb_help (stream) + GDB_FILE *stream; +{ + fputs_unfiltered ("\ +This is the GNU debugger. Usage:\n\n\ + gdb [options] [executable-file [core-file or process-id]]\n\n\ +Options:\n\n\ +", stream); + fputs_unfiltered ("\ + -b BAUDRATE Set serial port baud rate used for remote debugging.\n\ + --batch Exit after processing options.\n\ + --cd=DIR Change current directory to DIR.\n\ + --command=FILE Execute GDB commands from FILE.\n\ + --core=COREFILE Analyze the core dump COREFILE.\n\ +", stream); + fputs_unfiltered ("\ + --directory=DIR Search for source files in DIR.\n\ + --epoch Output information used by epoch emacs-GDB interface.\n\ + --exec=EXECFILE Use EXECFILE as the executable.\n\ + --fullname Output information used by emacs-GDB interface.\n\ + --help Print this message.\n\ +", stream); + fputs_unfiltered ("\ + --mapped Use mapped symbol files if supported on this system.\n\ + --nw Do not use a window interface.\n\ + --nx Do not read .gdbinit file.\n\ + --quiet Do not print version number on startup.\n\ + --readnow Fully read symbol files on first access.\n\ +", stream); + fputs_unfiltered ("\ + --se=FILE Use FILE as symbol file and executable file.\n\ + --symbols=SYMFILE Read symbols from SYMFILE.\n\ + --tty=TTY Use TTY for input/output by the program being debugged.\n\ + --version Print version information and then exit.\n\ +", stream); +#ifdef ADDITIONAL_OPTION_HELP + fputs_unfiltered (ADDITIONAL_OPTION_HELP, stream); +#endif + fputs_unfiltered ("\n\ +For more information, type \"help\" from within GDB, or consult the\n\ +GDB manual (available as on-line info or a printed manual).\n\ +Report bugs to \"bug-gdb@prep.ai.mit.edu\".\ +", stream); +} + void init_proc () @@ -616,21 +641,21 @@ proc_remove_foreign (pid) { } +/* All I/O sent to the *_filtered and *_unfiltered functions eventually ends up + here. The fputs_unfiltered_hook is primarily used by GUIs to collect all + output and send it to the GUI, instead of the controlling terminal. Only + output to gdb_stdout and gdb_stderr are sent to the hook. Everything else + is sent on to fputs to allow file I/O to be handled appropriately. */ + void fputs_unfiltered (linebuffer, stream) const char *linebuffer; FILE *stream; { - if (fputs_unfiltered_hook) - { - /* FIXME: I think we should only be doing this for stdout or stderr. - Either that or we should be passing stream to the hook so it can - deal with it. If that is cleaned up, this function can go back - into utils.c and the fputs_unfiltered_hook can replace the current - ability to avoid this function by not linking with main.c. */ - fputs_unfiltered_hook (linebuffer, stream); - return; - } - - fputs (linebuffer, stream); + if (fputs_unfiltered_hook + && (stream == gdb_stdout + || stream == gdb_stderr)) + fputs_unfiltered_hook (linebuffer, stream); + else + fputs (linebuffer, stream); }