2000-08-07 Elena Zannoni <ezannoni@kwikemart.cygnus.com>

* objfiles.h (SECT_OFF_BSS): Don't detect invalid sect_index_bss
 	here, let the users of the macro do it.
	* symtab.h (ANOFFSET): Detect here if the section index is not
 	initialized.
	* xcoffread.c (find_targ_sec): Don't treat .bss as special,
 	because some objfiles may not have that section at all.
	* coffread.c (cs_to_section): Ditto.
	* elfread.c (elf_symtab_read): Detect an uninitialized index
 	value.
	(elfstab_offset_sections): The macro ANOFFSET cannot be used as an
 	lvalue anymore.
	* remote.c (get_offsets, remote_cisco_objfile_relocate): Don't use
 	ANOFFSET as an lvalue.
	* objfiles.c (objfile_relocate, objfile_relocate): Don't use
 	ANOFFSET as an lvalue.
	* symfile.c (default_symfile_offsets): Don't use ANOFFSET as an
 	lvalue.
This commit is contained in:
Elena Zannoni 2000-08-07 15:02:48 +00:00
parent 279ddab43f
commit a4c8257b03
8 changed files with 52 additions and 20 deletions

View file

@ -1,3 +1,23 @@
2000-08-07 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* objfiles.h (SECT_OFF_BSS): Don't detect invalid sect_index_bss
here, let the users of the macro do it.
* symtab.h (ANOFFSET): Detect here if the section index is not
initialized.
* xcoffread.c (find_targ_sec): Don't treat .bss as special,
because some objfiles may not have that section at all.
* coffread.c (cs_to_section): Ditto.
* elfread.c (elf_symtab_read): Detect an uninitialized index
value.
(elfstab_offset_sections): The macro ANOFFSET cannot be used as an
lvalue anymore.
* remote.c (get_offsets, remote_cisco_objfile_relocate): Don't use
ANOFFSET as an lvalue.
* objfiles.c (objfile_relocate, objfile_relocate): Don't use
ANOFFSET as an lvalue.
* symfile.c (default_symfile_offsets): Don't use ANOFFSET as an
lvalue.
Mon Aug 7 10:24:30 2000 David Taylor <taylor@texas.cygnus.com> Mon Aug 7 10:24:30 2000 David Taylor <taylor@texas.cygnus.com>
* parse.c (build_parse): don't write off the end of the std_regs * parse.c (build_parse): don't write off the end of the std_regs

View file

@ -347,7 +347,8 @@ cs_to_section (struct coff_symbol *cs, struct objfile *objfile)
else if (bfd_get_section_flags (abfd, sect) & SEC_LOAD) else if (bfd_get_section_flags (abfd, sect) & SEC_LOAD)
off = SECT_OFF_DATA (objfile); off = SECT_OFF_DATA (objfile);
else else
off = SECT_OFF_BSS (objfile); /* Just return the bfd section index. */
off = sect->index;
} }
return off; return off;
} }

View file

@ -474,11 +474,16 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
(char *) filesym->name; (char *) filesym->name;
} }
} }
if (sectinfo->sections[index] != 0) if (index != -1)
{ {
complain (&section_info_dup_complaint, if (sectinfo->sections[index] != 0)
sectinfo->filename); {
complain (&section_info_dup_complaint,
sectinfo->filename);
}
} }
else
internal_error ("Section index uninitialized.");
/* Bfd symbols are section relative. */ /* Bfd symbols are section relative. */
symaddr = sym->value + sym->section->vma; symaddr = sym->value + sym->section->vma;
/* Relocate non-absolute symbols by the section offset. */ /* Relocate non-absolute symbols by the section offset. */
@ -486,7 +491,10 @@ elf_symtab_read (struct objfile *objfile, int dynamic)
{ {
symaddr += offset; symaddr += offset;
} }
sectinfo->sections[index] = symaddr; if (index != -1)
sectinfo->sections[index] = symaddr;
else
internal_error ("Section index uninitialized.");
/* The special local symbols don't go in the /* The special local symbols don't go in the
minimal symbol table, so ignore this one. */ minimal symbol table, so ignore this one. */
continue; continue;
@ -790,7 +798,7 @@ elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
pst->section_offsets = (struct section_offsets *) pst->section_offsets = (struct section_offsets *)
obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS); obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
for (i = 0; i < SECT_OFF_MAX; i++) for (i = 0; i < SECT_OFF_MAX; i++)
ANOFFSET (pst->section_offsets, i) = maybe->sections[i]; (pst->section_offsets)->offsets[i] = maybe->sections[i];
return; return;
} }

