/* Generic ECOFF (Extended-COFF) routines.
- Copyright (C) 1990-2021 Free Software Foundation, Inc.
+ Copyright (C) 1990-2022 Free Software Foundation, Inc.
Original version by Per Bothner.
Full support added by Ian Lance Taylor, ian@cygnus.com.
#include "libiberty.h"
#define streq(a, b) (strcmp ((a), (b)) == 0)
-#define strneq(a, b, n) (strncmp ((a), (b), (n)) == 0)
\f
/* This stuff is somewhat copied from coffcode.h. */
(*backend->swap_reloc_in) (abfd,
external_relocs + i * external_reloc_size,
&intern);
+ rptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
+ rptr->addend = 0;
if (intern.r_extern)
{
/* r_symndx is an index into the external symbols. */
- BFD_ASSERT (intern.r_symndx >= 0
- && (intern.r_symndx
- < (ecoff_data (abfd)
- ->debug_info.symbolic_header.iextMax)));
- rptr->sym_ptr_ptr = symbols + intern.r_symndx;
- rptr->addend = 0;
- }
- else if (intern.r_symndx == RELOC_SECTION_NONE
- || intern.r_symndx == RELOC_SECTION_ABS)
- {
- rptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
- rptr->addend = 0;
+ if (intern.r_symndx >= 0
+ && (intern.r_symndx
+ < (ecoff_data (abfd)->debug_info.symbolic_header.iextMax)))
+ rptr->sym_ptr_ptr = symbols + intern.r_symndx;
}
else
{
case RELOC_SECTION_FINI: sec_name = _FINI; break;
case RELOC_SECTION_LITA: sec_name = _LITA; break;
case RELOC_SECTION_RCONST: sec_name = _RCONST; break;
- default: abort ();
+ default:
+ sec_name = NULL;
+ break;
}
- sec = bfd_get_section_by_name (abfd, sec_name);
- if (sec == NULL)
- abort ();
- rptr->sym_ptr_ptr = sec->symbol_ptr_ptr;
-
- rptr->addend = - bfd_section_vma (sec);
+ if (sec_name != NULL)
+ {
+ sec = bfd_get_section_by_name (abfd, sec_name);
+ if (sec != NULL)
+ {
+ rptr->sym_ptr_ptr = sec->symbol_ptr_ptr;
+ rptr->addend = - bfd_section_vma (sec);
+ }
+ }
}
rptr->address = intern.r_vaddr - bfd_section_vma (section);
return bfd_slurp_armap (abfd);
/* See if the first element is an armap. */
- if (! strneq (nextname, ecoff_backend (abfd)->armap_start, ARMAP_START_LENGTH)
+ if (strncmp (nextname, ecoff_backend (abfd)->armap_start, ARMAP_START_LENGTH) != 0
|| nextname[ARMAP_HEADER_MARKER_INDEX] != ARMAP_MARKER
|| (nextname[ARMAP_HEADER_ENDIAN_INDEX] != ARMAP_BIG_ENDIAN
&& nextname[ARMAP_HEADER_ENDIAN_INDEX] != ARMAP_LITTLE_ENDIAN)
|| nextname[ARMAP_OBJECT_MARKER_INDEX] != ARMAP_MARKER
|| (nextname[ARMAP_OBJECT_ENDIAN_INDEX] != ARMAP_BIG_ENDIAN
&& nextname[ARMAP_OBJECT_ENDIAN_INDEX] != ARMAP_LITTLE_ENDIAN)
- || ! strneq (nextname + ARMAP_END_INDEX, ARMAP_END, sizeof ARMAP_END - 1))
+ || strncmp (nextname + ARMAP_END_INDEX, ARMAP_END, sizeof ARMAP_END - 1) != 0)
{
abfd->has_armap = false;
return true;
hash = srch;
}
- element = (*backend->get_elt_at_filepos) (abfd, (file_ptr) file_offset);
+ element = (*backend->get_elt_at_filepos) (abfd,
+ (file_ptr) file_offset,
+ info);
if (element == NULL)
return false;