public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
* [SCM] archer-tromey-remove-obj_section: change somread to search for a text section
@ 2012-12-20 22:09 tromey
0 siblings, 0 replies; only message in thread
From: tromey @ 2012-12-20 22:09 UTC (permalink / raw)
To: archer-commits
The branch, archer-tromey-remove-obj_section has been updated
via 6e53645cf8a5770ef3f83408bc97bfb50e52550f (commit)
via f3a3162efb2920fd6e75947dde482a3539fae49a (commit)
from 91ca1b7f115b2ff6d2099293d7776dbc809003fc (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit 6e53645cf8a5770ef3f83408bc97bfb50e52550f
Author: Tom Tromey <tromey@redhat.com>
Date: Thu Dec 20 15:07:36 2012 -0700
change somread to search for a text section
This changes somread.c to search all the BFD sections for
a text section. It uses the first one.
It also fixes a spot in som_symtab_read to use the proper
section offsets.
commit f3a3162efb2920fd6e75947dde482a3539fae49a
Author: Tom Tromey <tromey@redhat.com>
Date: Thu Dec 20 09:26:22 2012 -0700
add completion for "set gnutarget"
-----------------------------------------------------------------------
Summary of changes:
gdb/cli/cli-decode.c | 7 +++++--
gdb/command.h | 21 +++++++++++----------
gdb/corefile.c | 39 ++++++++++++++++++++++++++++++++++-----
gdb/somread.c | 27 ++++++++++++++++++++++-----
4 files changed, 72 insertions(+), 22 deletions(-)
First 500 lines of diff:
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index 6dd4180..fbcf95a 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -598,7 +598,7 @@ add_setshow_string_cmd (char *name, enum command_class class,
/* Add element named NAME to both the set and show command LISTs (the
list for set/show or some sublist thereof). */
-void
+struct cmd_list_element *
add_setshow_string_noescape_cmd (char *name, enum command_class class,
char **var,
const char *set_doc, const char *show_doc,
@@ -608,11 +608,14 @@ add_setshow_string_noescape_cmd (char *name, enum command_class class,
struct cmd_list_element **set_list,
struct cmd_list_element **show_list)
{
+ struct cmd_list_element *set_cmd;
+
add_setshow_cmd_full (name, class, var_string_noescape, var,
set_doc, show_doc, help_doc,
set_func, show_func,
set_list, show_list,
- NULL, NULL);
+ &set_cmd, NULL);
+ return set_cmd;
}
/* Add element named NAME to both the set and show command LISTs (the
diff --git a/gdb/command.h b/gdb/command.h
index 8eb86ba..1bab105 100644
--- a/gdb/command.h
+++ b/gdb/command.h
@@ -292,16 +292,17 @@ extern void add_setshow_string_cmd (char *name,
struct cmd_list_element **set_list,
struct cmd_list_element **show_list);
-extern void add_setshow_string_noescape_cmd (char *name,
- enum command_class class,
- char **var,
- const char *set_doc,
- const char *show_doc,
- const char *help_doc,
- cmd_sfunc_ftype *set_func,
- show_value_ftype *show_func,
- struct cmd_list_element **set_list,
- struct cmd_list_element **show_list);
+extern struct cmd_list_element *add_setshow_string_noescape_cmd
+ (char *name,
+ enum command_class class,
+ char **var,
+ const char *set_doc,
+ const char *show_doc,
+ const char *help_doc,
+ cmd_sfunc_ftype *set_func,
+ show_value_ftype *show_func,
+ struct cmd_list_element **set_list,
+ struct cmd_list_element **show_list);
extern void add_setshow_optional_filename_cmd (char *name,
enum command_class class,
diff --git a/gdb/corefile.c b/gdb/corefile.c
index eab715d..e12736e 100644
--- a/gdb/corefile.c
+++ b/gdb/corefile.c
@@ -35,6 +35,7 @@
#include "completer.h"
#include "exceptions.h"
#include "observer.h"
+#include "cli/cli-utils.h"
/* Local function declarations. */
@@ -420,12 +421,38 @@ static void
set_gnutarget_command (char *ignore, int from_tty,
struct cmd_list_element *c)
{
+ char *gend = gnutarget_string + strlen (gnutarget_string);
+
+ gend = remove_trailing_whitespace (gnutarget_string, gend);
+ *gend = '\0';
+
if (strcmp (gnutarget_string, "auto") == 0)
gnutarget = NULL;
else
gnutarget = gnutarget_string;
}
+static VEC (char_ptr) *
+complete_set_gnutarget (struct cmd_list_element *cmd, char *text, char *word)
+{
+ const char **bfd_targets = bfd_target_list ();
+ struct cleanup *cleanup = make_cleanup (free_current_contents, &bfd_targets);
+ int len;
+ VEC (char_ptr) *result;
+
+ for (len = 0; bfd_targets[len] != NULL; ++len)
+ ;
+
+ bfd_targets = xrealloc (bfd_targets, (len + 1) * sizeof (const char **));
+ bfd_targets[len - 1] = "auto";
+ bfd_targets[len] = NULL;
+
+ result = complete_on_enum (bfd_targets, text, word);
+ do_cleanups (cleanup);
+
+ return result;
+}
+
/* Set the gnutarget. */
void
set_gnutarget (char *newtarget)
@@ -448,14 +475,16 @@ No arg means have no core file. This command has been superseded by the\n\
set_cmd_completer (c, filename_completer);
- add_setshow_string_noescape_cmd ("gnutarget", class_files,
- &gnutarget_string, _("\
+ c = add_setshow_string_noescape_cmd ("gnutarget", class_files,
+ &gnutarget_string, _("\
Set the current BFD target."), _("\
Show the current BFD target."), _("\
Use `set gnutarget auto' to specify automatic detection."),
- set_gnutarget_command,
- show_gnutarget_string,
- &setlist, &showlist);
+ set_gnutarget_command,
+ show_gnutarget_string,
+ &setlist, &showlist);
+ set_cmd_completer (c, complete_set_gnutarget);
+
add_alias_cmd ("g", "gnutarget", class_files, 1, &setlist);
if (getenv ("GNUTARGET"))
diff --git a/gdb/somread.c b/gdb/somread.c
index 5f9e185..e9822fd 100644
--- a/gdb/somread.c
+++ b/gdb/somread.c
@@ -58,8 +58,8 @@ som_symtab_read (bfd *abfd, struct objfile *objfile,
CORE_ADDR text_offset, data_offset;
- text_offset = ANOFFSET (section_offsets, 0);
- data_offset = ANOFFSET (section_offsets, 1);
+ text_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
+ data_offset = ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
number_of_symbols = bfd_get_symcount (abfd);
@@ -362,6 +362,25 @@ som_symfile_init (struct objfile *objfile)
objfile->flags |= OBJF_REORDERED;
}
+/* A callback for bfd_map_over_sections that may set the objfile's
+ text section offset. */
+
+static void
+set_text_section_offset (bfd *abfd, asection *sect, void *arg)
+{
+ struct objfile *objfile = arg;
+ flagword aflag;
+
+ if (objfile->sect_index_text >= 0)
+ return;
+
+ aflag = bfd_get_section_flags (abfd, sect);
+ if ((aflag & SEC_ALLOC) != 0
+ && (aflag & SEC_CODE) != 0
+ && bfd_section_size (abfd, sect) > 0)
+ objfile->sect_index_text = sect->index;
+}
+
/* SOM specific parsing routine for section offsets.
Plain and simple for now. */
@@ -378,9 +397,7 @@ som_symfile_offsets (struct objfile *objfile, struct section_addr_info *addrs)
obstack_alloc (&objfile->objfile_obstack,
SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
- sect = bfd_get_section_by_name (objfile->obfd, "$CODE$");
- if (sect != NULL)
- objfile->sect_index_text = sect->index;
+ bfd_map_over_sections (objfile->obfd, set_text_section_offset, objfile);
sect = bfd_get_section_by_name (objfile->obfd, "$DATA$");
if (sect != NULL)
objfile->sect_index_data = sect->index;
hooks/post-receive
--
Repository for Project Archer.
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-12-20 22:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-20 22:09 [SCM] archer-tromey-remove-obj_section: change somread to search for a text section tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).