X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bfd%2Fi386lynx.c;h=e5aa6f31bd3d633c5ded5ed5dcad68263ca94beb;hb=0b99131d48925b260f109613aba933abe711e90b;hp=075d1c0e80432edeb6f835517deaacfe32811823;hpb=b90efa5b79ac1524ec260f8eb89d1be37e0219a7;p=binutils-gdb.git diff --git a/bfd/i386lynx.c b/bfd/i386lynx.c index 075d1c0e804..e5aa6f31bd3 100644 --- a/bfd/i386lynx.c +++ b/bfd/i386lynx.c @@ -1,5 +1,5 @@ /* BFD back-end for i386 a.out binaries under LynxOS. - Copyright (C) 1990-2015 Free Software Foundation, Inc. + Copyright (C) 1990-2022 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -36,14 +36,12 @@ #ifndef WRITE_HEADERS #define WRITE_HEADERS(abfd, execp) \ { \ - bfd_size_type text_size; /* dummy vars */ \ - file_ptr text_end; \ if (adata(abfd).magic == undecided_magic) \ - NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end); \ - \ + NAME(aout,adjust_sizes_and_vmas) (abfd); \ + \ execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE; \ execp->a_entry = bfd_get_start_address (abfd); \ - \ + \ execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * \ obj_reloc_entry_size (abfd)); \ execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * \ @@ -53,29 +51,29 @@ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 \ || bfd_bwrite (&exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, \ abfd) != EXEC_BYTES_SIZE) \ - return FALSE; \ + return false; \ /* Now write out reloc info, followed by syms and strings */ \ - \ - if (bfd_get_symcount (abfd) != 0) \ + \ + if (bfd_get_symcount (abfd) != 0) \ { \ - if (bfd_seek (abfd, (file_ptr) (N_SYMOFF(*execp)), SEEK_SET) \ + if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET) \ != 0) \ - return FALSE; \ + return false; \ \ - if (! NAME(aout,write_syms) (abfd)) return FALSE; \ + if (! NAME(aout,write_syms) (abfd)) return false; \ \ - if (bfd_seek (abfd, (file_ptr) (N_TRELOFF(*execp)), SEEK_SET) \ + if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) \ != 0) \ - return FALSE; \ + return false; \ \ if (!NAME(lynx,squirt_out_relocs) (abfd, obj_textsec (abfd))) \ - return FALSE; \ - if (bfd_seek (abfd, (file_ptr) (N_DRELOFF(*execp)), SEEK_SET) \ + return false; \ + if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) \ != 0) \ - return 0; \ + return 0; \ \ if (!NAME(lynx,squirt_out_relocs) (abfd, obj_datasec (abfd))) \ - return FALSE; \ + return false; \ } \ } #endif @@ -88,7 +86,7 @@ char *lynx_core_file_failing_command (); int lynx_core_file_failing_signal (); -bfd_boolean lynx_core_file_matches_executable_p (); +bool lynx_core_file_matches_executable_p (); const bfd_target *lynx_core_file_p (); #define MY_core_file_failing_command lynx_core_file_failing_command @@ -281,41 +279,43 @@ NAME(lynx,swap_ext_reloc_out) (bfd *abfd, to give the true offset from the section */ -#define MOVE_ADDRESS(ad) \ +#define MOVE_ADDRESS(ad) \ if (r_extern) \ { \ - /* undefined symbol */ \ - cache_ptr->sym_ptr_ptr = symbols + r_index; \ - cache_ptr->addend = ad; \ + /* undefined symbol */ \ + if (r_index < bfd_get_symcount (abfd)) \ + cache_ptr->sym_ptr_ptr = symbols + r_index; \ + cache_ptr->addend = ad; \ } \ else \ { \ - /* defined, section relative. replace symbol with pointer to \ - symbol which points to section */ \ - switch (r_index) { \ - case N_TEXT: \ - case N_TEXT | N_EXT: \ - cache_ptr->sym_ptr_ptr = obj_textsec(abfd)->symbol_ptr_ptr; \ - cache_ptr->addend = ad - su->textsec->vma; \ - break; \ - case N_DATA: \ - case N_DATA | N_EXT: \ - cache_ptr->sym_ptr_ptr = obj_datasec(abfd)->symbol_ptr_ptr; \ - cache_ptr->addend = ad - su->datasec->vma; \ - break; \ - case N_BSS: \ - case N_BSS | N_EXT: \ - cache_ptr->sym_ptr_ptr = obj_bsssec(abfd)->symbol_ptr_ptr; \ - cache_ptr->addend = ad - su->bsssec->vma; \ - break; \ - default: \ - case N_ABS: \ - case N_ABS | N_EXT: \ - cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; \ - cache_ptr->addend = ad; \ - break; \ + /* defined, section relative. replace symbol with pointer to \ + symbol which points to section */ \ + switch (r_index) \ + { \ + case N_TEXT: \ + case N_TEXT | N_EXT: \ + cache_ptr->sym_ptr_ptr = obj_textsec(abfd)->symbol_ptr_ptr; \ + cache_ptr->addend = ad - su->textsec->vma; \ + break; \ + case N_DATA: \ + case N_DATA | N_EXT: \ + cache_ptr->sym_ptr_ptr = obj_datasec(abfd)->symbol_ptr_ptr; \ + cache_ptr->addend = ad - su->datasec->vma; \ + break; \ + case N_BSS: \ + case N_BSS | N_EXT: \ + cache_ptr->sym_ptr_ptr = obj_bsssec(abfd)->symbol_ptr_ptr; \ + cache_ptr->addend = ad - su->bsssec->vma; \ + break; \ + default: \ + case N_ABS: \ + case N_ABS | N_EXT: \ + cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; \ + cache_ptr->addend = ad; \ + break; \ + } \ } \ - } \ static void NAME(lynx,swap_ext_reloc_in) (bfd *abfd, @@ -324,7 +324,7 @@ NAME(lynx,swap_ext_reloc_in) (bfd *abfd, asymbol **symbols, bfd_size_type symcount ATTRIBUTE_UNUSED) { - int r_index; + unsigned int r_index; int r_extern; unsigned int r_type; struct aoutdata *su = &(abfd->tdata.aout_data->a); @@ -347,7 +347,7 @@ NAME(lynx,swap_std_reloc_in) (bfd *abfd, asymbol **symbols, bfd_size_type symcount ATTRIBUTE_UNUSED) { - int r_index; + unsigned int r_index; int r_extern; unsigned int r_length; int r_pcrel; @@ -369,7 +369,7 @@ NAME(lynx,swap_std_reloc_in) (bfd *abfd, /* Reloc hackery */ -static bfd_boolean +static bool NAME(lynx,slurp_reloc_table) (bfd *abfd, sec_ptr asect, asymbol **symbols) @@ -381,10 +381,10 @@ NAME(lynx,slurp_reloc_table) (bfd *abfd, size_t each_size; if (asect->relocation) - return TRUE; + return true; if (asect->flags & SEC_CONSTRUCTOR) - return TRUE; + return true; if (asect == obj_datasec (abfd)) { @@ -399,11 +399,11 @@ NAME(lynx,slurp_reloc_table) (bfd *abfd, } bfd_set_error (bfd_error_invalid_operation); - return FALSE; + return false; -doit: + doit: if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0) - return FALSE; + return false; each_size = obj_reloc_entry_size (abfd); count = reloc_size / each_size; @@ -411,20 +411,13 @@ doit: reloc_cache = (arelent *) bfd_zmalloc (count * sizeof (arelent)); if (!reloc_cache && count != 0) - return FALSE; + return false; - relocs = bfd_alloc (abfd, reloc_size); + relocs = _bfd_alloc_and_read (abfd, reloc_size, reloc_size); if (!relocs && reloc_size != 0) { free (reloc_cache); - return FALSE; - } - - if (bfd_bread (relocs, reloc_size, abfd) != reloc_size) - { - bfd_release (abfd, relocs); - free (reloc_cache); - return FALSE; + return false; } if (each_size == RELOC_EXT_SIZE) @@ -456,14 +449,14 @@ doit: bfd_release (abfd, relocs); asect->relocation = reloc_cache; asect->reloc_count = count; - return TRUE; + return true; } /* Write out a relocation section into an object file. */ -static bfd_boolean +static bool NAME(lynx,squirt_out_relocs) (bfd *abfd, asection *section) { arelent **generic; @@ -473,14 +466,14 @@ NAME(lynx,squirt_out_relocs) (bfd *abfd, asection *section) bfd_size_type natsize; if (count == 0) - return TRUE; + return true; each_size = obj_reloc_entry_size (abfd); natsize = count; natsize *= each_size; native = (unsigned char *) bfd_zalloc (abfd, natsize); if (!native) - return FALSE; + return false; generic = section->orelocation; @@ -502,11 +495,11 @@ NAME(lynx,squirt_out_relocs) (bfd *abfd, asection *section) if (bfd_bwrite (native, natsize, abfd) != natsize) { bfd_release (abfd, native); - return FALSE; + return false; } bfd_release (abfd, native); - return TRUE; + return true; } /* This is stupid. This function should be a boolean predicate */