103 int ext_ldmbuf_size, int_ldmbuf_size;
108 sizeof ext_ldmbuf_partial))
116 sizeof ext_ldmbuf_partial.version,
126 sizeof ext_ldmbuf_partial.nsegs,
138 memcpy (ext_ldmbuf, &ext_ldmbuf_partial,
sizeof ext_ldmbuf_partial);
142 (
gdb_byte *) ext_ldmbuf +
sizeof ext_ldmbuf_partial,
143 ext_ldmbuf_size -
sizeof ext_ldmbuf_partial))
159 for (seg = 0; seg <
nsegs; seg++)
163 sizeof (ext_ldmbuf->
segs[seg].
addr),
295 "lm_base: _GLOBAL_OFFSET_TABLE_ not found.\n");
303 "lm_base: _GLOBAL_OFFSET_TABLE_ + 8 = %s\n",
312 "lm_base: lm_base_cache = %s\n",
326 struct so_list *sos_head = NULL;
327 struct so_list **sos_next_ptr = &sos_head;
359 "current_sos: reading link_map entry at %s\n",
363 sizeof (lm_buf)) != 0)
365 warning (
_(
"frv_current_sos: Unable to read link map entry. " 366 "Shared object chain may be incomplete."));
372 sizeof (lm_buf.l_addr.got_value),
377 if (got_addr != mgot)
387 sizeof lm_buf.l_addr.map,
392 warning (
_(
"frv_current_sos: Unable to fetch load map. " 393 "Shared object chain may be incomplete."));
405 sizeof (lm_buf.l_name),
415 warning (
_(
"Can't read pathname for link map entry: %s."),
426 sos_next_ptr = &sop->
next;
434 sizeof (lm_buf.l_next), byte_order);
468 for (seg = 0; seg < map->
nsegs; seg++)
471 && addr < map->segs[seg].p_vaddr + map->
segs[seg].
p_memsz)
486 warning (
_(
"Unable to find dynamic linker breakpoint function.\n" 487 "GDB will be unable to debug shared library initializers\n" 488 "and track explicitly loaded dynamic code."));
496 return (strcmp (sym->name, (
const char *) data) == 0);
527 asection *interp_sect;
537 interp_sect = bfd_get_section_by_name (
exec_bfd,
".interp");
540 unsigned int interp_sect_size;
549 interp_sect_size = bfd_section_size (
exec_bfd, interp_sect);
550 buf = (
char *) alloca (interp_sect_size);
551 bfd_get_section_contents (
exec_bfd, interp_sect,
552 buf, 0, interp_sect_size);
580 &interp_loadmap_addr, 0);
583 warning (
_(
"Unable to determine dynamic linker loadmap address."));
590 "enable_break: interp_loadmap_addr = %s\n",
596 warning (
_(
"Unable to load dynamic linker loadmap at address %s."),
604 interp_sect = bfd_get_section_by_name (tmp_bfd.
get (),
".text");
608 = bfd_section_vma (tmp_bfd.
get (), interp_sect);
615 interp_sect = bfd_get_section_by_name (tmp_bfd.
get (),
".plt");
619 bfd_section_vma (tmp_bfd.
get (), interp_sect);
631 warning (
_(
"Could not find symbol _dl_debug_addr " 632 "in dynamic linker"));
639 "enable_break: _dl_debug_addr " 640 "(prior to relocation) = %s\n",
647 "enable_break: _dl_debug_addr " 648 "(after relocation) = %s\n",
654 warning (
_(
"Unable to fetch contents of _dl_debug_addr " 655 "(at address %s) from dynamic linker"),
662 "enable_break: _dl_debug_addr[0..3] = %s\n",
671 "enable_break: ldso not yet initialized\n");
680 warning (
_(
"Unable to fetch _dl_debug_addr->r_brk " 681 "(at address %s) from dynamic linker"),
691 warning (
_(
"Unable to fetch _dl_debug_addr->.r_brk entry point " 692 "(at address %s) from dynamic linker"),
724 asection *interp_sect;
731 "enable_break: No symbol file found.\n");
739 "enable_break: Symbol file has no entry point.\n");
746 interp_sect = bfd_get_section_by_name (
exec_bfd,
".interp");
748 if (interp_sect == NULL)
752 "enable_break: No .interp section found.\n");
760 "enable_break: solib event breakpoint " 761 "placed at entry point: %s\n",
778 &interp_addr, &exec_addr);
780 if (
status < 0 || (exec_addr == 0 && interp_addr == 0))
789 error (
_(
"Unable to load the executable's loadmap."));
813 orig_addr = addr -
offset;
815 for (seg = 0; seg < ldm->
nsegs; seg++)
818 && orig_addr < ldm->segs[seg].p_vaddr + ldm->
segs[seg].
p_memsz)
820 new_offsets->
offsets[osect_idx]
855 warning (
_(
"shared library handler failed to enable breakpoint"));
887 for (seg = 0; seg < map->nsegs; seg++)
889 if (map->segs[seg].p_vaddr <= sec->
addr 890 && sec->
addr < map->segs[seg].p_vaddr + map->segs[seg].p_memsz)
911 if (got_sym.minsym == 0)
931 for (seg = 0; seg < map->nsegs; seg++)
933 if (map->segs[seg].addr <= addr
934 && addr < map->segs[seg].addr + map->segs[seg].p_memsz)
991 (entry_point, got_value,
name, so->
abfd, li);
1029 long storage_needed;
1030 unsigned int number_of_symbols;
1033 storage_needed = bfd_get_dynamic_symtab_upper_bound (
abfd);
1036 if (storage_needed <= 0)
1043 number_of_symbols = bfd_canonicalize_dynamic_symtab (
abfd, lm->
dyn_syms);
1045 if (number_of_symbols == 0)
1052 long storage_needed;
1055 storage_needed = bfd_get_dynamic_reloc_upper_bound (
abfd);
1058 if (storage_needed <= 0)
1090 if ((
name == 0 || strcmp (
name, (*rel->sym_ptr_ptr)->name) == 0)
1091 && rel->howto->type == R_FRV_FUNCDESC)
1171 Set internal debugging of shared library code for FR-V."),
_(
"\ 1172 Show internal debugging of shared library code for FR-V."),
_(
"\ 1173 When non-zero, FR-V solib specific internal debugging is enabled."),
struct gdbarch * target_gdbarch(void)
gdb_byte ext_Elf32_Half[2]
CORE_ADDR frv_fdpic_find_canonical_descriptor(CORE_ADDR entry_point)
int frv_fdpic_loadmap_addresses(struct gdbarch *gdbarch, CORE_ADDR *interp_addr, CORE_ADDR *exec_addr)
static lm_info_frv * main_executable_lm_info
void remove_solib_event_breakpoints(void)
static CORE_ADDR lm_base_cache
struct breakpoint * create_solib_event_breakpoint(struct gdbarch *gdbarch, CORE_ADDR address)
static CORE_ADDR main_got(void)
#define BMSYMBOL_VALUE_ADDRESS(symbol)
void warning(const char *fmt,...)
struct ext_elf32_fdpic_loadseg segs[1]
static CORE_ADDR main_lm_addr
static void frv_free_so(struct so_list *so)
void(* relocate_section_addresses)(struct so_list *so, struct target_section *)
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 struct int_elf32_fdpic_loadmap * fetch_loadmap(CORE_ADDR ldmaddr)
gdb_byte ext_Elf32_Word[4]
#define ALL_OBJFILE_OSECTIONS(objfile, osect)
#define SO_NAME_MAX_PATH_SIZE
static CORE_ADDR lm_base(void)
static CORE_ADDR lm_addr(struct so_list *so)
gdb_bfd_ref_ptr(* bfd_open)(char *pathname)
static int enable_break2(void)
static int frv_in_dynsym_resolve_code(CORE_ADDR pc)
static int open_symbol_file_object(int from_tty)
void add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
void(* clear_solib)(void)
static void frv_clear_solib(void)
struct so_list * master_so_list(void)
int(* in_dynsym_resolve_code)(CORE_ADDR pc)
#define CATCH(EXCEPTION, MASK)
void _initialize_frv_solib(void)
void solib_add(const char *pattern, int from_tty, int readsyms)
struct symbol * find_pc_function(CORE_ADDR pc)
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
static int enable_break(void)
static void frv_relocate_main_executable(void)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
CORE_ADDR frv_fetch_objfile_link_map(struct objfile *objfile)
static unsigned int solib_frv_debug
char so_original_name[SO_NAME_MAX_PATH_SIZE]
int_elf32_fdpic_loadmap * map
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
#define ANOFFSET(secoff, whichone)
char so_name[SO_NAME_MAX_PATH_SIZE]
gdb_byte ext_Elf32_Addr[4]
#define SYMBOL_LINKAGE_NAME(symbol)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
struct cmd_list_element * setdebuglist
CORE_ADDR gdb_bfd_lookup_symbol(bfd *abfd, int(*match_sym)(const asymbol *, const void *), const void *data)
struct ext_elf32_dsbt_loadaddr l_addr
static CORE_ADDR find_canonical_descriptor_in_load_object(CORE_ADDR, CORE_ADDR, const char *, bfd *, lm_info_frv *)
static CORE_ADDR interp_text_sect_low
int(* open_symbol_file_object)(int from_ttyp)
int entry_point_address_query(CORE_ADDR *entry_p)
static void enable_break_failure_warning(void)
char * hex_string_custom(LONGEST num, int width)
struct int_elf32_fdpic_loadseg segs[1]
static CORE_ADDR interp_plt_sect_high
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static int in_plt_section(CORE_ADDR pc)
struct minimal_symbol * minsym
void(* free_so)(struct so_list *so)
char * safe_strerror(int)
#define obj_section_addr(s)
struct target_so_ops frv_so_ops
CORE_ADDR frv_fdpic_find_global_pointer(CORE_ADDR addr)
static int cmp_name(const asymbol *sym, const void *data)
static CORE_ADDR displacement_from_map(struct int_elf32_fdpic_loadmap *map, CORE_ADDR addr)
struct cmd_list_element * showdebuglist
static CORE_ADDR interp_plt_sect_low
gdb_bfd_ref_ptr solib_bfd_open(char *pathname)
static struct so_list * frv_current_sos(void)
static CORE_ADDR interp_text_sect_high
static int enable_break2_done
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
static void frv_relocate_section_addresses(struct so_list *so, struct target_section *sec)
int target_read_string(CORE_ADDR memaddr, char **string, int len, int *errnop)
void error(const char *fmt,...)
static void frv_solib_create_inferior_hook(int from_tty)
void do_cleanups(struct cleanup *old_chain)