GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Enumerations | Functions | Variables
solib-svr4.c File Reference
#include "defs.h"
#include "elf/external.h"
#include "elf/common.h"
#include "elf/mips.h"
#include "symtab.h"
#include "bfd.h"
#include "symfile.h"
#include "objfiles.h"
#include "gdbcore.h"
#include "target.h"
#include "inferior.h"
#include "infrun.h"
#include "regcache.h"
#include "observable.h"
#include "solist.h"
#include "solib.h"
#include "solib-svr4.h"
#include "bfd-target.h"
#include "elf-bfd.h"
#include "exec.h"
#include "auxv.h"
#include "gdb_bfd.h"
#include "probe.h"
#include <map>

Go to the source code of this file.

Classes

struct  probe_info
 
struct  svr4_info
 
struct  svr4_library_list
 
struct  probe_and_action
 
struct  solib_svr4_ops
 

Macros

#define NUM_PROBES   ARRAY_SIZE (probe_info)
 

Enumerations

enum  probe_action { PROBES_INTERFACE_FAILED , DO_NOTHING , FULL_RELOAD , UPDATE_OR_RELOAD }
 

Functions

static struct link_map_offsetssvr4_fetch_link_map_offsets (void)
 
static int svr4_have_link_map_offsets (void)
 
static void svr4_relocate_main_executable (void)
 
static void svr4_free_library_list (so_list *solist)
 
static void probes_table_remove_objfile_probes (struct objfile *objfile)
 
static void svr4_iterate_over_objfiles_in_search_order (gdbarch *gdbarch, iterate_over_objfiles_in_search_order_cb_ftype cb, objfile *current_objfile)
 
static int svr4_same_1 (const char *gdb_so_name, const char *inferior_so_name)
 
static int svr4_same (struct so_list *gdb, struct so_list *inferior)
 
static std::unique_ptr< lm_info_svr4lm_info_read (CORE_ADDR lm_addr)
 
static int has_lm_dynamic_from_link_map (void)
 
static CORE_ADDR lm_addr_check (const struct so_list *so, bfd *abfd)
 
static bool svr4_is_default_namespace (const svr4_info *info, CORE_ADDR debug_base)
 
static void free_probes_table (struct svr4_info *info)
 
static void free_solib_lists (svr4_info *info)
 
static struct svr4_infoget_svr4_info (program_space *pspace)
 
static int match_main (const char *)
 
static gdb::optional< gdb::byte_vector > read_program_header (int type, int *p_arch_size, CORE_ADDR *base_addr)
 
static gdb::optional< gdb::byte_vector > find_program_interpreter (void)
 
static int scan_dyntag_auxv (const int desired_dyntag, CORE_ADDR *ptr, CORE_ADDR *ptr_addr)
 
static CORE_ADDR elf_locate_base (void)
 
static CORE_ADDR solib_svr4_r_map (CORE_ADDR debug_base)
 
static CORE_ADDR solib_svr4_r_brk (struct svr4_info *info)
 
static CORE_ADDR solib_svr4_r_ldsomap (struct svr4_info *info)
 
static CORE_ADDR solib_svr4_r_next (CORE_ADDR debug_base)
 
static int svr4_keep_data_in_core (CORE_ADDR vaddr, unsigned long size)
 
static int open_symbol_file_object (int from_tty)
 
static void svr4_free_objfile_observer (struct objfile *objfile)
 
static void svr4_free_so (struct so_list *so)
 
static void svr4_clear_so (struct so_list *so)
 
static struct so_listsvr4_copy_library_list (struct so_list *src)
 
static int svr4_current_sos_via_xfer_libraries (struct svr4_library_list *list, const char *annex)
 
static struct so_listsvr4_default_sos (svr4_info *info)
 
static int svr4_read_so_list (svr4_info *info, CORE_ADDR lm, CORE_ADDR prev_lm, struct so_list ***link_ptr_ptr, int ignore_first)
 
static void svr4_current_sos_direct (struct svr4_info *info)
 
static so_listsvr4_collect_probes_sos (svr4_info *info)
 
static struct so_listsvr4_current_sos_1 (svr4_info *info)
 
static struct so_listsvr4_current_sos (void)
 
CORE_ADDR svr4_fetch_objfile_link_map (struct objfile *objfile)
 
