(write_relocs): New function, split off from write_contents. Use memset

instead of bzero.
(write_object_file): Apply write_relocs to each section before applying
write_contents.
This commit is contained in:
Ken Raeburn 1993-07-19 20:05:16 +00:00
parent 4380166dfa
commit 8d6c34a108

View file

@ -476,7 +476,7 @@ adjust_reloc_syms (abfd, sec, xxx)
} }
static void static void
write_contents (abfd, sec, xxx) write_relocs (abfd, sec, xxx)
bfd *abfd; bfd *abfd;
asection *sec; asection *sec;
char *xxx; char *xxx;
@ -503,7 +503,7 @@ write_contents (abfd, sec, xxx)
/* Set up reloc information as well. */ /* Set up reloc information as well. */
relocs = (arelent **) bfd_alloc_by_size_t (stdoutput, relocs = (arelent **) bfd_alloc_by_size_t (stdoutput,
n * sizeof (arelent *)); n * sizeof (arelent *));
bzero ((char*)relocs, n * sizeof (arelent*)); memset ((char*)relocs, 0, n * sizeof (arelent*));
i = 0; i = 0;
for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next) for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next)
@ -527,6 +527,7 @@ write_contents (abfd, sec, xxx)
continue; continue;
} }
data = fixp->fx_frag->fr_literal + fixp->fx_where; data = fixp->fx_frag->fr_literal + fixp->fx_where;
/* @@ Assumes max size of reloc is 4. */
if (fixp->fx_where + 4 if (fixp->fx_where + 4
> fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset) > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
abort (); abort ();
@ -613,14 +614,30 @@ write_contents (abfd, sec, xxx)
} }
} }
#endif #endif
}
/* Force calculations (size, vma) to get done. */ static void
bfd_set_section_contents (stdoutput, sec, "", 0, (addressT) 0); write_contents (abfd, sec, xxx)
bfd *abfd;
asection *sec;
char *xxx;
{
segment_info_type *seginfo = seg_info (sec);
unsigned long offset = 0;
fragS *frags;
int i, n;
arelent **relocs;
fixS *fixp;
/* Write out the frags. */ /* Write out the frags. */
if (! (bfd_get_section_flags (abfd, sec) & SEC_HAS_CONTENTS)) if (! (bfd_get_section_flags (abfd, sec) & SEC_HAS_CONTENTS))
return; return;
#if 0 /* Who cares? Let the first call, below, do it. */
/* Force calculations (size, vma) to get done. */
bfd_set_section_contents (stdoutput, sec, "", 0, (addressT) 0);
#endif
for (frags = seginfo->frchainP->frch_root; for (frags = seginfo->frchainP->frch_root;
frags; frags;
frags = frags->fr_next) frags = frags->fr_next)
@ -1281,6 +1298,8 @@ write_object_file ()
/* Now that all the sizes are known, and contents correct, we can /* Now that all the sizes are known, and contents correct, we can
start writing the file. */ start writing the file. */
bfd_map_over_sections (stdoutput, write_relocs, (char *) 0);
bfd_map_over_sections (stdoutput, write_contents, (char *) 0); bfd_map_over_sections (stdoutput, write_contents, (char *) 0);
output_file_close (out_file_name); output_file_close (out_file_name);