From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [RFA] Change read_alphacoff_dynamic_symtab to use gdb::def_vector
Date: Sun, 01 Apr 2018 16:26:00 -0000 [thread overview]
Message-ID: <20180401162622.15065-1-tom@tromey.com> (raw)
This changes read_alphacoff_dynamic_symtab to use gdb::def_vector.
This allows for the removal of some cleanups.
Tested by the buildbot; though I don't know whether this code path is
ever actually run.
gdb/ChangeLog
2018-03-31 Tom Tromey <tom@tromey.com>
* mipsread.c (read_alphacoff_dynamic_symtab): Use
gdb::def_vector.
---
gdb/ChangeLog | 5 +++++
gdb/mipsread.c | 64 ++++++++++++++++++----------------------------------------
2 files changed, 25 insertions(+), 44 deletions(-)
diff --git a/gdb/mipsread.c b/gdb/mipsread.c
index af339e2e1f..046a25bd50 100644
--- a/gdb/mipsread.c
+++ b/gdb/mipsread.c
@@ -180,10 +180,6 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
{
bfd *abfd = objfile->obfd;
struct alphacoff_dynsecinfo si;
- char *sym_secptr;
- char *str_secptr;
- char *dyninfo_secptr;
- char *got_secptr;
bfd_size_type sym_secsize;
bfd_size_type str_secsize;
bfd_size_type dyninfo_secsize;
@@ -197,7 +193,6 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
int got_entry_size = 8;
int dt_mips_local_gotno = -1;
int dt_mips_gotsym = -1;
- struct cleanup *cleanups;
/* We currently only know how to handle alpha dynamic symbols. */
if (bfd_get_arch (abfd) != bfd_arch_alpha)
@@ -214,43 +209,28 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
str_secsize = bfd_get_section_size (si.str_sect);
dyninfo_secsize = bfd_get_section_size (si.dyninfo_sect);
got_secsize = bfd_get_section_size (si.got_sect);
- sym_secptr = (char *) xmalloc (sym_secsize);
- cleanups = make_cleanup (xfree, sym_secptr);
- str_secptr = (char *) xmalloc (str_secsize);
- make_cleanup (xfree, str_secptr);
- dyninfo_secptr = (char *) xmalloc (dyninfo_secsize);
- make_cleanup (xfree, dyninfo_secptr);
- got_secptr = (char *) xmalloc (got_secsize);
- make_cleanup (xfree, got_secptr);
-
- if (!bfd_get_section_contents (abfd, si.sym_sect, sym_secptr,
+ gdb::def_vector<char> sym_secptr (sym_secsize);
+ gdb::def_vector<char> str_secptr (str_secsize);
+ gdb::def_vector<char> dyninfo_secptr (dyninfo_secsize);
+ gdb::def_vector<char> got_secptr (got_secsize);
+
+ if (!bfd_get_section_contents (abfd, si.sym_sect, sym_secptr.data (),
(file_ptr) 0, sym_secsize))
- {
- do_cleanups (cleanups);
- return;
- }
- if (!bfd_get_section_contents (abfd, si.str_sect, str_secptr,
+ return;
+ if (!bfd_get_section_contents (abfd, si.str_sect, str_secptr.data (),
(file_ptr) 0, str_secsize))
- {
- do_cleanups (cleanups);
- return;
- }
- if (!bfd_get_section_contents (abfd, si.dyninfo_sect, dyninfo_secptr,
+ return;
+ if (!bfd_get_section_contents (abfd, si.dyninfo_sect, dyninfo_secptr.data (),
(file_ptr) 0, dyninfo_secsize))
- {
- do_cleanups (cleanups);
- return;
- }
- if (!bfd_get_section_contents (abfd, si.got_sect, got_secptr,
+ return;
+ if (!bfd_get_section_contents (abfd, si.got_sect, got_secptr.data (),
(file_ptr) 0, got_secsize))
- {
- do_cleanups (cleanups);
- return;
- }
+ return;
/* Find the number of local GOT entries and the index for the
first dynamic symbol in the GOT. */
- for (dyninfo_p = dyninfo_secptr, dyninfo_end = dyninfo_p + dyninfo_secsize;
+ for ((dyninfo_p = dyninfo_secptr.data (),
+ dyninfo_end = dyninfo_p + dyninfo_secsize);
dyninfo_p < dyninfo_end;
dyninfo_p += sizeof (Elfalpha_External_Dyn))
{
@@ -274,10 +254,7 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
}
}
if (dt_mips_local_gotno < 0 || dt_mips_gotsym < 0)
- {
- do_cleanups (cleanups);
- return;
- }
+ return;
/* Scan all dynamic symbols and enter them into the minimal symbol
table if appropriate. */
@@ -285,7 +262,7 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
stripped = (bfd_get_symcount (abfd) == 0);
/* Skip first symbol, which is a null dummy. */
- for (i = 1, x_symp = (Elfalpha_External_Sym *) sym_secptr + 1;
+ for (i = 1, x_symp = (Elfalpha_External_Sym *) sym_secptr.data () + 1;
i < sym_count;
i++, x_symp++)
{
@@ -300,7 +277,7 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
strx = bfd_h_get_32 (abfd, (bfd_byte *) x_symp->st_name);
if (strx >= str_secsize)
continue;
- name = str_secptr + strx;
+ name = str_secptr.data () + strx;
if (*name == '\0' || *name == '.')
continue;
@@ -345,7 +322,8 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
continue;
sym_value =
bfd_h_get_64 (abfd,
- (bfd_byte *) (got_secptr + got_entry_offset));
+ (bfd_byte *) (got_secptr.data ()
+ + got_entry_offset));
if (sym_value == 0)
continue;
}
@@ -392,8 +370,6 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader,
reader.record (name, sym_value, ms_type);
}
-
- do_cleanups (cleanups);
}
/* Initialization. */
--
2.13.6
next reply other threads:[~2018-04-01 16:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-01 16:26 Tom Tromey [this message]
2018-04-01 18:39 ` Simon Marchi
2018-04-03 17:29 ` Tom Tromey
2018-04-03 17:38 ` Simon Marchi
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=20180401162622.15065-1-tom@tromey.com \
--to=tom@tromey.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).