int svr4_in_dynsym_resolve_code (CORE_ADDR pc)
 
static CORE_ADDR exec_entry_point (struct bfd *abfd, struct target_ops *targ)
 
static hashval_t hash_probe_and_action (const void *p)
 
static int equal_probe_and_action (const void *p1, const void *p2)
 
static int probes_table_htab_remove_objfile_probes (void **slot, void *info)
 
static void register_solib_event_probe (svr4_info *info, struct objfile *objfile, probe *prob, CORE_ADDR address, enum probe_action action)
 
static struct probe_and_actionsolib_event_probe_at (struct svr4_info *info, CORE_ADDR address)
 
static enum probe_action solib_event_probe_action (struct probe_and_action *pa)
 
static int solist_update_full (struct svr4_info *info)
 
static int solist_update_incremental (svr4_info *info, CORE_ADDR debug_base, CORE_ADDR lm)
 
static void disable_probes_interface (svr4_info *info)
 
static void svr4_handle_solib_event (void)
 
static bool svr4_update_solib_event_breakpoint (struct breakpoint *b)
 
static void svr4_update_solib_event_breakpoints (void)
 
static void svr4_create_probe_breakpoints (svr4_info *info, struct gdbarch *gdbarch, const std::vector< probe * > *probes, struct objfile *objfile)
 
static bool svr4_find_and_create_probe_breakpoints (svr4_info *info, struct gdbarch *gdbarch, struct obj_section *os, bool with_prefix)
 
static void svr4_create_solib_event_breakpoints (svr4_info *info, struct gdbarch *gdbarch, CORE_ADDR address)
 
static int enable_break (struct svr4_info *info, int from_tty)
 
static gdb::optional< gdb::byte_vector > read_program_headers_from_bfd (bfd *abfd)
 
static int svr4_exec_displacement (CORE_ADDR *displacementp)
 
static void svr4_solib_create_inferior_hook (int from_tty)
 
static void svr4_clear_solib (void)
 
static CORE_ADDR svr4_truncate_ptr (CORE_ADDR addr)
 
static void svr4_relocate_section_addresses (struct so_list *so, struct target_section *sec)
 
static struct solib_svr4_opsget_ops (struct gdbarch *gdbarch)
 
void set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch, struct link_map_offsets *(*flmo)(void))
 
struct link_map_offsetssvr4_ilp32_fetch_link_map_offsets (void)
 
struct link_map_offsetssvr4_lp64_fetch_link_map_offsets (void)
 
static so_listfind_solib_for_objfile (struct objfile *objfile)
 
static CORE_ADDR find_debug_base_for_solib (so_list *solib)
 
void _initialize_svr4_solib ()
 

Variables

static const char *const solib_break_names []
 
static const char *const bkpt_names []
 
static const char *const main_name_list []
 
static const struct probe_info probe_info []
 
static const registry< program_space >::key< svr4_infosolib_svr4_pspace_data
 
static const registry< gdbarch >::key< struct solib_svr4_opssolib_svr4_data
 
const struct target_so_ops svr4_so_ops
 

Macro Definition Documentation

◆ NUM_PROBES

#define NUM_PROBES   ARRAY_SIZE (probe_info)

Enumeration Type Documentation

◆ probe_action

Enumerator
PROBES_INTERFACE_FAILED 
DO_NOTHING 
FULL_RELOAD 
UPDATE_OR_RELOAD 

Definition at line 96 of file solib-svr4.c.

Function Documentation

◆ _initialize_svr4_solib()

void _initialize_svr4_solib ( )

Definition at line 3479 of file solib-svr4.c.

Referenced by initialize_all_files().

◆ disable_probes_interface()

static void disable_probes_interface ( svr4_info * info)
static

Definition at line 1952 of file solib-svr4.c.

References free_probes_table(), and free_solib_lists().

Referenced by svr4_handle_solib_event().

◆ elf_locate_base()

static CORE_ADDR elf_locate_base ( void )
static

◆ enable_break()

static int enable_break ( struct svr4_info * info,
int from_tty )
static

◆ equal_probe_and_action()

static int equal_probe_and_action ( const void * p1,
const void * p2 )
static

Definition at line 1703 of file solib-svr4.c.

