96 int ext_ldmbuf_size, int_ldmbuf_size;
101 sizeof ext_ldmbuf_partial))
109 sizeof ext_ldmbuf_partial.
version,
119 sizeof ext_ldmbuf_partial.
nsegs,
131 memcpy (ext_ldmbuf, &ext_ldmbuf_partial,
sizeof ext_ldmbuf_partial);
135 (gdb_byte *) ext_ldmbuf +
sizeof ext_ldmbuf_partial,
136 ext_ldmbuf_size -
sizeof ext_ldmbuf_partial))
152 for (seg = 0; seg <
nsegs; seg++)
156 sizeof (ext_ldmbuf->
segs[seg].
addr),
293 hex_string_custom (addr, 8));
313 struct so_list *sos_head = NULL;
314 struct so_list **sos_next_ptr = &sos_head;
345 hex_string_custom (
lm_addr, 8));
348 sizeof (lm_buf)) != 0)
350 warning (_(
"frv_current_sos: Unable to read link map entry. "
351 "Shared object chain may be incomplete."));
362 if (got_addr != mgot)
375 warning (_(
"frv_current_sos: Unable to fetch load map. "
376 "Shared object chain may be incomplete."));
390 gdb::unique_xmalloc_ptr<char> name_buf
395 if (name_buf ==
nullptr)
396 warning (_(
"Can't read pathname for link map entry."));
399 strncpy (sop->
so_name, name_buf.get (),
406 sos_next_ptr = &sop->
next;
414 sizeof (lm_buf.
l_next), byte_order);
448 for (seg = 0; seg < map->
nsegs; seg++)
451 && addr < map->segs[seg].p_vaddr + map->
segs[seg].
p_memsz)
466 warning (_(
"Unable to find dynamic linker breakpoint function.\n"
467 "GDB will be unable to debug shared library initializers\n"
468 "and track explicitly loaded dynamic code."));
499 asection *interp_sect;
513 unsigned int interp_sect_size;
516 CORE_ADDR addr, interp_loadmap_addr;
522 interp_sect_size = bfd_section_size (interp_sect);
523 buf = (
char *) alloca (interp_sect_size);
525 interp_sect, buf, 0, interp_sect_size);
541 catch (
const gdb_exception &ex)
552 &interp_loadmap_addr, 0);
555 warning (_(
"Unable to determine dynamic linker loadmap address."));
561 hex_string_custom (interp_loadmap_addr, 8));
566 warning (_(
"Unable to load dynamic linker loadmap at address %s."),
567 hex_string_custom (interp_loadmap_addr, 8));
574 interp_sect = bfd_get_section_by_name (tmp_bfd.get (),
".text");
583 interp_sect = bfd_get_section_by_name (tmp_bfd.get (),
".plt");
595 [] (
const asymbol *sym)
597 return strcmp (sym->name,
"_dl_debug_addr") == 0;
602 warning (_(
"Could not find symbol _dl_debug_addr "
603 "in dynamic linker"));
609 hex_string_custom (addr, 8));
614 hex_string_custom (addr, 8));
619 warning (_(
"Unable to fetch contents of _dl_debug_addr "
620 "(at address %s) from dynamic linker"),
621 hex_string_custom (addr, 8));
626 hex_string_custom (addr, 8));
641 warning (_(
"Unable to fetch _dl_debug_addr->r_brk "
642 "(at address %s) from dynamic linker"),
643 hex_string_custom (addr + 8, 8));
652 warning (_(
"Unable to fetch _dl_debug_addr->.r_brk entry point "
653 "(at address %s) from dynamic linker"),
654 hex_string_custom (addr, 8));
685 asection *interp_sect;
686 CORE_ADDR entry_point;
706 if (interp_sect == NULL)
715 hex_string_custom (entry_point, 8));
723 CORE_ADDR exec_addr, interp_addr;
728 &interp_addr, &exec_addr);
730 if (
status < 0 || (exec_addr == 0 && interp_addr == 0))
739 error (_(
"Unable to load the executable's loadmap."));
751 CORE_ADDR orig_addr, addr, offset;
758 addr = osect->
addr ();
762 orig_addr = addr - offset;
764 for (seg = 0; seg < ldm->
nsegs; seg++)
769 new_offsets[osect_idx]
772 if (new_offsets[osect_idx] != offset)
802 warning (_(
"shared library handler failed to enable breakpoint"));
834 for (seg = 0; seg < map->
nsegs; seg++)
875 for (seg = 0; seg < map->
nsegs; seg++)
878 && addr < map->segs[seg].addr + map->
segs[seg].
p_memsz)
890 (CORE_ADDR, CORE_ADDR,
const char *, bfd *,
lm_info_frv *);
919 (entry_point, got_value,
name, objf->
obfd.get (),
931 (entry_point, got_value,
name, so->abfd, li);
943 (CORE_ADDR entry_point, CORE_ADDR got_value,
const char *
name, bfd *abfd,
968 unsigned int number_of_symbols;
971 storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
974 if (storage_needed <= 0)
981 number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd, lm->
dyn_syms);
983 if (number_of_symbols == 0)
993 storage_needed = bfd_get_dynamic_reloc_upper_bound (abfd);
996 if (storage_needed <= 0)
1028 if ((
name == 0 || strcmp (
name, (*rel->sym_ptr_ptr)->name) == 0)
1029 && rel->howto->type == R_FRV_FUNCDESC)
struct gdbarch * target_gdbarch(void)
struct symbol * find_pc_function(CORE_ADDR pc)
struct breakpoint * create_solib_event_breakpoint(struct gdbarch *gdbarch, CORE_ADDR address)
void remove_solib_event_breakpoints(void)
static ULONGEST extract_unsigned_integer(gdb::array_view< const gdb_byte > buf, enum bfd_endian byte_order)
int frv_fdpic_loadmap_addresses(struct gdbarch *gdbarch, CORE_ADDR *interp_addr, CORE_ADDR *exec_addr)
gdb::ref_ptr< struct bfd, gdb_bfd_ref_policy > gdb_bfd_ref_ptr
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
static CORE_ADDR lm_addr(struct so_list *so)
void objfile_relocate(struct objfile *objfile, const section_offsets &new_offsets)
int entry_point_address_query(CORE_ADDR *entry_p)
static int in_plt_section(CORE_ADDR pc)
struct program_space * current_program_space
CORE_ADDR frv_fetch_objfile_link_map(struct objfile *objfile)
static CORE_ADDR lm_base(void)
static CORE_ADDR interp_text_sect_high
static CORE_ADDR displacement_from_map(struct int_elf32_fdpic_loadmap *map, CORE_ADDR addr)
static void frv_free_so(struct so_list *so)
static void frv_clear_solib(void)
static int enable_break2(void)
static lm_info_frv * main_executable_lm_info
CORE_ADDR frv_fdpic_find_global_pointer(CORE_ADDR addr)
static void enable_break_failure_warning(void)
static struct so_list * frv_current_sos(void)
static void frv_relocate_section_addresses(struct so_list *so, struct target_section *sec)
static int enable_break(void)
gdb_byte ext_Elf32_Addr[4]
static int frv_in_dynsym_resolve_code(CORE_ADDR pc)
CORE_ADDR frv_fdpic_find_canonical_descriptor(CORE_ADDR entry_point)
static void frv_solib_create_inferior_hook(int from_tty)
static int open_symbol_file_object(int from_tty)
static struct int_elf32_fdpic_loadmap * fetch_loadmap(CORE_ADDR ldmaddr)
static CORE_ADDR main_lm_addr
static void frv_relocate_main_executable(void)
static int enable_break2_done
static CORE_ADDR lm_base_cache
static CORE_ADDR interp_text_sect_low
const struct target_so_ops frv_so_ops
static CORE_ADDR main_got(void)
static CORE_ADDR interp_plt_sect_high
gdb_byte ext_Elf32_Half[2]
gdb_byte ext_Elf32_Word[4]
static CORE_ADDR interp_plt_sect_low
static CORE_ADDR find_canonical_descriptor_in_load_object(CORE_ADDR, CORE_ADDR, const char *, bfd *, lm_info_frv *)
void solib_add(const char *pattern, int from_tty, int readsyms)
gdb_bfd_ref_ptr solib_bfd_open(const char *pathname)
CORE_ADDR gdb_bfd_lookup_symbol(bfd *abfd, gdb::function_view< bool(const asymbol *)> match_sym)
#define solib_debug_printf(fmt,...)
#define SO_NAME_MAX_PATH_SIZE
CORE_ADDR value_address() const
struct minimal_symbol * minsym
struct ext_elf32_fdpic_loadseg segs[1]
struct ext_elf32_fdpic_loadaddr l_addr
const char * linkage_name() const
struct int_elf32_fdpic_loadseg segs[1]
int_elf32_fdpic_loadmap * map
struct obj_section * sections_start
iterator_range< section_iterator > sections()
::section_offsets section_offsets
struct objfile * symfile_object_file
so_list_range solibs() const
char so_name[SO_NAME_MAX_PATH_SIZE]
char so_original_name[SO_NAME_MAX_PATH_SIZE]
std::vector< CORE_ADDR > section_offsets
int target_read_string(CORE_ADDR addr, int len, int width, unsigned int fetchlimit, gdb::unique_xmalloc_ptr< gdb_byte > *buffer, int *bytes_read)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)