gdb/
authorPedro Alves <palves@redhat.com>
Sat, 5 Jan 2008 16:49:53 +0000 (16:49 +0000)
committerPedro Alves <palves@redhat.com>
Sat, 5 Jan 2008 16:49:53 +0000 (16:49 +0000)
* 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.

gdb/doc/
* gdbint.texinfo (Host Conditionals): Remove mention of
ALIGN_STACK_ON_ENTRY.

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/gdbint.texinfo
gdb/main.c

index 435f2c15e963639d39cfc254ec2f44599b27c75d..292b311d29bfff865535eab957c1bdbab96cabc9 100644 (file)
@@ -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
index 1f507c6941c45c35010f7539d5bd245005390950..228e8f07e585147bc8525518b8c9cc1b77f800a4 100644 (file)
@@ -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
index fa4954f8359baad3adb416175a0a6971e6a3cbaf..da2cd7bb76a469f5b1734d9230ce96c174c34a07 100644 (file)
@@ -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
index b7a151e424ff582e988e7d23ed897f2ecc09e6f3..eb7ad5a5e178a4689a8453ffca2ee429e36e58f4 100644 (file)
@@ -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);
     }