References probe_and_action::address.

Referenced by register_solib_event_probe().

◆ exec_entry_point()

static CORE_ADDR exec_entry_point ( struct bfd * abfd,
struct target_ops * targ )
static

◆ find_debug_base_for_solib()

static CORE_ADDR find_debug_base_for_solib ( so_list * solib)
static

◆ find_program_interpreter()

static gdb::optional< gdb::byte_vector > find_program_interpreter ( void )
static

Definition at line 589 of file solib-svr4.c.

References current_program_space, program_space::exec_bfd(), and read_program_header().

Referenced by enable_break().

◆ find_solib_for_objfile()

static so_list * find_solib_for_objfile ( struct objfile * objfile)
static

◆ free_probes_table()

static void free_probes_table ( struct svr4_info * info)
static

Definition at line 404 of file solib-svr4.c.

Referenced by disable_probes_interface(), and svr4_solib_create_inferior_hook().

◆ free_solib_lists()

static void free_solib_lists ( svr4_info * info)
static

◆ get_ops()

static struct solib_svr4_ops * get_ops ( struct gdbarch * gdbarch)
static

◆ get_svr4_info()

static struct svr4_info * get_svr4_info ( program_space * pspace)
static

◆ has_lm_dynamic_from_link_map()

static int has_lm_dynamic_from_link_map ( void )
static

Definition at line 223 of file solib-svr4.c.

References link_map_offsets::l_ld_offset, and svr4_fetch_link_map_offsets().

Referenced by lm_addr_check().

◆ hash_probe_and_action()

static hashval_t hash_probe_and_action ( const void * p)
static

Definition at line 1692 of file solib-svr4.c.

References probe_and_action::address.

Referenced by register_solib_event_probe().

◆ lm_addr_check()

static CORE_ADDR lm_addr_check ( const struct so_list * so,
bfd * abfd )
static

◆ lm_info_read()

static std::unique_ptr< lm_info_svr4 > lm_info_read ( CORE_ADDR lm_addr)
static

◆ match_main()

static int match_main ( const char * soname)
static

Definition at line 1621 of file solib-svr4.c.

References main_name_list.

Referenced by svr4_read_so_list().

◆ open_symbol_file_object()

static int open_symbol_file_object ( int from_tty)
static

◆ probes_table_htab_remove_objfile_probes()

static int probes_table_htab_remove_objfile_probes ( void ** slot,
void * info )
static

◆ probes_table_remove_objfile_probes()

static void probes_table_remove_objfile_probes ( struct objfile * objfile)
static

◆ read_program_header()

static gdb::optional< gdb::byte_vector > read_program_header ( int type,
int * p_arch_size,
CORE_ADDR * base_addr )
static

◆ read_program_headers_from_bfd()

static gdb::optional< gdb::byte_vector > read_program_headers_from_bfd ( bfd * abfd)
static

Definition at line 2627 of file solib-svr4.c.

References SEEK_SET.

Referenced by svr4_exec_displacement().

◆ register_solib_event_probe()

static void register_solib_event_probe ( svr4_info * info,
struct objfile * objfile,
probe * prob,
CORE_ADDR address,
enum probe_action action )
static

◆ scan_dyntag_auxv()

static int scan_dyntag_auxv ( const int desired_dyntag,
CORE_ADDR * ptr,
CORE_ADDR * ptr_addr )
static

◆ set_solib_svr4_fetch_link_map_offsets()

void set_solib_svr4_fetch_link_map_offsets ( struct gdbarch * gdbarch,
struct link_map_offsets *(*)(void) flmo )

Definition at line 3241 of file solib-svr4.c.

References solib_svr4_ops::fetch_link_map_offsets, get_ops(), set_gdbarch_iterate_over_objfiles_in_search_order(), set_gdbarch_so_ops(), svr4_iterate_over_objfiles_in_search_order(), and svr4_so_ops.

