/* Read HP PA/Risc object files for GDB.
- Copyright (C) 1991-2013 Free Software Foundation, Inc.
+ Copyright (C) 1991-2014 Free Software Foundation, Inc.
Written by Fred Fish at Cygnus Support.
This file is part of GDB.
#include "stabsread.h"
#include "gdb-stabs.h"
#include "complaints.h"
-#include "gdb_string.h"
#include "demangle.h"
#include "som.h"
#include "libhppa.h"
asection *shlib_info;
struct som_external_symbol_dictionary_record *buf, *bufp, *endbufp;
char *symname;
- CONST int symsize = sizeof (struct som_external_symbol_dictionary_record);
+ const int symsize = sizeof (struct som_external_symbol_dictionary_record);
-#define text_offset ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile))
-#define data_offset ANOFFSET (section_offsets, SECT_OFF_DATA (objfile))
-
number_of_symbols = bfd_get_symcount (abfd);
/* Allocate a buffer to read in the debug info.
more accurate to check for a nonzero text offset, but they
have not provided any information about why that test is
more accurate. */
- dynamic = (text_offset != 0);
+ dynamic = (ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile)) != 0);
endbufp = buf + number_of_symbols;
for (bufp = buf; bufp < endbufp; ++bufp)
case ST_MILLICODE:
symname = bfd_getb32 (bufp->name) + stringtab;
ms_type = mst_text;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
break;
ms_type = mst_solib_trampoline;
else
ms_type = mst_text;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
break;
case ST_STUB:
symname = bfd_getb32 (bufp->name) + stringtab;
ms_type = mst_solib_trampoline;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
break;
case ST_DATA:
symname = bfd_getb32 (bufp->name) + stringtab;
- symbol_value += data_offset;
ms_type = mst_data;
break;
default:
case ST_CODE:
symname = bfd_getb32 (bufp->name) + stringtab;
ms_type = mst_file_text;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
check_strange_names:
case ST_MILLICODE:
symname = bfd_getb32 (bufp->name) + stringtab;
ms_type = mst_file_text;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
break;
using mst_file_text vs mst_solib_trampoline here like
we do for SS_UNIVERSAL and SS_EXTERNAL symbols above. */
ms_type = mst_file_text;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
break;
case ST_STUB:
symname = bfd_getb32 (bufp->name) + stringtab;
ms_type = mst_solib_trampoline;
- symbol_value += text_offset;
symbol_value = gdbarch_addr_bits_remove (gdbarch, symbol_value);
break;
case ST_DATA:
symname = bfd_getb32 (bufp->name) + stringtab;
- symbol_value += data_offset;
ms_type = mst_file_data;
goto check_strange_names;
case ST_STORAGE:
case ST_DATA:
symname = bfd_getb32 (bufp->name) + stringtab;
- symbol_value += data_offset;
ms_type = mst_data;
break;
ALL_OBJFILE_OSECTIONS (objfile, iter)
{
+ CORE_ADDR start;
+ CORE_ADDR len;
+
if (bfd_is_const_section (iter->the_bfd_section))
continue;
- if (obj_section_addr (iter) <= symbol_value
- && symbol_value < obj_section_endaddr (iter))
+ start = bfd_get_section_vma (iter->objfile->obfd,
+ iter->the_bfd_section);
+ len = bfd_get_section_size (iter->the_bfd_section);
+ if (start <= symbol_value && symbol_value < start + len)
{
section = iter->the_bfd_section;
break;
static const struct sym_fns som_sym_fns =
{
- bfd_target_som_flavour,
som_new_init, /* init anything gbl to entire symtab */
som_symfile_init, /* read initial info, setup for sym_read() */
som_symfile_read, /* read a symbol file into symtab */
void
_initialize_somread (void)
{
- add_symtab_fns (&som_sym_fns);
+ add_symtab_fns (bfd_target_som_flavour, &som_sym_fns);
}