mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
Remove ALL_SO_LIBS and so_list_head
This patch started as an attempt to replace ALL_SO_LIBS with an ordinary C++ iterator. However, then I tripped over the so_list_head define again, and decided to remove it as well. gdb/ChangeLog 2020-05-08 Tom Tromey <tom@tromey.com> * mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Update. * solib-svr4.c (svr4_fetch_objfile_link_map): Update. (enable_break): Update. * solib-frv.c (frv_fdpic_find_global_pointer): Update. (frv_fdpic_find_canonical_descriptor): Update. (frv_fetch_objfile_link_map): Update. * progspace.c (program_space::free_all_objfiles): Update. (program_space::solibs): New method. * progspace.h (struct program_space) <solibs>: New method. * solist.h (master_so_list): Don't declare. (ALL_SO_LIBS): Remove. * solib.h (so_list_head): Remove. (update_solib_list): Update comment. * solib.c (master_so_list): Remove. (solib_used, update_solib_list, solib_add) (info_sharedlibrary_command, clear_solib) (reload_shared_libraries_1, remove_user_added_objfile): Update.
This commit is contained in:
parent
38eae08459
commit
a1fd1ac9de
@ -1,3 +1,23 @@
|
|||||||
|
2020-05-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Update.
|
||||||
|
* solib-svr4.c (svr4_fetch_objfile_link_map): Update.
|
||||||
|
(enable_break): Update.
|
||||||
|
* solib-frv.c (frv_fdpic_find_global_pointer): Update.
|
||||||
|
(frv_fdpic_find_canonical_descriptor): Update.
|
||||||
|
(frv_fetch_objfile_link_map): Update.
|
||||||
|
* progspace.c (program_space::free_all_objfiles): Update.
|
||||||
|
(program_space::solibs): New method.
|
||||||
|
* progspace.h (struct program_space) <solibs>: New method.
|
||||||
|
* solist.h (master_so_list): Don't declare.
|
||||||
|
(ALL_SO_LIBS): Remove.
|
||||||
|
* solib.h (so_list_head): Remove.
|
||||||
|
(update_solib_list): Update comment.
|
||||||
|
* solib.c (master_so_list): Remove.
|
||||||
|
(solib_used, update_solib_list, solib_add)
|
||||||
|
(info_sharedlibrary_command, clear_solib)
|
||||||
|
(reload_shared_libraries_1, remove_user_added_objfile): Update.
|
||||||
|
|
||||||
2020-05-08 Tom Tromey <tom@tromey.com>
|
2020-05-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* extension.c (extension_languages): Now a std::array.
|
* extension.c (extension_languages): Now a std::array.
|
||||||
|
@ -121,7 +121,6 @@ mi_cmd_file_list_shared_libraries (const char *command, char **argv, int argc)
|
|||||||
{
|
{
|
||||||
struct ui_out *uiout = current_uiout;
|
struct ui_out *uiout = current_uiout;
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
struct so_list *so = NULL;
|
|
||||||
|
|
||||||
switch (argc)
|
switch (argc)
|
||||||
{
|
{
|
||||||
@ -148,7 +147,7 @@ mi_cmd_file_list_shared_libraries (const char *command, char **argv, int argc)
|
|||||||
/* Print the table header. */
|
/* Print the table header. */
|
||||||
ui_out_emit_list list_emitter (uiout, "shared-libraries");
|
ui_out_emit_list list_emitter (uiout, "shared-libraries");
|
||||||
|
|
||||||
ALL_SO_LIBS (so)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
{
|
{
|
||||||
if (so->so_name[0] == '\0')
|
if (so->so_name[0] == '\0')
|
||||||
continue;
|
continue;
|
||||||
|
@ -192,10 +192,8 @@ program_space::~program_space ()
|
|||||||
void
|
void
|
||||||
program_space::free_all_objfiles ()
|
program_space::free_all_objfiles ()
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
|
||||||
|
|
||||||
/* Any objfile reference would become stale. */
|
/* Any objfile reference would become stale. */
|
||||||
for (so = master_so_list (); so; so = so->next)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
gdb_assert (so->objfile == NULL);
|
gdb_assert (so->objfile == NULL);
|
||||||
|
|
||||||
while (!objfiles_list.empty ())
|
while (!objfiles_list.empty ())
|
||||||
@ -239,6 +237,14 @@ program_space::remove_objfile (struct objfile *objfile)
|
|||||||
symfile_object_file = NULL;
|
symfile_object_file = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See progspace.h. */
|
||||||
|
|
||||||
|
next_adapter<struct so_list>
|
||||||
|
program_space::solibs () const
|
||||||
|
{
|
||||||
|
return next_adapter<struct so_list> (this->so_list);
|
||||||
|
}
|
||||||
|
|
||||||
/* Copies program space SRC to DEST. Copies the main executable file,
|
/* Copies program space SRC to DEST. Copies the main executable file,
|
||||||
and the main symbol file. Returns DEST. */
|
and the main symbol file. Returns DEST. */
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ struct exec;
|
|||||||
struct address_space;
|
struct address_space;
|
||||||
struct program_space_data;
|
struct program_space_data;
|
||||||
struct address_space_data;
|
struct address_space_data;
|
||||||
|
struct so_list;
|
||||||
|
|
||||||
typedef std::list<std::shared_ptr<objfile>> objfile_list;
|
typedef std::list<std::shared_ptr<objfile>> objfile_list;
|
||||||
|
|
||||||
@ -264,6 +265,12 @@ struct program_space
|
|||||||
/* Free all the objfiles associated with this program space. */
|
/* Free all the objfiles associated with this program space. */
|
||||||
void free_all_objfiles ();
|
void free_all_objfiles ();
|
||||||
|
|
||||||
|
/* Return a range adapter for iterating over all the solibs in this
|
||||||
|
program space. Use it like:
|
||||||
|
|
||||||
|
for (so_list *so : pspace->solibs ()) { ... } */
|
||||||
|
next_adapter<struct so_list> solibs () const;
|
||||||
|
|
||||||
|
|
||||||
/* Pointer to next in linked list. */
|
/* Pointer to next in linked list. */
|
||||||
struct program_space *next = NULL;
|
struct program_space *next = NULL;
|
||||||
|
@ -908,10 +908,7 @@ main_got (void)
|
|||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
frv_fdpic_find_global_pointer (CORE_ADDR addr)
|
frv_fdpic_find_global_pointer (CORE_ADDR addr)
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
|
|
||||||
so = master_so_list ();
|
|
||||||
while (so)
|
|
||||||
{
|
{
|
||||||
int seg;
|
int seg;
|
||||||
lm_info_frv *li = (lm_info_frv *) so->lm_info;
|
lm_info_frv *li = (lm_info_frv *) so->lm_info;
|
||||||
@ -923,8 +920,6 @@ frv_fdpic_find_global_pointer (CORE_ADDR addr)
|
|||||||
&& addr < map->segs[seg].addr + map->segs[seg].p_memsz)
|
&& addr < map->segs[seg].addr + map->segs[seg].p_memsz)
|
||||||
return li->got_value;
|
return li->got_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
so = so->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Didn't find it in any of the shared objects. So assume it's in the
|
/* Didn't find it in any of the shared objects. So assume it's in the
|
||||||
@ -969,10 +964,7 @@ frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point)
|
|||||||
in list of shared objects. */
|
in list of shared objects. */
|
||||||
if (addr == 0)
|
if (addr == 0)
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
|
|
||||||
so = master_so_list ();
|
|
||||||
while (so)
|
|
||||||
{
|
{
|
||||||
lm_info_frv *li = (lm_info_frv *) so->lm_info;
|
lm_info_frv *li = (lm_info_frv *) so->lm_info;
|
||||||
|
|
||||||
@ -981,8 +973,6 @@ frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point)
|
|||||||
|
|
||||||
if (addr != 0)
|
if (addr != 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
so = so->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1116,8 +1106,6 @@ find_canonical_descriptor_in_load_object
|
|||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
frv_fetch_objfile_link_map (struct objfile *objfile)
|
frv_fetch_objfile_link_map (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
|
||||||
|
|
||||||
/* Cause frv_current_sos() to be run if it hasn't been already. */
|
/* Cause frv_current_sos() to be run if it hasn't been already. */
|
||||||
if (main_lm_addr == 0)
|
if (main_lm_addr == 0)
|
||||||
solib_add (0, 0, 1);
|
solib_add (0, 0, 1);
|
||||||
@ -1128,7 +1116,7 @@ frv_fetch_objfile_link_map (struct objfile *objfile)
|
|||||||
|
|
||||||
/* The other link map addresses may be found by examining the list
|
/* The other link map addresses may be found by examining the list
|
||||||
of shared libraries. */
|
of shared libraries. */
|
||||||
for (so = master_so_list (); so; so = so->next)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
{
|
{
|
||||||
lm_info_frv *li = (lm_info_frv *) so->lm_info;
|
lm_info_frv *li = (lm_info_frv *) so->lm_info;
|
||||||
|
|
||||||
|
@ -1537,7 +1537,6 @@ svr4_current_sos (void)
|
|||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
svr4_fetch_objfile_link_map (struct objfile *objfile)
|
svr4_fetch_objfile_link_map (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
|
||||||
struct svr4_info *info = get_svr4_info (objfile->pspace);
|
struct svr4_info *info = get_svr4_info (objfile->pspace);
|
||||||
|
|
||||||
/* Cause svr4_current_sos() to be run if it hasn't been already. */
|
/* Cause svr4_current_sos() to be run if it hasn't been already. */
|
||||||
@ -1555,7 +1554,7 @@ svr4_fetch_objfile_link_map (struct objfile *objfile)
|
|||||||
|
|
||||||
/* The other link map addresses may be found by examining the list
|
/* The other link map addresses may be found by examining the list
|
||||||
of shared libraries. */
|
of shared libraries. */
|
||||||
for (so = master_so_list (); so; so = so->next)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
if (so->objfile == objfile)
|
if (so->objfile == objfile)
|
||||||
{
|
{
|
||||||
lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info;
|
lm_info_svr4 *li = (lm_info_svr4 *) so->lm_info;
|
||||||
@ -2307,7 +2306,6 @@ enable_break (struct svr4_info *info, int from_tty)
|
|||||||
CORE_ADDR load_addr = 0;
|
CORE_ADDR load_addr = 0;
|
||||||
int load_addr_found = 0;
|
int load_addr_found = 0;
|
||||||
int loader_found_in_list = 0;
|
int loader_found_in_list = 0;
|
||||||
struct so_list *so;
|
|
||||||
struct target_ops *tmp_bfd_target;
|
struct target_ops *tmp_bfd_target;
|
||||||
|
|
||||||
sym_addr = 0;
|
sym_addr = 0;
|
||||||
@ -2340,8 +2338,7 @@ enable_break (struct svr4_info *info, int from_tty)
|
|||||||
|
|
||||||
/* On a running target, we can get the dynamic linker's base
|
/* On a running target, we can get the dynamic linker's base
|
||||||
address from the shared library table. */
|
address from the shared library table. */
|
||||||
so = master_so_list ();
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
while (so)
|
|
||||||
{
|
{
|
||||||
if (svr4_same_1 (interp_name, so->so_original_name))
|
if (svr4_same_1 (interp_name, so->so_original_name))
|
||||||
{
|
{
|
||||||
@ -2350,7 +2347,6 @@ enable_break (struct svr4_info *info, int from_tty)
|
|||||||
load_addr = lm_addr_check (so, tmp_bfd.get ());
|
load_addr = lm_addr_check (so, tmp_bfd.get ());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
so = so->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we were not able to find the base address of the loader
|
/* If we were not able to find the base address of the loader
|
||||||
|
50
gdb/solib.c
50
gdb/solib.c
@ -647,13 +647,6 @@ free_so (struct so_list *so)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return address of first so_list entry in master shared object list. */
|
|
||||||
struct so_list *
|
|
||||||
master_so_list (void)
|
|
||||||
{
|
|
||||||
return so_list_head;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read in symbols for shared object SO. If SYMFILE_VERBOSE is set in FLAGS,
|
/* Read in symbols for shared object SO. If SYMFILE_VERBOSE is set in FLAGS,
|
||||||
be chatty about it. Return true if any symbols were actually loaded. */
|
be chatty about it. Return true if any symbols were actually loaded. */
|
||||||
|
|
||||||
@ -713,15 +706,13 @@ solib_read_symbols (struct so_list *so, symfile_add_flags flags)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return true if KNOWN->objfile is used by any other so_list object in the
|
/* Return true if KNOWN->objfile is used by any other so_list object
|
||||||
SO_LIST_HEAD list. Return false otherwise. */
|
in the list of shared libraries. Return false otherwise. */
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
solib_used (const struct so_list *const known)
|
solib_used (const struct so_list *const known)
|
||||||
{
|
{
|
||||||
const struct so_list *pivot;
|
for (const struct so_list *pivot : current_program_space->solibs ())
|
||||||
|
|
||||||
for (pivot = so_list_head; pivot != NULL; pivot = pivot->next)
|
|
||||||
if (pivot != known && pivot->objfile == known->objfile)
|
if (pivot != known && pivot->objfile == known->objfile)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
@ -784,8 +775,8 @@ update_solib_list (int from_tty)
|
|||||||
the time we're done walking GDB's list, the inferior's list
|
the time we're done walking GDB's list, the inferior's list
|
||||||
contains only the new shared objects, which we then add. */
|
contains only the new shared objects, which we then add. */
|
||||||
|
|
||||||
gdb = so_list_head;
|
gdb = current_program_space->so_list;
|
||||||
gdb_link = &so_list_head;
|
gdb_link = ¤t_program_space->so_list;
|
||||||
while (gdb)
|
while (gdb)
|
||||||
{
|
{
|
||||||
struct so_list *i = inferior;
|
struct so_list *i = inferior;
|
||||||
@ -943,8 +934,6 @@ libpthread_solib_p (struct so_list *so)
|
|||||||
void
|
void
|
||||||
solib_add (const char *pattern, int from_tty, int readsyms)
|
solib_add (const char *pattern, int from_tty, int readsyms)
|
||||||
{
|
{
|
||||||
struct so_list *gdb;
|
|
||||||
|
|
||||||
if (print_symbol_loading_p (from_tty, 0, 0))
|
if (print_symbol_loading_p (from_tty, 0, 0))
|
||||||
{
|
{
|
||||||
if (pattern != NULL)
|
if (pattern != NULL)
|
||||||
@ -979,7 +968,7 @@ solib_add (const char *pattern, int from_tty, int readsyms)
|
|||||||
if (from_tty)
|
if (from_tty)
|
||||||
add_flags |= SYMFILE_VERBOSE;
|
add_flags |= SYMFILE_VERBOSE;
|
||||||
|
|
||||||
for (gdb = so_list_head; gdb; gdb = gdb->next)
|
for (struct so_list *gdb : current_program_space->solibs ())
|
||||||
if (! pattern || re_exec (gdb->so_name))
|
if (! pattern || re_exec (gdb->so_name))
|
||||||
{
|
{
|
||||||
/* Normally, we would read the symbols from that library
|
/* Normally, we would read the symbols from that library
|
||||||
@ -1030,7 +1019,6 @@ solib_add (const char *pattern, int from_tty, int readsyms)
|
|||||||
static void
|
static void
|
||||||
info_sharedlibrary_command (const char *pattern, int from_tty)
|
info_sharedlibrary_command (const char *pattern, int from_tty)
|
||||||
{
|
{
|
||||||
struct so_list *so = NULL; /* link map state variable */
|
|
||||||
bool so_missing_debug_info = false;
|
bool so_missing_debug_info = false;
|
||||||
int addr_width;
|
int addr_width;
|
||||||
int nr_libs;
|
int nr_libs;
|
||||||
@ -1053,7 +1041,8 @@ info_sharedlibrary_command (const char *pattern, int from_tty)
|
|||||||
/* ui_out_emit_table table_emitter needs to know the number of rows,
|
/* ui_out_emit_table table_emitter needs to know the number of rows,
|
||||||
so we need to make two passes over the libs. */
|
so we need to make two passes over the libs. */
|
||||||
|
|
||||||
for (nr_libs = 0, so = so_list_head; so; so = so->next)
|
nr_libs = 0;
|
||||||
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
{
|
{
|
||||||
if (so->so_name[0])
|
if (so->so_name[0])
|
||||||
{
|
{
|
||||||
@ -1074,7 +1063,7 @@ info_sharedlibrary_command (const char *pattern, int from_tty)
|
|||||||
|
|
||||||
uiout->table_body ();
|
uiout->table_body ();
|
||||||
|
|
||||||
ALL_SO_LIBS (so)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
{
|
{
|
||||||
if (! so->so_name[0])
|
if (! so->so_name[0])
|
||||||
continue;
|
continue;
|
||||||
@ -1185,11 +1174,11 @@ clear_solib (void)
|
|||||||
|
|
||||||
disable_breakpoints_in_shlibs ();
|
disable_breakpoints_in_shlibs ();
|
||||||
|
|
||||||
while (so_list_head)
|
while (current_program_space->so_list)
|
||||||
{
|
{
|
||||||
struct so_list *so = so_list_head;
|
struct so_list *so = current_program_space->so_list;
|
||||||
|
|
||||||
so_list_head = so->next;
|
current_program_space->so_list = so->next;
|
||||||
gdb::observers::solib_unloaded.notify (so);
|
gdb::observers::solib_unloaded.notify (so);
|
||||||
remove_target_sections (so);
|
remove_target_sections (so);
|
||||||
free_so (so);
|
free_so (so);
|
||||||
@ -1284,12 +1273,10 @@ handle_solib_event (void)
|
|||||||
static void
|
static void
|
||||||
reload_shared_libraries_1 (int from_tty)
|
reload_shared_libraries_1 (int from_tty)
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
|
||||||
|
|
||||||
if (print_symbol_loading_p (from_tty, 0, 0))
|
if (print_symbol_loading_p (from_tty, 0, 0))
|
||||||
printf_unfiltered (_("Loading symbols for shared libraries.\n"));
|
printf_unfiltered (_("Loading symbols for shared libraries.\n"));
|
||||||
|
|
||||||
for (so = so_list_head; so != NULL; so = so->next)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
{
|
{
|
||||||
const char *found_pathname = NULL;
|
const char *found_pathname = NULL;
|
||||||
bool was_loaded = so->symbols_loaded != 0;
|
bool was_loaded = so->symbols_loaded != 0;
|
||||||
@ -1552,18 +1539,17 @@ gdb_bfd_lookup_symbol (bfd *abfd,
|
|||||||
return symaddr;
|
return symaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SO_LIST_HEAD may contain user-loaded object files that can be removed
|
/* The shared library list may contain user-loaded object files that
|
||||||
out-of-band by the user. So upon notification of free_objfile remove
|
can be removed out-of-band by the user. So upon notification of
|
||||||
all references to any user-loaded file that is about to be freed. */
|
free_objfile remove all references to any user-loaded file that is
|
||||||
|
about to be freed. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
remove_user_added_objfile (struct objfile *objfile)
|
remove_user_added_objfile (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
struct so_list *so;
|
|
||||||
|
|
||||||
if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
|
if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
|
||||||
{
|
{
|
||||||
for (so = so_list_head; so != NULL; so = so->next)
|
for (struct so_list *so : current_program_space->solibs ())
|
||||||
if (so->objfile == objfile)
|
if (so->objfile == objfile)
|
||||||
so->objfile = NULL;
|
so->objfile = NULL;
|
||||||
}
|
}
|
||||||
|
@ -28,9 +28,6 @@ struct program_space;
|
|||||||
|
|
||||||
#include "symfile-add-flags.h"
|
#include "symfile-add-flags.h"
|
||||||
|
|
||||||
/* List of known shared objects */
|
|
||||||
#define so_list_head current_program_space->so_list
|
|
||||||
|
|
||||||
/* Called when we free all symtabs, to free the shared library information
|
/* Called when we free all symtabs, to free the shared library information
|
||||||
as well. */
|
as well. */
|
||||||
|
|
||||||
@ -81,9 +78,9 @@ extern void set_solib_ops (struct gdbarch *gdbarch,
|
|||||||
/* Synchronize GDB's shared object list with inferior's.
|
/* Synchronize GDB's shared object list with inferior's.
|
||||||
|
|
||||||
Extract the list of currently loaded shared objects from the
|
Extract the list of currently loaded shared objects from the
|
||||||
inferior, and compare it with the list of shared objects currently
|
inferior, and compare it with the list of shared objects in the
|
||||||
in GDB's so_list_head list. Edit so_list_head to bring it in sync
|
current program space's list of shared libraries. Edit
|
||||||
with the inferior's new list.
|
so_list_head to bring it in sync with the inferior's new list.
|
||||||
|
|
||||||
If we notice that the inferior has unloaded some shared objects,
|
If we notice that the inferior has unloaded some shared objects,
|
||||||
free any symbolic info GDB had read about those shared objects.
|
free any symbolic info GDB had read about those shared objects.
|
||||||
|
@ -24,11 +24,6 @@
|
|||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
#include "gdb_bfd.h"
|
#include "gdb_bfd.h"
|
||||||
|
|
||||||
#define ALL_SO_LIBS(so) \
|
|
||||||
for (so = so_list_head; \
|
|
||||||
so != NULL; \
|
|
||||||
so = so->next)
|
|
||||||
|
|
||||||
/* Base class for target-specific link map information. */
|
/* Base class for target-specific link map information. */
|
||||||
|
|
||||||
struct lm_info_base
|
struct lm_info_base
|
||||||
@ -183,9 +178,6 @@ struct so_deleter
|
|||||||
/* A unique pointer to a so_list. */
|
/* A unique pointer to a so_list. */
|
||||||
typedef std::unique_ptr<so_list, so_deleter> so_list_up;
|
typedef std::unique_ptr<so_list, so_deleter> so_list_up;
|
||||||
|
|
||||||
/* Return address of first so_list entry in master shared object list. */
|
|
||||||
struct so_list *master_so_list (void);
|
|
||||||
|
|
||||||
/* Find main executable binary file. */
|
/* Find main executable binary file. */
|
||||||
extern gdb::unique_xmalloc_ptr<char> exec_file_find (const char *in_pathname,
|
extern gdb::unique_xmalloc_ptr<char> exec_file_find (const char *in_pathname,
|
||||||
int *fd);
|
int *fd);
|
||||||
|
Loading…
Reference in New Issue
Block a user