Referenced by aarch64_fbsd_init_abi(), aarch64_linux_init_abi(), alpha_linux_init_abi(), alphanbsd_init_abi(), alphaobsd_init_abi(), am33_linux_init_osabi(), amd64_linux_init_abi(), amd64_sol2_init_abi(), amd64_x32_linux_init_abi(), amd64fbsd_init_abi(), amd64nbsd_init_abi(), amd64obsd_init_abi(), arc_linux_init_osabi(), arm_fbsd_init_abi(), arm_linux_init_abi(), arm_netbsd_elf_init_abi(), armobsd_init_abi(), cris_linux_init_abi(), csky_linux_init_abi(), hppa_linux_init_abi(), hppabsd_init_abi(), i386_linux_init_abi(), i386_sol2_init_abi(), i386fbsd_init_abi(), i386gnu_init_abi(), i386nbsdelf_init_abi(), i386nto_init_abi(), i386obsd_init_abi(), ia64_linux_init_abi(), loongarch_linux_init_abi(), m32r_linux_init_abi(), m68k_linux_init_abi(), m68kbsd_init_abi(), microblaze_linux_init_abi(), mips64obsd_init_abi(), mips_fbsd_init_abi(), mips_linux_init_abi(), mipsnbsd_init_abi(), nios2_linux_init_abi(), or1k_linux_init_abi(), ppc_linux_init_abi(), ppcfbsd_init_abi(), ppcnbsd_init_abi(), ppcobsd_init_abi(), riscv_fbsd_init_abi(), riscv_linux_init_abi(), s390_linux_init_abi_31(), s390_linux_init_abi_64(), sh_linux_init_abi(), shnbsd_init_abi(), sparc32_linux_init_abi(), sparc32_sol2_init_abi(), sparc32nbsd_init_abi(), sparc64_linux_init_abi(), sparc64_sol2_init_abi(), sparc64fbsd_init_abi(), sparc64nbsd_init_abi(), sparc64obsd_init_abi(), tilegx_linux_init_abi(), vaxnbsd_elf_init_abi(), xtensa_gdbarch_init(), and xtensa_linux_init_abi().

◆ solib_event_probe_action()

static enum probe_action solib_event_probe_action ( struct probe_and_action * pa)
static

◆ solib_event_probe_at()

static struct probe_and_action * solib_event_probe_at ( struct svr4_info * info,
CORE_ADDR address )
static

◆ solib_svr4_r_brk()

static CORE_ADDR solib_svr4_r_brk ( struct svr4_info * info)
static

◆ solib_svr4_r_ldsomap()

static CORE_ADDR solib_svr4_r_ldsomap ( struct svr4_info * info)
static

◆ solib_svr4_r_map()

static CORE_ADDR solib_svr4_r_map ( CORE_ADDR debug_base)
static

◆ solib_svr4_r_next()

static CORE_ADDR solib_svr4_r_next ( CORE_ADDR debug_base)
static

◆ solist_update_full()

static int solist_update_full ( struct svr4_info * info)
static

Definition at line 1836 of file solib-svr4.c.

References svr4_current_sos_direct().

Referenced by svr4_handle_solib_event().

◆ solist_update_incremental()

static int solist_update_incremental ( svr4_info * info,
CORE_ADDR debug_base,
CORE_ADDR lm )
static

◆ svr4_clear_so()

static void svr4_clear_so ( struct so_list * so)
static

Definition at line 984 of file solib-svr4.c.

References lm_info_svr4::l_addr_p, and so_list::lm_info.

◆ svr4_clear_solib()

static void svr4_clear_solib ( void )
static

Definition at line 3167 of file solib-svr4.c.

References current_program_space, get_svr4_info(), and xfree().

◆ svr4_collect_probes_sos()

static so_list * svr4_collect_probes_sos ( svr4_info * info)
static

Definition at line 1448 of file solib-svr4.c.

References so_list::next, and svr4_copy_library_list().

Referenced by svr4_current_sos_1().

◆ svr4_copy_library_list()

static struct so_list * svr4_copy_library_list ( struct so_list * src)
static

Definition at line 1009 of file solib-svr4.c.

References so_list::lm_info, and so_list::next.

Referenced by svr4_collect_probes_sos().

◆ svr4_create_probe_breakpoints()

static void svr4_create_probe_breakpoints ( svr4_info * info,
struct gdbarch * gdbarch,
const std::vector< probe * > * probes,
struct objfile * objfile )
static

◆ svr4_create_solib_event_breakpoints()

static void svr4_create_solib_event_breakpoints ( svr4_info * info,
struct gdbarch * gdbarch,
CORE_ADDR address )
static

