/* Support for the generic parts of PE/PEI, for BFD.
- Copyright (C) 1995-2021 Free Software Foundation, Inc.
+ Copyright (C) 1995-2022 Free Software Foundation, Inc.
Written by Cygnus Solutions.
This file is part of BFD, the Binary File Descriptor library.
#include "libpei.h"
-static bfd_boolean (*pe_saved_coff_bfd_print_private_bfd_data) (bfd *, void *) =
+static bool (*pe_saved_coff_bfd_print_private_bfd_data) (bfd *, void *) =
#ifndef coff_bfd_print_private_bfd_data
NULL;
#else
#undef coff_bfd_print_private_bfd_data
#endif
-static bfd_boolean pe_print_private_bfd_data (bfd *, void *);
+static bool pe_print_private_bfd_data (bfd *, void *);
#define coff_bfd_print_private_bfd_data pe_print_private_bfd_data
-static bfd_boolean (*pe_saved_coff_bfd_copy_private_bfd_data) (bfd *, bfd *) =
+static bool (*pe_saved_coff_bfd_copy_private_bfd_data) (bfd *, bfd *) =
#ifndef coff_bfd_copy_private_bfd_data
NULL;
#else
#undef coff_bfd_copy_private_bfd_data
#endif
-static bfd_boolean pe_bfd_copy_private_bfd_data (bfd *, bfd *);
+static bool pe_bfd_copy_private_bfd_data (bfd *, bfd *);
#define coff_bfd_copy_private_bfd_data pe_bfd_copy_private_bfd_data
#define coff_mkobject pe_mkobject
{
scnhdr_int->s_vaddr += pe_data (abfd)->pe_opthdr.ImageBase;
/* Do not cut upper 32-bits for 64-bit vma. */
-#ifndef COFF_WITH_pex64
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
scnhdr_int->s_vaddr &= 0xffffffff;
#endif
}
#endif
}
-static bfd_boolean
+static bool
pe_mkobject (bfd * abfd)
{
pe_data_type *pe;
abfd->tdata.pe_obj_data = (struct pe_tdata *) bfd_zalloc (abfd, amt);
if (abfd->tdata.pe_obj_data == 0)
- return FALSE;
+ return false;
pe = pe_data (abfd);
pe->dos_message[15] = 0x0;
memset (& pe->pe_opthdr, 0, sizeof pe->pe_opthdr);
- return TRUE;
+ return true;
}
/* Create the COFF backend specific information. */
return (void *) pe;
}
-static bfd_boolean
+static bool
pe_print_private_bfd_data (bfd *abfd, void * vfile)
{
FILE *file = (FILE *) vfile;
if (!_bfd_XX_print_private_bfd_data_common (abfd, vfile))
- return FALSE;
+ return false;
if (pe_saved_coff_bfd_print_private_bfd_data == NULL)
- return TRUE;
+ return true;
fputc ('\n', file);
/* Copy any private info we understand from the input bfd
to the output bfd. */
-static bfd_boolean
+static bool
pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
{
/* PR binutils/716: Copy the large address aware flag.
pe_data (obfd)->real_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
if (!_bfd_XX_bfd_copy_private_bfd_data_common (ibfd, obfd))
- return FALSE;
+ return false;
if (pe_saved_coff_bfd_copy_private_bfd_data)
return pe_saved_coff_bfd_copy_private_bfd_data (ibfd, obfd);
- return TRUE;
+ return true;
}
#define coff_bfd_copy_private_section_data \
internal->r_vaddr = address;
internal->r_symndx = sym_index;
- internal->r_type = entry->howto->type;
+ internal->r_type = entry->howto ? entry->howto->type : 0;
vars->relcount ++;
abort ();
coff_section_data (vars->abfd, sec)->relocs = vars->int_reltab;
- coff_section_data (vars->abfd, sec)->keep_relocs = TRUE;
+ coff_section_data (vars->abfd, sec)->keep_relocs = true;
sec->relocation = vars->reltab;
sec->reloc_count = vars->relcount;
ent->u.syment.n_sclass = sclass;
ent->u.syment.n_scnum = section->target_index;
ent->u.syment._n._n_n._n_offset = (bfd_hostptr_t) sym;
- ent->is_sym = TRUE;
+ ent->is_sym = true;
sym->symbol.the_bfd = vars->abfd;
sym->symbol.name = vars->string_ptr;
},
#endif
+#ifdef AARCH64MAGIC
+/* We don't currently support jumping to DLLs, so if
+ someone does try emit a runtime trap. Through UDF #0. */
+ { AARCH64MAGIC,
+ { 0x00, 0x00, 0x00, 0x00 },
+ 4, 0
+ },
+
+#endif
+
#ifdef ARMPEMAGIC
{ ARMPEMAGIC,
{ 0x00, 0xc0, 0x9f, 0xe5, 0x00, 0xf0,
/* Build a full BFD from the information supplied in a ILF object. */
-static bfd_boolean
+static bool
pe_ILF_build_a_bfd (bfd * abfd,
unsigned int magic,
char * symbol_name,
/* xgettext:c-format */
_bfd_error_handler (_("%pB: unhandled import type; %x"),
abfd, import_type);
- return FALSE;
+ return false;
default:
/* xgettext:c-format */
_bfd_error_handler (_("%pB: unrecognized import type; %x"),
abfd, import_type);
- return FALSE;
+ return false;
}
switch (import_name_type)
/* xgettext:c-format */
_bfd_error_handler (_("%pB: unrecognized import name type; %x"),
abfd, import_name_type);
- return FALSE;
+ return false;
}
/* Initialise local variables.
vars.bim
= (struct bfd_in_memory *) bfd_malloc ((bfd_size_type) sizeof (*vars.bim));
if (vars.bim == NULL)
- return FALSE;
+ return false;
ptr = (bfd_byte *) bfd_zmalloc ((bfd_size_type) ILF_DATA_SIZE);
vars.bim->buffer = ptr;
/* See PR 20907 for a reproducer. */
goto error_return;
-#ifdef COFF_WITH_pex64
+#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
((unsigned int *) id4->contents)[0] = ordinal;
((unsigned int *) id4->contents)[1] = 0x80000000;
((unsigned int *) id5->contents)[0] = ordinal;
obj_raw_syment_count (abfd) = vars.sym_index;
obj_coff_external_syms (abfd) = (void *) vars.esym_table;
- obj_coff_keep_syms (abfd) = TRUE;
+ obj_coff_keep_syms (abfd) = true;
obj_convert (abfd) = vars.sym_table;
obj_conv_table_size (abfd) = vars.sym_index;
obj_coff_strings (abfd) = vars.string_table;
- obj_coff_keep_strings (abfd) = TRUE;
+ obj_coff_keep_strings (abfd) = true;
abfd->flags |= HAS_SYMS;
- return TRUE;
+ return true;
error_return:
free (vars.bim->buffer);
free (vars.bim);
- return FALSE;
+ return false;
}
/* We have detected a Image Library Format archive element.
#endif
break;
+ case IMAGE_FILE_MACHINE_ARM64:
+#ifdef AARCH64MAGIC
+ magic = AARCH64MAGIC;
+#endif
+ break;
+
case IMAGE_FILE_MACHINE_THUMB:
#ifdef THUMBPEMAGIC
{
if (opt_hdr_size != 0)
{
bfd_size_type amt = opt_hdr_size;
- void * opthdr;
+ bfd_byte * opthdr;
/* PR 17521 file: 230-131433-0.004. */
if (amt < sizeof (PEAOUTHDR))