View file

@ -520,7 +520,7 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
int something_changed = 0; int something_changed = 0;
for (i = 0; i < objfile->num_sections; ++i) for (i = 0; i < objfile->num_sections; ++i)
{ {
ANOFFSET (delta, i) = delta->offsets[i] =
ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i); ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
if (ANOFFSET (delta, i) != 0) if (ANOFFSET (delta, i) != 0)
something_changed = 1; something_changed = 1;
@ -639,7 +639,7 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
{ {
int i; int i;
for (i = 0; i < objfile->num_sections; ++i) for (i = 0; i < objfile->num_sections; ++i)
ANOFFSET (objfile->section_offsets, i) = ANOFFSET (new_offsets, i); (objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
} }
{ {

View file

@ -597,8 +597,9 @@ extern int is_in_import_list (char *, struct objfile *);
((objfile->sect_index_text == -1) ? \ ((objfile->sect_index_text == -1) ? \
(internal_error ("sect_index_text not initialized"), -1) : objfile->sect_index_text) (internal_error ("sect_index_text not initialized"), -1) : objfile->sect_index_text)
#define SECT_OFF_BSS(objfile) \ /* Sometimes the .bss section is missing from the objfile, so we don't
((objfile->sect_index_bss == -1) ? \ want to die here. Let the users of SECT_OFF_BSS deal with an
(internal_error ("sect_index_bss not initialized"), -1) : objfile->sect_index_bss) uninitialized section index. */
#define SECT_OFF_BSS(objfile) (objfile)->sect_index_bss
#endif /* !defined (OBJFILES_H) */ #endif /* !defined (OBJFILES_H) */

View file

@ -1835,14 +1835,14 @@ get_offsets (void)
offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS); offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS); memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
ANOFFSET (offs, SECT_OFF_TEXT (symfile_objfile)) = text_addr; offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
/* This is a temporary kludge to force data and bss to use the same offsets /* This is a temporary kludge to force data and bss to use the same offsets
because that's what nlmconv does now. The real solution requires changes because that's what nlmconv does now. The real solution requires changes
to the stub and remote.c that I don't have time to do right now. */ to the stub and remote.c that I don't have time to do right now. */
ANOFFSET (offs, SECT_OFF_DATA (symfile_objfile)) = data_addr; offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
ANOFFSET (offs, SECT_OFF_BSS (symfile_objfile)) = data_addr; offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
objfile_relocate (symfile_objfile, offs); objfile_relocate (symfile_objfile, offs);
} }
@ -1948,9 +1948,9 @@ remote_cisco_objfile_relocate (bfd_signed_vma text_off, bfd_signed_vma data_off,
offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS); offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS); memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
ANOFFSET (offs, SECT_OFF_TEXT (symfile_objfile)) = text_off; offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_off;
ANOFFSET (offs, SECT_OFF_DATA (symfile_objfile)) = data_off; offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_off;
ANOFFSET (offs, SECT_OFF_BSS (symfile_objfile)) = bss_off; offs->offsets[SECT_OFF_BSS (symfile_objfile)] = bss_off;
/* First call the standard objfile_relocate. */ /* First call the standard objfile_relocate. */
objfile_relocate (symfile_objfile, offs); objfile_relocate (symfile_objfile, offs);

View file

@ -521,7 +521,7 @@ default_symfile_offsets (struct objfile *objfile,
/* Record all sections in offsets */ /* Record all sections in offsets */
/* The section_offsets in the objfile are here filled in using /* The section_offsets in the objfile are here filled in using
the BFD index. */ the BFD index. */
ANOFFSET (objfile->section_offsets, osp->sectindex) = osp->addr; (objfile->section_offsets)->offsets[osp->sectindex] = osp->addr;
} }
/* Remember the bfd indexes for the .text, .data, .bss and /* Remember the bfd indexes for the .text, .data, .bss and

View file

@ -829,7 +829,9 @@ struct section_offsets
CORE_ADDR offsets[1]; /* As many as needed. */ CORE_ADDR offsets[1]; /* As many as needed. */
}; };
#define ANOFFSET(secoff, whichone) (secoff->offsets[whichone]) #define ANOFFSET(secoff, whichone) \
((whichone == -1) ? \
(internal_error ("Section index is uninitialized"), -1) : secoff->offsets[whichone])
/* The maximum possible size of a section_offsets table. */ /* The maximum possible size of a section_offsets table. */