| Index: gdb/solib-som.c
|
| diff --git a/gdb/solib-som.c b/gdb/solib-som.c
|
| index 6100cbe6748f83fb7803d8f63a3817dcff16eb6b..fd0ff81afc858deb94762d48a4961653f645872d 100644
|
| --- a/gdb/solib-som.c
|
| +++ b/gdb/solib-som.c
|
| @@ -1,6 +1,6 @@
|
| /* Handle SOM shared libraries.
|
|
|
| - Copyright (C) 2004-2005, 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2004-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -126,7 +126,9 @@ som_relocate_section_addresses (struct so_list *so,
|
| sec->endaddr += so->lm_info->data_start;
|
| }
|
| else
|
| - ;
|
| + {
|
| + /* Nothing. */
|
| + }
|
| }
|
|
|
|
|
| @@ -183,11 +185,11 @@ struct {
|
| static void
|
| som_solib_create_inferior_hook (int from_tty)
|
| {
|
| - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
|
| + enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
|
| struct minimal_symbol *msymbol;
|
| unsigned int dld_flags, status, have_endo;
|
| asection *shlib_info;
|
| - char buf[4];
|
| + gdb_byte buf[4];
|
| CORE_ADDR anaddr;
|
|
|
| if (symfile_objfile == NULL)
|
| @@ -218,7 +220,7 @@ som_solib_create_inferior_hook (int from_tty)
|
| goto keep_going;
|
|
|
| anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
|
| - store_unsigned_integer (buf, 4, byte_order, PIDGET (inferior_ptid));
|
| + store_unsigned_integer (buf, 4, byte_order, ptid_get_pid (inferior_ptid));
|
| status = target_write_memory (anaddr, buf, 4);
|
| if (status != 0)
|
| {
|
| @@ -286,7 +288,7 @@ Suggest linking with /opt/langtools/lib/end.o.\n\
|
| GDB will be unable to track shl_load/shl_unload calls"));
|
| goto keep_going;
|
| }
|
| - create_solib_event_breakpoint (target_gdbarch,
|
| + create_solib_event_breakpoint (target_gdbarch (),
|
| SYMBOL_VALUE_ADDRESS (msymbol));
|
|
|
| /* We have all the support usually found in end.o, so we can track
|
| @@ -351,7 +353,7 @@ manpage for methods to privately map shared library text."));
|
| anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
|
|
|
| /* Make the breakpoint at "_start" a shared library event breakpoint. */
|
| - create_solib_event_breakpoint (target_gdbarch, anaddr);
|
| + create_solib_event_breakpoint (target_gdbarch (), anaddr);
|
|
|
| clear_symtab_users (0);
|
| }
|
| @@ -523,10 +525,10 @@ struct dld_list {
|
| static CORE_ADDR
|
| link_map_start (void)
|
| {
|
| - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
|
| + enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
|
| struct minimal_symbol *sym;
|
| CORE_ADDR addr;
|
| - char buf[4];
|
| + gdb_byte buf[4];
|
| unsigned int dld_flags;
|
|
|
| sym = lookup_minimal_symbol ("__dld_flags", NULL, NULL);
|
| @@ -567,13 +569,13 @@ link_map_start (void)
|
| static int
|
| match_main (const char *name)
|
| {
|
| - return strcmp (name, symfile_objfile->name) == 0;
|
| + return strcmp (name, objfile_name (symfile_objfile)) == 0;
|
| }
|
|
|
| static struct so_list *
|
| som_current_sos (void)
|
| {
|
| - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
|
| + enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
|
| CORE_ADDR lm;
|
| struct so_list *head = 0;
|
| struct so_list **link_ptr = &head;
|
| @@ -586,7 +588,7 @@ som_current_sos (void)
|
| struct cleanup *old_chain;
|
| int errcode;
|
| struct dld_list dbuf;
|
| - char tsdbuf[4];
|
| + gdb_byte tsdbuf[4];
|
|
|
| new = (struct so_list *) xmalloc (sizeof (struct so_list));
|
| old_chain = make_cleanup (xfree, new);
|
| @@ -640,27 +642,27 @@ som_current_sos (void)
|
|
|
| #ifdef SOLIB_SOM_DBG
|
| printf ("\n+ library \"%s\" is described at %s\n", new->so_name,
|
| - paddress (target_gdbarch, lm));
|
| + paddress (target_gdbarch (), lm));
|
| printf (" 'version' is %d\n", new->lm_info->struct_version);
|
| printf (" 'bind_mode' is %d\n", new->lm_info->bind_mode);
|
| printf (" 'library_version' is %d\n",
|
| new->lm_info->library_version);
|
| printf (" 'text_addr' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->text_addr));
|
| + paddress (target_gdbarch (), new->lm_info->text_addr));
|
| printf (" 'text_link_addr' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->text_link_addr));
|
| + paddress (target_gdbarch (), new->lm_info->text_link_addr));
|
| printf (" 'text_end' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->text_end));
|
| + paddress (target_gdbarch (), new->lm_info->text_end));
|
| printf (" 'data_start' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->data_start));
|
| + paddress (target_gdbarch (), new->lm_info->data_start));
|
| printf (" 'bss_start' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->bss_start));
|
| + paddress (target_gdbarch (), new->lm_info->bss_start));
|
| printf (" 'data_end' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->data_end));
|
| + paddress (target_gdbarch (), new->lm_info->data_end));
|
| printf (" 'got_value' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->got_value));
|
| + paddress (target_gdbarch (), new->lm_info->got_value));
|
| printf (" 'tsd_start_addr' is %s\n",
|
| - paddress (target_gdbarch, new->lm_info->tsd_start_addr));
|
| + paddress (target_gdbarch (), new->lm_info->tsd_start_addr));
|
| #endif
|
|
|
| new->addr_low = lmi->text_addr;
|
| @@ -690,12 +692,13 @@ som_current_sos (void)
|
| static int
|
| som_open_symbol_file_object (void *from_ttyp)
|
| {
|
| - enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
|
| + enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
|
| CORE_ADDR lm, l_name;
|
| char *filename;
|
| int errcode;
|
| int from_tty = *(int *)from_ttyp;
|
| - char buf[4];
|
| + gdb_byte buf[4];
|
| + struct cleanup *cleanup;
|
|
|
| if (symfile_objfile)
|
| if (!query (_("Attempt to reload symbols from process? ")))
|
| @@ -725,10 +728,11 @@ som_open_symbol_file_object (void *from_ttyp)
|
| return 0;
|
| }
|
|
|
| - make_cleanup (xfree, filename);
|
| + cleanup = make_cleanup (xfree, filename);
|
| /* Have a pathname: read the symbol file. */
|
| symbol_file_add_main (filename, from_tty);
|
|
|
| + do_cleanups (cleanup);
|
| return 1;
|
| }
|
|
|
| @@ -835,16 +839,15 @@ som_solib_section_offsets (struct objfile *objfile,
|
| {
|
| /* Oh what a pain! We need the offsets before so_list->objfile
|
| is valid. The BFDs will never match. Make a best guess. */
|
| - if (strstr (objfile->name, so_list->so_name))
|
| + if (strstr (objfile_name (objfile), so_list->so_name))
|
| {
|
| asection *private_section;
|
| + struct obj_section *sect;
|
|
|
| /* The text offset is easy. */
|
| offsets->offsets[SECT_OFF_TEXT (objfile)]
|
| = (so_list->lm_info->text_addr
|
| - so_list->lm_info->text_link_addr);
|
| - offsets->offsets[SECT_OFF_RODATA (objfile)]
|
| - = ANOFFSET (offsets, SECT_OFF_TEXT (objfile));
|
|
|
| /* We should look at presumed_dp in the SOM header, but
|
| that's not easily available. This should be OK though. */
|
| @@ -857,10 +860,28 @@ som_solib_section_offsets (struct objfile *objfile,
|
| offsets->offsets[SECT_OFF_BSS (objfile)] = 0;
|
| return 1;
|
| }
|
| - offsets->offsets[SECT_OFF_DATA (objfile)]
|
| - = (so_list->lm_info->data_start - private_section->vma);
|
| - offsets->offsets[SECT_OFF_BSS (objfile)]
|
| - = ANOFFSET (offsets, SECT_OFF_DATA (objfile));
|
| + if (objfile->sect_index_data != -1)
|
| + {
|
| + offsets->offsets[SECT_OFF_DATA (objfile)]
|
| + = (so_list->lm_info->data_start - private_section->vma);
|
| + if (objfile->sect_index_bss != -1)
|
| + offsets->offsets[SECT_OFF_BSS (objfile)]
|
| + = ANOFFSET (offsets, SECT_OFF_DATA (objfile));
|
| + }
|
| +
|
| + ALL_OBJFILE_OSECTIONS (objfile, sect)
|
| + {
|
| + flagword flags = bfd_get_section_flags (objfile->obfd,
|
| + sect->the_bfd_section);
|
| +
|
| + if ((flags & SEC_CODE) != 0)
|
| + offsets->offsets[sect->the_bfd_section->index]
|
| + = offsets->offsets[SECT_OFF_TEXT (objfile)];
|
| + else
|
| + offsets->offsets[sect->the_bfd_section->index]
|
| + = offsets->offsets[SECT_OFF_DATA (objfile)];
|
| + }
|
| +
|
| return 1;
|
| }
|
| so_list = so_list->next;
|
|
|