diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/aoutx.h | 10 |
2 files changed, 14 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 580d114..33aa51c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +Thu Apr 23 18:37:55 1992 Fred Fish (fnf@cygnus.com) + + * aoutx.h (aout_<bits>_swap_exec_header_in): Zero out the + internal_exec structure before initializing the fields that + are used, so that the unused fields are in a known state. + Wed Apr 22 09:36:08 1992 Fred Fish (fnf@cygnus.com) * tekhex.c (struct data_struct): Convert from typedef that diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 95c1a92..c1b36d4 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -222,6 +222,11 @@ DEFUN(NAME(aout,swap_exec_header_in),(abfd, raw_bytes, execp), { struct external_exec *bytes = (struct external_exec *)raw_bytes; + /* The internal_exec structure has some fields that are unused in this + configuration (IE for i960), so ensure that all such uninitialized + fields are zero'd out. There are places where two of these structs + are memcmp'd, and thus the contents do matter. */ + memset (execp, 0, sizeof (struct internal_exec)); /* Now fill in fields in the execp, from the bytes in the raw data. */ execp->a_info = bfd_h_get_32 (abfd, bytes->e_info); execp->a_text = GET_WORD (abfd, bytes->e_text); @@ -677,7 +682,7 @@ boolean if (abfd->flags & (D_PAGED|WP_TEXT)) { bfd_size_type text_pad = - BFD_ALIGN(text_size, adata(abfd).segment_size) + BFD_ALIGN(text_size, adata(abfd).page_size) - text_size; text_end += text_pad; obj_textsec(abfd)->_raw_size += text_pad; @@ -1687,7 +1692,8 @@ DEFUN(NAME(aout,print_symbol),(ignore_abfd, afile, symbol, how), if (section_code == 'U') fprintf(file, " "); - fprintf_vma(file, symbol->value+symbol->section->vma); + else + fprintf_vma(file, symbol->value+symbol->section->vma); if (section_code == '?') { int type_code = aout_symbol(symbol)->type & 0xff; |