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,
135 ext_ldmbuf =
xmalloc (ext_ldmbuf_size);
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))
154 int_ldmbuf =
xmalloc (int_ldmbuf_size);
158 int_ldmbuf->
nsegs = nsegs;
159 for (seg = 0; seg < nsegs; seg++)
163 sizeof (ext_ldmbuf->
segs[seg].
addr),
276 if (main_executable_lm_info == 0)
289 "lm_base: _GLOBAL_OFFSET_TABLE_ not found.\n");
297 "lm_base: _GLOBAL_OFFSET_TABLE_ + 8 = %s\n",
306 "lm_base: lm_base_cache = %s\n",
320 struct so_list *sos_head = NULL;
321 struct so_list **sos_next_ptr = &sos_head;
335 if (main_executable_lm_info == 0 &&
core_bfd != NULL)
353 "current_sos: reading link_map entry at %s\n",
357 sizeof (lm_buf)) != 0)
359 warning (
_(
"frv_current_sos: Unable to read link map entry. "
360 "Shared object chain may be incomplete."));
366 sizeof (lm_buf.
l_addr.got_value),
371 if (got_addr != mgot)
386 warning (
_(
"frv_current_sos: Unable to fetch load map. "
387 "Shared object chain may be incomplete."));
408 warning (
_(
"Can't read pathname for link map entry: %s."),
419 sos_next_ptr = &sop->
next;
427 sizeof (lm_buf.
l_next), byte_order);
447 return ((pc >= interp_text_sect_low && pc < interp_text_sect_high)
448 || (pc >= interp_plt_sect_low && pc < interp_plt_sect_high)
461 for (seg = 0; seg < map->
nsegs; seg++)
464 && addr < map->segs[seg].p_vaddr + map->
segs[seg].
p_memsz)
479 warning (
_(
"Unable to find dynamic linker breakpoint function.\n"
480 "GDB will be unable to debug shared library initializers\n"
481 "and track explicitly loaded dynamic code."));
489 return (strcmp (sym->name, (
const char *) data) == 0);
522 asection *interp_sect;
524 if (enable_break2_done)
527 interp_text_sect_low = interp_text_sect_high = 0;
528 interp_plt_sect_low = interp_plt_sect_high = 0;
532 interp_sect = bfd_get_section_by_name (
exec_bfd,
".interp");
535 unsigned int interp_sect_size;
545 interp_sect_size = bfd_section_size (
exec_bfd, interp_sect);
546 buf = alloca (interp_sect_size);
547 bfd_get_section_contents (
exec_bfd, interp_sect,
548 buf, 0, interp_sect_size);
575 &interp_loadmap_addr, 0);
578 warning (
_(
"Unable to determine dynamic linker loadmap address."));
586 "enable_break: interp_loadmap_addr = %s\n",
592 warning (
_(
"Unable to load dynamic linker loadmap at address %s."),
601 interp_sect = bfd_get_section_by_name (tmp_bfd,
".text");
605 = bfd_section_vma (tmp_bfd, interp_sect);
608 interp_text_sect_high
609 = interp_text_sect_low + bfd_section_size (tmp_bfd, interp_sect);
611 interp_sect = bfd_get_section_by_name (tmp_bfd,
".plt");
614 interp_plt_sect_low =
615 bfd_section_vma (tmp_bfd, interp_sect);
618 interp_plt_sect_high =
619 interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
626 warning (
_(
"Could not find symbol _dl_debug_addr "
627 "in dynamic linker"));
635 "enable_break: _dl_debug_addr "
636 "(prior to relocation) = %s\n",
643 "enable_break: _dl_debug_addr "
644 "(after relocation) = %s\n",
650 warning (
_(
"Unable to fetch contents of _dl_debug_addr "
651 "(at address %s) from dynamic linker"),
658 "enable_break: _dl_debug_addr[0..3] = %s\n",
667 "enable_break: ldso not yet initialized\n");
676 warning (
_(
"Unable to fetch _dl_debug_addr->r_brk "
677 "(at address %s) from dynamic linker"),
688 warning (
_(
"Unable to fetch _dl_debug_addr->.r_brk entry point "
689 "(at address %s) from dynamic linker"),
710 enable_break2_done = 1;
725 asection *interp_sect;
732 "enable_break: No symbol file found.\n");
740 "enable_break: Symbol file has no entry point.\n");
747 interp_sect = bfd_get_section_by_name (
exec_bfd,
".interp");
749 if (interp_sect == NULL)
753 "enable_break: No .interp section found.\n");
761 "enable_break: solib event breakpoint "
762 "placed at entry point: %s\n",
787 &interp_addr, &exec_addr);
789 if (status < 0 || (exec_addr == 0 && interp_addr == 0))
798 error (
_(
"Unable to load the executable's loadmap."));
800 if (main_executable_lm_info)
801 xfree (main_executable_lm_info);
803 main_executable_lm_info->
map = ldm;
823 orig_addr = addr -
offset;
825 for (seg = 0; seg < ldm->
nsegs; seg++)
828 && orig_addr < ldm->segs[seg].p_vaddr + ldm->
segs[seg].
p_memsz)
830 new_offsets->
offsets[osect_idx]
833 if (new_offsets->
offsets[osect_idx] != offset)
865 warning (
_(
"shared library handler failed to enable breakpoint"));
874 enable_break2_done = 0;
876 if (main_executable_lm_info != 0)
878 xfree (main_executable_lm_info->
map);
881 xfree (main_executable_lm_info);
882 main_executable_lm_info = 0;
904 for (seg = 0; seg < map->
nsegs; seg++)
928 if (got_sym.minsym == 0)
949 for (seg = 0; seg < map->
nsegs; seg++)
996 main_executable_lm_info);
1008 (entry_point, got_value, name, so->
abfd, so->
lm_info);
1046 long storage_needed;
1047 unsigned int number_of_symbols;
1050 storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd);
1053 if (storage_needed <= 0)
1060 number_of_symbols = bfd_canonicalize_dynamic_symtab (abfd, lm->
dyn_syms);
1062 if (number_of_symbols == 0)
1069 long storage_needed;
1072 storage_needed = bfd_get_dynamic_reloc_upper_bound (abfd);
1075 if (storage_needed <= 0)
1107 if ((name == 0 || strcmp (name, (*rel->sym_ptr_ptr)->name) == 0)
1108 && rel->howto->type == R_FRV_FUNCDESC)
1150 if (main_lm_addr == 0)
1189 &solib_frv_debug,
_(
"\
1190 Set internal debugging of shared library code for FR-V."),
_(
"\
1191 Show internal debugging of shared library code for FR-V."),
_(
"\
1192 When non-zero, FR-V solib specific internal debugging is enabled."),
struct gdbarch * target_gdbarch(void)
gdb_byte ext_Elf32_Half[2]
ULONGEST extract_unsigned_integer(const gdb_byte *, int, enum bfd_endian)
CORE_ADDR frv_fdpic_find_canonical_descriptor(CORE_ADDR entry_point)
static void frv_special_symbol_handling(void)
int frv_fdpic_loadmap_addresses(struct gdbarch *gdbarch, CORE_ADDR *interp_addr, CORE_ADDR *exec_addr)
void remove_solib_event_breakpoints(void)
static CORE_ADDR lm_base_cache
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_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
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)
bfd *(* bfd_open)(char *pathname)
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)
int(* open_symbol_file_object)(void *from_ttyp)
static int enable_break2(void)
static int frv_in_dynsym_resolve_code(CORE_ADDR pc)
#define obj_section_addr(s)
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 gdb_bfd_unref(struct bfd *abfd)
void initialize_file_ftype(void)
CORE_ADDR gdb_bfd_lookup_symbol(bfd *abfd, int(*match_sym)(asymbol *, void *), void *data)
struct symbol * find_pc_function(CORE_ADDR pc)
static int enable_break(void)
struct int_elf32_fdpic_loadmap * map
static void frv_relocate_main_executable(void)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
mach_port_t mach_port_t name mach_port_t mach_port_t name error_t int status
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]
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void solib_add(const char *pattern, int from_tty, struct target_ops *target, int readsyms)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
#define ANOFFSET(secoff, whichone)
static struct lm_info * main_executable_lm_info
char so_name[SO_NAME_MAX_PATH_SIZE]
gdb_byte ext_Elf32_Addr[4]
static CORE_ADDR find_canonical_descriptor_in_load_object(CORE_ADDR, CORE_ADDR, const char *, bfd *, struct lm_info *)
#define SYMBOL_LINKAGE_NAME(symbol)
struct cmd_list_element * setdebuglist
struct ext_elf32_dsbt_loadaddr l_addr
struct ui_file * gdb_stdlog
void(* special_symbol_handling)(void)
static int open_symbol_file_object(void *from_ttyp)
static CORE_ADDR interp_text_sect_low
struct int_elf32_dsbt_loadmap * map
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
static int cmp_name(asymbol *sym, void *data)
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)
struct target_so_ops frv_so_ops
initialize_file_ftype _initialize_frv_solib
CORE_ADDR frv_fdpic_find_global_pointer(CORE_ADDR addr)
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
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)
PTR xcalloc(size_t number, size_t size)
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)
bfd * solib_bfd_open(char *pathname)
void do_cleanups(struct cleanup *old_chain)