aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdbint.texinfo7
-rw-r--r--gdb/main.c86
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
diff --git a/gdb/main.c b/gdb/main.c
index b7a151e..eb7ad5a 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -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);
}