X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsolib-pa64.c;h=bf736a279e59cf0f17e0b11bf1e664aadb53a6be;hb=e52d501632e2c9c117e14ba1b2a52c75f2d6f353;hp=772b5dfc7b5ad4e109aa7b0a5caf551c27d487da;hpb=7be67755523dad8c86b7d169435c312c02172a6e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/solib-pa64.c b/gdb/solib-pa64.c index 772b5dfc7b..bf736a279e 100644 --- a/gdb/solib-pa64.c +++ b/gdb/solib-pa64.c @@ -1,6 +1,6 @@ /* Handle PA64 shared libraries for GDB, the GNU Debugger. - Copyright (C) 2004, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GDB. @@ -36,6 +36,7 @@ #include "gdbcore.h" #include "target.h" #include "inferior.h" +#include "regcache.h" #include "hppa-tdep.h" #include "solist.h" @@ -79,7 +80,7 @@ read_dynamic_info (asection *dyninfo_sect, dld_cache_t *dld_cache_p); static void pa64_relocate_section_addresses (struct so_list *so, - struct section_table *sec) + struct target_section *sec) { asection *asec = sec->the_bfd_section; CORE_ADDR load_offset; @@ -212,9 +213,7 @@ read_dynamic_info (asection *dyninfo_sect, dld_cache_t *dld_cache_p) Elf64_Dyn *x_dynp = (Elf64_Dyn*)buf; Elf64_Sxword dyn_tag; CORE_ADDR dyn_ptr; - char *pbuf; - pbuf = alloca (gdbarch_ptr_bit (current_gdbarch) / HOST_CHAR_BIT); dyn_tag = bfd_h_get_64 (symfile_objfile->obfd, (bfd_byte*) &x_dynp->d_tag); @@ -330,7 +329,7 @@ bfd_lookup_symbol (bfd *abfd, char *symname) with shared libraries mapped shareable. */ static void -pa64_solib_create_inferior_hook (void) +pa64_solib_create_inferior_hook (int from_tty) { struct minimal_symbol *msymbol; unsigned int dld_flags, status; @@ -339,10 +338,6 @@ pa64_solib_create_inferior_hook (void) struct objfile *objfile; CORE_ADDR anaddr; - /* First, remove all the solib event breakpoints. Their addresses - may have changed since the last time we ran the program. */ - remove_solib_event_breakpoints (); - if (symfile_objfile == NULL) return; @@ -421,14 +416,15 @@ pa64_solib_create_inferior_hook (void) Also note the breakpoint is the second instruction in the routine. */ - load_addr = read_pc () - tmp_bfd->start_address; + load_addr = regcache_read_pc (get_current_regcache ()) + - tmp_bfd->start_address; sym_addr = bfd_lookup_symbol (tmp_bfd, "__dld_break"); sym_addr = load_addr + sym_addr + 4; /* Create the shared library breakpoint. */ { struct breakpoint *b - = create_solib_event_breakpoint (sym_addr); + = create_solib_event_breakpoint (target_gdbarch, sym_addr); /* The breakpoint is actually hard-coded into the dynamic linker, so we don't need to actually insert a breakpoint instruction @@ -495,19 +491,20 @@ pa64_current_sos (void) #ifdef SOLIB_PA64_DBG { struct load_module_desc *d = &new->lm_info->desc; + printf ("\n+ library \"%s\" is described at index %d\n", new->so_name, dll_index); - printf (" text_base = 0x%llx\n", d->text_base); - printf (" text_size = 0x%llx\n", d->text_size); - printf (" data_base = 0x%llx\n", d->data_base); - printf (" data_size = 0x%llx\n", d->data_size); - printf (" unwind_base = 0x%llx\n", d->unwind_base); - printf (" linkage_ptr = 0x%llx\n", d->linkage_ptr); - printf (" phdr_base = 0x%llx\n", d->phdr_base); - printf (" tls_size = 0x%llx\n", d->tls_size); - printf (" tls_start_addr = 0x%llx\n", d->tls_start_addr); - printf (" unwind_size = 0x%llx\n", d->unwind_size); - printf (" tls_index = 0x%llx\n", d->tls_index); + printf (" text_base = %s\n", hex_string (d->text_base)); + printf (" text_size = %s\n", hex_string (d->text_size)); + printf (" data_base = %s\n", hex_string (d->data_base)); + printf (" data_size = %s\n", hex_string (d->data_size)); + printf (" unwind_base = %s\n", hex_string (d->unwind_base)); + printf (" linkage_ptr = %s\n", hex_string (d->linkage_ptr)); + printf (" phdr_base = %s\n", hex_string (d->phdr_base)); + printf (" tls_size = %s\n", hex_string (d->tls_size)); + printf (" tls_start_addr = %s\n", hex_string (d->tls_start_addr)); + printf (" unwind_size = %s\n", hex_string (d->unwind_size)); + printf (" tls_index = %s\n", hex_string (d->tls_index)); } #endif @@ -529,7 +526,7 @@ pa64_open_symbol_file_object (void *from_ttyp) char *dll_path; if (symfile_objfile) - if (!query ("Attempt to reload symbols from process? ")) + if (!query (_("Attempt to reload symbols from process? "))) return 0; /* Read in the load map pointer if we have not done so already. */ @@ -658,6 +655,7 @@ _initialize_pa64_solib (void) pa64_so_ops.current_sos = pa64_current_sos; pa64_so_ops.open_symbol_file_object = pa64_open_symbol_file_object; pa64_so_ops.in_dynsym_resolve_code = pa64_in_dynsym_resolve_code; + pa64_so_ops.bfd_open = solib_bfd_open; memset (&dld_cache, 0, sizeof (dld_cache)); } @@ -665,8 +663,8 @@ _initialize_pa64_solib (void) void pa64_solib_select (struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - set_solib_ops (gdbarch, &pa64_so_ops); + set_solib_ops (gdbarch, &pa64_so_ops); tdep->solib_thread_start_addr = pa64_solib_thread_start_addr; tdep->solib_get_got_by_pc = pa64_solib_get_got_by_pc; tdep->solib_get_solib_by_pc = pa64_solib_get_solib_by_pc;