◆ svr4_current_sos()

static struct so_list * svr4_current_sos ( void )
static

◆ svr4_current_sos_1()

static struct so_list * svr4_current_sos_1 ( svr4_info * info)
static

Definition at line 1483 of file solib-svr4.c.

References svr4_collect_probes_sos(), svr4_current_sos_direct(), and svr4_default_sos().

Referenced by svr4_current_sos().

◆ svr4_current_sos_direct()

static void svr4_current_sos_direct ( struct svr4_info * info)
static

◆ svr4_current_sos_via_xfer_libraries()

static int svr4_current_sos_via_xfer_libraries ( struct svr4_library_list * list,
const char * annex )
static

Definition at line 1227 of file solib-svr4.c.

Referenced by solist_update_incremental(), and svr4_current_sos_direct().

◆ svr4_default_sos()

static struct so_list * svr4_default_sos ( svr4_info * info)
static

◆ svr4_exec_displacement()

static int svr4_exec_displacement ( CORE_ADDR * displacementp)
static

◆ svr4_fetch_link_map_offsets()

static struct link_map_offsets * svr4_fetch_link_map_offsets ( void )
static

◆ svr4_fetch_objfile_link_map()

CORE_ADDR svr4_fetch_objfile_link_map ( struct objfile * objfile)

◆ svr4_find_and_create_probe_breakpoints()

static bool svr4_find_and_create_probe_breakpoints ( svr4_info * info,
struct gdbarch * gdbarch,
struct obj_section * os,
bool with_prefix )
static

◆ svr4_free_library_list()

static void svr4_free_library_list ( so_list * solist)
static

Definition at line 995 of file solib-svr4.c.

References free_so(), and so_list::next.

Referenced by free_solib_lists().

◆ svr4_free_objfile_observer()

static void svr4_free_objfile_observer ( struct objfile * objfile)
static

Definition at line 966 of file solib-svr4.c.

References probes_table_remove_objfile_probes().

◆ svr4_free_so()

static void svr4_free_so ( struct so_list * so)
static

Definition at line 974 of file solib-svr4.c.

References so_list::lm_info.

◆ svr4_handle_solib_event()

static void svr4_handle_solib_event ( void )
static

◆ svr4_have_link_map_offsets()

static int svr4_have_link_map_offsets ( void )
static

◆ svr4_ilp32_fetch_link_map_offsets()

struct link_map_offsets * svr4_ilp32_fetch_link_map_offsets ( void )

◆ svr4_in_dynsym_resolve_code()

int svr4_in_dynsym_resolve_code ( CORE_ADDR pc)

◆ svr4_is_default_namespace()

static bool svr4_is_default_namespace ( const svr4_info * info,
CORE_ADDR debug_base )
static

Definition at line 396 of file solib-svr4.c.

Referenced by solist_update_incremental().

◆ svr4_iterate_over_objfiles_in_search_order()

static void svr4_iterate_over_objfiles_in_search_order ( gdbarch * gdbarch,
iterate_over_objfiles_in_search_order_cb_ftype cb,
objfile * current_objfile )
static

◆ svr4_keep_data_in_core()

static int svr4_keep_data_in_core ( CORE_ADDR vaddr,
unsigned long size )
static

◆ svr4_lp64_fetch_link_map_offsets()

struct link_map_offsets * svr4_lp64_fetch_link_map_offsets ( void )

◆ svr4_read_so_list()

static int svr4_read_so_list ( svr4_info * info,
CORE_ADDR lm,
CORE_ADDR prev_lm,
struct so_list *** link_ptr_ptr,
int ignore_first )
static

◆ svr4_relocate_main_executable()

static void svr4_relocate_main_executable ( void )
static

◆ svr4_relocate_section_addresses()

static void svr4_relocate_section_addresses ( struct so_list * so,
struct target_section * sec )
static

◆ svr4_same()

static int svr4_same ( struct so_list * gdb,
struct so_list * inferior )
static

Definition at line 176 of file solib-svr4.c.

References lm_info_svr4::l_addr_inferior, and svr4_same_1().

Referenced by find_debug_base_for_solib().

◆ svr4_same_1()

static int svr4_same_1 ( const char * gdb_so_name,
const char * inferior_so_name )
static

