diff options
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/gdbint.texinfo | 7 | ||||
-rw-r--r-- | gdb/main.c | 86 |
4 files changed, 63 insertions, 44 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 435f2c1..292b311 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2008-01-05 Pedro Alves <pedro@codesourcery.com> + + * main.c (captured_main): Remove 'count' varible and the + ALIGN_STACK_ON_ENTRY block that used it. Error out if --core and + --pid options were issued simultaneously. If an explicit pid + option was passed, don't fallback to core file. Detect extra + arguments better in the presence of explicit pid or core + arguments. + 2008-01-05 Joel Brobecker <brobecker@adacore.com> * ada-lang.c (ada_which_variant_applies): Correctly compute diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 1f507c6..228e8f0 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2008-01-05 Pedro Alves <pedro@codesourcery.com> + + * gdbint.texinfo (Host Conditionals): Remove mention of + ALIGN_STACK_ON_ENTRY. + 2008-01-05 Joel Brobecker <brobecker@adacore.com> * gdbint.texinfo (Start of New Year Procedure): Add item diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo index fa4954f..da2cd7b 100644 --- a/gdb/doc/gdbint.texinfo +++ b/gdb/doc/gdbint.texinfo @@ -2490,13 +2490,6 @@ of a function to be called if @code{SIGWINCH} is received. Define this to expand into code that will define the function named by the expansion of @code{SIGWINCH_HANDLER}. -@item ALIGN_STACK_ON_STARTUP -@cindex stack alignment -Define this if your system is of a sort that will crash in -@code{tgetent} if the stack happens not to be longword-aligned when -@code{main} is called. This is a rare situation, but is known to occur -on several different types of systems. - @item CRLF_SOURCE_FILES @cindex DOS text files Define this if host files use @code{\r\n} rather than @code{\n} as a @@ -119,7 +119,6 @@ captured_main (void *data) struct captured_main_args *context = data; int argc = context->argc; char **argv = context->argv; - int count; static int quiet = 0; static int batch = 0; static int set_args = 0; @@ -127,7 +126,9 @@ captured_main (void *data) /* Pointers to various arguments from command line. */ char *symarg = NULL; char *execarg = NULL; + char *pidarg = NULL; char *corearg = NULL; + char *pid_or_core_arg = NULL; char *cdarg = NULL; char *ttyarg = NULL; @@ -175,12 +176,6 @@ captured_main (void *data) lim_at_start = (char *) sbrk (0); #endif -#if defined (ALIGN_STACK_ON_STARTUP) - i = (int) &count & 0x3; - if (i != 0) - alloca (4 - i); -#endif - cmdsize = 1; cmdarg = (struct cmdarg *) xmalloc (cmdsize * sizeof (*cmdarg)); ncmd = 0; @@ -435,8 +430,7 @@ captured_main (void *data) corearg = optarg; break; case 'p': - /* "corearg" is shared by "--core" and "--pid" */ - corearg = optarg; + pidarg = optarg; break; case 'x': cmdarg[ncmd].type = CMDARG_FILE; @@ -572,26 +566,34 @@ extern int gdbtk_test (char *); } else { - /* OK, that's all the options. The other arguments are filenames. */ - count = 0; - for (; optind < argc; optind++) - switch (++count) - { - case 1: - symarg = argv[optind]; - execarg = argv[optind]; - break; - case 2: - /* The documentation says this can be a "ProcID" as well. - We will try it as both a corefile and a pid. */ - corearg = argv[optind]; - break; - case 3: - fprintf_unfiltered (gdb_stderr, - _("Excess command line arguments ignored. (%s%s)\n"), - argv[optind], (optind == argc - 1) ? "" : " ..."); - break; - } + /* OK, that's all the options. */ + + /* The first argument, if specified, is the name of the + executable. */ + if (optind < argc) + { + symarg = argv[optind]; + execarg = argv[optind]; + optind++; + } + + /* If the user hasn't already specified a PID or the name of a + core file, then a second optional argument is allowed. If + present, this argument should be interpreted as either a + PID or a core file, whichever works. */ + if (pidarg == NULL && corearg == NULL && optind < argc) + { + pid_or_core_arg = argv[optind]; + optind++; + } + + /* Any argument left on the command line is unexpected and + will be ignored. Inform the user. */ + if (optind < argc) + fprintf_unfiltered (gdb_stderr, _("\ +Excess command line arguments ignored. (%s%s)\n"), + argv[optind], + (optind == argc - 1) ? "" : " ..."); } if (batch) quiet = 1; @@ -733,21 +735,31 @@ extern int gdbtk_test (char *); catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL); } + if (corearg && pidarg) + error (_("\ +Can't attach to process and specify a core file at the same time.")); + if (corearg != NULL) + catch_command_errors (core_file_command, corearg, + !batch, RETURN_MASK_ALL); + else if (pidarg != NULL) + catch_command_errors (attach_command, pidarg, + !batch, RETURN_MASK_ALL); + else if (pid_or_core_arg) { - /* corearg may be either a corefile or a pid. - If its first character is a digit, try attach first - and then corefile. Otherwise try corefile first. */ + /* The user specified 'gdb program pid' or gdb program core'. + If pid_or_core_arg's first character is a digit, try attach + first and then corefile. Otherwise try just corefile. */ - if (isdigit (corearg[0])) + if (isdigit (pid_or_core_arg[0])) { - if (catch_command_errors (attach_command, corearg, + if (catch_command_errors (attach_command, pid_or_core_arg, !batch, RETURN_MASK_ALL) == 0) - catch_command_errors (core_file_command, corearg, + catch_command_errors (core_file_command, pid_or_core_arg, !batch, RETURN_MASK_ALL); } - else /* Can't be a pid, better be a corefile. */ - catch_command_errors (core_file_command, corearg, + else /* Can't be a pid, better be a corefile. */ + catch_command_errors (core_file_command, pid_or_core_arg, !batch, RETURN_MASK_ALL); } |