/* BFD back-end for IBM RS/6000 "XCOFF64" files.
- Copyright (C) 2000-2020 Free Software Foundation, Inc.
+ Copyright (C) 2000-2021 Free Software Foundation, Inc.
Written Clinton Popetz.
Contributed by Cygnus Support.
asection **);
static bfd_boolean xcoff64_slurp_armap
(bfd *);
-static const bfd_target *xcoff64_archive_p
+static bfd_cleanup xcoff64_archive_p
(bfd *);
static bfd *xcoff64_openr_next_archived_file
(bfd *, bfd *);
(bfd *, void *);
/* Relocation functions */
-static bfd_boolean xcoff64_reloc_type_br
- (XCOFF_RELOC_FUNCTION_ARGS);
+static xcoff_reloc_function xcoff64_reloc_type_br;
-bfd_boolean (*xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION])
- (XCOFF_RELOC_FUNCTION_ARGS) =
+xcoff_reloc_function *const
+xcoff64_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION] =
{
xcoff_reloc_type_pos, /* R_POS (0x00) */
xcoff_reloc_type_neg, /* R_NEG (0x01) */
#define coff_bfd_reloc_type_lookup xcoff64_reloc_type_lookup
#define coff_bfd_reloc_name_lookup xcoff64_reloc_name_lookup
#ifdef AIX_CORE
-extern const bfd_target * rs6000coff_core_p
+extern bfd_cleanup rs6000coff_core_p
(bfd *abfd);
extern bfd_boolean rs6000coff_core_file_matches_executable_p
(bfd *cbfd, bfd *ebfd);
{
if (info->unresolved_syms_in_objects != RM_IGNORE
&& (h->flags & XCOFF_WAS_UNDEFINED) != 0)
- (*info->callbacks->undefined_symbol)
+ info->callbacks->undefined_symbol
(info, h->root.root.string, input_bfd, input_section,
rel->r_vaddr - input_section->vma,
- info->unresolved_syms_in_objects == RM_GENERATE_ERROR);
+ info->unresolved_syms_in_objects == RM_DIAGNOSE
+ && !info->warn_unresolved_syms);
if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
return FALSE;
sz = bfd_scan_vma (hdr.size, (const char **) NULL, 10);
- if (sz == (bfd_size_type) -1)
+ if (sz + 1 < 9)
{
- bfd_set_error (bfd_error_no_memory);
+ bfd_set_error (bfd_error_bad_value);
return FALSE;
}
/* Read in the entire symbol table. */
- contents = (bfd_byte *) bfd_alloc (abfd, sz + 1);
+ contents = (bfd_byte *) _bfd_alloc_and_read (abfd, sz + 1, sz);
if (contents == NULL)
return FALSE;
- if (bfd_bread (contents, sz, abfd) != sz)
- return FALSE;
/* Ensure strings are NULL terminated so we don't wander off the end
of the buffer. */
/* See if this is an NEW XCOFF archive. */
-static const bfd_target *
+static bfd_cleanup
xcoff64_archive_p (bfd *abfd)
{
struct artdata *tdata_hold;
char magic[SXCOFFARMAG];
/* This is the new format. */
struct xcoff_ar_file_hdr_big hdr;
- bfd_size_type amt = SXCOFFARMAG;
+ size_t amt = SXCOFFARMAG;
if (bfd_bread (magic, amt, abfd) != amt)
{
return NULL;
}
- return abfd->xvec;
+ return _bfd_no_cleanup;
}
MINUS_ONE, /* dst_mask */
FALSE); /* pcrel_offset */
-static unsigned long xcoff64_glink_code[10] =
+static const unsigned long xcoff64_glink_code[10] =
{
0xe9820000, /* ld r12,0(r2) */
0xf8410028, /* std r2,40(r1) */
'/', /* ar_pad_char */
15, /* ar_max_namelen */
0, /* match priority. */
+ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
/* data */
bfd_getb64,
&bfd_xcoff_backend_data,
};
-extern const bfd_target *xcoff64_core_p
+extern bfd_cleanup xcoff64_core_p
(bfd *);
extern bfd_boolean xcoff64_core_file_matches_executable_p
(bfd *, bfd *);
'/', /* ar_pad_char */
15, /* ar_max_namelen */
0, /* match priority. */
+ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
/* data */
bfd_getb64,