Definition at line 147 of file solib-svr4.c.

Referenced by enable_break(), and svr4_same().

◆ svr4_solib_create_inferior_hook()

static void svr4_solib_create_inferior_hook ( int from_tty)
static

◆ svr4_truncate_ptr()

static CORE_ADDR svr4_truncate_ptr ( CORE_ADDR addr)
static

Definition at line 3193 of file solib-svr4.c.

References gdbarch_ptr_bit(), and target_gdbarch().

Referenced by svr4_relocate_section_addresses().

◆ svr4_update_solib_event_breakpoint()

static bool svr4_update_solib_event_breakpoint ( struct breakpoint * b)
static

◆ svr4_update_solib_event_breakpoints()

static void svr4_update_solib_event_breakpoints ( void )
static

Variable Documentation

◆ bkpt_names

const char* const bkpt_names[]
static
Initial value:
=
{
"_start",
"__start",
"main",
NULL
}

Definition at line 80 of file solib-svr4.c.

Referenced by enable_break().

◆ main_name_list

const char* const main_name_list[]
static
Initial value:
=
{
"main_$main",
NULL
}

Definition at line 88 of file solib-svr4.c.

Referenced by match_main().

◆ probe_info

const struct probe_info probe_info[]
static
Initial value:
=
{
{ "init_start", DO_NOTHING },
{ "init_complete", FULL_RELOAD },
{ "map_start", DO_NOTHING },
{ "map_failed", DO_NOTHING },
{ "reloc_complete", UPDATE_OR_RELOAD },
{ "unmap_start", DO_NOTHING },
{ "unmap_complete", FULL_RELOAD },
}
@ FULL_RELOAD
Definition solib-svr4.c:107
@ UPDATE_OR_RELOAD
Definition solib-svr4.c:112
@ DO_NOTHING
Definition solib-svr4.c:104

Definition at line 130 of file solib-svr4.c.

◆ solib_break_names

const char* const solib_break_names[]
static
Initial value:
=
{
"r_debug_state",
"_r_debug_state",
"_dl_debug_state",
"rtld_db_dlactivity",
"__dl_rtld_db_dlactivity",
"_rtld_debug_state",
NULL
}

Definition at line 68 of file solib-svr4.c.

Referenced by enable_break().

◆ solib_svr4_data

const registry<gdbarch>::key<struct solib_svr4_ops> solib_svr4_data
static

Definition at line 3224 of file solib-svr4.c.

Referenced by get_ops().

◆ solib_svr4_pspace_data

const registry<program_space>::key<svr4_info> solib_svr4_pspace_data
static

Definition at line 391 of file solib-svr4.c.

Referenced by get_svr4_info(), and svr4_update_solib_event_breakpoint().

◆ svr4_so_ops

const struct target_so_ops svr4_so_ops
Initial value:
=
{
nullptr,
}
static struct so_list * svr4_current_sos(void)
static void svr4_handle_solib_event(void)
int svr4_in_dynsym_resolve_code(CORE_ADDR pc)
static void svr4_update_solib_event_breakpoints(void)
static void svr4_relocate_section_addresses(struct so_list *so, struct target_section *sec)
static int svr4_keep_data_in_core(CORE_ADDR vaddr, unsigned long size)
Definition solib-svr4.c:866
static int open_symbol_file_object(int from_tty)
Definition solib-svr4.c:891
static void svr4_free_so(struct so_list *so)
Definition solib-svr4.c:974
static void svr4_solib_create_inferior_hook(int from_tty)
static void svr4_clear_so(struct so_list *so)
Definition solib-svr4.c:984
static void svr4_clear_solib(void)
static int svr4_same(struct so_list *gdb, struct so_list *inferior)
Definition solib-svr4.c:176
gdb_bfd_ref_ptr solib_bfd_open(const char *pathname)
Definition solib.c:440

Definition at line 3459 of file solib-svr4.c.

Referenced by i386nto_init_abi(), mips_linux_init_abi(), ppc_linux_init_abi(), rocm_solib_bfd_open(), rocm_solib_create_inferior_hook(), rocm_solib_current_sos(), rocm_solib_handle_event(), rocm_solib_relocate_section_addresses(), rocm_update_solib_list(), and set_solib_svr4_fetch_link_map_offsets().