From: Pedro Alves <pedro@codesourcery.com>
To: Joel Brobecker <brobecker@adacore.com>
Cc: gdb-patches@sourceware.org
Subject: Re: --pid and --core
Date: Fri, 04 Jan 2008 12:20:00 -0000 [thread overview]
Message-ID: <477E23F9.7040904@codesourcery.com> (raw)
In-Reply-To: <20080104045813.GA28411@adacore.com>
[-- Attachment #1: Type: text/plain, Size: 1362 bytes --]
Joel Brobecker wrote:
> Thanks for the patch. A couple of of comments:
>
Thanks for taking a look!
> It took me a long while to understand this loop. I realize this was
> already implemented that way before, but I think something like the code
> below is simpler. What do you think?
>
I completely agree. It looks much cleaner. Thanks.
> if (argc - optind > 0)
I just changed these to use the (optind < argc) idiom, which is
already used in the file.
> /* Any argument left on the command line is unexpected and will be
> ignored. Inform the user. */
> for (; optind < argc; optind++)
> fprintf_unfiltered (...);
>
I'm keeping the output format (ARG) or (ARG ...) if (optind < argc).
There's a wrinkle. The 'int count' variable that was originally
used in the loop, was also used to do a last resort stack alignment in
captured_main's entry.
#if defined (ALIGN_STACK_ON_STARTUP)
i = (int) &count & 0x03;
if (i != 0)
alloca (4 - i);
#endif
ALIGN_STACK_ON_STARTUP isn't defined in any target/host
anymore, and if it was, count is in the middle of the stack frame
for long and nobody complained. We can safely
remove it. It's mentioned in the gdbint manual, so that'll
go too.
Now with correct email in the ChangeLog entry ...
Retested on i686-pc-linux-gnu.
OK ?
Eli, gdbint patch OK ?
--
Pedro Alves
[-- Attachment #2: pid_core_split.diff --]
[-- Type: text/x-diff, Size: 6022 bytes --]
2008-01-03 Pedro Alves <pedro@codesourcery.com>
gdb/
* 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-03 Pedro Alves <pedro@codesourcery.com>
gdb/doc/
* gdbint.texinfo (Host Conditionals): Remove mention of
ALIGN_STACK_ON_ENTRY.
---
gdb/doc/gdbint.texinfo | 7 ---
gdb/main.c | 88 +++++++++++++++++++++++++++----------------------
2 files changed, 50 insertions(+), 45 deletions(-)
Index: src/gdb/main.c
===================================================================
--- src.orig/gdb/main.c 2008-01-02 17:58:39.000000000 +0000
+++ src/gdb/main.c 2008-01-04 11:36:05.000000000 +0000
@@ -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)
- {
- /* 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. */
+ 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)
+ {
+ /* 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);
}
Index: src/gdb/doc/gdbint.texinfo
===================================================================
--- src.orig/gdb/doc/gdbint.texinfo 2008-01-04 11:35:30.000000000 +0000
+++ src/gdb/doc/gdbint.texinfo 2008-01-04 11:35:51.000000000 +0000
@@ -2490,13 +2490,6 @@ of a function to be called if @code{SIGW
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
next prev parent reply other threads:[~2008-01-04 12:20 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-03 16:56 Pedro Alves
2008-01-04 5:03 ` Joel Brobecker
2008-01-04 12:20 ` Pedro Alves [this message]
2008-01-04 15:41 ` Joel Brobecker
2008-01-05 12:47 ` Eli Zaretskii
2008-01-05 12:46 ` Eli Zaretskii
2008-01-05 13:09 ` Eli Zaretskii
2008-01-05 17:26 ` Pedro Alves
2008-01-05 17:36 ` Eli Zaretskii
2008-01-05 21:58 ` Pedro Alves
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=477E23F9.7040904@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox