From: Jameson Nash <vtjnash@gmail.com>
To: gdb-patches@sourceware.org
Cc: Jameson Nash <vtjnash@gmail.com>
Subject: [PATCH] gdb: define COFF file offsets with file_ptr
Date: Thu, 26 Nov 2020 13:11:21 -0500 [thread overview]
Message-ID: <20201126181121.31219-1-vtjnash@gmail.com> (raw)
The arguments to these functions are file_ptr, so these declarations
were accidentally implicitly down-casting them to signed int. This
allows for reading files between 2 and 4 GB in size in my testing (I
don't have a larger dll currently to test). These may not be natively
supported by Windows, but can appear when using split-dwarf information.
This solves a "can't get string table" error resulting from attempting
to pass a negative offset to bfd_seek. I encountered this occuring while
trying to use a debug file for libLLVM.dll, but searching online reveals
at least one other person may have run into a similar problem with
Firefox?
https://sourceforge.net/p/mingw-w64/mailman/mingw-w64-public/thread/CA+cU71k2bU0azQxjy4-77ynQj1O+TKmgtaTKe59n7Bjub1y7Tg@mail.gmail.com/
With this patch, the debug file appears to load successfully and I can
see debug information in gdb for the library.
gdb/ChangeLog:
*coffread.c: Define COFF file offsets with file_ptr to support
files over 2GB.
---
gdb/coffread.c | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/gdb/coffread.c b/gdb/coffread.c
index c61c9a7ca1..8e0e9543ae 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -155,8 +155,8 @@ static int type_vector_length;
#define INITIAL_TYPE_VECTOR_LENGTH 160
static char *linetab = NULL;
-static long linetab_offset;
-static unsigned long linetab_size;
+static file_ptr linetab_offset;
+static file_ptr linetab_size;
static char *stringtab = NULL;
@@ -188,23 +188,23 @@ static struct symbol *process_coff_symbol (struct coff_symbol *,
static void patch_opaque_types (struct symtab *);
-static void enter_linenos (long, int, int, struct objfile *);
+static void enter_linenos (file_ptr, int, int, struct objfile *);
-static int init_lineno (bfd *, long, int, gdb::unique_xmalloc_ptr<char> *);
+static int init_lineno (bfd *, file_ptr, file_ptr, gdb::unique_xmalloc_ptr<char> *);
static char *getsymname (struct internal_syment *);
static const char *coff_getfilename (union internal_auxent *);
-static int init_stringtab (bfd *, long, gdb::unique_xmalloc_ptr<char> *);
+static int init_stringtab (bfd *, file_ptr, gdb::unique_xmalloc_ptr<char> *);
static void read_one_sym (struct coff_symbol *,
struct internal_syment *,
union internal_auxent *);
static void coff_symtab_read (minimal_symbol_reader &,
- long, unsigned int, struct objfile *);
-\f
+ file_ptr, unsigned int, struct objfile *);
+
/* We are called once per section from coff_symfile_read. We
need to examine each section we are passed, check to see
if it is something we are interested in processing, and
@@ -540,9 +540,9 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
const char *filename = bfd_get_filename (abfd);
int val;
unsigned int num_symbols;
- int symtab_offset;
- int stringtab_offset;
- int stabstrsize;
+ file_ptr symtab_offset;
+ file_ptr stringtab_offset;
+ unsigned int stabstrsize;
info = coff_objfile_data_key.get (objfile);
symfile_bfd = abfd; /* Kludge for swap routines. */
@@ -741,7 +741,7 @@ coff_symfile_finish (struct objfile *objfile)
/* Let stabs reader clean up. */
stabsread_clear_cache ();
}
-\f
+
/* Given pointers to a symbol table in coff style exec file,
analyze them and create struct symtab's describing the symbols.
@@ -750,7 +750,7 @@ coff_symfile_finish (struct objfile *objfile)
static void
coff_symtab_read (minimal_symbol_reader &reader,
- long symtab_offset, unsigned int nsyms,
+ file_ptr symtab_offset, unsigned int nsyms,
struct objfile *objfile)
{
struct gdbarch *gdbarch = objfile->arch ();
@@ -796,7 +796,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
bfd_seek (objfile->obfd, 0, 0);
/* Position to read the symbol table. */
- val = bfd_seek (objfile->obfd, (long) symtab_offset, 0);
+ val = bfd_seek (objfile->obfd, symtab_offset, 0);
if (val < 0)
perror_with_name (objfile_name (objfile));
@@ -1183,7 +1183,7 @@ coff_symtab_read (minimal_symbol_reader &reader,
coffread_objfile = NULL;
}
-\f
+
/* Routines for reading headers and symbols from executable. */
/* Read the next symbol, swap it, and return it in both
@@ -1270,7 +1270,7 @@ read_one_sym (struct coff_symbol *cs,
/* Support for string table handling. */
static int
-init_stringtab (bfd *abfd, long offset, gdb::unique_xmalloc_ptr<char> *storage)
+init_stringtab (bfd *abfd, file_ptr offset, gdb::unique_xmalloc_ptr<char> *storage)
{
long length;
int val;
@@ -1366,7 +1366,7 @@ coff_getfilename (union internal_auxent *aux_entry)
them into GDB's data structures. */
static int
-init_lineno (bfd *abfd, long offset, int size,
+init_lineno (bfd *abfd, file_ptr offset, file_ptr size,
gdb::unique_xmalloc_ptr<char> *storage)
{
int val;
@@ -1399,7 +1399,7 @@ init_lineno (bfd *abfd, long offset, int size,
#endif
static void
-enter_linenos (long file_offset, int first_line,
+enter_linenos (file_ptr file_offset, int first_line,
int last_line, struct objfile *objfile)
{
struct gdbarch *gdbarch = objfile->arch ();
--
2.29.2
next reply other threads:[~2020-11-26 18:12 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-26 18:11 Jameson Nash [this message]
2020-11-26 18:51 ` Simon Marchi
2020-11-26 21:49 ` Simon Marchi
2020-11-27 20:49 ` Jameson Nash
2020-11-27 20:55 ` Simon Marchi
2020-12-18 19:12 ` Simon Marchi
-- strict thread matches above, loose matches on Subject: below --
2020-11-27 2:46 Jameson Nash
2020-11-25 19:14 Jameson Nash
2020-11-26 15:30 ` 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=20201126181121.31219-1-vtjnash@gmail.com \
--to=vtjnash@gmail.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).