mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
* somread.c (som_symtab_read): Handle dynamic relocation for both
text and data symbols. (som_symfile_offsets): If objfile is a shared library, then get text and data offsets from the shared library structures. * somsolib.c (som_solib_add): Copy the bfd pointer from the objfile rather than reopening the file again. (som_solib_section_offsets): New function. * somsolib.h (som_solib_section_offsets): Declare.
This commit is contained in:
@ -103,11 +103,11 @@ som_symtab_read (abfd, objfile, section_offsets)
|
||||
struct symbol_dictionary_record *buf, *bufp, *endbufp;
|
||||
char *symname;
|
||||
CONST int symsize = sizeof (struct symbol_dictionary_record);
|
||||
CORE_ADDR text_offset;
|
||||
CORE_ADDR text_offset, data_offset;
|
||||
|
||||
|
||||
/* FIXME. Data stuff needs dynamic relocation too! */
|
||||
text_offset = ANOFFSET (section_offsets, 0);
|
||||
data_offset = ANOFFSET (section_offsets, 1);
|
||||
|
||||
number_of_symbols = bfd_get_symcount (abfd);
|
||||
|
||||
@ -190,6 +190,7 @@ som_symtab_read (abfd, objfile, section_offsets)
|
||||
|
||||
case ST_DATA:
|
||||
symname = bufp->name.n_strx + stringtab;
|
||||
bufp->symbol_value += data_offset;
|
||||
ms_type = mst_data;
|
||||
break;
|
||||
default:
|
||||
@ -270,6 +271,7 @@ som_symtab_read (abfd, objfile, section_offsets)
|
||||
|
||||
case ST_DATA:
|
||||
symname = bufp->name.n_strx + stringtab;
|
||||
bufp->symbol_value += data_offset;
|
||||
ms_type = mst_file_data;
|
||||
goto check_strange_names;
|
||||
|
||||
@ -411,8 +413,13 @@ som_symfile_offsets (objfile, addr)
|
||||
sizeof (struct section_offsets)
|
||||
+ sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
|
||||
|
||||
for (i = 0; i < SECT_OFF_MAX; i++)
|
||||
ANOFFSET (section_offsets, i) = addr;
|
||||
/* First see if we're a shared library. If so, get the section
|
||||
offsets from the library, else get them from addr. */
|
||||
if (!som_solib_section_offsets (objfile, section_offsets))
|
||||
{
|
||||
for (i = 0; i < SECT_OFF_MAX; i++)
|
||||
ANOFFSET (section_offsets, i) = addr;
|
||||
}
|
||||
|
||||
return section_offsets;
|
||||
}
|
||||
|
Reference in New Issue
Block a user