From: Hui Zhu <teawater@gmail.com>
To: Joel Brobecker <brobecker@adacore.com>,
Doug Evans <dje@google.com>,
Jan Kratochvil <jan.kratochvil@redhat.com>
Cc: gdb-patches ml <gdb-patches@sourceware.org>,
Tristan Gingold <gingold@adacore.com>,
Daniel Jacobowitz <dan@codesourcery.com>
Subject: Re: [RFA] Show some tips when file cmd get bfd_error_file_ambiguously_recognized
Date: Thu, 04 Feb 2010 07:09:00 -0000 [thread overview]
Message-ID: <daef60381002032309w578c3346yb47d6ab118bcd429@mail.gmail.com> (raw)
In-Reply-To: <daef60381001290105w33f7bf8er9a3578fbd9489b7b@mail.gmail.com>
Ping.
Thanks,
Hui
On Fri, Jan 29, 2010 at 17:05, Hui Zhu <teawater@gmail.com> wrote:
> Thanks guys. I make a new patch according to your mails.
>
> And about the xrealloc, I don't know what I was thinking when I use
> it. It is really bad, ugly and wasted me a lot of time. :(
>
> Please help me review the new patch. Thanks.
>
> Best regards,
> Hui
>
> 2010-01-29 Hui Zhu <teawater@gmail.com>
>
> * defs.h (gdb_bfd_errmsg): New extern.
> * exec.c (exec_file_attach): Change bfd_errmsg to
> gdb_bfd_errmsg.
> * utils.c (AMBIGUOUS_MESS1): New macro.
> (AMBIGUOUS_MESS2): New macro.
> (gdb_bfd_errmsg): New function.
>
> ---
> defs.h | 8 ++++++++
> exec.c | 6 ++++--
> utils.c | 40 ++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 52 insertions(+), 2 deletions(-)
>
> --- a/defs.h
> +++ b/defs.h
> @@ -419,6 +419,13 @@ char **gdb_buildargv (const char *);
>
> int compare_positive_ints (const void *ap, const void *bp);
>
> +/* A wrapper for bfd_errmsg to produce a more helpful error message
> + in the case of bfd_error_file_ambiguously recognized.
> + MATCHING, if non-NULL, is the corresponding argument to
> + bfd_check_format_matches, and will be freed. */
> +
> +extern const char *gdb_bfd_errmsg (bfd_error_type error_tag, char **matching);
> +
> /* From demangle.c */
>
> extern void set_demangling_style (char *);
> @@ -1226,4 +1233,5 @@ void dummy_obstack_deallocate (void *obj
> extern void initialize_progspace (void);
> extern void initialize_inferiors (void);
>
> +
> #endif /* #ifndef DEFS_H */
> --- a/exec.c
> +++ b/exec.c
> @@ -219,6 +219,7 @@ exec_file_attach (char *filename, int fr
> char *scratch_pathname;
> int scratch_chan;
> struct target_section *sections = NULL, *sections_end = NULL;
> + char **matching;
>
> scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename,
> write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
> @@ -253,13 +254,14 @@ exec_file_attach (char *filename, int fr
> scratch_pathname = xstrdup (scratch_pathname);
> cleanups = make_cleanup (xfree, scratch_pathname);
>
> - if (!bfd_check_format (exec_bfd, bfd_object))
> + if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
> {
> /* Make sure to close exec_bfd, or else "run" might try to use
> it. */
> exec_close ();
> error (_("\"%s\": not in executable format: %s"),
> - scratch_pathname, bfd_errmsg (bfd_get_error ()));
> + scratch_pathname,
> + gdb_bfd_errmsg (bfd_get_error (), matching));
> }
>
> /* FIXME - This should only be run for RS6000, but the ifdef is a poor
> --- a/utils.c
> +++ b/utils.c
> @@ -3608,6 +3608,46 @@ compare_positive_ints (const void *ap, c
> return * (int *) ap - * (int *) bp;
> }
>
> +#define AMBIGUOUS_MESS1 ".\nMatching formats:"
> +#define AMBIGUOUS_MESS2 ".\nUse \"set gnutarget format-name\" specify
> the format."
> +
> +const char *
> +gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
> +{
> + char *ret, *retp;
> + int ret_len;
> + char **p;
> +
> + /* Check if errmsg just need simple return. */
> + if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL)
> + return bfd_errmsg (error_tag);
> +
> + ret_len = strlen (bfd_errmsg (error_tag)) + strlen (AMBIGUOUS_MESS1)
> + + strlen (AMBIGUOUS_MESS2);
> + for (p = matching; *p; p++)
> + ret_len += strlen (*p) + 1;
> + ret = xmalloc (ret_len + 1);
> + retp = ret;
> + make_cleanup (xfree, ret);
> +
> + strcpy (retp, bfd_errmsg (error_tag));
> + retp += strlen (retp);
> +
> + strcpy (retp, AMBIGUOUS_MESS1);
> + retp += strlen (retp);
> +
> + for (p = matching; *p; p++)
> + {
> + sprintf (retp, " %s", *p);
> + retp += strlen (retp);
> + }
> + xfree (matching);
> +
> + strcpy (retp, AMBIGUOUS_MESS2);
> +
> + return ret;
> +}
> +
> /* Provide a prototype to silence -Wmissing-prototypes. */
> extern initialize_file_ftype _initialize_utils;
>
next prev parent reply other threads:[~2010-02-04 7:09 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-14 2:44 Hui Zhu
2010-01-14 10:15 ` Jan Kratochvil
2010-01-19 7:01 ` Hui Zhu
2010-01-19 7:57 ` Jan Kratochvil
2010-01-19 8:08 ` Hui Zhu
2010-01-26 8:01 ` Hui Zhu
2010-01-26 21:04 ` Doug Evans
2010-01-27 9:01 ` Hui Zhu
2010-01-28 18:18 ` Doug Evans
2010-01-28 21:56 ` Jan Kratochvil
2010-01-28 21:59 ` Doug Evans
2010-01-29 3:51 ` Joel Brobecker
2010-01-29 9:06 ` Hui Zhu
2010-02-04 7:09 ` Hui Zhu [this message]
2010-02-04 17:38 ` Doug Evans
2010-02-05 2:44 ` Hui Zhu
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=daef60381002032309w578c3346yb47d6ab118bcd429@mail.gmail.com \
--to=teawater@gmail.com \
--cc=brobecker@adacore.com \
--cc=dan@codesourcery.com \
--cc=dje@google.com \
--cc=gdb-patches@sourceware.org \
--cc=gingold@adacore.com \
--cc=jan.kratochvil@redhat.com \
/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