100 int ext_ldmbuf_size, int_ldmbuf_size;
105 sizeof ext_ldmbuf_partial))
113 sizeof ext_ldmbuf_partial.
version,
123 sizeof ext_ldmbuf_partial.
nsegs,
135 memcpy (ext_ldmbuf, &ext_ldmbuf_partial,
sizeof ext_ldmbuf_partial);
139 (gdb_byte *) ext_ldmbuf +
sizeof ext_ldmbuf_partial,
140 ext_ldmbuf_size -
sizeof ext_ldmbuf_partial))
156 for (seg = 0; seg <
nsegs; seg++)
160 sizeof (ext_ldmbuf->
segs[seg].
addr),
297 hex_string_custom (addr, 8));
317 struct so_list *sos_head = NULL;
318 struct so_list **sos_next_ptr = &sos_head;
349 hex_string_custom (
lm_addr, 8));
352 sizeof (lm_buf)) != 0)
354 warning (_(
"frv_current_sos: Unable to read link map entry. "
355 "Shared object chain may be incomplete."));
366 if (got_addr != mgot)
379 warning (_(
"frv_current_sos: Unable to fetch load map. "
380 "Shared object chain may be incomplete."));
394 gdb::unique_xmalloc_ptr<char> name_buf
399 if (name_buf ==
nullptr)
400 warning (_(
"Can't read pathname for link map entry."));
403 strncpy (sop->
so_name, name_buf.get (),
410 sos_next_ptr = &sop->
next;
418 sizeof (lm_buf.
l_next), byte_order);
452 for (seg = 0; seg < map->
nsegs; seg++)
455 && addr < map->segs[seg].p_vaddr + map->
segs[seg].
p_memsz)
470 warning (_(
"Unable to find dynamic linker breakpoint function.\n"
471 "GDB will be unable to debug shared library initializers\n"
472 "and track explicitly loaded dynamic code."));
480 return (strcmp (sym->name, (
const char *) data) == 0);
511 asection *interp_sect;
525 unsigned int interp_sect_size;
528 CORE_ADDR addr, interp_loadmap_addr;
534 interp_sect_size = bfd_section_size (interp_sect);
535 buf = (
char *) alloca (interp_sect_size);
537 interp_sect, buf, 0, interp_sect_size);
553 catch (
const gdb_exception &ex)
564 &interp_loadmap_addr, 0);
567 warning (_(
"Unable to determine dynamic linker loadmap address."));
573 hex_string_custom (interp_loadmap_addr, 8));
578 warning (_(
"Unable to load dynamic linker loadmap at address %s."),
579 hex_string_custom (interp_loadmap_addr, 8));
586 interp_sect = bfd_get_section_by_name (tmp_bfd.get (),
".text");
595 interp_sect = bfd_get_section_by_name (tmp_bfd.get (),
".plt");
609 warning (_(
"Could not find symbol _dl_debug_addr "
610 "in dynamic linker"));
616 hex_string_custom (addr, 8));
621 hex_string_custom (addr, 8));
626 warning (_(
"Unable to fetch contents of _dl_debug_addr "
627 "(at address %s) from dynamic linker"),
628 hex_string_custom (addr, 8));
633 hex_string_custom (addr, 8));
648 warning (_(
"Unable to fetch _dl_debug_addr->r_brk "
649 "(at address %s) from dynamic linker"),
650 hex_string_custom (addr + 8, 8));
659 warning (_(
"Unable to fetch _dl_debug_addr->.r_brk entry point "
660 "(at address %s) from dynamic linker"),
661 hex_string_custom (addr, 8));
692 asection *interp_sect;
693 CORE_ADDR entry_point;
713 if (interp_sect == NULL)
722 hex_string_custom (entry_point, 8));
730 CORE_ADDR exec_addr, interp_addr;
736 &interp_addr, &exec_addr);
738 if (
status < 0 || (exec_addr == 0 && interp_addr == 0))
747 error (_(
"Unable to load the executable's loadmap."));
772 for (seg = 0; seg < ldm->
nsegs; seg++)
775 && orig_addr < ldm->segs[seg].p_vaddr + ldm->
segs[seg].
p_memsz)
777 new_offsets[osect_idx]
780 if (new_offsets[osect_idx] !=
offset)
810 warning (_(
"shared library handler failed to enable breakpoint"));
842 for (seg = 0; seg < map->
nsegs; seg++)
883 for (seg = 0; seg < map->
nsegs; seg++)
886 && addr < map->segs[seg].addr + map->
segs[seg].
p_memsz)
898 (CORE_ADDR, CORE_ADDR,
const char *, bfd *,
lm_info_frv *);
927 (entry_point, got_value,
name, objf->
obfd.get (),
939 (entry_point, got_value,
name, so->abfd, li);
951 (CORE_ADDR entry_point, CORE_ADDR got_value,
const char *
name, bfd *abfd,
976 unsigned int number_of_symbols;
979 storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
982 if (storage_needed <= 0)
989 number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd, lm->
dyn_syms);
991 if (number_of_symbols == 0)
1001 storage_needed = bfd_get_dynamic_reloc_upper_bound (abfd);
1004 if (storage_needed <= 0)
1036 if ((
name == 0 || strcmp (
name, (*rel->sym_ptr_ptr)->name) == 0)
1037 && 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)
#define ALL_OBJFILE_OSECTIONS(objfile, osect)
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 int cmp_name(const asymbol *sym, const void *data)
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 *)
CORE_ADDR gdb_bfd_lookup_symbol(bfd *abfd, int(*match_sym)(const asymbol *, const void *), const void *data)
void solib_add(const char *pattern, int from_tty, int readsyms)
gdb_bfd_ref_ptr solib_bfd_open(const char *pathname)
#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
::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)