gdb: pass objfile_per_bfd_storage instead of objfile to partial_symtab
Since partial_symtab is supposed to be objfile-independent (since series [1]), I think it would make sense for partial_symtab to not take an objfile as a parameter in its constructor. This patch replaces that parameter with an objfile_per_bfd_storage parameter. The objfile is used for two things: - to get the objfile_name, for debug messages. We can get that name from the bfd instead. - to intern the partial symtab filename. Even though it goes through an objfile method, the request is actually forwarded to the underlying objfile_per_bfd_storage. So we can ask the new objfile_per_bfd_storage instead. In order to get a reference to the BFD from the objfile_per_bfd_storage, the BFD is saved in the objfile_per_bfd_storage object. [1] https://sourceware.org/pipermail/gdb-patches/2021-February/176625.html gdb/ChangeLog: * psympriv.h (struct partial_symtab) <partial_symtab>: Change objfile parameter for objfile_per_bfd_storage, adjust callers. (struct standard_psymtab) <standard_psymtab>: Likewise. (struct legacy_psymtab) <legacy_psymtab>: Likewise. * psymtab.c (partial_symtab::partial_symtab): Likewise. * ctfread.c (struct ctf_psymtab): Likewise. * dwarf2/read.h (struct dwarf2_psymtab): Likewise. * dwarf2/read.c (struct dwarf2_include_psymtab): Likewise. (dwarf2_create_include_psymtab): Likewise. * objfiles.h (struct objfile_per_bfd_storage) <objfile_per_bfd_storage>: Add bfd parameter, adjust callers. <get_bfd>: New method. <m_bfd>: New field. * objfiles.c (get_objfile_bfd_data): Adjust. Change-Id: I2ed3ab5d2e6f27d034bd4dc26ae2fae7b0b8a2b9
This commit is contained in:
parent
9984dd9994
commit
0072c87379
11 changed files with 75 additions and 46 deletions
|
@ -1,3 +1,20 @@
|
||||||
|
2021-04-02 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
|
* psympriv.h (struct partial_symtab) <partial_symtab>: Change
|
||||||
|
objfile parameter for objfile_per_bfd_storage, adjust callers.
|
||||||
|
(struct standard_psymtab) <standard_psymtab>: Likewise.
|
||||||
|
(struct legacy_psymtab) <legacy_psymtab>: Likewise.
|
||||||
|
* psymtab.c (partial_symtab::partial_symtab): Likewise.
|
||||||
|
* ctfread.c (struct ctf_psymtab): Likewise.
|
||||||
|
* dwarf2/read.h (struct dwarf2_psymtab): Likewise.
|
||||||
|
* dwarf2/read.c (struct dwarf2_include_psymtab): Likewise.
|
||||||
|
(dwarf2_create_include_psymtab): Likewise.
|
||||||
|
* objfiles.h (struct objfile_per_bfd_storage)
|
||||||
|
<objfile_per_bfd_storage>: Add bfd parameter, adjust callers.
|
||||||
|
<get_bfd>: New method.
|
||||||
|
<m_bfd>: New field.
|
||||||
|
* objfiles.c (get_objfile_bfd_data): Adjust.
|
||||||
|
|
||||||
2021-04-02 Simon Marchi <simon.marchi@polymtl.ca>
|
2021-04-02 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* psymtab.c (partial_symtab::partial_symtab): Change
|
* psymtab.c (partial_symtab::partial_symtab): Change
|
||||||
|
|
|
@ -125,9 +125,9 @@ struct ctf_psymtab : public standard_psymtab
|
||||||
{
|
{
|
||||||
ctf_psymtab (const char *filename,
|
ctf_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile,
|
objfile_per_bfd_storage *objfile_per_bfd,
|
||||||
CORE_ADDR addr)
|
CORE_ADDR addr)
|
||||||
: standard_psymtab (filename, partial_symtabs, objfile, addr)
|
: standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1369,7 +1369,7 @@ create_partial_symtab (const char *name,
|
||||||
ctf_psymtab *pst;
|
ctf_psymtab *pst;
|
||||||
struct ctf_context *ccx;
|
struct ctf_context *ccx;
|
||||||
|
|
||||||
pst = new ctf_psymtab (name, partial_symtabs, objfile, 0);
|
pst = new ctf_psymtab (name, partial_symtabs, objfile->per_bfd, 0);
|
||||||
|
|
||||||
ccx = XOBNEW (&objfile->objfile_obstack, struct ctf_context);
|
ccx = XOBNEW (&objfile->objfile_obstack, struct ctf_context);
|
||||||
ccx->fp = cfp;
|
ccx->fp = cfp;
|
||||||
|
|
|
@ -1917,7 +1917,7 @@ start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile,
|
||||||
const char *filename, CORE_ADDR textlow, int ldsymoff)
|
const char *filename, CORE_ADDR textlow, int ldsymoff)
|
||||||
{
|
{
|
||||||
legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
|
legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
|
||||||
objfile, textlow);
|
objfile->per_bfd, textlow);
|
||||||
|
|
||||||
result->read_symtab_private =
|
result->read_symtab_private =
|
||||||
XOBNEW (&objfile->objfile_obstack, struct symloc);
|
XOBNEW (&objfile->objfile_obstack, struct symloc);
|
||||||
|
@ -2040,7 +2040,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
|
||||||
for (i = 0; i < num_includes; i++)
|
for (i = 0; i < num_includes; i++)
|
||||||
{
|
{
|
||||||
legacy_psymtab *subpst =
|
legacy_psymtab *subpst =
|
||||||
new legacy_psymtab (include_list[i], partial_symtabs, objfile);
|
new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd);
|
||||||
|
|
||||||
subpst->read_symtab_private =
|
subpst->read_symtab_private =
|
||||||
XOBNEW (&objfile->objfile_obstack, struct symloc);
|
XOBNEW (&objfile->objfile_obstack, struct symloc);
|
||||||
|
|
|
@ -6248,8 +6248,8 @@ struct dwarf2_include_psymtab : public partial_symtab
|
||||||
{
|
{
|
||||||
dwarf2_include_psymtab (const char *filename,
|
dwarf2_include_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile)
|
objfile_per_bfd_storage *objfile_per_bfd)
|
||||||
: partial_symtab (filename, partial_symtabs, objfile)
|
: partial_symtab (filename, partial_symtabs, objfile_per_bfd)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6305,10 +6305,10 @@ dwarf2_create_include_psymtab (dwarf2_per_bfd *per_bfd,
|
||||||
const char *name,
|
const char *name,
|
||||||
dwarf2_psymtab *pst,
|
dwarf2_psymtab *pst,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile)
|
objfile_per_bfd_storage *objfile_per_bfd)
|
||||||
{
|
{
|
||||||
dwarf2_include_psymtab *subpst
|
dwarf2_include_psymtab *subpst
|
||||||
= new dwarf2_include_psymtab (name, partial_symtabs, objfile);
|
= new dwarf2_include_psymtab (name, partial_symtabs, objfile_per_bfd);
|
||||||
|
|
||||||
if (!IS_ABSOLUTE_PATH (subpst->filename))
|
if (!IS_ABSOLUTE_PATH (subpst->filename))
|
||||||
subpst->dirname = pst->dirname;
|
subpst->dirname = pst->dirname;
|
||||||
|
@ -7560,11 +7560,9 @@ create_partial_symtab (dwarf2_per_cu_data *per_cu,
|
||||||
dwarf2_per_objfile *per_objfile,
|
dwarf2_per_objfile *per_objfile,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
struct objfile *objfile = per_objfile->objfile;
|
dwarf2_psymtab *pst
|
||||||
dwarf2_psymtab *pst;
|
= new dwarf2_psymtab (name, per_objfile->per_bfd->partial_symtabs.get (),
|
||||||
|
per_objfile->objfile->per_bfd, per_cu);
|
||||||
pst = new dwarf2_psymtab (name, per_objfile->per_bfd->partial_symtabs.get (),
|
|
||||||
objfile, per_cu);
|
|
||||||
|
|
||||||
pst->psymtabs_addrmap_supported = true;
|
pst->psymtabs_addrmap_supported = true;
|
||||||
|
|
||||||
|
@ -22010,7 +22008,7 @@ dwarf_decode_lines (struct line_header *lh, const char *comp_dir,
|
||||||
dwarf2_create_include_psymtab
|
dwarf2_create_include_psymtab
|
||||||
(cu->per_objfile->per_bfd, include_name, pst,
|
(cu->per_objfile->per_bfd, include_name, pst,
|
||||||
cu->per_objfile->per_bfd->partial_symtabs.get (),
|
cu->per_objfile->per_bfd->partial_symtabs.get (),
|
||||||
objfile);
|
objfile->per_bfd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -408,9 +408,9 @@ struct dwarf2_psymtab : public partial_symtab
|
||||||
{
|
{
|
||||||
dwarf2_psymtab (const char *filename,
|
dwarf2_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile,
|
objfile_per_bfd_storage *objfile_per_bfd,
|
||||||
dwarf2_per_cu_data *per_cu)
|
dwarf2_per_cu_data *per_cu)
|
||||||
: partial_symtab (filename, partial_symtabs, objfile, 0),
|
: partial_symtab (filename, partial_symtabs, objfile_per_bfd, 0),
|
||||||
per_cu_data (per_cu)
|
per_cu_data (per_cu)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -2605,8 +2605,8 @@ parse_partial_symbols (minimal_symbol_reader &reader,
|
||||||
textlow = fh->adr;
|
textlow = fh->adr;
|
||||||
else
|
else
|
||||||
textlow = 0;
|
textlow = 0;
|
||||||
pst = new legacy_psymtab (fdr_name (fh), partial_symtabs, objfile,
|
pst = new legacy_psymtab (fdr_name (fh), partial_symtabs,
|
||||||
textlow);
|
objfile->per_bfd, textlow);
|
||||||
pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
|
pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
|
||||||
memset (pst->read_symtab_private, 0, sizeof (struct symloc));
|
memset (pst->read_symtab_private, 0, sizeof (struct symloc));
|
||||||
|
|
||||||
|
@ -4646,7 +4646,7 @@ new_psymtab (const char *name, psymtab_storage *partial_symtabs,
|
||||||
{
|
{
|
||||||
legacy_psymtab *psymtab;
|
legacy_psymtab *psymtab;
|
||||||
|
|
||||||
psymtab = new legacy_psymtab (name, partial_symtabs, objfile);
|
psymtab = new legacy_psymtab (name, partial_symtabs, objfile->per_bfd);
|
||||||
|
|
||||||
/* Keep a backpointer to the file's symbols. */
|
/* Keep a backpointer to the file's symbols. */
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd)
|
||||||
|
|
||||||
if (storage == NULL)
|
if (storage == NULL)
|
||||||
{
|
{
|
||||||
storage = new objfile_per_bfd_storage;
|
storage = new objfile_per_bfd_storage (abfd);
|
||||||
/* If the object requires gdb to do relocations, we simply fall
|
/* If the object requires gdb to do relocations, we simply fall
|
||||||
back to not sharing data across users. These cases are rare
|
back to not sharing data across users. These cases are rare
|
||||||
enough that this seems reasonable. */
|
enough that this seems reasonable. */
|
||||||
|
|
|
@ -264,8 +264,8 @@ private:
|
||||||
|
|
||||||
struct objfile_per_bfd_storage
|
struct objfile_per_bfd_storage
|
||||||
{
|
{
|
||||||
objfile_per_bfd_storage ()
|
objfile_per_bfd_storage (bfd *bfd)
|
||||||
: minsyms_read (false)
|
: minsyms_read (false), m_bfd (bfd)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~objfile_per_bfd_storage ();
|
~objfile_per_bfd_storage ();
|
||||||
|
@ -287,6 +287,13 @@ struct objfile_per_bfd_storage
|
||||||
return (const char *) string_cache.insert (str.c_str (), str.size () + 1);
|
return (const char *) string_cache.insert (str.c_str (), str.size () + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get the BFD this object is associated to. */
|
||||||
|
|
||||||
|
bfd *get_bfd () const
|
||||||
|
{
|
||||||
|
return m_bfd;
|
||||||
|
}
|
||||||
|
|
||||||
/* The storage has an obstack of its own. */
|
/* The storage has an obstack of its own. */
|
||||||
|
|
||||||
auto_obstack storage_obstack;
|
auto_obstack storage_obstack;
|
||||||
|
@ -364,6 +371,11 @@ struct objfile_per_bfd_storage
|
||||||
/* All the different languages of symbols found in the demangled
|
/* All the different languages of symbols found in the demangled
|
||||||
hash table. */
|
hash table. */
|
||||||
std::bitset<nr_languages> demangled_hash_languages;
|
std::bitset<nr_languages> demangled_hash_languages;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/* The BFD this object is associated to. */
|
||||||
|
|
||||||
|
bfd *m_bfd;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* An iterator that first returns a parent objfile, and then each
|
/* An iterator that first returns a parent objfile, and then each
|
||||||
|
|
|
@ -111,7 +111,8 @@ enum class psymbol_placement
|
||||||
|
|
||||||
struct partial_symtab
|
struct partial_symtab
|
||||||
{
|
{
|
||||||
/* Allocate a new partial symbol table associated with OBJFILE.
|
/* Allocate a new partial symbol table.
|
||||||
|
|
||||||
FILENAME (which must be non-NULL) is the filename of this partial
|
FILENAME (which must be non-NULL) is the filename of this partial
|
||||||
symbol table; it is copied into the appropriate storage. The
|
symbol table; it is copied into the appropriate storage. The
|
||||||
partial symtab will also be installed using
|
partial symtab will also be installed using
|
||||||
|
@ -119,7 +120,7 @@ struct partial_symtab
|
||||||
|
|
||||||
partial_symtab (const char *filename,
|
partial_symtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile)
|
objfile_per_bfd_storage *objfile_per_bfd)
|
||||||
ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
|
ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
|
||||||
|
|
||||||
/* Like the above, but also sets the initial text low and text high
|
/* Like the above, but also sets the initial text low and text high
|
||||||
|
@ -128,7 +129,7 @@ struct partial_symtab
|
||||||
|
|
||||||
partial_symtab (const char *filename,
|
partial_symtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile,
|
objfile_per_bfd_storage *objfile_per_bfd,
|
||||||
CORE_ADDR addr)
|
CORE_ADDR addr)
|
||||||
ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
|
ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
|
||||||
|
|
||||||
|
@ -369,16 +370,16 @@ struct standard_psymtab : public partial_symtab
|
||||||
{
|
{
|
||||||
standard_psymtab (const char *filename,
|
standard_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile)
|
objfile_per_bfd_storage *objfile_per_bfd)
|
||||||
: partial_symtab (filename, partial_symtabs, objfile)
|
: partial_symtab (filename, partial_symtabs, objfile_per_bfd)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
standard_psymtab (const char *filename,
|
standard_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile,
|
objfile_per_bfd_storage *objfile_per_bfd,
|
||||||
CORE_ADDR addr)
|
CORE_ADDR addr)
|
||||||
: partial_symtab (filename, partial_symtabs, objfile, addr)
|
: partial_symtab (filename, partial_symtabs, objfile_per_bfd, addr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,16 +412,16 @@ struct legacy_psymtab : public standard_psymtab
|
||||||
{
|
{
|
||||||
legacy_psymtab (const char *filename,
|
legacy_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile)
|
objfile_per_bfd_storage *objfile_per_bfd)
|
||||||
: standard_psymtab (filename, partial_symtabs, objfile)
|
: standard_psymtab (filename, partial_symtabs, objfile_per_bfd)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
legacy_psymtab (const char *filename,
|
legacy_psymtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile,
|
objfile_per_bfd_storage *objfile_per_bfd,
|
||||||
CORE_ADDR addr)
|
CORE_ADDR addr)
|
||||||
: standard_psymtab (filename, partial_symtabs, objfile, addr)
|
: standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1436,9 +1436,9 @@ psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile,
|
||||||
|
|
||||||
partial_symtab::partial_symtab (const char *filename,
|
partial_symtab::partial_symtab (const char *filename,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile,
|
objfile_per_bfd_storage *objfile_per_bfd,
|
||||||
CORE_ADDR textlow)
|
CORE_ADDR textlow)
|
||||||
: partial_symtab (filename, partial_symtabs, objfile)
|
: partial_symtab (filename, partial_symtabs, objfile_per_bfd)
|
||||||
{
|
{
|
||||||
set_text_low (textlow);
|
set_text_low (textlow);
|
||||||
set_text_high (raw_text_low ()); /* default */
|
set_text_high (raw_text_low ()); /* default */
|
||||||
|
@ -1561,28 +1561,29 @@ partial_symtab::add_psymbol (gdb::string_view name, bool copy_name,
|
||||||
|
|
||||||
partial_symtab::partial_symtab (const char *filename_,
|
partial_symtab::partial_symtab (const char *filename_,
|
||||||
psymtab_storage *partial_symtabs,
|
psymtab_storage *partial_symtabs,
|
||||||
struct objfile *objfile)
|
objfile_per_bfd_storage *objfile_per_bfd)
|
||||||
: searched_flag (PST_NOT_SEARCHED),
|
: searched_flag (PST_NOT_SEARCHED),
|
||||||
text_low_valid (0),
|
text_low_valid (0),
|
||||||
text_high_valid (0)
|
text_high_valid (0)
|
||||||
{
|
{
|
||||||
partial_symtabs->install_psymtab (this);
|
partial_symtabs->install_psymtab (this);
|
||||||
|
|
||||||
filename = objfile->intern (filename_);
|
filename = objfile_per_bfd->intern (filename_);
|
||||||
|
|
||||||
if (symtab_create_debug)
|
if (symtab_create_debug)
|
||||||
{
|
{
|
||||||
/* Be a bit clever with debugging messages, and don't print objfile
|
/* Be a bit clever with debugging messages, and don't print objfile
|
||||||
every time, only when it changes. */
|
every time, only when it changes. */
|
||||||
static std::string last_objfile_name;
|
static std::string last_bfd_name;
|
||||||
const char *this_objfile_name = objfile_name (objfile);
|
const char *this_bfd_name
|
||||||
|
= bfd_get_filename (objfile_per_bfd->get_bfd ());
|
||||||
|
|
||||||
if (last_objfile_name.empty () || last_objfile_name != this_objfile_name)
|
if (last_bfd_name.empty () || last_bfd_name != this_bfd_name)
|
||||||
{
|
{
|
||||||
last_objfile_name = this_objfile_name;
|
last_bfd_name = this_bfd_name;
|
||||||
fprintf_filtered (gdb_stdlog,
|
fprintf_filtered (gdb_stdlog,
|
||||||
"Creating one or more psymtabs for objfile %s ...\n",
|
"Creating one or more psymtabs for %s ...\n",
|
||||||
this_objfile_name);
|
this_bfd_name);
|
||||||
}
|
}
|
||||||
fprintf_filtered (gdb_stdlog,
|
fprintf_filtered (gdb_stdlog,
|
||||||
"Created psymtab %s for module %s.\n",
|
"Created psymtab %s for module %s.\n",
|
||||||
|
|
|
@ -1966,7 +1966,7 @@ xcoff_start_psymtab (psymtab_storage *partial_symtabs,
|
||||||
{
|
{
|
||||||
/* We fill in textlow later. */
|
/* We fill in textlow later. */
|
||||||
legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
|
legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs,
|
||||||
objfile, 0);
|
objfile->per_bfd, 0);
|
||||||
|
|
||||||
result->read_symtab_private =
|
result->read_symtab_private =
|
||||||
XOBNEW (&objfile->objfile_obstack, struct symloc);
|
XOBNEW (&objfile->objfile_obstack, struct symloc);
|
||||||
|
@ -2022,7 +2022,7 @@ xcoff_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
|
||||||
for (i = 0; i < num_includes; i++)
|
for (i = 0; i < num_includes; i++)
|
||||||
{
|
{
|
||||||
legacy_psymtab *subpst =
|
legacy_psymtab *subpst =
|
||||||
new legacy_psymtab (include_list[i], partial_symtabs, objfile);
|
new legacy_psymtab (include_list[i], partial_symtabs, objfile->per_bfd);
|
||||||
|
|
||||||
subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
|
subpst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, symloc);
|
||||||
((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;
|
((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue