This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: [RFA] Auto set gnutarget when bfd_check_format_matches get bfd_error_file_ambiguously_recognized


Ping.

Thanks,
Hui


---------- Forwarded message ----------
From: Hui Zhu <teawater@gmail.com>
Date: Wed, Jun 30, 2010 at 16:49
Subject: [RFA] Auto set gnutarget when bfd_check_format_matches get
bfd_error_file_ambiguously_recognized
To: gdb-patches ml <gdb-patches@sourceware.org>


Hello,

In sometime before, I add a patch to make GDB show some help message
when bfd_check_format_matches get
bfd_error_file_ambiguously_recognized, like:
"/home/teawater/Desktop/vmlinux": not in executable format: File
format is ambiguous.
Matching formats: elf64-bigmips elf64-tradbigmips.
Use "set gnutarget format-name" to specify the format.

But to really open this file, user need set gnutarget elf64-bigmips
and file /home/teawater/Desktop/vmlinux.

So I add a patch to auto do it. Like:
warning: "/home/teawater/Desktop/vmlinux": not in executable format:
File format is ambiguous.
Matching formats: elf64-bigmips elf64-tradbigmips.
Use "set gnutarget format-name" to specify the format.
warning: Auto set it to "elf64-bigmips".
Reading symbols from /home/teawater/Desktop/vmlinux...done.

Please help me review it.

Thanks,
Hui

2010-06-30 ?Hui Zhu ?<teawater@gmail.com>

? ? ? ?* exec.c (exec_file_attach): Add code to handle
? ? ? ?bfd_error_file_ambiguously_recognized.
---
?exec.c | ? 22 +++++++++++++++++++---
?1 file changed, 19 insertions(+), 3 deletions(-)

--- a/exec.c
+++ b/exec.c
@@ -217,6 +217,7 @@ exec_file_attach (char *filename, int fr
? ? ? struct target_section *sections = NULL, *sections_end = NULL;
? ? ? char **matching;

+retry:
? ? ? scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename,
? ? ? ? ? ? ? ? ? write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY,
? ? ? ? ? ? ? ? ? ? ? ? ? ?&scratch_pathname);
@@ -253,12 +254,27 @@ exec_file_attach (char *filename, int fr

? ? ? if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
? ? ? ?{
+ ? ? ? ? ?bfd_error_type error_tag = bfd_get_error ();
+
? ? ? ? ?/* 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,
- ? ? ? ? ? ? ? ?gdb_bfd_errmsg (bfd_get_error (), matching));
+
+ ? ? ? ? ?if (error_tag != bfd_error_file_ambiguously_recognized
+ ? ? ? ? ? ? ?|| matching == NULL)
+ ? ? ? ? ? error (_("\"%s\": not in executable format: %s"),
+ ? ? ? ? ? ? ? ? ?scratch_pathname,
+ ? ? ? ? ? ? ? ? ?gdb_bfd_errmsg (error_tag, matching));
+ ? ? ? ? ?else
+ ? ? ? ? ? ?{
+ ? ? ? ? ? ? ?set_gnutarget (*matching);
+ ? ? ? ? ? ? warning (_("\"%s\": not in executable format: %s"),
+ ? ? ? ? ? ? ? ? ? ? ?scratch_pathname,
+ ? ? ? ? ? ? ? ? ? ? ?gdb_bfd_errmsg (error_tag, matching));
+ ? ? ? ? ? ? ?warning (_("Auto set it to \"%s\"."), gnutarget);
+ ? ? ? ? ? ? ?do_cleanups (cleanups);
+ ? ? ? ? ? ? ?goto retry;
+ ? ? ? ? ? ?}
? ? ? ?}

? ? ? /* FIXME - This should only be run for RS6000, but the ifdef is a poor


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]