22 #include "elf/external.h" 23 #include "elf/common.h" 68 "__dl_rtld_db_dlactivity",
135 #define NUM_PROBES ARRAY_SIZE (probe_info) 141 svr4_same_1 (
const char *gdb_so_name,
const char *inferior_so_name)
143 if (strcmp (gdb_so_name, inferior_so_name) == 0)
152 if (strcmp (gdb_so_name,
"/usr/lib/ld.so.1") == 0
153 && strcmp (inferior_so_name,
"/lib/ld.so.1") == 0)
158 if (strcmp (gdb_so_name,
"/usr/lib/sparcv9/ld.so.1") == 0
159 && strcmp (inferior_so_name,
"/lib/sparcv9/ld.so.1") == 0)
184 warning (
_(
"Error reading shared library list entry at %s"),
226 struct bfd_section *dyninfo_sect;
234 l_dynaddr = li->
l_ld;
236 dyninfo_sect = bfd_get_section_by_name (abfd,
".dynamic");
237 if (dyninfo_sect == NULL)
240 dynaddr = bfd_section_vma (abfd, dyninfo_sect);
242 if (dynaddr + l_addr != l_dynaddr)
247 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
249 Elf_Internal_Ehdr *ehdr = elf_tdata (abfd)->elf_header;
250 Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr;
255 for (i = 0; i < ehdr->e_phnum; i++)
256 if (phdr[i].p_type == PT_LOAD && phdr[i].p_align > align)
257 align = phdr[i].p_align;
259 minpagesize = get_elf_backend_data (abfd)->minpagesize;
288 l_addr = l_dynaddr - dynaddr;
290 if ((l_addr & (minpagesize - 1)) == 0
291 && (l_addr & align) == ((l_dynaddr - dynaddr) & align))
295 "prelink displacement %s for \"%s\".\n"),
310 warning (
_(
".dynamic section for \"%s\" " 311 "is not at the expected address " 312 "(wrong library or version mismatch?)"), so->
so_name);
436 CORE_ADDR at_phdr, at_phent, at_phnum, pt_phdr = 0;
437 int arch_size, sect_size;
449 if (!at_phdr || !at_phnum)
453 if (at_phent ==
sizeof (Elf32_External_Phdr))
455 else if (at_phent ==
sizeof (Elf64_External_Phdr))
464 sect_size = at_phent * at_phnum;
466 else if (arch_size == 32)
468 Elf32_External_Phdr phdr;
472 for (i = 0; i < at_phnum; i++)
483 if (p_type == PT_PHDR)
505 Elf64_External_Phdr phdr;
509 for (i = 0; i < at_phnum; i++)
520 if (p_type == PT_PHDR)
548 sect_addr = sect_addr + (at_phdr - pt_phdr);
560 *p_arch_size = arch_size;
562 *p_sect_size = sect_size;
564 *base_addr = sect_addr;
578 && bfd_get_flavour (
exec_bfd) == bfd_target_elf_flavour)
580 struct bfd_section *interp_sect;
582 interp_sect = bfd_get_section_by_name (
exec_bfd,
".interp");
583 if (interp_sect != NULL)
585 int sect_size = bfd_section_size (
exec_bfd, interp_sect);
588 bfd_get_section_contents (
exec_bfd, interp_sect, buf, 0, sect_size);
607 int arch_size, step, sect_size;
611 Elf32_External_Dyn *x_dynp_32;
612 Elf64_External_Dyn *x_dynp_64;
613 struct bfd_section *sect;
619 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
622 arch_size = bfd_get_arch_size (abfd);
627 sect = bfd_get_section_by_name (abfd,
".dynamic");
645 dyn_addr = bfd_section_vma (abfd, sect);
650 sect_size = bfd_section_size (abfd, sect);
651 buf = bufstart = (
gdb_byte *) alloca (sect_size);
652 if (!bfd_get_section_contents (abfd, sect,
657 step = (arch_size == 32) ?
sizeof (Elf32_External_Dyn)
658 :
sizeof (Elf64_External_Dyn);
659 for (bufend = buf + sect_size;
665 x_dynp_32 = (Elf32_External_Dyn *) buf;
666 current_dyntag = bfd_h_get_32 (abfd, (bfd_byte *) x_dynp_32->d_tag);
667 dyn_ptr = bfd_h_get_32 (abfd, (bfd_byte *) x_dynp_32->d_un.d_ptr);
671 x_dynp_64 = (Elf64_External_Dyn *) buf;
672 current_dyntag = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_tag);
673 dyn_ptr = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_un.d_ptr);
675 if (current_dyntag == DT_NULL)
677 if (current_dyntag == desired_dyntag)
683 struct type *ptr_type;
688 ptr_addr_1 = dyn_addr + (buf - bufstart) + arch_size / 8;
693 *ptr_addr = dyn_addr + (buf - bufstart);
711 int sect_size, arch_size, step;
724 step = (arch_size == 32) ?
sizeof (Elf32_External_Dyn)
725 :
sizeof (Elf64_External_Dyn);
726 for (bufend = buf + sect_size;
732 Elf32_External_Dyn *dynp = (Elf32_External_Dyn *) buf;
741 Elf64_External_Dyn *dynp = (Elf64_External_Dyn *) buf;
748 if (current_dyntag == DT_NULL)
751 if (current_dyntag == desired_dyntag)
757 *ptr_addr = base_addr + buf - bufstart;
796 pbuf = (
gdb_byte *) alloca (pbuf_size);
814 pbuf = (
gdb_byte *) alloca (pbuf_size);
830 if (msymbol.
minsym != NULL)
942 if (version < 2 || lmo->r_ldsomap_offset == -1)
981 name_lm = li != NULL ? li->
l_name : 0;
984 return (name_lm >= vaddr && name_lm < vaddr +
size);
1001 symfile_add_flags add_flags = 0;
1007 if (!
query (
_(
"Attempt to reload symbols from process? ")))
1047 warning (
_(
"failed to read exec filename from attached file: %s"),
1100 while (list != NULL)
1122 memcpy (newobj, src,
sizeof (
struct so_list));
1127 newobj->
next = NULL;
1129 link = &newobj->
next;
1137 #ifdef HAVE_LIBEXPAT 1171 *list->
tailp = new_elem;
1187 if (strcmp (
version,
"1.0") != 0)
1189 _(
"SVR4 Library list has unsupported version \"%s\""),
1244 memset (list, 0,
sizeof (*list));
1278 if (svr4_library_document == NULL)
1332 struct so_list ***link_ptr_ptr,
int ignore_first)
1337 for (; lm != 0; prev_lm = lm, lm = next_lm)
1345 newobj->lm_info = li;
1351 if (li->
l_prev != prev_lm)
1353 warning (
_(
"Corrupted shared library list: %s != %s"),
1364 if (ignore_first && li->
l_prev == 0)
1368 first_l_name = li->
l_name;
1382 if (first_l_name == 0 || li->
l_name != first_l_name)
1383 warning (
_(
"Can't read pathname for load map: %s."),
1390 strcpy (newobj->so_original_name, newobj->so_name);
1395 if (! newobj->so_name[0] ||
match_main (newobj->so_name))
1400 **link_ptr_ptr = newobj.release ();
1401 *link_ptr_ptr = &(**link_ptr_ptr)->
next;
1417 struct so_list **link_ptr = &head;
1509 && vsyscall_range.
length != 0)
1514 while (*sop != NULL)
1613 const char *
const *mainp;
1617 if (strcmp (soname, *mainp) == 0)
1657 bfd_get_start_address (abfd),
1683 return (hashval_t) pa->
address;
1717 slot = htab_find_slot (info->
probes_table, &lookup, INSERT);
1739 slot = htab_find_slot (info->
probes_table, &lookup, NO_INSERT);
1754 unsigned probe_argc = 0;
1785 if (probe_argc == 2)
1787 else if (probe_argc < 2)
1842 xsnprintf (annex,
sizeof (annex),
"start=%s;prev=%s",
1844 phex_nz (prev_lm,
sizeof (prev_lm)));
1874 warning (
_(
"Probes-based dynamic linker interface failed.\n" 1875 "Reverting to original interface.\n"));
1891 struct cleanup *old_chain, *usm_chain;
1892 struct value *val = NULL;
1957 if (debug_base == 0)
2078 const std::vector<probe *> *probes,
2085 for (
probe *p : probes[i])
2120 for (with_prefix = 0; with_prefix <= 1; with_prefix++)
2123 int all_probes_found = 1;
2124 int checked_can_use_probe_arguments = 0;
2150 if (strcmp (
name,
"rtld_map_failed") == 0)
2153 if (probes[i].empty ())
2155 all_probes_found = 0;
2160 if (!checked_can_use_probe_arguments)
2165 all_probes_found = 0;
2168 checked_can_use_probe_arguments = 1;
2172 if (all_probes_found)
2175 if (all_probes_found)
2188 return (strcmp (sym->name, (
const char *) data) == 0
2189 && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0);
2227 const char *
const *bkpt_namep;
2228 asection *interp_sect;
2285 interp_sect = bfd_get_section_by_name (tmp_bfd,
".text");
2289 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
2292 + bfd_section_size (tmp_bfd, interp_sect);
2294 interp_sect = bfd_get_section_by_name (tmp_bfd,
".plt");
2298 bfd_section_vma (tmp_bfd, interp_sect) + load_addr;
2301 + bfd_section_size (tmp_bfd, interp_sect);
2315 int load_addr_found = 0;
2316 int loader_found_in_list = 0;
2341 if (tmp_bfd == NULL)
2342 goto bkpt_at_symbol;
2356 load_addr_found = 1;
2357 loader_found_in_list = 1;
2366 if (!load_addr_found)
2387 if (tmp_entry_point < space_size
2388 && tmp_entry_point + load_addr >= space_size)
2389 load_addr -= space_size;
2392 load_addr_found = 1;
2402 if (!load_addr_found)
2411 if (!loader_found_in_list)
2421 interp_sect = bfd_get_section_by_name (tmp_bfd.
get (),
".text");
2425 bfd_section_vma (tmp_bfd.
get (), interp_sect) + load_addr;
2428 + bfd_section_size (tmp_bfd.
get (), interp_sect);
2430 interp_sect = bfd_get_section_by_name (tmp_bfd.
get (),
".plt");
2434 bfd_section_vma (tmp_bfd.
get (), interp_sect) + load_addr;
2437 + bfd_section_size (tmp_bfd.
get (), interp_sect);
2466 load_addr + sym_addr);
2475 warning (
_(
"Unable to find dynamic linker breakpoint function.\n" 2476 "GDB will be unable to debug shared library initializers\n" 2477 "and track explicitly loaded dynamic code."));
2486 if ((msymbol.
minsym != NULL)
2500 for (bkpt_namep =
bkpt_names; *bkpt_namep != NULL; bkpt_namep++)
2503 if ((msymbol.
minsym != NULL)
2524 Elf_Internal_Ehdr *ehdr;
2527 ehdr = elf_elfheader (abfd);
2529 *phdrs_size = ehdr->e_phnum * ehdr->e_phentsize;
2530 if (*phdrs_size == 0)
2534 if (bfd_seek (abfd, ehdr->e_phoff,
SEEK_SET) != 0
2535 || bfd_bread (buf, *phdrs_size, abfd) != *phdrs_size)
2592 CORE_ADDR entry_point, exec_displacement;
2601 if ((bfd_get_file_flags (
exec_bfd) & DYNAMIC) == 0)
2607 exec_displacement = entry_point - bfd_get_start_address (
exec_bfd);
2612 if (bfd_get_flavour (
exec_bfd) == bfd_target_elf_flavour)
2614 const struct elf_backend_data *elf = get_elf_backend_data (
exec_bfd);
2621 if ((exec_displacement & (elf->minpagesize - 1)) != 0)
2631 if (bfd_get_flavour (
exec_bfd) == bfd_target_elf_flavour)
2635 int phdrs_size, phdrs2_size, ok = 1;
2641 if (buf != NULL && buf2 != NULL)
2658 if (phdrs_size != phdrs2_size
2659 || bfd_get_arch_size (
exec_bfd) != arch_size)
2661 else if (arch_size == 32
2662 && phdrs_size >=
sizeof (Elf32_External_Phdr)
2663 && phdrs_size %
sizeof (Elf32_External_Phdr) == 0)
2665 Elf_Internal_Ehdr *ehdr2 = elf_tdata (
exec_bfd)->elf_header;
2666 Elf_Internal_Phdr *phdr2 = elf_tdata (
exec_bfd)->phdr;
2675 for (i = 0; i < ehdr2->e_phnum; i++)
2676 if (phdr2[i].p_type == PT_LOAD)
2678 Elf32_External_Phdr *phdrp;
2679 gdb_byte *buf_vaddr_p, *buf_paddr_p;
2684 phdrp = &((Elf32_External_Phdr *) buf)[i];
2685 buf_vaddr_p = (
gdb_byte *) &phdrp->p_vaddr;
2686 buf_paddr_p = (
gdb_byte *) &phdrp->p_paddr;
2690 displacement_vaddr = vaddr - phdr2[i].p_vaddr;
2694 displacement_paddr = paddr - phdr2[i].p_paddr;
2696 if (displacement_vaddr == displacement_paddr)
2697 displacement = displacement_vaddr;
2704 for (i = 0; i < phdrs_size /
sizeof (Elf32_External_Phdr); i++)
2706 Elf32_External_Phdr *phdrp;
2707 Elf32_External_Phdr *phdr2p;
2708 gdb_byte *buf_vaddr_p, *buf_paddr_p;
2710 asection *plt2_asect;
2712 phdrp = &((Elf32_External_Phdr *) buf)[i];
2713 buf_vaddr_p = (
gdb_byte *) &phdrp->p_vaddr;
2714 buf_paddr_p = (
gdb_byte *) &phdrp->p_paddr;
2715 phdr2p = &((Elf32_External_Phdr *) buf2)[i];
2720 if (memcmp (phdrp, phdr2p,
sizeof (*phdrp)) == 0)
2727 vaddr -= displacement;
2732 paddr -= displacement;
2735 if (memcmp (phdrp, phdr2p,
sizeof (*phdrp)) == 0)
2741 if (phdr2[i].p_type == PT_GNU_RELRO)
2743 Elf32_External_Phdr tmp_phdr = *phdrp;
2744 Elf32_External_Phdr tmp_phdr2 = *phdr2p;
2746 memset (tmp_phdr.p_filesz, 0, 4);
2747 memset (tmp_phdr.p_memsz, 0, 4);
2748 memset (tmp_phdr.p_flags, 0, 4);
2749 memset (tmp_phdr.p_align, 0, 4);
2750 memset (tmp_phdr2.p_filesz, 0, 4);
2751 memset (tmp_phdr2.p_memsz, 0, 4);
2752 memset (tmp_phdr2.p_flags, 0, 4);
2753 memset (tmp_phdr2.p_align, 0, 4);
2755 if (memcmp (&tmp_phdr, &tmp_phdr2,
sizeof (tmp_phdr))
2761 plt2_asect = bfd_get_section_by_name (
exec_bfd,
".plt");
2768 content2 = (bfd_get_section_flags (
exec_bfd, plt2_asect)
2769 & SEC_HAS_CONTENTS) != 0;
2777 filesz += bfd_get_section_size (plt2_asect);
2779 filesz -= bfd_get_section_size (plt2_asect);
2784 if (memcmp (phdrp, phdr2p,
sizeof (*phdrp)) == 0)
2792 else if (arch_size == 64
2793 && phdrs_size >=
sizeof (Elf64_External_Phdr)
2794 && phdrs_size %
sizeof (Elf64_External_Phdr) == 0)
2796 Elf_Internal_Ehdr *ehdr2 = elf_tdata (
exec_bfd)->elf_header;
2797 Elf_Internal_Phdr *phdr2 = elf_tdata (
exec_bfd)->phdr;
2806 for (i = 0; i < ehdr2->e_phnum; i++)
2807 if (phdr2[i].p_type == PT_LOAD)
2809 Elf64_External_Phdr *phdrp;
2810 gdb_byte *buf_vaddr_p, *buf_paddr_p;
2815 phdrp = &((Elf64_External_Phdr *) buf)[i];
2816 buf_vaddr_p = (
gdb_byte *) &phdrp->p_vaddr;
2817 buf_paddr_p = (
gdb_byte *) &phdrp->p_paddr;
2821 displacement_vaddr = vaddr - phdr2[i].p_vaddr;
2825 displacement_paddr = paddr - phdr2[i].p_paddr;
2827 if (displacement_vaddr == displacement_paddr)
2828 displacement = displacement_vaddr;
2835 for (i = 0; i < phdrs_size /
sizeof (Elf64_External_Phdr); i++)
2837 Elf64_External_Phdr *phdrp;
2838 Elf64_External_Phdr *phdr2p;
2839 gdb_byte *buf_vaddr_p, *buf_paddr_p;
2841 asection *plt2_asect;
2843 phdrp = &((Elf64_External_Phdr *) buf)[i];
2844 buf_vaddr_p = (
gdb_byte *) &phdrp->p_vaddr;
2845 buf_paddr_p = (
gdb_byte *) &phdrp->p_paddr;
2846 phdr2p = &((Elf64_External_Phdr *) buf2)[i];
2851 if (memcmp (phdrp, phdr2p,
sizeof (*phdrp)) == 0)
2858 vaddr -= displacement;
2863 paddr -= displacement;
2866 if (memcmp (phdrp, phdr2p,
sizeof (*phdrp)) == 0)
2872 if (phdr2[i].p_type == PT_GNU_RELRO)
2874 Elf64_External_Phdr tmp_phdr = *phdrp;
2875 Elf64_External_Phdr tmp_phdr2 = *phdr2p;
2877 memset (tmp_phdr.p_filesz, 0, 8);
2878 memset (tmp_phdr.p_memsz, 0, 8);
2879 memset (tmp_phdr.p_flags, 0, 4);
2880 memset (tmp_phdr.p_align, 0, 8);
2881 memset (tmp_phdr2.p_filesz, 0, 8);
2882 memset (tmp_phdr2.p_memsz, 0, 8);
2883 memset (tmp_phdr2.p_flags, 0, 4);
2884 memset (tmp_phdr2.p_align, 0, 8);
2886 if (memcmp (&tmp_phdr, &tmp_phdr2,
sizeof (tmp_phdr))
2892 plt2_asect = bfd_get_section_by_name (
exec_bfd,
".plt");
2899 content2 = (bfd_get_section_flags (
exec_bfd, plt2_asect)
2900 & SEC_HAS_CONTENTS) != 0;
2908 filesz += bfd_get_section_size (plt2_asect);
2910 filesz -= bfd_get_section_size (plt2_asect);
2915 if (memcmp (phdrp, phdr2p,
sizeof (*phdrp)) == 0)
2941 "displacement %s for \"%s\".\n"),
2946 *displacementp = exec_displacement;
3001 new_offsets->
offsets[i] = displacement;
3009 for (asect =
exec_bfd->sections; asect != NULL; asect = asect->next)
3265 if (abfd == NULL ||
scan_dyntag (DT_SYMBOLIC, abfd, NULL, NULL) != 1)
struct gdbarch * target_gdbarch(void)
static void svr4_update_solib_event_breakpoints(void)
static const char *const bkpt_names[]
static int enable_break(struct svr4_info *info, int from_tty)
static int svr4_keep_data_in_core(CORE_ADDR vaddr, unsigned long size)
static void svr4_free_library_list(void *p_list)
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
static struct block_symbol elf_lookup_lib_symbol(struct objfile *objfile, const char *name, const domain_enum domain)
static struct so_list * svr4_current_sos_1(void)
#define SECT_OFF_TEXT(objfile)
static int open_symbol_file_object(int from_tty)
static void svr4_solib_create_inferior_hook(int from_tty)
virtual struct value * evaluate_argument(unsigned n, struct frame_info *frame)=0
struct frame_info * get_current_frame(void)
static int has_lm_dynamic_from_link_map(void)
struct link_map_offsets * svr4_lp64_fetch_link_map_offsets(void)
static struct so_list * svr4_current_sos_direct(struct svr4_info *info)
struct objfile * separate_debug_objfile_backlink
struct breakpoint * create_solib_event_breakpoint(struct gdbarch *gdbarch, CORE_ADDR address)
static void svr4_pspace_data_cleanup(struct program_space *pspace, void *arg)
void set_solib_ops(struct gdbarch *gdbarch, const struct target_so_ops *new_ops)
#define BMSYMBOL_VALUE_ADDRESS(symbol)
static void svr4_clear_solib(void)
void warning(const char *fmt,...)
static void svr4_clear_so(struct so_list *so)
int query(const char *ctlstr,...)
int svr4_in_dynsym_resolve_code(CORE_ADDR pc)
static void svr4_create_probe_breakpoints(struct gdbarch *gdbarch, const std::vector< probe *> *probes, struct objfile *objfile)
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
void(* update_breakpoints)(void)
CORE_ADDR interp_plt_sect_low
static const struct program_space_data * solib_svr4_pspace_data
enum domain_enum_tag domain_enum
static CORE_ADDR solib_svr4_r_brk(struct svr4_info *info)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
void(* relocate_section_addresses)(struct so_list *so, struct target_section *)
void * memset(T *s, int c, size_t n)=delete
void(* solib_create_inferior_hook)(int from_tty)
struct so_list *(* current_sos)(void)
void objfile_relocate(struct objfile *objfile, const struct section_offsets *new_offsets)
static const struct gdb_xml_attribute svr4_library_list_attributes[]
static CORE_ADDR exec_entry_point(struct bfd *abfd, struct target_ops *targ)
static int svr4_update_solib_event_breakpoint(struct breakpoint *b, void *arg)
static CORE_ADDR locate_base(struct svr4_info *info)
static CORE_ADDR solib_svr4_r_ldsomap(struct svr4_info *info)
static enum probe_action solib_event_probe_action(struct probe_and_action *pa)
static void svr4_create_solib_event_breakpoints(struct gdbarch *gdbarch, CORE_ADDR address)
struct link_map_offsets * svr4_ilp32_fetch_link_map_offsets(void)
static int svr4_read_so_list(CORE_ADDR lm, CORE_ADDR prev_lm, struct so_list ***link_ptr_ptr, int ignore_first)
void symbol_file_add_main(const char *args, symfile_add_flags add_flags)
struct gdbarch_data * gdbarch_data_register_pre_init(gdbarch_data_pre_init_ftype *pre_init)
#define SO_NAME_MAX_PATH_SIZE
static CORE_ADDR lm_addr(struct so_list *so)
static CORE_ADDR elf_locate_base(void)
void inhibit_section_map_updates(struct program_space *pspace)
static int svr4_same(struct so_list *gdb, struct so_list *inferior)
static CORE_ADDR solib_svr4_r_map(struct svr4_info *info)
int(* keep_data_in_core)(CORE_ADDR vaddr, unsigned long size)
int gdbarch_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
void enable_breakpoint(struct breakpoint *bpt)
struct regcache * get_current_regcache(void)
gdb::unique_xmalloc_ptr< char > target_read_stralloc(struct target_ops *ops, enum target_object object, const char *annex)
struct so_list * solib_list
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
gdb_bfd_ref_ptr(* bfd_open)(char *pathname)
static CORE_ADDR svr4_truncate_ptr(CORE_ADDR addr)
CORE_ADDR svr4_fetch_objfile_link_map(struct objfile *objfile)
static void svr4_relocate_section_addresses(struct so_list *so, struct target_section *sec)
static int solist_update_incremental(struct svr4_info *info, CORE_ADDR lm)
void(* clear_solib)(void)
static int equal_probe_and_action(const void *p1, const void *p2)
struct so_list * master_so_list(void)
static const char *const main_name_list[]
int(* in_dynsym_resolve_code)(CORE_ADDR pc)
#define CATCH(EXCEPTION, MASK)
static int cmp_name_and_sec_flags(const asymbol *sym, const void *data)
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
int gdb_xml_parse_quick(const char *name, const char *dtd_name, const struct gdb_xml_element *elements, const char *document, void *user_data)
struct target_ops current_target
struct gdb_xml_value * xml_find_attribute(VEC(gdb_xml_value_s) *attributes, const char *name)
CORE_ADDR gdbarch_addr_bits_remove(struct gdbarch *gdbarch, CORE_ADDR addr)
void solib_add(const char *pattern, int from_tty, int readsyms)
struct breakpoint * iterate_over_breakpoints(int(*callback)(struct breakpoint *, void *), void *data)
static int svr4_same_1(const char *gdb_so_name, const char *inferior_so_name)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
struct target_ops * target_bfd_reopen(struct bfd *abfd)
static void svr4_relocate_main_executable(void)
#define current_target_sections
struct block_symbol(* lookup_lib_global_symbol)(struct objfile *objfile, const char *name, const domain_enum domain)
static int solist_update_full(struct svr4_info *info)
CORE_ADDR gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
int target_auxv_search(struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
void exception_print(struct ui_file *file, struct gdb_exception e)
static void disable_probes_interface_cleanup(void *arg)
char so_original_name[SO_NAME_MAX_PATH_SIZE]
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void free_so(struct so_list *so)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
#define ANOFFSET(secoff, whichone)
static void free_solib_list(struct svr4_info *info)
static gdb_byte * read_program_header(int type, int *p_sect_size, int *p_arch_size, CORE_ADDR *base_addr)
void(* handle_event)(void)
void set_solib_svr4_fetch_link_map_offsets(struct gdbarch *gdbarch, struct link_map_offsets *(*flmo)(void))
int debug_loader_offset_p
void disable_breakpoint(struct breakpoint *bpt)
char so_name[SO_NAME_MAX_PATH_SIZE]
void(* clear_so)(struct so_list *so)
static void svr4_free_so(struct so_list *so)
static int svr4_current_sos_via_xfer_libraries(struct svr4_library_list *list, const char *annex)
int(* same)(struct so_list *gdb, struct so_list *inferior)
static void svr4_library_list_start_list(struct gdb_xml_parser *parser, const struct gdb_xml_element *element, void *user_data, VEC(gdb_xml_value_s) *attributes)
static void svr4_handle_solib_event(void)
void target_close(struct target_ops *targ)
int gdbarch_addr_bit(struct gdbarch *gdbarch)
#define target_has_execution
void printf_unfiltered(const char *format,...)
#define target_augmented_libraries_svr4_read()
static char * find_program_interpreter(void)
CORE_ADDR gdb_bfd_lookup_symbol(bfd *abfd, int(*match_sym)(const asymbol *, const void *), const void *data)
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static void free_probes_table(struct svr4_info *info)
struct obj_section * find_pc_section(CORE_ADDR pc)
struct bfd_section * the_bfd_section
static void * solib_svr4_init(struct obstack *obstack)
static struct probe_and_action * solib_event_probe_at(struct svr4_info *info, CORE_ADDR address)
virtual unsigned get_argument_count(struct frame_info *frame)=0
CORE_ADDR debug_loader_offset
static int scan_dyntag_auxv(const int desired_dyntag, CORE_ADDR *ptr, CORE_ADDR *ptr_addr)
void gdb_xml_error(struct gdb_xml_parser *parser, const char *format,...)
const char * interp_name(struct interp *interp)
void exec_set_section_address(const char *filename, int index, CORE_ADDR address)
static struct so_list * svr4_default_sos(void)
int(* open_symbol_file_object)(int from_ttyp)
struct target_so_ops svr4_so_ops
void discard_cleanups(struct cleanup *old_chain)
static void register_solib_event_probe(probe *prob, CORE_ADDR address, enum probe_action action)
char * phex_nz(ULONGEST l, int sizeof_l)
struct block_symbol lookup_global_symbol_from_objfile(struct objfile *main_objfile, const char *name, const domain_enum domain)
static struct link_map_offsets * svr4_fetch_link_map_offsets(void)
static CORE_ADDR interp_plt_sect_high
int xsnprintf(char *str, size_t size, const char *format,...)
CORE_ADDR interp_text_sect_high
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
CORE_ADDR regcache_read_pc(struct regcache *regcache)
struct type * builtin_data_ptr
static int in_plt_section(CORE_ADDR pc)
struct minimal_symbol * minsym
static hashval_t hash_probe_and_action(const void *p)
void(* free_so)(struct so_list *so)
char * safe_strerror(int)
static int scan_dyntag(const int desired_dyntag, bfd *abfd, CORE_ADDR *ptr, CORE_ADDR *ptr_addr)
static struct so_list * svr4_current_sos(void)
static struct svr4_info * get_svr4_info(void)
static const char *const solib_break_names[]
int address_in_mem_range(CORE_ADDR address, const struct mem_range *r)
std::unique_ptr< so_list, so_deleter > so_list_up
CORE_ADDR interp_plt_sect_high
struct inferior * current_inferior(void)
int in_gnu_ifunc_stub(CORE_ADDR pc)
gdb_xml_attribute_handler gdb_xml_parse_attr_ulongest
struct program_space * current_program_space
static gdb_byte * read_program_headers_from_bfd(bfd *abfd, int *phdrs_size)
unsigned long long ULONGEST
static CORE_ADDR lm_addr_check(const struct so_list *so, bfd *abfd)
static const struct gdb_xml_element svr4_library_list_children[]
std::vector< probe * > find_probes_in_objfile(struct objfile *objfile, const char *provider, const char *name)
struct link_map_offsets *(* fetch_link_map_offsets)(void)
CORE_ADDR value_as_address(struct value *val)
CORE_ADDR l_addr_inferior
#define OBSTACK_ZALLOC(OBSTACK, TYPE)
#define TYPE_LENGTH(thistype)
gdb_bfd_ref_ptr solib_bfd_open(char *pathname)
static int svr4_have_link_map_offsets(void)
virtual bool can_evaluate_arguments() const =0
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
struct section_offsets * section_offsets
static CORE_ADDR interp_text_sect_high
CORE_ADDR read_memory_typed_address(CORE_ADDR addr, struct type *type)
static const struct gdb_xml_attribute svr4_library_attributes[]
enum enable_state enable_state
static struct so_list * svr4_copy_library_list(struct so_list *src)
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
void _initialize_svr4_solib(void)
PTR xcalloc(size_t number, size_t size)
int target_read_string(CORE_ADDR memaddr, char **string, int len, int *errnop)
void resume_section_map_updates_cleanup(void *arg)
static struct gdbarch_data * solib_svr4_data
static int svr4_parse_libraries(const char *document, struct svr4_library_list *list)
static lm_info_svr4 * lm_info_read(CORE_ADDR lm_addr)
void do_cleanups(struct cleanup *old_chain)
struct regcache * get_thread_arch_regcache(ptid_t ptid, struct gdbarch *gdbarch)
static int match_main(const char *)
static int svr4_exec_displacement(CORE_ADDR *displacementp)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
CORE_ADDR interp_text_sect_low
static const struct gdb_xml_element svr4_library_list_elements[]
static void library_list_start_library(struct gdb_xml_parser *parser, const struct gdb_xml_element *element, void *user_data, VEC(gdb_xml_value_s) *attributes)