aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
Diffstat (limited to 'bfd')
-rw-r--r--bfd/Makefile.in1
-rw-r--r--bfd/aclocal.m41
-rw-r--r--bfd/aout-target.h13
-rw-r--r--bfd/aoutx.h9
-rw-r--r--bfd/archive.c8
-rw-r--r--bfd/bfd-in2.h45
-rw-r--r--bfd/bfd.c42
-rw-r--r--bfd/coff-alpha.c121
-rw-r--r--bfd/coff-arm.c12
-rw-r--r--bfd/coff-mips.c2
-rw-r--r--bfd/coff-rs6000.c4
-rw-r--r--bfd/coff-sh.c2
-rw-r--r--bfd/coff64-rs6000.c4
-rw-r--r--bfd/coffcode.h23
-rw-r--r--bfd/coffgen.c33
-rw-r--r--bfd/cofflink.c49
-rw-r--r--bfd/compress.c51
-rwxr-xr-xbfd/configure60
-rw-r--r--bfd/configure.ac8
-rw-r--r--bfd/cpu-riscv.c1
-rw-r--r--bfd/cpu-riscv.h1
-rw-r--r--bfd/elf-attrs.c38
-rw-r--r--bfd/elf-bfd.h15
-rw-r--r--bfd/elf-eh-frame.c2
-rw-r--r--bfd/elf-sframe.c131
-rw-r--r--bfd/elf.c247
-rw-r--r--bfd/elf32-arm.c3
-rw-r--r--bfd/elf32-nds32.c22
-rw-r--r--bfd/elf32-sh.c4
-rw-r--r--bfd/elf64-mips.c12
-rw-r--r--bfd/elf64-s390.c19
-rw-r--r--bfd/elf64-x86-64.c52
-rw-r--r--bfd/elflink.c57
-rw-r--r--bfd/elfn32-mips.c12
-rw-r--r--bfd/elfnn-aarch64.c3
-rw-r--r--bfd/elfnn-loongarch.c574
-rw-r--r--bfd/elfnn-riscv.c304
-rw-r--r--bfd/elfxx-aarch64.c34
-rw-r--r--bfd/elfxx-loongarch.c17
-rw-r--r--bfd/elfxx-mips.c33
-rw-r--r--bfd/elfxx-riscv.c368
-rw-r--r--bfd/elfxx-riscv.h19
-rw-r--r--bfd/elfxx-target.h2
-rw-r--r--bfd/elfxx-x86.c22
-rw-r--r--bfd/format.c45
-rw-r--r--bfd/i386aout.c1
-rw-r--r--bfd/libaout.h7
-rw-r--r--bfd/libbfd-in.h15
-rw-r--r--bfd/libbfd.c10
-rw-r--r--bfd/libbfd.h16
-rw-r--r--bfd/libcoff.h9
-rw-r--r--bfd/libecoff.h3
-rw-r--r--bfd/libpei.h2
-rw-r--r--bfd/linker.c20
-rw-r--r--bfd/mach-o-target.c1
-rw-r--r--bfd/mach-o.c12
-rw-r--r--bfd/mach-o.h3
-rw-r--r--bfd/mmo.c1
-rw-r--r--bfd/pdp11.c9
-rw-r--r--bfd/pe-aarch64.c2
-rw-r--r--bfd/pe-arm.c2
-rw-r--r--bfd/pe-i386.c2
-rw-r--r--bfd/pe-x86_64.c2
-rw-r--r--bfd/peXXigen.c164
-rw-r--r--bfd/pei-aarch64.c2
-rw-r--r--bfd/pei-arm.c2
-rw-r--r--bfd/pei-i386.c2
-rw-r--r--bfd/pei-loongarch64.c2
-rw-r--r--bfd/pei-riscv64.c2
-rw-r--r--bfd/pei-x86_64.c2
-rw-r--r--bfd/plugin.c5
-rw-r--r--bfd/po/ms.po2690
-rw-r--r--bfd/ppcboot.c1
-rw-r--r--bfd/reloc.c6
-rw-r--r--bfd/section.c7
-rw-r--r--bfd/som.c14
-rw-r--r--bfd/syms.c1
-rw-r--r--bfd/targets.c11
-rw-r--r--bfd/version.h2
-rw-r--r--bfd/vms-alpha.c1
-rw-r--r--bfd/xcofflink.c97
81 files changed, 3618 insertions, 2035 deletions
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
index 1543af7..8a670ad 100644
--- a/bfd/Makefile.in
+++ b/bfd/Makefile.in
@@ -113,7 +113,6 @@ target_triplet = @target@
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
- $(top_srcdir)/../config/bfd64.m4 \
$(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/../config/gettext-sister.m4 \
$(top_srcdir)/../config/gettext.m4 \
diff --git a/bfd/aclocal.m4 b/bfd/aclocal.m4
index 8364b5d..4d1b7ba 100644
--- a/bfd/aclocal.m4
+++ b/bfd/aclocal.m4
@@ -1168,7 +1168,6 @@ AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([../config/acx.m4])
-m4_include([../config/bfd64.m4])
m4_include([../config/depstand.m4])
m4_include([../config/gettext-sister.m4])
m4_include([../config/gettext.m4])
diff --git a/bfd/aout-target.h b/bfd/aout-target.h
index f513e1b..c6d9d60 100644
--- a/bfd/aout-target.h
+++ b/bfd/aout-target.h
@@ -214,9 +214,11 @@ static bool
MY_bfd_copy_private_section_data (bfd *ibfd,
asection *isec ATTRIBUTE_UNUSED,
bfd *obfd,
- asection *osec ATTRIBUTE_UNUSED)
+ asection *osec ATTRIBUTE_UNUSED,
+ struct bfd_link_info *link_info)
{
- if (bfd_get_flavour (ibfd) == bfd_target_aout_flavour
+ if (link_info == NULL
+ && bfd_get_flavour (ibfd) == bfd_target_aout_flavour
&& bfd_get_flavour (obfd) == bfd_target_aout_flavour)
obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
return true;
@@ -286,9 +288,6 @@ MY (set_sizes) (bfd *abfd)
#ifndef MY_add_dynamic_symbols
#define MY_add_dynamic_symbols 0
#endif
-#ifndef MY_add_one_symbol
-#define MY_add_one_symbol 0
-#endif
#ifndef MY_link_dynamic_object
#define MY_link_dynamic_object 0
#endif
@@ -312,7 +311,6 @@ static const struct aout_backend_data MY (backend_data) =
MY_set_sizes,
MY_exec_header_not_counted,
MY_add_dynamic_symbols,
- MY_add_one_symbol,
MY_link_dynamic_object,
MY_write_dynamic_symbol,
MY_check_dynamic_reloc,
@@ -566,9 +564,6 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
#define MY_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
#endif
-#define MY_init_private_section_data \
- _bfd_generic_init_private_section_data
-
#ifndef MY_bfd_copy_private_symbol_data
#define MY_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data
#endif
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 63c654f..81e0804 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -2973,9 +2973,6 @@ NAME (aout, link_hash_table_create) (bfd *abfd)
static bool
aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
{
- bool (*add_one_symbol)
- (struct bfd_link_info *, bfd *, const char *, flagword, asection *,
- bfd_vma, const char *, bool, bool, struct bfd_link_hash_entry **);
struct external_nlist *syms;
bfd_size_type sym_count;
char *strings;
@@ -3013,10 +3010,6 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
return false;
obj_aout_sym_hashes (abfd) = sym_hash;
- add_one_symbol = aout_backend_info (abfd)->add_one_symbol;
- if (add_one_symbol == NULL)
- add_one_symbol = _bfd_generic_link_add_one_symbol;
-
p = syms;
pend = p + sym_count;
for (; p < pend; p++, sym_hash++)
@@ -3167,7 +3160,7 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
break;
}
- if (! ((*add_one_symbol)
+ if (! (_bfd_generic_link_add_one_symbol
(info, abfd, name, flags, section, value, string, copy, false,
(struct bfd_link_hash_entry **) sym_hash)))
return false;
diff --git a/bfd/archive.c b/bfd/archive.c
index 6cda73ce..8e20554 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -2399,12 +2399,8 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength)
map = new_map;
}
- if (syms[src_count]->name != NULL
- && syms[src_count]->name[0] == '_'
- && syms[src_count]->name[1] == '_'
- && strcmp (syms[src_count]->name
- + (syms[src_count]->name[2] == '_'),
- "__gnu_lto_slim") == 0
+ if (bfd_lto_slim_symbol_p (current,
+ syms[src_count]->name)
&& report_plugin_err)
{
report_plugin_err = false;
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 7a8318e..b013ef9 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -1034,11 +1034,12 @@ bool bfd_malloc_and_get_section
(bfd *abfd, asection *section, bfd_byte **buf);
bool bfd_copy_private_section_data
- (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
+ (bfd *ibfd, asection *isec, bfd *obfd, asection *osec,
+ struct bfd_link_info *link_info);
-#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
+#define bfd_copy_private_section_data(ibfd, isec, obfd, osec, link_info) \
BFD_SEND (obfd, _bfd_copy_private_section_data, \
- (ibfd, isection, obfd, osection))
+ (ibfd, isec, obfd, osec, link_info))
bool bfd_generic_is_group_section (bfd *, const asection *sec);
const char *bfd_generic_group_name (bfd *, const asection *sec);
@@ -2302,6 +2303,16 @@ bfd_get_lto_type (const bfd *abfd)
return abfd->lto_type;
}
+static inline bool
+bfd_lto_slim_symbol_p (const bfd *abfd, const char *name)
+{
+ return (bfd_get_lto_type (abfd) != lto_non_ir_object
+ && name != NULL
+ && name[0] == '_'
+ && name[1] == '_'
+ && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0);
+}
+
static inline flagword
bfd_get_file_flags (const bfd *abfd)
{
@@ -2913,6 +2924,18 @@ const char *bfd_format_string (bfd_format format);
&& bfd_is_abs_section ((H)->u.def.section) \
&& !(H)->rel_from_abs)
+bool _bfd_generic_link_add_one_symbol
+ (struct bfd_link_info *info,
+ bfd *abfd,
+ const char *name,
+ flagword flags,
+ asection *section,
+ bfd_vma value,
+ const char *string,
+ bool copy,
+ bool collect,
+ struct bfd_link_hash_entry **hashp);
+
bool bfd_link_align_section (asection *, unsigned int);
bool bfd_link_split_section (bfd *abfd, asection *sec);
@@ -7003,6 +7026,11 @@ enum bfd_reloc_code_real
assembler and not (currently) written to any object files. */
BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC,
+ /* AArch64 9 bit pc-relative conditional branch and compare & branch.
+ The lowest two bits must be zero and are not stored in the
+ instruction, giving an 11 bit signed byte offset. */
+ BFD_RELOC_AARCH64_BRANCH9,
+
/* Tilera TILEPro Relocations. */
BFD_RELOC_TILEPRO_COPY,
BFD_RELOC_TILEPRO_GLOB_DAT,
@@ -7609,7 +7637,6 @@ typedef struct bfd_target
#define BFD_JUMP_TABLE_COPY(NAME) \
NAME##_bfd_copy_private_bfd_data, \
NAME##_bfd_merge_private_bfd_data, \
- NAME##_init_private_section_data, \
NAME##_bfd_copy_private_section_data, \
NAME##_bfd_copy_private_symbol_data, \
NAME##_bfd_copy_private_header_data, \
@@ -7622,16 +7649,10 @@ typedef struct bfd_target
/* Called to merge BFD general private data from one object file
to a common output file when linking. */
bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
- /* Called to initialize BFD private section data from one object file
- to another. */
-#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
- BFD_SEND (obfd, _bfd_init_private_section_data, \
- (ibfd, isec, obfd, osec, link_info))
- bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
- struct bfd_link_info *);
/* Called to copy BFD private section data from one object file
to another. */
- bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);
+ bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
+ struct bfd_link_info *);
/* Called to copy BFD private symbol data from one symbol
to another. */
bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
diff --git a/bfd/bfd.c b/bfd/bfd.c
index a8d1314..858ab5c 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -470,6 +470,16 @@ EXTERNAL
. return abfd->lto_type;
.}
.
+.static inline bool
+.bfd_lto_slim_symbol_p (const bfd *abfd, const char *name)
+.{
+. return (bfd_get_lto_type (abfd) != lto_non_ir_object
+. && name != NULL
+. && name[0] == '_'
+. && name[1] == '_'
+. && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0);
+.}
+.
.static inline flagword
.bfd_get_file_flags (const bfd *abfd)
.{
@@ -709,6 +719,12 @@ EXTERNAL
#define EXIT_FAILURE 1
#endif
+#ifdef TLS
+#define THREAD_LOCAL TLS
+#else
+#define THREAD_LOCAL
+#endif
+
/* provide storage for subsystem, stack and heap data which may have been
passed in on the command line. Ld puts this data into a bfd_link_info
@@ -799,8 +815,8 @@ const char *const bfd_errmsgs[] =
N_("#<invalid error code>")
};
-static TLS bfd_error_type bfd_error;
-static TLS char *_bfd_error_buf;
+static THREAD_LOCAL bfd_error_type bfd_error;
+static THREAD_LOCAL char *_bfd_error_buf;
/* Free any data associated with the BFD error. */
@@ -1679,7 +1695,7 @@ _bfd_per_xvec_warn (struct per_xvec_messages *messages, size_t alloc)
error_handler_sprintf; when NULL, _bfd_error_internal will be used
instead. */
-static TLS struct per_xvec_messages *error_handler_messages;
+static THREAD_LOCAL struct per_xvec_messages *error_handler_messages;
/* A special value for error_handler_messages that indicates that the
error should simply be ignored. */
@@ -2012,18 +2028,20 @@ DESCRIPTION
Initialize BFD threading. The functions passed in will be
used to lock and unlock global data structures. This may only
be called a single time in a given process. Returns true on
- success and false on error. DATA is passed verbatim to the
- lock and unlock functions. The lock and unlock functions
- should return true on success, or set the BFD error and return
- false on failure. Note also that the lock must be a recursive
- lock: BFD may attempt to acquire the lock when it is already
- held by the current thread.
+ success and false on error. On error, the caller should
+ assume that BFD cannot be used by multiple threads. DATA is
+ passed verbatim to the lock and unlock functions. The lock
+ and unlock functions should return true on success, or set the
+ BFD error and return false on failure. Note also that the
+ lock must be a recursive lock: BFD may attempt to acquire the
+ lock when it is already held by the current thread.
*/
bool
bfd_thread_init (bfd_lock_unlock_fn_type lock, bfd_lock_unlock_fn_type unlock,
void *data)
{
+#ifdef TLS
/* Both functions must be set, and this cannot have been called
before. */
if (lock == NULL || unlock == NULL || unlock_fn != NULL)
@@ -2036,6 +2054,12 @@ bfd_thread_init (bfd_lock_unlock_fn_type lock, bfd_lock_unlock_fn_type unlock,
unlock_fn = unlock;
lock_data = data;
return true;
+#else /* TLS */
+ /* If thread-local storage wasn't found by configure, we disallow
+ threaded operation. */
+ bfd_set_error (bfd_error_invalid_operation);
+ return false;
+#endif /* TLS */
}
/*
diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c
index 2798efd..fcc8aef 100644
--- a/bfd/coff-alpha.c
+++ b/bfd/coff-alpha.c
@@ -517,8 +517,7 @@ alpha_ecoff_swap_reloc_in (bfd *abfd,
value is not actually a symbol index, but is instead a
special code. We put the code in the r_size field, and
clobber the symndx. */
- if (intern->r_size != 0)
- abort ();
+ BFD_ASSERT (intern->r_size == 0);
intern->r_size = intern->r_symndx;
intern->r_symndx = RELOC_SECTION_NONE;
}
@@ -526,12 +525,16 @@ alpha_ecoff_swap_reloc_in (bfd *abfd,
{
/* The IGNORE reloc generally follows a GPDISP reloc, and is
against the .lita section. The section is irrelevant. */
- if (! intern->r_extern &&
- intern->r_symndx == RELOC_SECTION_ABS)
- abort ();
+ BFD_ASSERT (intern->r_extern || intern->r_symndx != RELOC_SECTION_ABS);
if (! intern->r_extern && intern->r_symndx == RELOC_SECTION_LITA)
intern->r_symndx = RELOC_SECTION_ABS;
}
+ else if (intern->r_type == ALPHA_R_OP_STORE)
+ {
+ /* Size of 64 bits is encoded as 0 in this 6-bit field. */
+ if (intern->r_size == 0)
+ intern->r_size = 64;
+ }
}
/* Swap a reloc out. */
@@ -713,6 +716,50 @@ alpha_adjust_reloc_out (bfd *abfd ATTRIBUTE_UNUSED,
}
}
+/* Write VAL to a little-endian bitfield specified by BITOFFSET and
+ BITSIZE at CONTENTS + SECOFFSET. Verify that these parameter are
+ valid for SEC in ABFD. */
+
+static bool
+write_bit_field (bfd *abfd, asection *sec,
+ bfd_byte *contents, bfd_size_type secoffset,
+ unsigned int bitoffset, unsigned int bitsize, uint64_t val)
+{
+ if (bitsize == 0)
+ return true;
+
+ bfd_size_type secsize = bfd_get_section_limit_octets (abfd, sec);
+ unsigned int startbyte = bitoffset >> 3;
+ unsigned int endbyte = (bitoffset + bitsize - 1) >> 3;
+
+ if (secoffset > secsize || secsize - secoffset <= endbyte)
+ return false;
+
+ unsigned int startbit = bitoffset & 7;
+ unsigned int endbit = (bitoffset + bitsize - 1) & 7;
+ unsigned int mask = -1u << startbit;
+ unsigned char *p = contents + secoffset;
+ if (startbyte != endbyte)
+ {
+ p[startbyte] = (p[startbyte] & ~mask) | ((val << startbit) & mask);
+ val = val >> (8 - startbit);
+
+ for (unsigned int off = startbyte + 1; off < endbyte; ++off)
+ {
+ p[off] = val;
+ val >>= 8;
+ }
+ mask = ~(-1u << (1 + endbit));
+ }
+ else
+ {
+ val = val << startbit;
+ mask = mask & ~(-1u << (1 + endbit));
+ }
+ p[endbyte] = (p[endbyte] & ~mask) | (val & mask);
+ return true;
+}
+
/* The size of the stack for the relocation evaluator. */
#define RELOC_STACKSIZE (10)
@@ -1005,31 +1052,10 @@ alpha_ecoff_get_relocated_section_contents (bfd *abfd,
into the addend field by alpha_adjust_reloc_in. */
unsigned int offset = (rel->addend >> 8) & 0xff;
unsigned int size = rel->addend & 0xff;
- unsigned int startbyte = offset >> 3;
- unsigned int endbyte = (offset + size + 7) >> 3;
- unsigned int bytes = endbyte + 1 - startbyte;
-
- if (bytes <= 8
- && rel->address + startbyte + bytes >= rel->address
- && (rel->address + startbyte + bytes
- <= bfd_get_section_limit_octets (input_bfd, input_section)))
- {
- uint64_t val = 0;
- for (int off = bytes - 1; off >= 0; --off)
- val = (val << 8) | data[rel->address + startbyte + off];
-
- offset -= startbyte << 3;
- size -= startbyte << 3;
- uint64_t mask = (((uint64_t) 1 << size) - 1) << offset;
- val = (val & ~mask) | ((stack[--tos] << offset) & mask);
-
- for (unsigned int off = 0; off < bytes; ++off)
- {
- data[rel->address + startbyte + off] = val & 0xff;
- val >>= 8;
- }
- }
- else
+
+ if (!write_bit_field (input_bfd, input_section,
+ data, rel->address,
+ offset, size, stack[--tos]))
r = bfd_reloc_outofrange;
}
break;
@@ -1779,33 +1805,12 @@ alpha_relocate_section (bfd *output_bfd,
adjust the address of the reloc. */
if (! bfd_link_relocatable (info))
{
- unsigned int startbyte = r_offset >> 3;
- unsigned int endbyte = (r_offset + r_size + 7) >> 3;
- unsigned int bytes = endbyte + 1 - startbyte;
-
- if (bytes <= 8
- && r_vaddr >= input_section->vma
- && r_vaddr - input_section->vma < input_section->size
- && (input_section->size - (r_vaddr - input_section->vma)
- >= startbyte + bytes))
- {
- bfd_byte *p = contents + (r_vaddr - input_section->vma);
- uint64_t val = 0;
- for (int off = bytes - 1; off >= 0; --off)
- val = (val << 8) | p[startbyte + off];
-
- r_offset -= startbyte << 3;
- r_size -= startbyte << 3;
- uint64_t mask = (((uint64_t) 1 << r_size) - 1) << r_offset;
- val = (val & ~mask) | ((stack[--tos] << r_offset) & mask);
-
- for (unsigned int off = 0; off < bytes; ++off)
- {
- p[startbyte + off] = val & 0xff;
- val >>= 8;
- }
- }
- else
+ if (tos == 0)
+ r = bfd_reloc_notsupported;
+ else if (!write_bit_field (input_bfd, input_section,
+ contents,
+ r_vaddr - input_section->vma,
+ r_offset, r_size, stack[--tos]))
r = bfd_reloc_outofrange;
}
break;
@@ -2359,7 +2364,7 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
alpha_ecoff_mkobject_hook, _bfd_ecoff_styp_to_sec_flags,
_bfd_ecoff_set_alignment_hook, _bfd_ecoff_slurp_symbol_table,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL
+ NULL, NULL, NULL,
},
/* Supported architecture. */
bfd_arch_alpha,
diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c
index ab5f7b0..ee57451 100644
--- a/bfd/coff-arm.c
+++ b/bfd/coff-arm.c
@@ -1876,8 +1876,8 @@ record_arm_to_thumb_glue (struct bfd_link_info * info,
it. */
bh = NULL;
val = globals->arm_glue_size + 1;
- bfd_coff_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
- BSF_GLOBAL, s, val, NULL, true, false, &bh);
+ _bfd_generic_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
+ BSF_GLOBAL, s, val, NULL, true, false, &bh);
free (tmp_name);
@@ -1929,8 +1929,8 @@ record_thumb_to_arm_glue (struct bfd_link_info * info,
bh = NULL;
val = globals->thumb_glue_size + 1;
- bfd_coff_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
- BSF_GLOBAL, s, val, NULL, true, false, &bh);
+ _bfd_generic_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
+ BSF_GLOBAL, s, val, NULL, true, false, &bh);
/* If we mark it 'thumb', the disassembler will do a better job. */
myh = (struct coff_link_hash_entry *) bh;
@@ -1952,8 +1952,8 @@ record_thumb_to_arm_glue (struct bfd_link_info * info,
bh = NULL;
val = globals->thumb_glue_size + (globals->support_old_code ? 8 : 4);
- bfd_coff_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
- BSF_LOCAL, s, val, NULL, true, false, &bh);
+ _bfd_generic_link_add_one_symbol (info, globals->bfd_of_glue_owner, tmp_name,
+ BSF_LOCAL, s, val, NULL, true, false, &bh);
free (tmp_name);
diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c
index e2c632c..8c4d4f7 100644
--- a/bfd/coff-mips.c
+++ b/bfd/coff-mips.c
@@ -1316,7 +1316,7 @@ static const struct ecoff_backend_data mips_ecoff_backend_data =
_bfd_ecoff_mkobject_hook, _bfd_ecoff_styp_to_sec_flags,
_bfd_ecoff_set_alignment_hook, _bfd_ecoff_slurp_symbol_table,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL
+ NULL, NULL,
},
/* Supported architecture. */
bfd_arch_mips,
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 7a20dba..3c18518 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -4456,8 +4456,6 @@ const struct xcoff_dwsect_name xcoff_dwsect_names[] = {
#define _bfd_xcoff_get_section_contents _bfd_generic_get_section_contents
/* For copy private data entry points. */
-#define _bfd_xcoff_init_private_section_data \
- _bfd_generic_init_private_section_data
#define _bfd_xcoff_bfd_copy_private_bfd_data \
_bfd_xcoff_copy_private_bfd_data
#define _bfd_xcoff_bfd_merge_private_bfd_data \
@@ -4584,7 +4582,6 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data =
xcoff_ppc_relocate_section,
coff_rtype_to_howto,
NULL, /* _bfd_coff_adjust_symndx */
- _bfd_generic_link_add_one_symbol,
coff_link_output_has_begun,
coff_final_link_postscript,
NULL /* print_pdata. */
@@ -4774,7 +4771,6 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data =
xcoff_ppc_relocate_section,
coff_rtype_to_howto,
NULL, /* _bfd_coff_adjust_symndx */
- _bfd_generic_link_add_one_symbol,
coff_link_output_has_begun,
coff_final_link_postscript,
NULL /* print_pdata. */
diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c
index 275c4f5..c3e0e42 100644
--- a/bfd/coff-sh.c
+++ b/bfd/coff-sh.c
@@ -3108,7 +3108,7 @@ static const bfd_coff_backend_data bfd_coff_small_swap_table =
coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
coff_classify_symbol, coff_compute_section_file_positions,
coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
- coff_adjust_symndx, coff_link_add_one_symbol,
+ coff_adjust_symndx,
coff_link_output_has_begun, coff_final_link_postscript,
bfd_pe_print_pdata
};
diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c
index 5a4bcbf..d335348 100644
--- a/bfd/coff64-rs6000.c
+++ b/bfd/coff64-rs6000.c
@@ -2495,7 +2495,6 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data =
xcoff64_ppc_relocate_section,
coff_rtype_to_howto,
NULL, /* _bfd_coff_adjust_symndx */
- _bfd_generic_link_add_one_symbol,
coff_link_output_has_begun,
coff_final_link_postscript,
NULL /* print_pdata. */
@@ -2622,7 +2621,6 @@ const bfd_target rs6000_xcoff64_vec =
/* Copy */
_bfd_xcoff_copy_private_bfd_data,
_bfd_generic_bfd_merge_private_bfd_data,
- _bfd_generic_init_private_section_data,
_bfd_generic_bfd_copy_private_section_data,
_bfd_generic_bfd_copy_private_symbol_data,
_bfd_generic_bfd_copy_private_header_data,
@@ -2768,7 +2766,6 @@ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data =
xcoff64_ppc_relocate_section,
coff_rtype_to_howto,
NULL, /* _bfd_coff_adjust_symndx */
- _bfd_generic_link_add_one_symbol,
coff_link_output_has_begun,
coff_final_link_postscript,
NULL /* print_pdata. */
@@ -2894,7 +2891,6 @@ const bfd_target rs6000_xcoff64_aix_vec =
/* Copy */
_bfd_xcoff_copy_private_bfd_data,
_bfd_generic_bfd_merge_private_bfd_data,
- _bfd_generic_init_private_section_data,
_bfd_generic_bfd_copy_private_section_data,
_bfd_generic_bfd_copy_private_symbol_data,
_bfd_generic_bfd_copy_private_header_data,
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 325a8ab..b81195d 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -1516,11 +1516,6 @@ CODE_FRAGMENT
. (bfd *, struct bfd_link_info *, bfd *, asection *,
. struct internal_reloc *, bool *);
.
-. bool (*_bfd_coff_link_add_one_symbol)
-. (struct bfd_link_info *, bfd *, const char *, flagword,
-. asection *, bfd_vma, const char *, bool, bool,
-. struct bfd_link_hash_entry **);
-.
. bool (*_bfd_coff_link_output_has_begun)
. (bfd *, struct coff_final_link_info *);
.
@@ -1659,10 +1654,6 @@ INTERNAL
.#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
. ((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
. (obfd, info, ibfd, sec, rel, adjustedp))
-.#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
-. value, string, cp, coll, hashp)\
-. ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
-. (info, abfd, name, flags, section, value, string, cp, coll, hashp))
.
.#define bfd_coff_link_output_has_begun(a,p) \
. ((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
@@ -5513,10 +5504,6 @@ dummy_reloc16_extra_cases (bfd *abfd ATTRIBUTE_UNUSED,
#define coff_adjust_symndx NULL
#endif
-#ifndef coff_link_add_one_symbol
-#define coff_link_add_one_symbol _bfd_generic_link_add_one_symbol
-#endif
-
#ifndef coff_link_output_has_begun
static bool
@@ -5615,7 +5602,7 @@ static const bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED =
coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
coff_classify_symbol, coff_compute_section_file_positions,
coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
- coff_adjust_symndx, coff_link_add_one_symbol,
+ coff_adjust_symndx,
coff_link_output_has_begun, coff_final_link_postscript,
bfd_pe_print_pdata
};
@@ -5656,7 +5643,7 @@ static const bfd_coff_backend_data ticoff0_swap_table =
coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
coff_classify_symbol, coff_compute_section_file_positions,
coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
- coff_adjust_symndx, coff_link_add_one_symbol,
+ coff_adjust_symndx,
coff_link_output_has_begun, coff_final_link_postscript,
bfd_pe_print_pdata
};
@@ -5698,7 +5685,7 @@ static const bfd_coff_backend_data ticoff1_swap_table =
coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
coff_classify_symbol, coff_compute_section_file_positions,
coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
- coff_adjust_symndx, coff_link_add_one_symbol,
+ coff_adjust_symndx,
coff_link_output_has_begun, coff_final_link_postscript,
bfd_pe_print_pdata /* huh */
};
@@ -5941,7 +5928,7 @@ static const bfd_coff_backend_data bigobj_swap_table =
coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
coff_classify_symbol, coff_compute_section_file_positions,
coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
- coff_adjust_symndx, coff_link_add_one_symbol,
+ coff_adjust_symndx,
coff_link_output_has_begun, coff_final_link_postscript,
bfd_pe_print_pdata /* huh */
};
@@ -5968,8 +5955,6 @@ static const bfd_coff_backend_data bigobj_swap_table =
#define coff_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
#endif
-#define coff_init_private_section_data _bfd_generic_init_private_section_data
-
#ifndef coff_bfd_copy_private_section_data
#define coff_bfd_copy_private_section_data _bfd_generic_bfd_copy_private_section_data
#endif
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index f87e54f..c1811cb 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -42,7 +42,9 @@
#include "libbfd.h"
#include "coff/internal.h"
#include "libcoff.h"
+#include "elf-bfd.h"
#include "hashtab.h"
+#include "safe-ctype.h"
/* Extract a long section name at STRINDEX and copy it to the bfd objstack.
Return NULL in case of error. */
@@ -1270,9 +1272,24 @@ coff_write_alien_symbol (bfd *abfd,
if (c != (coff_symbol_type *) NULL)
native->u.syment.n_flags = bfd_asymbol_bfd (&c->symbol)->flags;
}
+
+ const elf_symbol_type *elfsym = elf_symbol_from (symbol);
+ if (elfsym
+ && (symbol->flags & BSF_FUNCTION)
+ && elfsym->internal_elf_sym.st_size)
+ {
+ /* coff_data (abfd)->local_n_btshft is what ought to be used here,
+ just that it's set only when reading in COFF objects. */
+ native->u.syment.n_type = DT_FCN << 4;
+ native->u.syment.n_numaux = 1;
+ native[1].u.auxent.x_sym.x_misc.x_fsize
+ = elfsym->internal_elf_sym.st_size;
+ /* FIXME .u.auxent.x_sym.x_fcnary.x_fcn.x_endndx would better also
+ be set, which would require updating the field once the next
+ function is seen. */
+ }
}
- native->u.syment.n_type = 0;
if (symbol->flags & BSF_FILE)
native->u.syment.n_sclass = C_FILE;
else if (symbol->flags & BSF_LOCAL)
@@ -3104,6 +3121,19 @@ coff_gc_sweep_symbol (struct coff_link_hash_entry *h,
typedef bool (*gc_sweep_hook_fn)
(bfd *, struct bfd_link_info *, asection *, const struct internal_reloc *);
+static inline bool
+is_subsection (const char *str, const char *prefix)
+{
+ size_t n = strlen (prefix);
+ if (strncmp (str, prefix, n) != 0)
+ return false;
+ if (str[n] == 0)
+ return true;
+ else if (str[n] != '$')
+ return false;
+ return ISDIGIT (str[n + 1]) && str[n + 2] == 0;
+}
+
static bool
coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
{
@@ -3125,6 +3155,7 @@ coff_gc_sweep (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info)
else if (startswith (o->name, ".idata")
|| startswith (o->name, ".pdata")
|| startswith (o->name, ".xdata")
+ || is_subsection (o->name, ".didat")
|| startswith (o->name, ".rsrc"))
o->gc_mark = 1;
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index 876aed7..38278e2 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -27,6 +27,7 @@
#include "libbfd.h"
#include "coff/internal.h"
#include "libcoff.h"
+#include "elf-bfd.h"
#include "safe-ctype.h"
static bool coff_link_add_object_symbols (bfd *, struct bfd_link_info *);
@@ -445,7 +446,7 @@ coff_link_add_symbols (bfd *abfd,
if (addit)
{
- if (! (bfd_coff_link_add_one_symbol
+ if (! (_bfd_generic_link_add_one_symbol
(info, abfd, name, flags, section, value,
(const char *) NULL, copy, false,
(struct bfd_link_hash_entry **) sym_hash)))
@@ -931,14 +932,52 @@ _bfd_coff_final_link (bfd *abfd,
bfd_vma written = 0;
bool rewrite = false;
- if (! (sym->flags & BSF_LOCAL)
- || (sym->flags & (BSF_SECTION_SYM | BSF_DEBUGGING_RELOC
- | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC
- | BSF_SYNTHETIC))
+ if ((sym->flags & (BSF_SECTION_SYM | BSF_DEBUGGING_RELOC
+ | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC
+ | BSF_SYNTHETIC))
|| ((sym->flags & BSF_DEBUGGING)
&& ! (sym->flags & BSF_FILE)))
continue;
+ if (! (sym->flags & BSF_LOCAL))
+ {
+ /* For ELF symbols try to represent their function-ness and
+ size, if available. */
+ if (! (sym->flags & BSF_FUNCTION))
+ continue;
+
+ const elf_symbol_type *elfsym = elf_symbol_from (sym);
+ if (!elfsym)
+ continue;
+
+ struct coff_link_hash_entry *hent
+ = (struct coff_link_hash_entry *) bfd_hash_lookup
+ (&info->hash->table, bfd_asymbol_name (sym),
+ false, false);
+ if (!hent)
+ continue;
+
+ /* coff_data (abfd)->local_n_btshft is what ought to be used
+ here, just that it's set only when reading in COFF
+ objects. */
+ hent->type = DT_FCN << 4;
+ if (!elfsym->internal_elf_sym.st_size)
+ continue;
+
+ hent->aux = bfd_zalloc (abfd, sizeof (*hent->aux));
+ if (!hent->aux)
+ continue;
+
+ hent->numaux = 1;
+ hent->aux->x_sym.x_misc.x_fsize
+ = elfsym->internal_elf_sym.st_size;
+ /* FIXME ->x_sym.x_fcnary.x_fcn.x_endndx would better
+ also be set, yet that would likely need to happen
+ elsewhere anyway. */
+
+ continue;
+ }
+
/* See if we are discarding symbols with this name. */
if ((flaginfo.info->strip == strip_some
&& (bfd_hash_lookup (flaginfo.info->keep_hash,
diff --git a/bfd/compress.c b/bfd/compress.c
index b635750..2878837 100644
--- a/bfd/compress.c
+++ b/bfd/compress.c
@@ -517,40 +517,23 @@ decompress_contents (bool is_zstd, bfd_byte *compressed_buffer,
#endif
}
- z_stream strm;
- int rc;
-
/* It is possible the section consists of several compressed
buffers concatenated together, so we uncompress in a loop. */
- /* PR 18313: The state field in the z_stream structure is supposed
- to be invisible to the user (ie us), but some compilers will
- still complain about it being used without initialisation. So
- we first zero the entire z_stream structure and then set the fields
- that we need. */
- memset (& strm, 0, sizeof strm);
- strm.avail_in = compressed_size;
- strm.next_in = (Bytef*) compressed_buffer;
- strm.avail_out = uncompressed_size;
- /* FIXME: strm.avail_in and strm.avail_out are typically unsigned
- int. Supporting sizes that don't fit in an unsigned int is
- possible but will require some rewriting of this function. */
- if (strm.avail_in != compressed_size || strm.avail_out != uncompressed_size)
- return false;
-
- BFD_ASSERT (Z_OK == 0);
- rc = inflateInit (&strm);
- while (strm.avail_in > 0 && strm.avail_out > 0)
+ do
{
+ uLongf dst_len = uncompressed_size;
+ uLong src_len = compressed_size;
+ int rc = uncompress2 ((Bytef *) uncompressed_buffer, &dst_len,
+ (Bytef *) compressed_buffer, &src_len);
if (rc != Z_OK)
- break;
- strm.next_out = ((Bytef*) uncompressed_buffer
- + (uncompressed_size - strm.avail_out));
- rc = inflate (&strm, Z_FINISH);
- if (rc != Z_STREAM_END)
- break;
- rc = inflateReset (&strm);
+ return false;
+ uncompressed_buffer += dst_len;
+ uncompressed_size -= dst_len;
+ compressed_buffer += src_len;
+ compressed_size -= src_len;
}
- return inflateEnd (&strm) == Z_OK && rc == Z_OK && strm.avail_out == 0;
+ while (compressed_size > 0 && uncompressed_size > 0);
+ return compressed_size == 0 && uncompressed_size == 0;
}
/* Compress section contents using zlib/zstd and store
@@ -987,7 +970,6 @@ bfd_init_section_decompress_status (bfd *abfd, sec_ptr sec)
bfd_size_type uncompressed_size;
unsigned int uncompressed_alignment_power = 0;
enum compression_type ch_type;
- z_stream strm;
compression_header_size = bfd_get_compression_header_size (abfd, sec);
if (compression_header_size > MAX_COMPRESSION_HEADER_SIZE)
@@ -1025,10 +1007,11 @@ bfd_init_section_decompress_status (bfd *abfd, sec_ptr sec)
return false;
}
- /* PR28530, reject sizes unsupported by decompress_contents. */
- strm.avail_in = sec->size;
- strm.avail_out = uncompressed_size;
- if (strm.avail_in != sec->size || strm.avail_out != uncompressed_size)
+ /* PR28530, reject sizes unsupported by decompress_contents. zlib
+ supports only up to 4 GiB input on machines whose long is 32 bits. */
+ if (ch_type == ch_compress_zlib
+ && (sec->size != (uLong) sec->size
+ || uncompressed_size != (uLongf) uncompressed_size))
{
bfd_set_error (bfd_error_nonrepresentable_section);
return false;
diff --git a/bfd/configure b/bfd/configure
index ca7f66f..f69df12 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -702,8 +702,6 @@ REPORT_BUGS_TEXI
REPORT_BUGS_TO
PKGVERSION
DEBUGDIR
-ENABLE_BFD_64_BIT_FALSE
-ENABLE_BFD_64_BIT_TRUE
PLUGINS_FALSE
PLUGINS_TRUE
LARGEFILE_CPPFLAGS
@@ -11155,7 +11153,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11158 "configure"
+#line 11156 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11261,7 +11259,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11264 "configure"
+#line 11262 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11930,56 +11928,6 @@ else
enable_64_bit_bfd=no
fi
-
-if test "x$enable_64_bit_bfd" = "xno"; then :
- # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
-$as_echo_n "checking size of void *... " >&6; }
-if ${ac_cv_sizeof_void_p+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_void_p" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (void *)
-See \`config.log' for more details" "$LINENO" 5; }
- else
- ac_cv_sizeof_void_p=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
-$as_echo "$ac_cv_sizeof_void_p" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-_ACEOF
-
-
- if test "x$ac_cv_sizeof_void_p" = "x8"; then :
- enable_64_bit_bfd=yes
-fi
-
-fi
-
- if test "x$enable_64_bit_bfd" = "xyes"; then
- ENABLE_BFD_64_BIT_TRUE=
- ENABLE_BFD_64_BIT_FALSE='#'
-else
- ENABLE_BFD_64_BIT_TRUE='#'
- ENABLE_BFD_64_BIT_FALSE=
-fi
-
-
if test $enable_64_bit_bfd = yes ; then
want64=true
else
@@ -17677,10 +17625,6 @@ if test -z "${PLUGINS_TRUE}" && test -z "${PLUGINS_FALSE}"; then
as_fn_error $? "conditional \"PLUGINS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${ENABLE_BFD_64_BIT_TRUE}" && test -z "${ENABLE_BFD_64_BIT_FALSE}"; then
- as_fn_error $? "conditional \"ENABLE_BFD_64_BIT\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/bfd/configure.ac b/bfd/configure.ac
index 90fad54..e9942d2 100644
--- a/bfd/configure.ac
+++ b/bfd/configure.ac
@@ -81,7 +81,13 @@ if test x$ac_checking != x ; then
AC_DEFINE(ENABLE_CHECKING, 1, [Define if you want run-time sanity checks.])
fi
-BFD_64_BIT
+AC_ARG_ENABLE(64-bit-bfd,
+ AS_HELP_STRING([--enable-64-bit-bfd],
+ [64-bit support (on hosts with narrower word sizes)]),
+ [AS_CASE([$enableval],
+ [yes|no], [],
+ [*], [AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option)])],
+ [enable_64_bit_bfd=no])
if test $enable_64_bit_bfd = yes ; then
want64=true
else
diff --git a/bfd/cpu-riscv.c b/bfd/cpu-riscv.c
index ea25e78..67ee601 100644
--- a/bfd/cpu-riscv.c
+++ b/bfd/cpu-riscv.c
@@ -118,6 +118,7 @@ const struct riscv_spec riscv_priv_specs[] =
{"1.10", PRIV_SPEC_CLASS_1P10},
{"1.11", PRIV_SPEC_CLASS_1P11},
{"1.12", PRIV_SPEC_CLASS_1P12},
+ {"1.13", PRIV_SPEC_CLASS_1P13},
};
/* Get the corresponding CSR version class by giving privilege
diff --git a/bfd/cpu-riscv.h b/bfd/cpu-riscv.h
index 93a3f52..b07fcf8 100644
--- a/bfd/cpu-riscv.h
+++ b/bfd/cpu-riscv.h
@@ -33,6 +33,7 @@ enum riscv_spec_class
PRIV_SPEC_CLASS_1P10,
PRIV_SPEC_CLASS_1P11,
PRIV_SPEC_CLASS_1P12,
+ PRIV_SPEC_CLASS_1P13,
PRIV_SPEC_CLASS_DRAFT,
};
diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c
index e80575b..bc653d7 100644
--- a/bfd/elf-attrs.c
+++ b/bfd/elf-attrs.c
@@ -510,8 +510,8 @@ bfd_elf_parse_attr_section_v1 (bfd *abfd, bfd_byte *p, bfd_byte *p_end)
if (section_len <= 4)
{
_bfd_error_handler
- (_("%pB: error: attribute section length too small: %ld"),
- abfd, (long) section_len);
+ (_("%pB: error: attribute section length too small: %ld"),
+ abfd, (long) section_len);
break;
}
section_len -= 4;
@@ -541,15 +541,15 @@ bfd_elf_parse_attr_section_v1 (bfd *abfd, bfd_byte *p, bfd_byte *p_end)
orig_p = p;
tag = _bfd_safe_read_leb128 (abfd, &p, false, p_end);
if (p_end - p >= 4)
- {
- subsection_len = bfd_get_32 (abfd, p);
- p += 4;
- }
+ {
+ subsection_len = bfd_get_32 (abfd, p);
+ p += 4;
+ }
else
- {
- p = p_end;
- break;
- }
+ {
+ p = p_end;
+ break;
+ }
if (subsection_len > section_len)
subsection_len = section_len;
section_len -= subsection_len;
@@ -638,12 +638,12 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr)
/* The first character is the version of the attributes.
Currently only version 'A' is recognised here. */
if (*cursor != 'A')
- {
- _bfd_error_handler (_("%pB: error: unknown attributes version '%c'(%d) "
- "- expecting 'A'\n"), abfd, *cursor, *cursor);
- bfd_set_error (bfd_error_wrong_format);
- goto free_data;
- }
+ {
+ _bfd_error_handler (_("%pB: error: unknown attributes version '%c'(%d) "
+ "- expecting 'A'\n"), abfd, *cursor, *cursor);
+ bfd_set_error (bfd_error_wrong_format);
+ goto free_data;
+ }
++cursor;
@@ -685,9 +685,9 @@ _bfd_elf_merge_object_attributes (bfd *ibfd, struct bfd_link_info *info)
{
_bfd_error_handler
/* xgettext:c-format */
- (_("error: %pB: object has vendor-specific contents that "
- "must be processed by the '%s' toolchain"),
- ibfd, in_attr->s);
+ (_("error: %pB: object has vendor-specific contents that "
+ "must be processed by the '%s' toolchain"),
+ ibfd, in_attr->s);
return false;
}
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 5903d85..2bd855a 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -503,12 +503,21 @@ struct sframe_func_bfdinfo
unsigned int func_reloc_index;
};
+/* Link state information of the SFrame section. */
+enum sframe_sec_state
+{
+ SFRAME_SEC_DECODED = 1,
+ SFRAME_SEC_MERGED,
+};
+
/* SFrame decoder info.
Contains all information for a decoded .sframe section. */
struct sframe_dec_info
{
/* Decoder context. */
struct sframe_decoder_ctx *sfd_ctx;
+ /* SFrame section state as it progresses through the link process. */
+ enum sframe_sec_state sfd_state;
/* Number of function descriptor entries in this .sframe. */
unsigned int sfd_fde_count;
/* Additional information for linking. */
@@ -2384,10 +2393,8 @@ extern bool _bfd_elf_copy_private_header_data
(bfd *, bfd *);
extern bool _bfd_elf_copy_private_symbol_data
(bfd *, asymbol *, bfd *, asymbol *);
-extern bool _bfd_elf_init_private_section_data
- (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
extern bool _bfd_elf_copy_private_section_data
- (bfd *, asection *, bfd *, asection *);
+ (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
extern bool _bfd_elf_write_object_contents
(bfd *);
extern bool _bfd_elf_write_corefile_contents
@@ -2540,6 +2547,8 @@ extern bool _bfd_elf_discard_section_sframe
(asection *, bool (*) (bfd_vma, void *), struct elf_reloc_cookie *);
extern bool _bfd_elf_merge_section_sframe
(bfd *, struct bfd_link_info *, asection *, bfd_byte *);
+extern bfd_vma _bfd_elf_sframe_section_offset
+ (bfd *, struct bfd_link_info *, asection *, bfd_vma);
extern bool _bfd_elf_write_section_sframe
(bfd *, struct bfd_link_info *);
extern bool _bfd_elf_set_section_sframe (bfd *, struct bfd_link_info *);
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index 78b3ecb..0250a8f 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -2506,7 +2506,7 @@ write_dwarf_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info)
/* FIXME: octets_per_byte. */
if (!bfd_set_section_contents (abfd, sec->output_section, contents,
(file_ptr) sec->output_offset,
- sec->size))
+ size))
retval = false;
out:
free (contents);
diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c
index 97e0073..d74235b 100644
--- a/bfd/elf-sframe.c
+++ b/bfd/elf-sframe.c
@@ -23,6 +23,7 @@
#include "libbfd.h"
#include "elf-bfd.h"
#include "sframe-api.h"
+#include "sframe-internal.h"
/* Return TRUE if the function has been marked for deletion during the linking
process. */
@@ -212,10 +213,11 @@ _bfd_elf_parse_sframe (bfd *abfd,
/* Decode the buffer and keep decoded contents for later use.
Relocations are performed later, but are such that the section's
size is unaffected. */
- sfd_info = bfd_alloc (abfd, sizeof (*sfd_info));
+ sfd_info = bfd_zalloc (abfd, sizeof (*sfd_info));
sf_size = sec->size;
sfd_info->sfd_ctx = sframe_decode ((const char*)sfbuf, sf_size, &decerr);
+ sfd_info->sfd_state = SFRAME_SEC_DECODED;
sfd_ctx = sfd_info->sfd_ctx;
if (!sfd_ctx)
/* Free'ing up any memory held by decoder context is done by
@@ -328,6 +330,8 @@ _bfd_elf_merge_section_sframe (bfd *abfd,
int8_t sfd_ctx_fixed_ra_offset;
uint8_t dctx_version;
uint8_t ectx_version;
+ uint8_t dctx_flags;
+ uint8_t ectx_flags;
int encerr = 0;
struct elf_link_hash_table *htab;
@@ -351,6 +355,8 @@ _bfd_elf_merge_section_sframe (bfd *abfd,
if (sfd_ctx == NULL || sfe_info == NULL)
return false;
+ dctx_flags = sframe_decoder_get_flags (sfd_ctx);
+
if (htab->sfe_info.sfe_ctx == NULL)
{
sfd_ctx_abi_arch = sframe_decoder_get_abi_arch (sfd_ctx);
@@ -361,8 +367,18 @@ _bfd_elf_merge_section_sframe (bfd *abfd,
if (!sfd_ctx_abi_arch)
return false;
+ /* In-memory FDEs in the encoder object are unsorted during linking and
+ will be sorted before emission. Reset SFRAME_F_FDE_SORTED to aptly
+ reflect that (doing so has no other functional value at this time
+ though). */
+ uint8_t tflags = dctx_flags & ~SFRAME_F_FDE_SORTED;
+ /* ld always generates an output section with
+ SFRAME_F_FDE_FUNC_START_PCREL flag set. Later using
+ SFRAME_V2_GNU_AS_LD_ENCODING_FLAGS, it is enforced that the provided
+ input sections also have this flag set. */
+ tflags |= SFRAME_F_FDE_FUNC_START_PCREL;
htab->sfe_info.sfe_ctx = sframe_encode (SFRAME_VERSION_2,
- 0, /* SFrame flags. */
+ tflags, /* SFrame flags. */
sfd_ctx_abi_arch,
sfd_ctx_fixed_fp_offset,
sfd_ctx_fixed_ra_offset,
@@ -411,6 +427,18 @@ _bfd_elf_merge_section_sframe (bfd *abfd,
return false;
}
+ /* Check that all SFrame sections being linked have the 'data encoding'
+ related flags set. The implementation does not support updating these
+ data encodings on the fly; confirm by checking the ectx_flags. */
+ ectx_flags = sframe_encoder_get_flags (sfe_ctx);
+ if ((dctx_flags & ectx_flags & SFRAME_V2_GNU_AS_LD_ENCODING_FLAGS)
+ != SFRAME_V2_GNU_AS_LD_ENCODING_FLAGS)
+ {
+ _bfd_error_handler
+ (_("SFrame sections with unexpected data encoding prevent"
+ " .sframe generation"));
+ return false;
+ }
/* Iterate over the function descriptor entries and the FREs of the
function from the decoder context. Add each of them to the encoder
@@ -481,6 +509,15 @@ _bfd_elf_merge_section_sframe (bfd *abfd,
address += sframe_read_value (abfd, contents,
pltn_r_offset, 4);
address += (sec->output_offset + r_offset);
+ /* SFrame FDE function start address is an offset from the
+ sfde_func_start_address field to the start PC. The
+ calculation below is the distance of sfde_func_start_address
+ field from the start of the output SFrame section. */
+ uint32_t offsetof_fde_in_sec
+ = sframe_encoder_get_offsetof_fde_start_addr (sfe_ctx,
+ cur_fidx + num_enc_fidx,
+ NULL);
+ address -= offsetof_fde_in_sec;
/* FIXME For testing only. Cleanup later. */
// address += (sec->output_section->vma);
@@ -508,12 +545,98 @@ _bfd_elf_merge_section_sframe (bfd *abfd,
}
}
}
+ sfd_info->sfd_state = SFRAME_SEC_MERGED;
/* Free the SFrame decoder context. */
sframe_decoder_free (&sfd_ctx);
return true;
}
+/* Adjust an address in the .sframe section. Given OFFSET within
+ SEC, this returns the new offset in the merged .sframe section,
+ or -1 if the address refers to an FDE which has been removed.
+
+ PS: This function assumes that _bfd_elf_merge_section_sframe has
+ not been called on the input section SEC yet. Note how it uses
+ sframe_encoder_get_num_fidx () to figure out the offset of FDE
+ in the output section. */
+
+bfd_vma
+_bfd_elf_sframe_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
+ asection *sec,
+ bfd_vma offset)
+{
+ struct sframe_dec_info *sfd_info;
+ struct sframe_enc_info *sfe_info;
+ sframe_decoder_ctx *sfd_ctx;
+ sframe_encoder_ctx *sfe_ctx;
+ struct elf_link_hash_table *htab;
+
+ unsigned int sec_fde_idx, out_num_fdes;
+ unsigned int sfd_num_fdes, sfe_num_fdes;
+ uint32_t sfd_fde_offset;
+ bfd_vma new_offset;
+
+ if (sec->sec_info_type != SEC_INFO_TYPE_SFRAME)
+ return offset;
+
+ sfd_info = elf_section_data (sec)->sec_info;
+ sfd_ctx = sfd_info->sfd_ctx;
+ sfd_num_fdes = sframe_decoder_get_num_fidx (sfd_ctx);
+
+ BFD_ASSERT (sfd_info->sfd_state == SFRAME_SEC_DECODED);
+
+ htab = elf_hash_table (info);
+ sfe_info = &(htab->sfe_info);
+ sfe_ctx = sfe_info->sfe_ctx;
+ sfe_num_fdes = sframe_encoder_get_num_fidx (sfe_ctx);
+
+ /* The index of this FDE in the output section depends on number of deleted
+ functions (between index 0 and sec_fde_idx), if any. */
+ out_num_fdes = 0;
+ sec_fde_idx = 0;
+ for (unsigned int i = 0; i < sfd_num_fdes; i++)
+ {
+ sfd_fde_offset = sframe_decoder_get_offsetof_fde_start_addr (sfd_ctx,
+ i, NULL);
+ if (!sframe_decoder_func_deleted_p (sfd_info, i))
+ out_num_fdes++;
+
+ if (sfd_fde_offset == offset)
+ {
+ /* Found the index of the FDE (at OFFSET) in the input section. */
+ sec_fde_idx = i;
+ break;
+ }
+ }
+
+ if (sframe_decoder_func_deleted_p (sfd_info, sec_fde_idx))
+ return (bfd_vma) -1;
+
+ /* The number of FDEs in the output SFrame section. Note that the output
+ index of the FDE of interest will be (out_num_fdes - 1). */
+ out_num_fdes += sfe_num_fdes;
+
+ new_offset = sframe_decoder_get_offsetof_fde_start_addr (sfd_ctx,
+ out_num_fdes - 1,
+ NULL);
+ /* Recall that SFrame section merging has distinct requirements: All SFrame
+ FDEs from input sections are clubbed together in the beginning of the
+ output section. So, at this point in the current function, the new_offset
+ is the correct offset in the merged output SFrame section. Note, however,
+ that the default mechanism in the _elf_link_input_bfd will do the
+ following adjustment:
+ irela->r_offset += o->output_offset;
+ for all section types. However, such an adjustment in the RELA offset is
+ _not_ needed for SFrame sections. Perform the reverse adjustment here so
+ that the default mechanism does not need additional SFrame specific
+ checks. */
+ new_offset -= sec->output_offset;
+
+ return new_offset;
+}
+
/* Write out the .sframe section. This must be called after
_bfd_elf_merge_section_sframe has been called on all input
.sframe sections. */
@@ -546,13 +669,11 @@ _bfd_elf_write_section_sframe (bfd *abfd, struct bfd_link_info *info)
(file_ptr) sec->output_offset,
sec->size))
retval = false;
- else if (!bfd_link_relocatable (info))
+ else
{
Elf_Internal_Shdr *hdr = &elf_section_data (sec)->this_hdr;
hdr->sh_size = sec->size;
}
- /* For relocatable links, do not update the section size as the section
- contents have not been relocated. */
sframe_encoder_free (&sfe_ctx);
diff --git a/bfd/elf.c b/bfd/elf.c
index ee89dd9..1eba142 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -504,17 +504,44 @@ bfd_elf_get_elf_syms (bfd *ibfd,
shndx = extshndx_buf;
isym < isymend;
esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
- if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
- {
- symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
- /* xgettext:c-format */
- _bfd_error_handler (_("%pB symbol number %lu references"
- " nonexistent SHT_SYMTAB_SHNDX section"),
- ibfd, (unsigned long) symoffset);
- free (alloc_intsym);
- intsym_buf = NULL;
- goto out1;
- }
+ {
+ if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
+ {
+ symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB symbol number %lu references"
+ " nonexistent SHT_SYMTAB_SHNDX section"),
+ ibfd, (unsigned long) symoffset);
+ free (alloc_intsym);
+ intsym_buf = NULL;
+ goto out1;
+ }
+
+ /* PR 33019: Do not accept unsupported binding values - they will
+ likely cause problems later on. */
+ int bind = ELF_ST_BIND (isym->st_info);
+ if (bind > STB_WEAK && bind < STB_LOOS)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB symbol number %lu uses unsupported binding of %u"),
+ ibfd, (unsigned long) (isym - intsym_buf), bind);
+ free (alloc_intsym);
+ intsym_buf = NULL;
+ goto out1;
+ }
+
+ /* Paranoia: Also refuse to accept the only undefined symbol type: 7. */
+ int t = ELF_ST_TYPE (isym->st_info);
+ if (t == 7)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB symbol number %lu uses unsupported type of %u"),
+ ibfd, (unsigned long) (isym - intsym_buf), t);
+ free (alloc_intsym);
+ intsym_buf = NULL;
+ goto out1;
+ }
+ }
out1:
_bfd_munmap_temporary (alloc_extshndx, alloc_extshndx_size);
@@ -3469,7 +3496,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd,
struct bfd_elf_section_reloc_data *reldata,
const char *sec_name,
bool use_rela_p,
- bool delay_st_name_p)
+ bool delay_sh_name_p)
{
Elf_Internal_Shdr *rel_hdr;
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
@@ -3480,7 +3507,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd,
return false;
reldata->hdr = rel_hdr;
- if (delay_st_name_p)
+ if (delay_sh_name_p)
rel_hdr->sh_name = (unsigned int) -1;
else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
use_rela_p))
@@ -3526,7 +3553,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
Elf_Internal_Shdr *this_hdr;
unsigned int sh_type;
const char *name = asect->name;
- bool delay_st_name_p = false;
+ bool delay_sh_name_p = false;
bfd_vma mask;
if (arg->failed)
@@ -3543,16 +3570,17 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
&& (abfd->flags & BFD_COMPRESS) != 0
&& (asect->flags & SEC_DEBUGGING) != 0
&& (asect->flags & SEC_ALLOC) == 0
+ && (asect->flags & SEC_HAS_CONTENTS) != 0
&& name[1] == 'd'
&& name[6] == '_')
{
/* If this section will be compressed, delay adding section
name to section name section after it is compressed in
_bfd_elf_assign_file_positions_for_non_load. */
- delay_st_name_p = true;
+ delay_sh_name_p = true;
}
- if (delay_st_name_p)
+ if (delay_sh_name_p)
this_hdr->sh_name = (unsigned int) -1;
else
{
@@ -3751,14 +3779,14 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
{
if (esd->rel.count && esd->rel.hdr == NULL
&& !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
- false, delay_st_name_p))
+ false, delay_sh_name_p))
{
arg->failed = true;
return;
}
if (esd->rela.count && esd->rela.hdr == NULL
&& !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
- true, delay_st_name_p))
+ true, delay_sh_name_p))
{
arg->failed = true;
return;
@@ -3769,7 +3797,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
? &esd->rela : &esd->rel),
name,
asect->use_rela_p,
- delay_st_name_p))
+ delay_sh_name_p))
{
arg->failed = true;
return;
@@ -3943,20 +3971,17 @@ bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
break;
}
- /* We should always get here with loc == sec->contents + 4, but it is
- possible to craft bogus SHT_GROUP sections that will cause segfaults
- in objcopy without checking loc here and in the loop above. */
- if (loc == sec->contents)
- BFD_ASSERT (0);
- else
+ /* We should always get here with loc == sec->contents + 4. Return
+ an error for bogus SHT_GROUP sections. */
+ loc -= 4;
+ if (loc != sec->contents)
{
- loc -= 4;
- if (loc != sec->contents)
- {
- BFD_ASSERT (0);
- memset (sec->contents + 4, 0, loc - sec->contents);
- loc = sec->contents;
- }
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB: corrupted group section: `%pA'"),
+ abfd, sec);
+ bfd_set_error (bfd_error_bad_value);
+ *failedptr = true;
+ return;
}
H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
@@ -4474,7 +4499,11 @@ elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
asection *sec = sym->section;
if (sec->owner != abfd)
- sec = sec->output_section;
+ {
+ sec = sec->output_section;
+ if (sec == NULL)
+ return false;
+ }
sect_syms[sec->index] = syms[idx];
}
@@ -6292,27 +6321,28 @@ assign_file_positions_for_load_sections (bfd *abfd,
}
else
{
- if (p->p_type == PT_LOAD)
+ if (this_hdr->sh_type == SHT_NOBITS
+ && (this_hdr->sh_flags & SHF_TLS) != 0
+ && this_hdr->sh_offset == 0)
{
- this_hdr->sh_offset = sec->filepos = off;
- if (this_hdr->sh_type != SHT_NOBITS)
- off += this_hdr->sh_size;
- }
- else if (this_hdr->sh_type == SHT_NOBITS
- && (this_hdr->sh_flags & SHF_TLS) != 0
- && this_hdr->sh_offset == 0)
- {
- /* This is a .tbss section that didn't get a PT_LOAD.
- (See _bfd_elf_map_sections_to_segments "Create a
- final PT_LOAD".) Set sh_offset to the value it
- would have if we had created a zero p_filesz and
- p_memsz PT_LOAD header for the section. This
- also makes the PT_TLS header have the same
- p_offset value. */
+ /* Set sh_offset for .tbss sections to their nominal
+ offset after aligning. They are not loaded from
+ disk so the value doesn't really matter, except
+ when the .tbss section is the first one in a
+ PT_TLS segment. In that case it sets the
+ p_offset for the PT_TLS segment, which according
+ to the ELF gABI ought to satisfy
+ p_offset % p_align == p_vaddr % p_align. */
bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
off, align);
this_hdr->sh_offset = sec->filepos = off + adjust;
}
+ else if (p->p_type == PT_LOAD)
+ {
+ this_hdr->sh_offset = sec->filepos = off;
+ if (this_hdr->sh_type != SHT_NOBITS)
+ off += this_hdr->sh_size;
+ }
if (this_hdr->sh_type != SHT_NOBITS)
{
@@ -8345,25 +8375,34 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd)
return rewrite_elf_program_header (ibfd, obfd, maxpagesize);
}
-/* Initialize private output section information from input section. */
+/* Copy private section information from input to output. This function
+ is called both by objcopy where LINK_INFO is NULL, and ld where
+ LINK_INFO is non-NULL in the usual case but NULL for a special case
+ when dealing with LTO IR or cloning output sections. */
bool
-_bfd_elf_init_private_section_data (bfd *ibfd,
+_bfd_elf_copy_private_section_data (bfd *ibfd,
asection *isec,
bfd *obfd,
asection *osec,
struct bfd_link_info *link_info)
-
{
- Elf_Internal_Shdr *ihdr, *ohdr;
- bool final_link = (link_info != NULL
- && !bfd_link_relocatable (link_info));
-
if (ibfd->xvec->flavour != bfd_target_elf_flavour
|| obfd->xvec->flavour != bfd_target_elf_flavour)
return true;
- BFD_ASSERT (elf_section_data (osec) != NULL);
+ Elf_Internal_Shdr *ihdr = &elf_section_data (isec)->this_hdr;
+ Elf_Internal_Shdr *ohdr = &elf_section_data (osec)->this_hdr;
+ if (link_info == NULL)
+ {
+ ohdr->sh_entsize = ihdr->sh_entsize;
+
+ if (ihdr->sh_type == SHT_SYMTAB
+ || ihdr->sh_type == SHT_DYNSYM
+ || ihdr->sh_type == SHT_GNU_verneed
+ || ihdr->sh_type == SHT_GNU_verdef)
+ ohdr->sh_info = ihdr->sh_info;
+ }
/* If this is a known ABI section, ELF section type and flags may
have been set up when OSEC was created. For normal sections we
@@ -8373,11 +8412,14 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
|| elf_section_type (osec) == SHT_NOTE
|| elf_section_type (osec) == SHT_NOBITS)
elf_section_type (osec) = SHT_NULL;
+
/* For objcopy and relocatable link, copy the ELF section type from
the input file if the BFD section flags are the same. (If they
are different the user may be doing something like
"objcopy --set-section-flags .text=alloc,data".) For a final
link allow some flags that the linker clears to differ. */
+ bool final_link = (link_info != NULL
+ && !bfd_link_relocatable (link_info));
if (elf_section_type (osec) == SHT_NULL
&& (osec->flags == isec->flags
|| (final_link
@@ -8415,14 +8457,11 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
elf_section_flags (osec) |= (elf_section_flags (isec)
& SHF_COMPRESSED);
- ihdr = &elf_section_data (isec)->this_hdr;
-
/* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
don't use the output section of the linked-to section since it
may be NULL at this point. */
if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
{
- ohdr = &elf_section_data (osec)->this_hdr;
ohdr->sh_flags |= SHF_LINK_ORDER;
elf_linked_to_section (osec) = elf_linked_to_section (isec);
}
@@ -8432,36 +8471,6 @@ _bfd_elf_init_private_section_data (bfd *ibfd,
return true;
}
-/* Copy private section information. This copies over the entsize
- field, and sometimes the info field. */
-
-bool
-_bfd_elf_copy_private_section_data (bfd *ibfd,
- asection *isec,
- bfd *obfd,
- asection *osec)
-{
- Elf_Internal_Shdr *ihdr, *ohdr;
-
- if (ibfd->xvec->flavour != bfd_target_elf_flavour
- || obfd->xvec->flavour != bfd_target_elf_flavour)
- return true;
-
- ihdr = &elf_section_data (isec)->this_hdr;
- ohdr = &elf_section_data (osec)->this_hdr;
-
- ohdr->sh_entsize = ihdr->sh_entsize;
-
- if (ihdr->sh_type == SHT_SYMTAB
- || ihdr->sh_type == SHT_DYNSYM
- || ihdr->sh_type == SHT_GNU_verneed
- || ihdr->sh_type == SHT_GNU_verdef)
- ohdr->sh_info = ihdr->sh_info;
-
- return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
- NULL);
-}
-
/* Look at all the SHT_GROUP sections in IBFD, making any adjustments
necessary if we are removing either the SHT_GROUP section or any of
the group member sections. DISCARDED is the value that a section's
@@ -10391,6 +10400,12 @@ elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
}
static bool
+elfcore_grok_sspreg (bfd *abfd, Elf_Internal_Note *note)
+{
+ return elfcore_make_note_pseudosection (abfd, ".reg-ssp", note);
+}
+
+static bool
elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
{
return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
@@ -10622,6 +10637,15 @@ elfcore_grok_aarch_zt (bfd *abfd, Elf_Internal_Note *note)
return elfcore_make_note_pseudosection (abfd, ".reg-aarch-zt", note);
}
+/* Convert NOTE into a bfd_section called ".reg-aarch-gcs". Return TRUE if
+ successful, otherwise return FALSE. */
+
+static bool
+elfcore_grok_aarch_gcs (bfd *abfd, Elf_Internal_Note *note)
+{
+ return elfcore_make_note_pseudosection (abfd, ".reg-aarch-gcs", note);
+}
+
static bool
elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
{
@@ -11085,6 +11109,13 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
else
return true;
+ case NT_X86_SHSTK: /* Linux CET extension. */
+ if (note->namesz == 6
+ && strcmp (note->namedata, "LINUX") == 0)
+ return elfcore_grok_sspreg (abfd, note);
+ else
+ return true;
+
case NT_PPC_VMX:
if (note->namesz == 6
&& strcmp (note->namedata, "LINUX") == 0)
@@ -11358,6 +11389,12 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
else
return true;
+ case NT_ARM_GCS:
+ if (note->namesz == 6 && strcmp (note->namedata, "LINUX") == 0)
+ return elfcore_grok_aarch_gcs (abfd, note);
+ else
+ return true;
+
case NT_GDB_TDESC:
if (note->namesz == 4
&& strcmp (note->namedata, "GDB") == 0)
@@ -12535,6 +12572,15 @@ elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
note_name, NT_X86_XSTATE, xfpregs, size);
}
+static char *
+elfcore_write_sspreg (bfd *abfd, char *buf, int *bufsiz,
+ const void *ssp, int size)
+{
+ const char *note_name = "LINUX";
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, NT_X86_SHSTK, ssp, size);
+}
+
char *
elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
const void *regs, int size)
@@ -13019,6 +13065,20 @@ elfcore_write_aarch_zt (bfd *abfd,
size);
}
+/* Write the buffer of GCS register values in AARCH_GCS (length SIZE) into
+ the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
+ written into. Return a pointer to the new start of the note buffer, to
+ replace BUF which may no longer be valid. */
+
+static char *
+elfcore_write_aarch_gcs (bfd *abfd, char *buf, int *bufsiz,
+ const void *aarch_gcs, int size)
+{
+ const char *note_name = "LINUX";
+ return elfcore_write_note (abfd, buf, bufsiz, note_name, NT_ARM_GCS,
+ aarch_gcs, size);
+}
+
char *
elfcore_write_arc_v2 (bfd *abfd,
char *buf,
@@ -13130,6 +13190,8 @@ elfcore_write_register_note (bfd *abfd,
return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-x86-segbases") == 0)
return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size);
+ if (strcmp (section, ".reg-ssp") == 0)
+ return elfcore_write_sspreg (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-ppc-vmx") == 0)
return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-ppc-vsx") == 0)
@@ -13206,6 +13268,8 @@ elfcore_write_register_note (bfd *abfd,
return elfcore_write_aarch_za (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-aarch-zt") == 0)
return elfcore_write_aarch_zt (abfd, buf, bufsiz, data, size);
+ if (strcmp (section, ".reg-aarch-gcs") == 0)
+ return elfcore_write_aarch_gcs (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".reg-arc-v2") == 0)
return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
if (strcmp (section, ".gdb-tdesc") == 0)
@@ -13492,6 +13556,9 @@ _bfd_elf_section_offset (bfd *abfd,
case SEC_INFO_TYPE_EH_FRAME:
return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
+ case SEC_INFO_TYPE_SFRAME:
+ return _bfd_elf_sframe_section_offset (abfd, info, sec, offset);
+
default:
if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
{
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 5a87462..c913f2b 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -18394,6 +18394,9 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
struct arm_local_iplt_info **local_iplt;
unsigned int i, num_syms;
+ if (!is_arm_elf (input_bfd))
+ continue;
+
local_iplt = elf32_arm_local_iplt (input_bfd);
if (local_iplt != NULL)
{
diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c
index e240c31..3627b30 100644
--- a/bfd/elf32-nds32.c
+++ b/bfd/elf32-nds32.c
@@ -2692,12 +2692,13 @@ nds32_elf_do_9_pcrel_reloc (bfd * abfd,
bfd_vma symbol_value,
bfd_vma addend)
{
- bfd_signed_vma relocation;
+ bfd_vma relocation;
unsigned short x;
bfd_reloc_status_type status;
/* Sanity check the address (offset in section). */
- if (offset > bfd_get_section_limit (abfd, input_section))
+ bfd_vma octet = offset * bfd_octets_per_byte (abfd, input_section);
+ if (!bfd_reloc_offset_in_range (howto, abfd, input_section, octet))
return bfd_reloc_outofrange;
relocation = symbol_value + addend;
@@ -2708,7 +2709,7 @@ nds32_elf_do_9_pcrel_reloc (bfd * abfd,
before doing pcrel calculations. */
relocation -= (offset & -(bfd_vma) 2);
- if (relocation < -ACCURATE_8BIT_S1 || relocation >= ACCURATE_8BIT_S1)
+ if (relocation + ACCURATE_8BIT_S1 >= 2 * ACCURATE_8BIT_S1)
status = bfd_reloc_overflow;
else
status = bfd_reloc_ok;
@@ -2751,7 +2752,7 @@ struct nds32_hi20
static struct nds32_hi20 *nds32_hi20_list;
static bfd_reloc_status_type
-nds32_elf_hi20_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+nds32_elf_hi20_reloc (bfd *abfd,
arelent *reloc_entry,
asymbol *symbol,
void *data,
@@ -2774,7 +2775,10 @@ nds32_elf_hi20_reloc (bfd *abfd ATTRIBUTE_UNUSED,
}
/* Sanity check the address (offset in section). */
- if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
+ bfd_vma octet = (reloc_entry->address
+ * bfd_octets_per_byte (abfd, input_section));
+ if (!bfd_reloc_offset_in_range (reloc_entry->howto,
+ abfd, input_section, octet))
return bfd_reloc_outofrange;
ret = bfd_reloc_ok;
@@ -2938,7 +2942,10 @@ nds32_elf_generic_reloc (bfd *input_bfd, arelent *reloc_entry,
a section relative addend which is wrong. */
/* Sanity check the address (offset in section). */
- if (reloc_entry->address > bfd_get_section_limit (input_bfd, input_section))
+ bfd_vma octet = (reloc_entry->address
+ * bfd_octets_per_byte (input_bfd, input_section));
+ if (!bfd_reloc_offset_in_range (reloc_entry->howto, input_bfd, input_section,
+ octet))
return bfd_reloc_outofrange;
ret = bfd_reloc_ok;
@@ -4698,7 +4705,8 @@ nds32_elf_final_link_relocate (reloc_howto_type *howto, bfd *input_bfd,
bfd_vma relocation;
/* Sanity check the address. */
- if (address > bfd_get_section_limit (input_bfd, input_section))
+ bfd_vma octet = address * bfd_octets_per_byte (input_bfd, input_section);
+ if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section, octet))
return bfd_reloc_outofrange;
/* This function assumes that we are dealing with a basic relocation
diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
index 39a837c..abb7f5e 100644
--- a/bfd/elf32-sh.c
+++ b/bfd/elf32-sh.c
@@ -1429,9 +1429,9 @@ sh_elf_swap_insns (bfd *abfd, asection *sec, void *relocs,
off = irel->r_offset + 4 + irel->r_addend;
if (off == addr)
- irel->r_offset += 2;
+ irel->r_addend += 2;
else if (off == addr + 2)
- irel->r_offset -= 2;
+ irel->r_addend -= 2;
}
if (irel->r_offset == addr)
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index 8af7190..5b55210 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -1931,7 +1931,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_GOT16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -1961,7 +1961,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_HI16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -1976,7 +1976,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_LO16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -2615,7 +2615,7 @@ static reloc_howto_type micromips_elf64_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MICROMIPS_HI16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -2630,7 +2630,7 @@ static reloc_howto_type micromips_elf64_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MICROMIPS_LO16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -2675,7 +2675,7 @@ static reloc_howto_type micromips_elf64_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- _bfd_mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MICROMIPS_GOT16", /* name */
false, /* partial_inplace */
0, /* src_mask */
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index 259ad13..e758d08 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -2276,9 +2276,6 @@ elf_s390_relocate_section (bfd *output_bfd,
|| SYMBOL_REFERENCES_LOCAL (info, h)
|| resolved_to_zero)
{
- Elf_Internal_Sym *isym;
- asection *sym_sec;
-
/* This is actually a static link, or it is a
-Bsymbolic link and the symbol is defined
locally, or the symbol was forced to be local
@@ -2318,16 +2315,13 @@ elf_s390_relocate_section (bfd *output_bfd,
& 0xff00f000) == 0xe300c000
&& bfd_get_8 (input_bfd,
contents + rel->r_offset + 3) == 0x04))
- && (isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache,
- input_bfd, r_symndx))
- && isym->st_shndx != SHN_ABS
+ && !bfd_is_abs_symbol (&h->root)
&& h != htab->elf.hdynamic
&& h != htab->elf.hgot
&& h != htab->elf.hplt
- && !(isym->st_value & 1)
- && (sym_sec = bfd_section_from_elf_index (input_bfd,
- isym->st_shndx))
- && sym_sec->alignment_power)
+ && !((h->root.u.def.value
+ + sec->output_section->vma
+ + sec->output_offset) & 1))
{
unsigned short new_insn =
(0xc000 | (bfd_get_8 (input_bfd,
@@ -3204,13 +3198,14 @@ elf_s390_relocate_section (bfd *output_bfd,
_bfd_error_handler
/* xgettext:c-format */
(_("%pB(%pA+%#" PRIx64 "): "
- "misaligned symbol `%s' (%#" PRIx64 ") for relocation %s"),
+ "relocation %s against misaligned symbol `%s' (%#" PRIx64 ") in %pB"),
input_bfd,
input_section,
(uint64_t) rel->r_offset,
+ howto->name,
h->root.root.string,
(uint64_t)relocation,
- howto->name);
+ sec->owner);
return false;
}
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 1e08f2e..c40a0c5 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -868,13 +868,6 @@ static const bfd_byte elf_x86_64_eh_frame_non_lazy_plt[] =
DW_CFA_nop, DW_CFA_nop, DW_CFA_nop
};
-static const sframe_frame_row_entry elf_x86_64_sframe_null_fre =
-{
- 0,
- {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes. */
- SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info. */
-};
-
/* .sframe FRE covering the .plt section entry. */
static const sframe_frame_row_entry elf_x86_64_sframe_plt0_fre1 =
{
@@ -923,6 +916,14 @@ static const sframe_frame_row_entry elf_x86_64_sframe_sec_pltn_fre1 =
SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info. */
};
+/* .sframe FRE covering the .plt.got section entry. */
+static const sframe_frame_row_entry elf_x86_64_sframe_pltgot_fre1 =
+{
+ 0, /* SFrame FRE start address. */
+ {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 12 bytes. */
+ SFRAME_V1_FRE_INFO (SFRAME_BASE_REG_SP, 1, SFRAME_FRE_OFFSET_1B) /* FRE info. */
+};
+
/* SFrame helper object for non-lazy PLT. */
static const struct elf_x86_sframe_plt elf_x86_64_sframe_non_lazy_plt =
{
@@ -933,14 +934,14 @@ static const struct elf_x86_sframe_plt elf_x86_64_sframe_non_lazy_plt =
LAZY_PLT_ENTRY_SIZE,
1, /* Number of FREs for PLTn. */
/* Array of SFrame FREs for plt. */
- { &elf_x86_64_sframe_sec_pltn_fre1, &elf_x86_64_sframe_null_fre },
+ { &elf_x86_64_sframe_sec_pltn_fre1 },
0,
0, /* There is no second PLT necessary. */
- { &elf_x86_64_sframe_null_fre },
+ { },
NON_LAZY_PLT_ENTRY_SIZE,
1, /* Number of FREs for PLT GOT. */
/* Array of SFrame FREs for PLT GOT. */
- { &elf_x86_64_sframe_null_fre },
+ { &elf_x86_64_sframe_pltgot_fre1 },
};
/* SFrame helper object for non-lazy IBT enabled PLT. */
@@ -953,14 +954,14 @@ static const struct elf_x86_sframe_plt elf_x86_64_sframe_non_lazy_ibt_plt =
LAZY_PLT_ENTRY_SIZE,
1, /* Number of FREs for PLTn. */
/* Array of SFrame FREs for plt. */
- { &elf_x86_64_sframe_sec_pltn_fre1, &elf_x86_64_sframe_null_fre },
+ { &elf_x86_64_sframe_sec_pltn_fre1 },
0,
0, /* There is no second PLT necessary. */
- { &elf_x86_64_sframe_null_fre },
+ { },
LAZY_PLT_ENTRY_SIZE,
1, /* Number of FREs for PLT GOT. */
/* Array of SFrame FREs for PLT GOT. */
- { &elf_x86_64_sframe_null_fre },
+ { &elf_x86_64_sframe_pltgot_fre1 },
};
/* SFrame helper object for lazy PLT. */
@@ -981,7 +982,7 @@ static const struct elf_x86_sframe_plt elf_x86_64_sframe_plt =
NON_LAZY_PLT_ENTRY_SIZE,
1, /* Number of FREs for PLT GOT. */
/* Array of SFrame FREs for PLT GOT. */
- { &elf_x86_64_sframe_null_fre },
+ { &elf_x86_64_sframe_pltgot_fre1 },
};
/* SFrame helper object for lazy PLT with IBT. */
@@ -1002,7 +1003,7 @@ static const struct elf_x86_sframe_plt elf_x86_64_sframe_ibt_plt =
LAZY_PLT_ENTRY_SIZE,
1, /* Number of FREs for PLT GOT. */
/* Array of SFrame FREs for PLT GOT. */
- { &elf_x86_64_sframe_null_fre },
+ { &elf_x86_64_sframe_pltgot_fre1 },
};
/* These are the standard parameters. */
@@ -2552,7 +2553,13 @@ elf_x86_64_scan_relocs (bfd *abfd, struct bfd_link_info *info,
}
howto = elf_x86_64_rtype_to_howto (abfd, r_type);
- if (rel->r_offset + bfd_get_reloc_size (howto) > sec->size)
+ if (howto == NULL)
+ {
+ _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+ abfd, r_type);
+ goto error_return;
+ }
+ if (!bfd_reloc_offset_in_range (howto, abfd, sec, rel->r_offset))
{
/* xgettext:c-format */
_bfd_error_handler
@@ -5241,6 +5248,9 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
+ got_offset);
if (PLT_LOCAL_IFUNC_P (info, h))
{
+ if (h->root.u.def.section == NULL)
+ return false;
+
info->callbacks->minfo (_("Local IFUNC function `%s' in %pB\n"),
h->root.root.string,
h->root.u.def.section->owner);
@@ -5409,6 +5419,9 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
}
if (SYMBOL_REFERENCES_LOCAL_P (info, h))
{
+ if (h->root.u.def.section == NULL)
+ return false;
+
info->callbacks->minfo (_("Local IFUNC function `%s' in %pB\n"),
h->root.root.string,
h->root.u.def.section->owner);
@@ -6123,13 +6136,14 @@ elf_x86_64_fake_sections (bfd *abfd ATTRIBUTE_UNUSED,
static bool
elf_x86_64_copy_private_section_data (bfd *ibfd, asection *isec,
- bfd *obfd, asection *osec)
+ bfd *obfd, asection *osec,
+ struct bfd_link_info *link_info)
{
- if (!_bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec))
+ if (!_bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec, link_info))
return false;
/* objcopy --set-section-flags without "large" drops SHF_X86_64_LARGE. */
- if (ibfd != obfd)
+ if (link_info == NULL && ibfd != obfd)
elf_section_flags (osec) &= ~SHF_X86_64_LARGE;
return true;
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 1399352..666399b 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -4965,6 +4965,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
asection *sec, *new_sec;
flagword flags;
const char *name;
+ const char *defvername;
bool must_copy_name = false;
struct elf_link_hash_entry *h;
struct elf_link_hash_entry *hi;
@@ -5141,6 +5142,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
old_alignment = 0;
old_bfd = NULL;
new_sec = sec;
+ defvername = NULL;
if (is_elf_hash_table (&htab->root))
{
@@ -5259,7 +5261,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
default version of the symbol. */
if ((iver.vs_vers & VERSYM_HIDDEN) == 0
&& isym->st_shndx != SHN_UNDEF)
- *p++ = ELF_VER_CHR;
+ *p++ = ELF_VER_CHR, defvername = name;
memcpy (p, verstr, verlen + 1);
name = newname;
@@ -5709,9 +5711,15 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
}
else if (dynamic
&& h->root.u.def.section->owner == abfd)
- /* Add this symbol to first hash if this shared
- object has the first definition. */
- elf_link_add_to_first_hash (abfd, info, name, must_copy_name);
+ {
+ /* Add this symbol to first hash if this shared
+ object has the first definition. */
+ elf_link_add_to_first_hash (abfd, info, name, must_copy_name);
+ /* And if it was the default symbol version definition,
+ also add the short name. */
+ if (defvername)
+ elf_link_add_to_first_hash (abfd, info, defvername, false);
+ }
}
}
}
@@ -6273,12 +6281,30 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
if (h->type == bfd_link_hash_undefined)
{
- /* If the archive element has already been loaded then one
- of the symbols defined by that element might have been
- made undefined due to being in a discarded section. */
- if (is_elf_hash_table (info->hash)
- && ((struct elf_link_hash_entry *) h)->indx == -3)
- continue;
+ if (is_elf_hash_table (info->hash))
+ {
+ /* If the archive element has already been loaded then one
+ of the symbols defined by that element might have been
+ made undefined due to being in a discarded section. */
+ if (((struct elf_link_hash_entry *) h)->indx == -3)
+ continue;
+
+ /* In the pre-LTO-plugin pass we must not mistakenly
+ include this archive member if an earlier shared
+ library defined this symbol. */
+ struct elf_link_hash_table *htab = elf_hash_table (info);
+ if (htab->first_hash)
+ {
+ struct elf_link_first_hash_entry *e
+ = ((struct elf_link_first_hash_entry *)
+ bfd_hash_lookup (htab->first_hash, symdef->name,
+ false, false));
+ if (e
+ && (e->abfd->flags & DYNAMIC) != 0
+ && e->abfd != abfd)
+ continue;
+ }
+ }
}
else if (h->type == bfd_link_hash_common)
{
@@ -12206,9 +12232,9 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
break;
case SEC_INFO_TYPE_SFRAME:
{
- /* Merge .sframe sections into the ctf frame encoder
- context of the output_bfd's section. The final .sframe
- output section will be written out later. */
+ /* Merge SFrame section into the SFrame encoder context of the
+ output_bfd's section. The final .sframe output section will
+ be written out later. */
if (!_bfd_elf_merge_section_sframe (output_bfd, flinfo->info,
o, contents))
return false;
@@ -14032,7 +14058,7 @@ _bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
h = get_ext_sym_hash_from_cookie (cookie, r_symndx);
if (h == NULL)
{
- /* A corrup tinput file can lead to a situation where the index
+ /* A corrupt input file can lead to a situation where the index
does not reference either a local or an external symbol. */
if (r_symndx >= cookie->locsymcount)
return NULL;
@@ -14384,7 +14410,8 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
if (o->flags & SEC_GROUP)
{
asection *first = elf_next_in_group (o);
- o->gc_mark = first->gc_mark;
+ if (first != NULL)
+ o->gc_mark = first->gc_mark;
}
if (o->gc_mark)
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index 25f989b..e457bfc 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -1911,7 +1911,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_GOT16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -1941,7 +1941,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_HI16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -1956,7 +1956,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS16_LO16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -2595,7 +2595,7 @@ static reloc_howto_type elf_micromips_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MICROMIPS_HI16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -2610,7 +2610,7 @@ static reloc_howto_type elf_micromips_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- _bfd_mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MICROMIPS_LO16", /* name */
false, /* partial_inplace */
0, /* src_mask */
@@ -2655,7 +2655,7 @@ static reloc_howto_type elf_micromips_howto_table_rela[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- _bfd_mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MICROMIPS_GOT16", /* name */
false, /* partial_inplace */
0, /* src_mask */
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 548da1f..8f39920 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2268,6 +2268,9 @@ elfNN_aarch64_howto_from_bfd_reloc (bfd_reloc_code_real_type code)
if (code == BFD_RELOC_AARCH64_NONE)
return &elfNN_aarch64_howto_none;
+ if (code == BFD_RELOC_AARCH64_BRANCH9)
+ return &elfNN_aarch64_howto_none;
+
return NULL;
}
diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index faad512..c75f520 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -25,6 +25,7 @@
#define ARCH_SIZE NN
#include "elf-bfd.h"
#include "objalloc.h"
+#include "splay-tree.h"
#include "elf/loongarch.h"
#include "elfxx-loongarch.h"
#include "opcode/loongarch.h"
@@ -134,6 +135,10 @@ struct loongarch_elf_link_hash_table
a partially updated state (some sections have vma updated but the
others do not), and it's unsafe to do the normal relaxation. */
bool layout_mutating_for_relr;
+
+ /* Pending relaxation (byte deletion) operations meant for roughly
+ sequential access. */
+ splay_tree pending_delete_ops;
};
struct loongarch_elf_section_data
@@ -168,6 +173,10 @@ loongarch_elf_new_section_hook (bfd *abfd, asection *sec)
#define loongarch_elf_hash_table(p) \
((struct loongarch_elf_link_hash_table *) ((p)->hash)) \
+/* During linker relaxation, indicates whether the section has already
+ undergone alignment processing and no more byte deletion is permitted. */
+#define loongarch_sec_closed_for_deletion(sec) ((sec)->sec_flg0)
+
#define MINUS_ONE ((bfd_vma) 0 - 1)
#define sec_addr(sec) ((sec)->output_section->vma + (sec)->output_offset)
@@ -2933,11 +2942,21 @@ perform_relocation (const Elf_Internal_Rela *rel, asection *input_section,
{
value -= sec_addr (input_section) + rel->r_offset;
value += rel->r_addend;
- bfd_vma word = bfd_get (howto->bitsize, input_bfd,
- contents + rel->r_offset);
- word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
- bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
- r = bfd_reloc_ok;
+ /* Check overflow. */
+ if (ELFNN_R_TYPE (rel->r_info) == R_LARCH_32_PCREL)
+ {
+ r = loongarch_reloc_rewrite_imm_insn (rel, input_section,
+ howto, input_bfd,
+ contents, value);
+ }
+ else
+ {
+ bfd_vma word = bfd_get (howto->bitsize, input_bfd,
+ contents + rel->r_offset);
+ word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
+ bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
+ r = bfd_reloc_ok;
+ }
break;
}
@@ -4714,12 +4733,178 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
return !fatal;
}
-static bool
+/* A pending delete op during a linker relaxation trip, to be stored in a
+ splay tree.
+ The key is the starting offset of this op's deletion range, interpreted
+ as if no delete op were executed for this trip. */
+struct pending_delete_op
+{
+ /* Number of bytes to delete at the address. */
+ bfd_size_type size;
+
+ /* The total offset adjustment at the address as if all preceding delete
+ ops had been executed. Used for calculating expected addresses after
+ relaxation without actually adjusting anything. */
+ bfd_size_type cumulative_offset;
+};
+
+static int
+pending_delete_op_compare (splay_tree_key a, splay_tree_key b)
+{
+ bfd_vma off_a = (bfd_vma)a;
+ bfd_vma off_b = (bfd_vma)b;
+
+ if (off_a < off_b)
+ return -1;
+ else if (off_a > off_b)
+ return 1;
+ else
+ return 0;
+}
+
+static void *
+_allocate_on_bfd (int wanted, void *data)
+{
+ bfd *abfd = (bfd *)data;
+ return bfd_alloc (abfd, wanted);
+}
+
+static void
+_deallocate_on_bfd (void *p ATTRIBUTE_UNUSED, void *data ATTRIBUTE_UNUSED)
+{
+ /* Nothing to do; the data will get released along with the associated BFD
+ or an early bfd_release call. */
+}
+
+static splay_tree
+pending_delete_ops_new (bfd *abfd)
+{
+ /* The node values are allocated with bfd_zalloc, so they are automatically
+ taken care of at BFD release time. */
+ return splay_tree_new_with_allocator (pending_delete_op_compare, NULL, NULL,
+ _allocate_on_bfd, _deallocate_on_bfd, abfd);
+}
+
+static bfd_vma
+loongarch_calc_relaxed_addr (struct bfd_link_info *info, bfd_vma offset)
+{
+ struct loongarch_elf_link_hash_table *htab = loongarch_elf_hash_table (info);
+ splay_tree pdops = htab->pending_delete_ops;
+ struct pending_delete_op *op;
+ splay_tree_node node;
+
+ if (!pdops)
+ /* Currently this means we are past the stages where byte deletion could
+ possibly happen. */
+ return offset;
+
+ /* Find the op that starts just before the given address. */
+ node = splay_tree_predecessor (pdops, (splay_tree_key)offset);
+ if (node == NULL)
+ /* Nothing has been deleted yet. */
+ return offset;
+ BFD_ASSERT (((bfd_vma)node->key) < offset);
+ op = (struct pending_delete_op *)node->value;
+
+ /* If offset is inside this op's range, it is actually one of the deleted
+ bytes, so the adjusted node->key should be returned in this case. */
+ bfd_vma op_end_off = (bfd_vma)node->key + op->size;
+ if (offset < op_end_off)
+ {
+ offset = (bfd_vma)node->key;
+ node = splay_tree_predecessor (pdops, node->key);
+ op = node ? (struct pending_delete_op *)node->value : NULL;
+ }
+
+ return offset - (op ? op->cumulative_offset : 0);
+}
+
+static void
loongarch_relax_delete_bytes (bfd *abfd,
- asection *sec,
- bfd_vma addr,
- size_t count,
- struct bfd_link_info *link_info)
+ bfd_vma addr,
+ size_t count,
+ struct bfd_link_info *link_info)
+{
+ struct loongarch_elf_link_hash_table *htab
+ = loongarch_elf_hash_table (link_info);
+ splay_tree pdops = htab->pending_delete_ops;
+ splay_tree_node node;
+ struct pending_delete_op *op = NULL, *new_op = NULL;
+ bool need_new_node = true;
+
+ if (count == 0)
+ return;
+
+ BFD_ASSERT (pdops != NULL);
+
+ node = splay_tree_predecessor (pdops, addr);
+ if (node)
+ {
+ op = (struct pending_delete_op *)node->value;
+ if ((bfd_vma)node->key + op->size >= addr)
+ {
+ /* The previous op already covers this offset, coalesce the new op
+ into it. */
+ op->size += count;
+ op->cumulative_offset += count;
+ need_new_node = false;
+ }
+ }
+
+ if (need_new_node)
+ {
+ new_op = bfd_zalloc (abfd, sizeof (struct pending_delete_op));
+ new_op->size = count;
+ new_op->cumulative_offset = (op ? op->cumulative_offset : 0) + count;
+ node = splay_tree_insert (pdops, (splay_tree_key)addr,
+ (splay_tree_value)new_op);
+ }
+
+ /* Adjust all cumulative offsets after this op. At this point either:
+ - a new node is created, in which case `node` has been updated with the
+ new value, or
+ - an existing node is to be reused, in which case `node` is untouched by
+ the new node logic above and appropriate to use,
+ so we can just re-use `node` here. */
+ for (node = splay_tree_successor (pdops, node->key); node != NULL;
+ node = splay_tree_successor (pdops, node->key))
+ {
+ op = (struct pending_delete_op *)node->value;
+ op->cumulative_offset += count;
+ }
+}
+
+static void
+loongarch_relax_delete_or_nop (bfd *abfd,
+ asection *sec,
+ bfd_vma addr,
+ size_t count,
+ struct bfd_link_info *link_info)
+{
+ struct bfd_elf_section_data *data = elf_section_data (sec);
+ bfd_byte *contents = data->this_hdr.contents;
+
+ BFD_ASSERT (count % 4 == 0);
+
+ if (!loongarch_sec_closed_for_deletion (sec))
+ {
+ /* Deletions are still possible within the section. */
+ loongarch_relax_delete_bytes (abfd, addr, count, link_info);
+ return;
+ }
+
+ /* We can no longer delete bytes in the section after enforcing alignment.
+ But as the resulting shrinkage may open up a few more relaxation chances,
+ allowing unnecessary instructions to be replaced with NOPs instead of
+ being removed altogether may still benefit performance to a lesser
+ extent. */
+ for (; count; addr += 4, count -= 4)
+ bfd_put (32, abfd, LARCH_NOP, contents + addr);
+}
+
+static void
+loongarch_relax_perform_deletes (bfd *abfd, asection *sec,
+ struct bfd_link_info *link_info)
{
unsigned int i, symcount;
bfd_vma toaddr = sec->size;
@@ -4727,30 +4912,82 @@ loongarch_relax_delete_bytes (bfd *abfd,
Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
unsigned int sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
struct bfd_elf_section_data *data = elf_section_data (sec);
- bfd_byte *contents = data->this_hdr.contents;
+ bfd_byte *contents = data->this_hdr.contents, *contents_end = NULL;
struct relr_entry *relr = loongarch_elf_section_data (sec)->relr;
struct loongarch_elf_link_hash_table *htab =
loongarch_elf_hash_table (link_info);
struct relr_entry *relr_end = NULL;
+ splay_tree pdops = htab->pending_delete_ops;
+ splay_tree_node node1 = NULL, node2 = NULL;
if (htab->relr_count)
relr_end = htab->relr + htab->relr_count;
- /* Actually delete the bytes. */
- sec->size -= count;
- memmove (contents + addr, contents + addr + count, toaddr - addr - count);
+ BFD_ASSERT (pdops != NULL);
+ node1 = splay_tree_min (pdops);
+
+ if (node1 == NULL)
+ /* No pending delete ops, nothing to do. */
+ return;
+
+ /* Actually delete the bytes. For each delete op the pointer arithmetics
+ look like this:
+
+ node1->key -\ /- node2->key
+ |<- op1->size ->| |
+ v v v
+ ...-DDDDDD-------xxxxxxxxxxxxxxxxxSSSSSSxxxxxxxxxx----...
+ ^ ^ ^
+ contents_end node1->key + op1->size
+ |
+ contents_end after this memmove
+
+ where the "S" and "D" bytes are the memmove's source and destination
+ respectively. In case node1 is the first op, contents_end is initialized
+ to the op's start; in case node2 == NULL, the chunk's end is the section's
+ end. The contents_end pointer will be bumped to the new end of content
+ after each memmove. As no byte is added during the process, it is
+ guaranteed to trail behind the delete ops, and all bytes overwritten are
+ either already copied by an earlier memmove or meant to be discarded.
+
+ For memmove, we need to translate offsets to pointers by adding them to
+ `contents`. */
+ for (; node1; node1 = node2)
+ {
+ struct pending_delete_op *op1 = (struct pending_delete_op *)node1->value;
+ bfd_vma op1_start_off = (bfd_vma)node1->key;
+ bfd_vma op1_end_off = op1_start_off + op1->size;
+ node2 = splay_tree_successor (pdops, node1->key);
+ bfd_vma op2_start_off = node2 ? (bfd_vma)node2->key : toaddr;
+ bfd_size_type count = op2_start_off - op1_end_off;
+
+ if (count)
+ {
+ if (contents_end == NULL)
+ /* Start from the end of the first unmodified content chunk. */
+ contents_end = contents + op1_start_off;
+
+ memmove (contents_end, contents + op1_end_off, count);
+ contents_end += count;
+ }
+
+ /* Adjust the section size once, when we have reached the end. */
+ if (node2 == NULL)
+ sec->size -= op1->cumulative_offset;
+ }
/* Adjust the location of all of the relocs. Note that we need not
adjust the addends, since all PC-relative references must be against
symbols, which we will adjust below. */
for (i = 0; i < sec->reloc_count; i++)
- if (data->relocs[i].r_offset > addr && data->relocs[i].r_offset < toaddr)
- data->relocs[i].r_offset -= count;
+ if (data->relocs[i].r_offset < toaddr)
+ data->relocs[i].r_offset = loongarch_calc_relaxed_addr (
+ link_info, data->relocs[i].r_offset);
/* Likewise for relative relocs to be packed into .relr. */
for (; relr && relr < relr_end && relr->sec == sec; relr++)
- if (relr->off > addr && relr->off < toaddr)
- relr->off -= count;
+ if (relr->off < toaddr)
+ relr->off = loongarch_calc_relaxed_addr (link_info, relr->off);
/* Adjust the local symbols defined in this section. */
for (i = 0; i < symtab_hdr->sh_info; i++)
@@ -4758,24 +4995,35 @@ loongarch_relax_delete_bytes (bfd *abfd,
Elf_Internal_Sym *sym = (Elf_Internal_Sym *) symtab_hdr->contents + i;
if (sym->st_shndx == sec_shndx)
{
- /* If the symbol is in the range of memory we just moved, we
- have to adjust its value. */
- if (sym->st_value > addr && sym->st_value <= toaddr)
- sym->st_value -= count;
+ bfd_vma orig_value = sym->st_value;
+ if (orig_value <= toaddr)
+ sym->st_value
+ = loongarch_calc_relaxed_addr (link_info, orig_value);
- /* If the symbol *spans* the bytes we just deleted (i.e. its
- *end* is in the moved bytes but its *start* isn't), then we
- must adjust its size.
+ /* If the symbol *spans* some deleted bytes, that is its *end* is in
+ the moved bytes but its *start* isn't, then we must adjust its
+ size.
This test needs to use the original value of st_value, otherwise
we might accidentally decrease size when deleting bytes right
- before the symbol. But since deleted relocs can't span across
- symbols, we can't have both a st_value and a st_size decrease,
- so it is simpler to just use an else. */
- else if (sym->st_value <= addr
- && sym->st_value + sym->st_size > addr
- && sym->st_value + sym->st_size <= toaddr)
- sym->st_size -= count;
+ before the symbol. */
+ bfd_vma sym_end = orig_value + sym->st_size;
+ if (sym_end <= toaddr)
+ {
+ splay_tree_node node = splay_tree_predecessor (
+ pdops, (splay_tree_key)orig_value);
+ for (; node; node = splay_tree_successor (pdops, node->key))
+ {
+ bfd_vma addr = (bfd_vma)node->key;
+ struct pending_delete_op *op
+ = (struct pending_delete_op *)node->value;
+
+ if (addr >= sym_end)
+ break;
+ if (orig_value <= addr && sym_end > addr)
+ sym->st_size -= op->size;
+ }
+ }
}
}
@@ -4820,20 +5068,33 @@ loongarch_relax_delete_bytes (bfd *abfd,
|| sym_hash->root.type == bfd_link_hash_defweak)
&& sym_hash->root.u.def.section == sec)
{
- /* As above, adjust the value if needed. */
- if (sym_hash->root.u.def.value > addr
- && sym_hash->root.u.def.value <= toaddr)
- sym_hash->root.u.def.value -= count;
+ bfd_vma orig_value = sym_hash->root.u.def.value;
+
+ /* As above, adjust the value. */
+ if (orig_value <= toaddr)
+ sym_hash->root.u.def.value
+ = loongarch_calc_relaxed_addr (link_info, orig_value);
/* As above, adjust the size if needed. */
- else if (sym_hash->root.u.def.value <= addr
- && sym_hash->root.u.def.value + sym_hash->size > addr
- && sym_hash->root.u.def.value + sym_hash->size <= toaddr)
- sym_hash->size -= count;
+ bfd_vma sym_end = orig_value + sym_hash->size;
+ if (sym_end <= toaddr)
+ {
+ splay_tree_node node = splay_tree_predecessor (
+ pdops, (splay_tree_key)orig_value);
+ for (; node; node = splay_tree_successor (pdops, node->key))
+ {
+ bfd_vma addr = (bfd_vma)node->key;
+ struct pending_delete_op *op
+ = (struct pending_delete_op *)node->value;
+
+ if (addr >= sym_end)
+ break;
+ if (orig_value <= addr && sym_end > addr)
+ sym_hash->size -= op->size;
+ }
+ }
}
}
-
- return true;
}
/* Start perform TLS type transition.
@@ -4909,7 +5170,7 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
bfd_put (32, abfd, LARCH_NOP, contents + rel->r_offset);
/* link with -relax option will delete NOP. */
if (!info->disable_target_specific_optimizations)
- loongarch_relax_delete_bytes (abfd, sec, rel->r_offset, 4, info);
+ loongarch_relax_delete_or_nop (abfd, sec, rel->r_offset, 4, info);
return true;
case R_LARCH_TLS_IE_PC_HI20:
@@ -4998,8 +5259,7 @@ loongarch_tls_perform_trans (bfd *abfd, asection *sec,
lu52i.d $rd,$rd,%le64_hi12(sym) => (deleted)
*/
static bool
-loongarch_relax_tls_le (bfd *abfd, asection *sec,
- asection *sym_sec ATTRIBUTE_UNUSED,
+loongarch_relax_tls_le (bfd *abfd, asection *sec, asection *sym_sec,
Elf_Internal_Rela *rel, bfd_vma symval,
struct bfd_link_info *link_info,
bool *agin ATTRIBUTE_UNUSED,
@@ -5009,6 +5269,8 @@ loongarch_relax_tls_le (bfd *abfd, asection *sec,
uint32_t insn = bfd_get (32, abfd, contents + rel->r_offset);
static uint32_t insn_rj,insn_rd;
symval = symval - elf_hash_table (link_info)->tls_sec->vma;
+ if (sym_sec == sec)
+ symval = loongarch_calc_relaxed_addr (link_info, symval);
/* The old LE instruction sequence can be relaxed when the symbol offset
is smaller than the 12-bit range. */
if (symval <= 0xfff)
@@ -5023,7 +5285,7 @@ loongarch_relax_tls_le (bfd *abfd, asection *sec,
if (symval < 0x800)
{
rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
- loongarch_relax_delete_bytes (abfd, sec, rel->r_offset,
+ loongarch_relax_delete_or_nop (abfd, sec, rel->r_offset,
4, link_info);
}
break;
@@ -5048,8 +5310,8 @@ loongarch_relax_tls_le (bfd *abfd, asection *sec,
case R_LARCH_TLS_LE64_LO20:
case R_LARCH_TLS_LE64_HI12:
rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
- loongarch_relax_delete_bytes (abfd, sec, rel->r_offset,
- 4, link_info);
+ loongarch_relax_delete_or_nop (abfd, sec, rel->r_offset,
+ 4, link_info);
break;
case R_LARCH_TLS_LE_LO12:
@@ -5106,19 +5368,28 @@ loongarch_relax_pcala_addi (bfd *abfd, asection *sec, asection *sym_sec,
size_input_section already took care of updating it after relaxation,
so we additionally update once here. */
sec->output_offset = sec->output_section->size;
- bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
-
- /* If pc and symbol not in the same segment, add/sub segment alignment. */
- if (!loongarch_two_sections_in_same_segment (info->output_bfd,
- sec->output_section,
- sym_sec->output_section))
- max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
- : max_alignment;
-
- if (symval > pc)
- pc -= (max_alignment > 4 ? max_alignment : 0);
- else if (symval < pc)
- pc += (max_alignment > 4 ? max_alignment : 0);
+ bfd_vma pc = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, rel_hi->r_offset);
+ if (sym_sec == sec)
+ symval = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, symval - sec_addr (sec));
+
+ /* If pc and symbol not in the same segment, add/sub segment alignment if the
+ section has not undergone alignment processing because distances may grow
+ after alignment. */
+ if (!loongarch_sec_closed_for_deletion (sec))
+ {
+ if (!loongarch_two_sections_in_same_segment (info->output_bfd,
+ sec->output_section,
+ sym_sec->output_section))
+ max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
+ : max_alignment;
+
+ if (symval > pc)
+ pc -= (max_alignment > 4 ? max_alignment : 0);
+ else if (symval < pc)
+ pc += (max_alignment > 4 ? max_alignment : 0);
+ }
const uint32_t pcaddi = LARCH_OP_PCADDI;
@@ -5145,7 +5416,7 @@ loongarch_relax_pcala_addi (bfd *abfd, asection *sec, asection *sym_sec,
R_LARCH_PCREL20_S2);
rel_lo->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
- loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info);
+ loongarch_relax_delete_or_nop (abfd, sec, rel_lo->r_offset, 4, info);
return true;
}
@@ -5167,19 +5438,28 @@ loongarch_relax_call36 (bfd *abfd, asection *sec, asection *sym_sec,
size_input_section already took care of updating it after relaxation,
so we additionally update once here. */
sec->output_offset = sec->output_section->size;
- bfd_vma pc = sec_addr (sec) + rel->r_offset;
-
- /* If pc and symbol not in the same segment, add/sub segment alignment. */
- if (!loongarch_two_sections_in_same_segment (info->output_bfd,
- sec->output_section,
- sym_sec->output_section))
- max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
- : max_alignment;
-
- if (symval > pc)
- pc -= (max_alignment > 4 ? max_alignment : 0);
- else if (symval < pc)
- pc += (max_alignment > 4 ? max_alignment : 0);
+ bfd_vma pc = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, rel->r_offset);
+ if (sym_sec == sec)
+ symval = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, symval - sec_addr (sec));
+
+ /* If pc and symbol not in the same segment, add/sub segment alignment if the
+ section has not undergone alignment processing because distances may grow
+ after alignment. */
+ if (!loongarch_sec_closed_for_deletion (sec))
+ {
+ if (!loongarch_two_sections_in_same_segment (info->output_bfd,
+ sec->output_section,
+ sym_sec->output_section))
+ max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
+ : max_alignment;
+
+ if (symval > pc)
+ pc -= (max_alignment > 4 ? max_alignment : 0);
+ else if (symval < pc)
+ pc += (max_alignment > 4 ? max_alignment : 0);
+ }
/* Is pcalau12i + addi.d insns? */
if (!LARCH_INSN_JIRL (jirl)
@@ -5201,7 +5481,7 @@ loongarch_relax_call36 (bfd *abfd, asection *sec, asection *sym_sec,
/* Adjust relocations. */
rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_LARCH_B26);
/* Delete jirl instruction. */
- loongarch_relax_delete_bytes (abfd, sec, rel->r_offset + 4, 4, info);
+ loongarch_relax_delete_or_nop (abfd, sec, rel->r_offset + 4, 4, info);
return true;
}
@@ -5227,19 +5507,28 @@ loongarch_relax_pcala_ld (bfd *abfd, asection *sec,
size_input_section already took care of updating it after relaxation,
so we additionally update once here. */
sec->output_offset = sec->output_section->size;
- bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
-
- /* If pc and symbol not in the same segment, add/sub segment alignment. */
- if (!loongarch_two_sections_in_same_segment (info->output_bfd,
- sec->output_section,
- sym_sec->output_section))
- max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
- : max_alignment;
-
- if (symval > pc)
- pc -= (max_alignment > 4 ? max_alignment : 0);
- else if (symval < pc)
- pc += (max_alignment > 4 ? max_alignment : 0);
+ bfd_vma pc = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, rel_hi->r_offset);
+ if (sym_sec == sec)
+ symval = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, symval - sec_addr (sec));
+
+ /* If pc and symbol not in the same segment, add/sub segment alignment if the
+ section has not undergone alignment processing because distances may grow
+ after alignment. */
+ if (!loongarch_sec_closed_for_deletion (sec))
+ {
+ if (!loongarch_two_sections_in_same_segment (info->output_bfd,
+ sec->output_section,
+ sym_sec->output_section))
+ max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
+ : max_alignment;
+
+ if (symval > pc)
+ pc -= (max_alignment > 4 ? max_alignment : 0);
+ else if (symval < pc)
+ pc += (max_alignment > 4 ? max_alignment : 0);
+ }
if ((ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_GOT_PC_LO12)
|| (LARCH_GET_RD (ld) != rd)
@@ -5272,12 +5561,13 @@ bfd_elfNN_loongarch_set_data_segment_info (struct bfd_link_info *info,
loongarch_elf_hash_table (info)->data_segment_phase = data_segment_phase;
}
-/* Implement R_LARCH_ALIGN by deleting excess alignment NOPs.
- Once we've handled an R_LARCH_ALIGN, we can't relax anything else. */
+/* Honor R_LARCH_ALIGN requests by deleting excess alignment NOPs.
+ Once we've handled an R_LARCH_ALIGN, we can't relax anything else by deleting
+ bytes, or alignment will be disrupted. */
static bool
loongarch_relax_align (bfd *abfd, asection *sec, asection *sym_sec,
Elf_Internal_Rela *rel,
- bfd_vma symval ATTRIBUTE_UNUSED,
+ bfd_vma symval,
struct bfd_link_info *link_info,
bool *again ATTRIBUTE_UNUSED,
bfd_vma max_alignment ATTRIBUTE_UNUSED)
@@ -5293,6 +5583,10 @@ loongarch_relax_align (bfd *abfd, asection *sec, asection *sym_sec,
else
alignment = rel->r_addend + 4;
+ if (sym_sec == sec)
+ symval = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (link_info, symval - sec_addr (sec));
+
addend = alignment - 4; /* The bytes of NOPs added by R_LARCH_ALIGN. */
symval -= addend; /* The address of first NOP added by R_LARCH_ALIGN. */
bfd_vma aligned_addr = ((symval - 1) & ~(alignment - 1)) + alignment;
@@ -5310,25 +5604,27 @@ loongarch_relax_align (bfd *abfd, asection *sec, asection *sym_sec,
return false;
}
- /* Once we've handled an R_LARCH_ALIGN in a section,
- we can't relax anything else in this section. */
- sec->sec_flg0 = true;
+ /* Once we've handled an R_LARCH_ALIGN in a section, we can't relax anything
+ else by deleting bytes, or alignment will be disrupted. */
+ loongarch_sec_closed_for_deletion (sec) = true;
rel->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
/* If skipping more bytes than the specified maximum,
then the alignment is not done at all and delete all NOPs. */
if (max > 0 && need_nop_bytes > max)
- return loongarch_relax_delete_bytes (abfd, sec, rel->r_offset,
- addend, link_info);
+ {
+ loongarch_relax_delete_bytes (abfd, rel->r_offset, addend, link_info);
+ return true;
+ }
/* If the number of NOPs is already correct, there's nothing to do. */
if (need_nop_bytes == addend)
return true;
/* Delete the excess NOPs. */
- return loongarch_relax_delete_bytes (abfd, sec,
- rel->r_offset + need_nop_bytes,
- addend - need_nop_bytes, link_info);
+ loongarch_relax_delete_bytes (abfd, rel->r_offset + need_nop_bytes,
+ addend - need_nop_bytes, link_info);
+ return true;
}
/* Relax pcalau12i + addi.d of TLS LD/GD/DESC to pcaddi. */
@@ -5349,19 +5645,28 @@ loongarch_relax_tls_ld_gd_desc (bfd *abfd, asection *sec, asection *sym_sec,
size_input_section already took care of updating it after relaxation,
so we additionally update once here. */
sec->output_offset = sec->output_section->size;
- bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
-
- /* If pc and symbol not in the same segment, add/sub segment alignment. */
- if (!loongarch_two_sections_in_same_segment (info->output_bfd,
- sec->output_section,
- sym_sec->output_section))
- max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
- : max_alignment;
-
- if (symval > pc)
- pc -= (max_alignment > 4 ? max_alignment : 0);
- else if (symval < pc)
- pc += (max_alignment > 4 ? max_alignment : 0);
+ bfd_vma pc = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, rel_hi->r_offset);
+ if (sym_sec == sec)
+ symval = sec_addr (sec)
+ + loongarch_calc_relaxed_addr (info, symval - sec_addr (sec));
+
+ /* If pc and symbol not in the same segment, add/sub segment alignment if the
+ section has not undergone alignment processing because distances may grow
+ after alignment. */
+ if (!loongarch_sec_closed_for_deletion (sec))
+ {
+ if (!loongarch_two_sections_in_same_segment (info->output_bfd,
+ sec->output_section,
+ sym_sec->output_section))
+ max_alignment = info->maxpagesize > max_alignment ? info->maxpagesize
+ : max_alignment;
+
+ if (symval > pc)
+ pc -= (max_alignment > 4 ? max_alignment : 0);
+ else if (symval < pc)
+ pc += (max_alignment > 4 ? max_alignment : 0);
+ }
const uint32_t pcaddi = LARCH_OP_PCADDI;
@@ -5404,7 +5709,7 @@ loongarch_relax_tls_ld_gd_desc (bfd *abfd, asection *sec, asection *sym_sec,
}
rel_lo->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
- loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info);
+ loongarch_relax_delete_or_nop (abfd, sec, rel_lo->r_offset, 4, info);
return true;
}
@@ -5448,15 +5753,25 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
if (htab->layout_mutating_for_relr)
return true;
+ /* Definition of LoongArch linker relaxation passes:
+
+ - Pass 0: relaxes everything except R_LARCH_ALIGN, byte deletions are
+ performed; skipped if disable_target_specific_optimizations.
+ - Pass 1: handles alignment, byte deletions are performed. Sections with
+ R_LARCH_ALIGN relocations are marked closed for further byte
+ deletion in order to not disturb alignment. This pass is NOT
+ skipped even if disable_target_specific_optimizations is true.
+ - Pass 2: identical to Pass 0, but replacing relaxed insns with NOP in case
+ the containing section is closed for deletion; skip condition
+ also same as Pass 0. */
+ bool is_alignment_pass = info->relax_pass == 1;
if (bfd_link_relocatable (info)
- || sec->sec_flg0
|| sec->reloc_count == 0
|| (sec->flags & SEC_RELOC) == 0
|| (sec->flags & SEC_HAS_CONTENTS) == 0
/* The exp_seg_relro_adjust is enum phase_enum (0x4). */
|| *(htab->data_segment_phase) == 4
- || (info->disable_target_specific_optimizations
- && info->relax_pass == 0))
+ || (info->disable_target_specific_optimizations && !is_alignment_pass))
return true;
struct bfd_elf_section_data *data = elf_section_data (sec);
@@ -5492,6 +5807,12 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
htab->max_alignment = max_alignment;
}
+ splay_tree pdops = NULL;
+ if (!loongarch_sec_closed_for_deletion (sec))
+ pdops = pending_delete_ops_new (abfd);
+
+ htab->pending_delete_ops = pdops;
+
for (unsigned int i = 0; i < sec->reloc_count; i++)
{
char symtype;
@@ -5531,7 +5852,13 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
}
relax_func_t relax_func = NULL;
- if (info->relax_pass == 0)
+ if (is_alignment_pass)
+ {
+ if (r_type != R_LARCH_ALIGN)
+ continue;
+ relax_func = loongarch_relax_align;
+ }
+ else
{
switch (r_type)
{
@@ -5585,10 +5912,6 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
continue;
}
}
- else if (info->relax_pass == 1 && r_type == R_LARCH_ALIGN)
- relax_func = loongarch_relax_align;
- else
- continue;
/* Four kind of relocations:
Normal: symval is the symbol address.
@@ -5727,6 +6050,13 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
info, again, max_alignment);
}
+ if (pdops)
+ {
+ loongarch_relax_perform_deletes (abfd, sec, info);
+ htab->pending_delete_ops = NULL;
+ splay_tree_delete (pdops);
+ }
+
return true;
}
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index 1c494f5..2fd0129 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -99,7 +99,7 @@
((H) != NULL \
&& (H)->dynindx != -1 \
&& (!bfd_link_pic (INFO) \
- || !SYMBOLIC_BIND ((INFO), (H)) \
+ || !(bfd_link_pie ((INFO)) || SYMBOLIC_BIND ((INFO), (H))) \
|| !(H)->def_regular))
/* True if this is actually a static link, or it is a -Bsymbolic link
@@ -176,6 +176,11 @@ struct _bfd_riscv_elf_obj_tdata
/* tls_type for each local got entry. */
char *local_got_tls_type;
+
+ /* All GNU_PROPERTY_RISCV_FEATURE_1_AND properties. */
+ uint32_t gnu_and_prop;
+ /* PLT type. */
+ riscv_plt_type plt_type;
};
#define _bfd_riscv_elf_tdata(abfd) \
@@ -232,6 +237,15 @@ struct riscv_elf_link_hash_table
/* Relocations for variant CC symbols may be present. */
int variant_cc;
+
+ /* The number of bytes in the PLT header and enties. */
+ bfd_size_type plt_header_size;
+ bfd_size_type plt_entry_size;
+
+ /* Functions to make PLT header and entries. */
+ bool (*make_plt_header) (bfd *output_bfd, struct riscv_elf_link_hash_table *htab);
+ bool (*make_plt_entry) (bfd *output_bfd, asection *got, bfd_vma got_offset,
+ asection *plt, bfd_vma plt_offset);
};
/* Instruction access functions. */
@@ -252,6 +266,12 @@ struct riscv_elf_link_hash_table
&& elf_hash_table_id (elf_hash_table (p)) == RISCV_ELF_DATA) \
? (struct riscv_elf_link_hash_table *) (p)->hash : NULL)
+/* Forward declaration PLT related functions. */
+static bool
+riscv_make_plt_header (bfd *, struct riscv_elf_link_hash_table *);
+static bool
+riscv_make_plt_entry (bfd *, asection *, bfd_vma, asection *, bfd_vma);
+
void
riscv_elfNN_set_options (struct bfd_link_info *link_info,
struct riscv_elf_params *params)
@@ -297,6 +317,12 @@ riscv_is_insn_reloc (const reloc_howto_type *howto)
#define PLT_ENTRY_INSNS 4
#define PLT_HEADER_SIZE (PLT_HEADER_INSNS * 4)
#define PLT_ENTRY_SIZE (PLT_ENTRY_INSNS * 4)
+
+#define PLT_ZICFILP_UNLABELED_HEADER_INSNS 12
+#define PLT_ZICFILP_UNLABELED_ENTRY_INSNS 4
+#define PLT_ZICFILP_UNLABELED_HEADER_SIZE (PLT_ZICFILP_UNLABELED_HEADER_INSNS * 4)
+#define PLT_ZICFILP_UNLABELED_ENTRY_SIZE (PLT_ZICFILP_UNLABELED_ENTRY_INSNS * 4)
+
#define GOT_ENTRY_SIZE RISCV_ELF_WORD_BYTES
#define TLS_GD_GOT_ENTRY_SIZE (RISCV_ELF_WORD_BYTES * 2)
#define TLS_IE_GOT_ENTRY_SIZE RISCV_ELF_WORD_BYTES
@@ -314,12 +340,42 @@ riscv_is_insn_reloc (const reloc_howto_type *howto)
# define MATCH_LREG MATCH_LD
#endif
+
+/* Check whether the compact PLT is used in this object. Tools need this
+ to dump the correct PLT header contents. */
+
+static long
+elfNN_riscv_get_synthetic_symtab (bfd *abfd,
+ long symcount,
+ asymbol **syms,
+ long dynsymcount,
+ asymbol **dynsyms,
+ asymbol **ret)
+{
+ /* Check Zicfilp PLT. */
+ elf_property *prop;
+ prop = _bfd_elf_get_property (abfd, GNU_PROPERTY_RISCV_FEATURE_1_AND, 4);
+ if (prop)
+ {
+ if (prop->u.number & GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED)
+ _bfd_riscv_elf_tdata (abfd)->plt_type |= PLT_ZICFILP_UNLABELED;
+ }
+
+ return _bfd_elf_get_synthetic_symtab (abfd, symcount, syms,
+ dynsymcount, dynsyms, ret);
+}
+
/* Generate a PLT header. */
static bool
-riscv_make_plt_header (bfd *output_bfd, bfd_vma gotplt_addr, bfd_vma addr,
- uint32_t *entry)
+riscv_make_plt_header (bfd *output_bfd, struct riscv_elf_link_hash_table *htab)
{
+ asection *splt = htab->elf.splt;
+ bfd_vma addr = sec_addr (splt);
+
+ asection *sgotplt = htab->elf.sgotplt;
+ bfd_vma gotplt_addr = sec_addr (sgotplt);
+
bfd_vma gotplt_offset_high = RISCV_PCREL_HIGH_PART (gotplt_addr, addr);
bfd_vma gotplt_offset_low = RISCV_PCREL_LOW_PART (gotplt_addr, addr);
@@ -340,6 +396,7 @@ riscv_make_plt_header (bfd *output_bfd, bfd_vma gotplt_addr, bfd_vma addr,
l[w|d] t0, PTRSIZE(t0) # link map
jr t3 */
+ uint32_t entry[PLT_HEADER_INSNS];
entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
@@ -349,15 +406,78 @@ riscv_make_plt_header (bfd *output_bfd, bfd_vma gotplt_addr, bfd_vma addr,
entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
entry[7] = RISCV_ITYPE (JALR, 0, X_T3, 0);
+ for (int i = 0; i < PLT_HEADER_INSNS; i++)
+ bfd_putl32 (entry[i], splt->contents + 4 * i);
+
+ return true;
+}
+
+static bool
+riscv_make_plt_zicfilp_unlabeled_header (bfd *output_bfd,
+ struct riscv_elf_link_hash_table *htab)
+{
+ /*
+ lpad 0 # disable label checking
+ auipc t2, %hi(.got.plt) # Rewrite this to using
+ sub t1, t1, t3 # shifted .got.plt offset + hdr size + 16
+ l[w|d] t3, %lo(1b)(t2) # _dl_runtime_resolve
+ addi t1, t1, -(hdr size + 12) # shifted .got.plt offset
+ addi t0, t2, %pcrel_lo(1b) # &.got.plt
+ srli t1, t1, log2(16/PTRSIZE) # .got.plt offset
+ l[w|d] t0, PTRSIZE(t0) # link map
+ jr t3
+ nop
+ nop
+ nop */
+
+ /* RVE has no t3 register, so this won't work, and is not supported. */
+ if (elf_elfheader (output_bfd)->e_flags & EF_RISCV_RVE)
+ {
+ _bfd_error_handler (_("%pB: warning: RVE PLT generation not supported"),
+ output_bfd);
+ return false;
+ }
+
+ asection *gotplt = htab->elf.sgotplt;
+ bfd_vma gotplt_addr = sec_addr (gotplt);
+
+ asection *splt = htab->elf.splt;
+ bfd_vma plt_header_addr = sec_addr (splt);
+
+ bfd_vma auipc_addr = plt_header_addr + 4;
+ /* Add INSN_BYTES to skip the lpad instruction. */
+ bfd_vma gotplt_offset_high = RISCV_PCREL_HIGH_PART (gotplt_addr, auipc_addr);
+ bfd_vma gotplt_offset_low = RISCV_PCREL_LOW_PART (gotplt_addr, auipc_addr);
+
+ uint32_t header[PLT_ZICFILP_UNLABELED_HEADER_INSNS];
+ header[0] = RISCV_UTYPE (LPAD, X_ZERO, 0);
+ header[1] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
+ header[2] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
+ header[3] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
+ header[4] = RISCV_ITYPE (ADDI, X_T1, X_T1,
+ (uint32_t) -(PLT_ZICFILP_UNLABELED_HEADER_SIZE + 16));
+ header[5] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low);
+ header[6] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES);
+ header[7] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
+ header[8] = RISCV_ITYPE (JALR, 0, X_T3, 0);
+ header[9] = RISCV_NOP;
+ header[10] = RISCV_NOP;
+ header[11] = RISCV_NOP;
+
+ for (int i = 0; i < PLT_ZICFILP_UNLABELED_HEADER_INSNS; i++)
+ bfd_putl32 (header[i], splt->contents + 4 * i);
+
return true;
}
/* Generate a PLT entry. */
static bool
-riscv_make_plt_entry (bfd *output_bfd, bfd_vma got, bfd_vma addr,
- uint32_t *entry)
+riscv_make_plt_entry (bfd *output_bfd, asection *gotsec, bfd_vma got_offset,
+ asection *pltsec, bfd_vma plt_offset)
{
+ bfd_vma got = sec_addr (gotsec) + got_offset;
+ bfd_vma addr = sec_addr (pltsec) + plt_offset;
/* RVE has no t3 register, so this won't work, and is not supported. */
if (elf_elfheader (output_bfd)->e_flags & EF_RISCV_RVE)
{
@@ -371,11 +491,50 @@ riscv_make_plt_entry (bfd *output_bfd, bfd_vma got, bfd_vma addr,
jalr t1, t3
nop */
+ uint32_t entry[PLT_ENTRY_INSNS];
entry[0] = RISCV_UTYPE (AUIPC, X_T3, RISCV_PCREL_HIGH_PART (got, addr));
entry[1] = RISCV_ITYPE (LREG, X_T3, X_T3, RISCV_PCREL_LOW_PART (got, addr));
entry[2] = RISCV_ITYPE (JALR, X_T1, X_T3, 0);
entry[3] = RISCV_NOP;
+ bfd_byte *loc = pltsec->contents + plt_offset;
+ for (int i = 0; i < PLT_ENTRY_INSNS; i++)
+ bfd_putl32 (entry[i], loc + 4 * i);
+
+ return true;
+}
+
+static bool
+riscv_make_plt_zicfilp_unlabeled_entry (bfd *output_bfd, asection *got,
+ bfd_vma got_offset, asection *plt,
+ bfd_vma plt_offset)
+{
+ /* lpad 0
+ 1: auipc t3, %pcrel_hi(function@.got.plt)
+ l[w|d] t3, %pcrel_lo(1b)(t3)
+ jalr t1, t3 */
+
+ /* RVE has no t3 register, so this won't work, and is not supported. */
+ if (elf_elfheader (output_bfd)->e_flags & EF_RISCV_RVE)
+ {
+ _bfd_error_handler (_("%pB: warning: RVE PLT generation not supported"),
+ output_bfd);
+ return false;
+ }
+
+ bfd_vma got_entry_addr = sec_addr(got) + got_offset;
+ bfd_vma plt_entry_addr = sec_addr(plt) + plt_offset;
+ bfd_vma auipc_addr = plt_entry_addr + 4;
+ uint32_t entry[PLT_ZICFILP_UNLABELED_ENTRY_INSNS];
+ entry[0] = RISCV_UTYPE (LPAD, X_ZERO, 0);
+ entry[1] = RISCV_UTYPE (AUIPC, X_T3, RISCV_PCREL_HIGH_PART (got_entry_addr, auipc_addr));
+ entry[2] = RISCV_ITYPE (LREG, X_T3, X_T3, RISCV_PCREL_LOW_PART (got_entry_addr, auipc_addr));
+ entry[3] = RISCV_ITYPE (JALR, X_T1, X_T3, 0);
+
+ bfd_byte *loc = plt->contents + plt_offset;
+ for (int i = 0; i < PLT_ZICFILP_UNLABELED_ENTRY_INSNS; i++)
+ bfd_putl32 (entry[i], loc + 4 * i);
+
return true;
}
@@ -489,6 +648,38 @@ riscv_elf_link_hash_table_free (bfd *obfd)
_bfd_elf_link_hash_table_free (obfd);
}
+/* Set up the PLT generation stubs in the hash table. */
+
+static void
+setup_plt_values (struct bfd *output_bfd,
+ struct riscv_elf_link_hash_table *htab,
+ unsigned plt_type)
+{
+ switch (plt_type)
+ {
+ case PLT_NORMAL:
+ htab->plt_header_size = PLT_HEADER_SIZE;
+ htab->plt_entry_size = PLT_ENTRY_SIZE;
+ htab->make_plt_header = riscv_make_plt_header;
+ htab->make_plt_entry = riscv_make_plt_entry;
+ break;
+
+ case PLT_ZICFILP_UNLABELED:
+ htab->plt_header_size = PLT_ZICFILP_UNLABELED_HEADER_SIZE;
+ htab->plt_entry_size = PLT_ZICFILP_UNLABELED_ENTRY_SIZE;
+ htab->make_plt_header = riscv_make_plt_zicfilp_unlabeled_header;
+ htab->make_plt_entry = riscv_make_plt_zicfilp_unlabeled_entry;
+ break;
+
+ default:
+ _bfd_error_handler (_("%pB: error: unsupported PLT type: %u"),
+ output_bfd,
+ plt_type);
+ bfd_set_error (bfd_error_bad_value);
+ break;
+ }
+}
+
/* Create a RISC-V ELF linker hash table. */
static struct bfd_link_hash_table *
@@ -511,6 +702,8 @@ riscv_elf_link_hash_table_create (bfd *abfd)
ret->max_alignment = (bfd_vma) -1;
ret->max_alignment_for_gp = (bfd_vma) -1;
+ setup_plt_values (abfd, ret, PLT_NORMAL);
+
/* Create hash table for local ifunc. */
ret->loc_hash_table = htab_try_create (1024,
riscv_elf_local_htab_hash,
@@ -1259,12 +1452,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
asection *s = htab->elf.splt;
if (s->size == 0)
- s->size = PLT_HEADER_SIZE;
+ s->size = htab->plt_header_size;
h->plt.offset = s->size;
/* Make room for this entry. */
- s->size += PLT_ENTRY_SIZE;
+ s->size += htab->plt_entry_size;
/* We also need to make an entry in the .got.plt section. */
htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
@@ -1456,6 +1649,7 @@ allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h,
void *inf)
{
struct bfd_link_info *info;
+ struct riscv_elf_link_hash_table *htab;
if (h->root.type == bfd_link_hash_indirect)
return true;
@@ -1464,6 +1658,7 @@ allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h,
h = (struct elf_link_hash_entry *) h->root.u.i.link;
info = (struct bfd_link_info *) inf;
+ htab = riscv_elf_hash_table (info);
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
@@ -1471,8 +1666,8 @@ allocate_ifunc_dynrelocs (struct elf_link_hash_entry *h,
&& h->def_regular)
return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
&h->dyn_relocs,
- PLT_ENTRY_SIZE,
- PLT_HEADER_SIZE,
+ htab->plt_entry_size,
+ htab->plt_header_size,
GOT_ENTRY_SIZE,
true);
return true;
@@ -2472,14 +2667,14 @@ riscv_elf_relocate_section (bfd *output_bfd,
if (htab->elf.splt != NULL)
{
- plt_idx = (h->plt.offset - PLT_HEADER_SIZE)
- / PLT_ENTRY_SIZE;
+ plt_idx = (h->plt.offset - htab->plt_header_size)
+ / htab->plt_entry_size;
off = GOTPLT_HEADER_SIZE + (plt_idx * GOT_ENTRY_SIZE);
base_got = htab->elf.sgotplt;
}
else
{
- plt_idx = h->plt.offset / PLT_ENTRY_SIZE;
+ plt_idx = h->plt.offset / htab->plt_entry_size;
off = plt_idx * GOT_ENTRY_SIZE;
base_got = htab->elf.igotplt;
}
@@ -3247,8 +3442,7 @@ riscv_elf_finish_dynamic_symbol (bfd *output_bfd,
{
/* We've decided to create a PLT entry for this symbol. */
bfd_byte *loc;
- bfd_vma i, header_address, plt_idx, got_offset, got_address;
- uint32_t plt_entry[PLT_ENTRY_INSNS];
+ bfd_vma plt_idx, got_offset, got_address;
Elf_Internal_Rela rela;
asection *plt, *gotplt, *relplt;
@@ -3278,36 +3472,29 @@ riscv_elf_finish_dynamic_symbol (bfd *output_bfd,
|| relplt == NULL)
abort ();
- /* Calculate the address of the PLT header. */
- header_address = sec_addr (plt);
-
/* Calculate the index of the entry and the offset of .got.plt entry.
For static executables, we don't reserve anything. */
if (plt == htab->elf.splt)
{
- plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
+ plt_idx = (h->plt.offset - htab->plt_header_size)
+ / htab->plt_entry_size;
got_offset = GOTPLT_HEADER_SIZE + (plt_idx * GOT_ENTRY_SIZE);
}
else
{
- plt_idx = h->plt.offset / PLT_ENTRY_SIZE;
+ plt_idx = h->plt.offset / htab->plt_entry_size;
got_offset = plt_idx * GOT_ENTRY_SIZE;
}
/* Calculate the address of the .got.plt entry. */
got_address = sec_addr (gotplt) + got_offset;
- /* Find out where the .plt entry should go. */
- loc = plt->contents + h->plt.offset;
/* Fill in the PLT entry itself. */
- if (! riscv_make_plt_entry (output_bfd, got_address,
- header_address + h->plt.offset,
- plt_entry))
+ if (! htab->make_plt_entry (output_bfd, gotplt, got_offset,
+ plt, h->plt.offset))
return false;
- for (i = 0; i < PLT_ENTRY_INSNS; i++)
- bfd_putl32 (plt_entry[i], loc + 4*i);
/* Fill in the initial value of the .got.plt entry. */
loc = gotplt->contents + (got_address - sec_addr (gotplt));
@@ -3595,19 +3782,12 @@ riscv_elf_finish_dynamic_sections (bfd *output_bfd,
/* Fill in the head and tail entries in the procedure linkage table. */
if (splt->size > 0)
{
- int i;
- uint32_t plt_header[PLT_HEADER_INSNS];
- ret = riscv_make_plt_header (output_bfd,
- sec_addr (htab->elf.sgotplt),
- sec_addr (splt), plt_header);
+ ret = htab->make_plt_header (output_bfd, htab);
if (!ret)
return ret;
- for (i = 0; i < PLT_HEADER_INSNS; i++)
- bfd_putl32 (plt_header[i], splt->contents + 4*i);
-
elf_section_data (splt->output_section)->this_hdr.sh_entsize
- = PLT_ENTRY_SIZE;
+ = htab->plt_entry_size;
}
}
@@ -3661,7 +3841,18 @@ static bfd_vma
riscv_elf_plt_sym_val (bfd_vma i, const asection *plt,
const arelent *rel ATTRIBUTE_UNUSED)
{
- return plt->vma + PLT_HEADER_SIZE + i * PLT_ENTRY_SIZE;
+ unsigned plt_type = _bfd_riscv_elf_tdata (plt->owner)->plt_type;
+ switch (plt_type)
+ {
+ case PLT_NORMAL:
+ return plt->vma + (PLT_HEADER_SIZE) + (i * PLT_ENTRY_SIZE);
+
+ case PLT_ZICFILP_UNLABELED:
+ return plt->vma + PLT_ZICFILP_UNLABELED_HEADER_SIZE + (i * PLT_ZICFILP_UNLABELED_ENTRY_SIZE);
+
+ default:
+ abort ();
+ }
}
/* Used to decide how to sort relocs in an optimal manner for the
@@ -5753,6 +5944,43 @@ riscv_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
h->other |= STO_RISCV_VARIANT_CC;
}
+/* Implement elf_backend_setup_gnu_properties for RISC-V. It serves as a
+ wrapper function for _bfd_riscv_elf_link_setup_gnu_properties to account
+ for the effect of GNU properties of the output_bfd. */
+
+static bfd *
+elfNN_riscv_link_setup_gnu_properties (struct bfd_link_info *info)
+{
+ uint32_t and_prop = _bfd_riscv_elf_tdata (info->output_bfd)->gnu_and_prop;
+
+ bfd *pbfd = _bfd_riscv_elf_link_setup_gnu_properties (info, &and_prop);
+
+ _bfd_riscv_elf_tdata (info->output_bfd)->gnu_and_prop = and_prop;
+
+ if (and_prop & GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED)
+ _bfd_riscv_elf_tdata (info->output_bfd)->plt_type = PLT_ZICFILP_UNLABELED;
+
+ setup_plt_values (info->output_bfd, riscv_elf_hash_table (info),
+ _bfd_riscv_elf_tdata (info->output_bfd)->plt_type);
+
+ return pbfd;
+}
+
+/* Implement elf_backend_merge_gnu_properties for RISC-V. It serves as a
+ wrapper function for _bfd_riscv_elf_merge_gnu_properties to account
+ for the effect of GNU properties of the output_bfd. */
+
+static bool
+elfNN_riscv_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd,
+ bfd *bbfd ATTRIBUTE_UNUSED,
+ elf_property *aprop, elf_property *bprop)
+{
+ uint32_t and_prop = _bfd_riscv_elf_tdata (info->output_bfd)->gnu_and_prop;
+
+ return _bfd_riscv_elf_merge_gnu_properties (info, abfd, aprop, bprop,
+ and_prop);
+}
+
#define TARGET_LITTLE_SYM riscv_elfNN_vec
#define TARGET_LITTLE_NAME "elfNN-littleriscv"
#define TARGET_BIG_SYM riscv_elfNN_be_vec
@@ -5785,6 +6013,7 @@ riscv_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
#define elf_info_to_howto riscv_info_to_howto_rela
#define bfd_elfNN_bfd_relax_section _bfd_riscv_relax_section
#define bfd_elfNN_mkobject elfNN_riscv_mkobject
+#define bfd_elfNN_get_synthetic_symtab elfNN_riscv_get_synthetic_symtab
#define elf_backend_additional_program_headers \
riscv_elf_additional_program_headers
#define elf_backend_modify_segment_map riscv_elf_modify_segment_map
@@ -5792,6 +6021,9 @@ riscv_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
#define elf_backend_init_index_section _bfd_elf_init_1_index_section
+#define elf_backend_setup_gnu_properties elfNN_riscv_link_setup_gnu_properties
+#define elf_backend_merge_gnu_properties elfNN_riscv_merge_gnu_properties
+
#define elf_backend_can_gc_sections 1
#define elf_backend_can_refcount 1
#define elf_backend_want_got_plt 1
diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index 45a0205..551f74e 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -708,7 +708,7 @@ static inline bool
bfd_is_non_dynamic_elf_object (bfd *abfd, const struct elf_backend_data *out_be)
{
const struct elf_backend_data *in_be = get_elf_backend_data (abfd);
-
+
return bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& bfd_count_sections (abfd) != 0
&& (abfd->flags & (DYNAMIC | BFD_PLUGIN | BFD_LINKER_CREATED)) == 0
@@ -930,28 +930,20 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info)
GNU properties (if found). */
bfd *pbfd = _bfd_elf_link_setup_gnu_properties (info);
- /* If pbfd has any GNU_PROPERTY_AARCH64_FEATURE_1_AND properties, update
- outprop accordingly. */
if (pbfd != NULL)
{
- /* The property list is sorted in order of type. */
- for (elf_property_list *p = elf_properties (pbfd);
- (p != NULL)
- && (GNU_PROPERTY_AARCH64_FEATURE_1_AND <= p->property.pr_type);
- p = p->next)
- {
- /* This merge of features should happen only once as all the identical
- properties are supposed to have been merged at this stage by
- _bfd_elf_link_setup_gnu_properties(). */
- if (p->property.pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND)
- {
- outprop = (p->property.u.number
- & (GNU_PROPERTY_AARCH64_FEATURE_1_BTI
- | GNU_PROPERTY_AARCH64_FEATURE_1_PAC
- | GNU_PROPERTY_AARCH64_FEATURE_1_GCS));
- break;
- }
- }
+ elf_property_list *p;
+ elf_property_list *plist = elf_properties (pbfd);
+
+ /* If pbfd has any GNU_PROPERTY_AARCH64_FEATURE_1_AND properties, update
+ outprop accordingly. */
+ if ((p = _bfd_elf_find_property (plist,
+ GNU_PROPERTY_AARCH64_FEATURE_1_AND, NULL))
+ != NULL)
+ outprop = p->property.u.number
+ & (GNU_PROPERTY_AARCH64_FEATURE_1_BTI
+ | GNU_PROPERTY_AARCH64_FEATURE_1_PAC
+ | GNU_PROPERTY_AARCH64_FEATURE_1_GCS);
}
tdata->gnu_property_aarch64_feature_1_and = outprop;
diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c
index 9498022..6268c47 100644
--- a/bfd/elfxx-loongarch.c
+++ b/bfd/elfxx-loongarch.c
@@ -1390,7 +1390,7 @@ static loongarch_reloc_howto_type loongarch_howto_table[] =
0xffffffff, /* dst_mask */
false, /* pcrel_offset */
BFD_RELOC_LARCH_32_PCREL, /* bfd_reloc_code_real_type */
- NULL, /* adjust_reloc_bits */
+ reloc_sign_bits, /* adjust_reloc_bits */
NULL), /* larch_reloc_type_name */
/* The paired relocation may be relaxed. */
@@ -2171,11 +2171,11 @@ loongarch_elf_add_sub_reloc_uleb128 (bfd *abfd,
if (output_bfd != NULL)
return bfd_reloc_continue;
- relocation = symbol->value + symbol->section->output_section->vma
- + symbol->section->output_offset + reloc_entry->addend;
+ relocation = (symbol->value + symbol->section->output_section->vma
+ + symbol->section->output_offset + reloc_entry->addend);
- bfd_size_type octets = reloc_entry->address
- * bfd_octets_per_byte (abfd, input_section);
+ bfd_size_type octets = (reloc_entry->address
+ * bfd_octets_per_byte (abfd, input_section));
if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd,
input_section, octets))
return bfd_reloc_outofrange;
@@ -2195,8 +2195,11 @@ loongarch_elf_add_sub_reloc_uleb128 (bfd *abfd,
break;
}
- bfd_vma mask = (1 << (7 * len)) - 1;
- relocation = relocation & mask;
+ if (7 * len < sizeof (bfd_vma))
+ {
+ bfd_vma mask = ((bfd_vma) 1 << (7 * len)) - 1;
+ relocation = relocation & mask;
+ }
loongarch_write_unsigned_leb128 (p, len, relocation);
return bfd_reloc_ok;
}
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index ace1d4b..530e8d6 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -2599,15 +2599,13 @@ _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
addend is adjusted for the fact that the low part is sign
extended. For example, an addend of 0x38000 would have 0x0004 in
the high part and 0x8000 (=0xff..f8000) in the low part.
- To extract the actual addend, calculate (a)
+ To extract the actual addend, calculate
((hi & 0xffff) << 16) + ((lo & 0xffff) ^ 0x8000) - 0x8000.
We will be applying (symbol + addend) & 0xffff to the low insn,
- and we want to apply (b) (symbol + addend + 0x8000) >> 16 to the
+ and we want to apply (symbol + addend + 0x8000) >> 16 to the
high insn (the +0x8000 adjusting for when the applied low part is
- negative). Substituting (a) into (b) and recognising that
- (hi & 0xffff) is already in the high insn gives a high part
- addend adjustment of (lo & 0xffff) ^ 0x8000. */
- vallo = (bfd_get_32 (abfd, location) & 0xffff) ^ 0x8000;
+ negative). */
+ vallo = ((bfd_get_32 (abfd, location) & 0xffff) ^ 0x8000) - 0x8000;
_bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, false,
location);
@@ -2707,6 +2705,29 @@ _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
/* Add in the separate addend, if any. */
val += reloc_entry->addend;
+ /* The high 16 bits of the addend are stored in the high insn, the
+ low 16 bits in the low insn, but there is a catch: You can't
+ just concatenate the high and low parts. The high part of the
+ addend is adjusted for the fact that the low part is sign
+ extended. For example, an addend of 0x38000 would have 0x0004 in
+ the high part and 0x8000 (=0xff..f8000) in the low part.
+ We will be applying (symbol + addend) & 0xffff to the low insn,
+ and we want to apply (symbol + addend + 0x8000) >> 16 to the
+ high insn (the +0x8000 adjusting for when the applied low part is
+ negative). Analogously for the higher parts of a 64-bit addend. */
+ if (reloc_entry->howto->bitsize == 16
+ && reloc_entry->howto->rightshift % 16 == 0)
+#ifdef BFD64
+ val += 0x800080008000ULL >> (48 - reloc_entry->howto->rightshift);
+#else
+ {
+ if (reloc_entry->howto->rightshift <= 16)
+ val += 0x8000 >> (16 - reloc_entry->howto->rightshift);
+ else
+ abort ();
+ }
+#endif
+
/* Add VAL to the relocation field. */
_bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, false,
location);
diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index 481bac9..43d3c0d 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -1022,6 +1022,12 @@ static const struct elf_reloc_map riscv_reloc_map[] =
{ BFD_RELOC_RISCV_SUB_ULEB128, R_RISCV_SUB_ULEB128 },
};
+struct riscv_profiles
+{
+ const char *profile_name;
+ const char *profile_string;
+};
+
/* Given a BFD reloc type, return a howto structure. */
reloc_howto_type *
@@ -1148,7 +1154,8 @@ riscv_elf_ignore_reloc (bfd *abfd ATTRIBUTE_UNUSED,
/* Always add implicit extensions for the SUBSET. */
static bool
-check_implicit_always (riscv_subset_t *subset ATTRIBUTE_UNUSED)
+check_implicit_always (riscv_parse_subset_t *rps ATTRIBUTE_UNUSED,
+ const riscv_subset_t *subset ATTRIBUTE_UNUSED)
{
return true;
}
@@ -1156,20 +1163,34 @@ check_implicit_always (riscv_subset_t *subset ATTRIBUTE_UNUSED)
/* Add implicit extensions only when the version of SUBSET less than 2.1. */
static bool
-check_implicit_for_i (riscv_subset_t *subset)
+check_implicit_for_i (riscv_parse_subset_t *rps ATTRIBUTE_UNUSED,
+ const riscv_subset_t *subset ATTRIBUTE_UNUSED)
{
return (subset->major_version < 2
|| (subset->major_version == 2
&& subset->minor_version < 1));
}
+/* Add the IMPLICIT only when the 'f' extension is also available
+ and XLEN is 32. */
+
+static bool
+check_implicit_for_zcf (riscv_parse_subset_t *rps,
+ const riscv_subset_t *subset ATTRIBUTE_UNUSED)
+{
+ riscv_subset_t *tmp = NULL;
+ return *rps->xlen == 32
+ && riscv_lookup_subset (rps->subset_list, "f", &tmp);
+}
+
/* Record all implicit information for the subsets. */
struct riscv_implicit_subset
{
const char *ext;
const char *implicit_exts;
/* A function to determine if we need to add the implicit subsets. */
- bool (*check_func) (riscv_subset_t *);
+ bool (*check_func) (riscv_parse_subset_t *,
+ const riscv_subset_t *);
};
/* Please added in order since this table is only run once time. */
static struct riscv_implicit_subset riscv_implicit_subsets[] =
@@ -1191,6 +1212,9 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"xsfvqmaccdod", "+zve32x,+zvl128b", check_implicit_always},
{"xsfvfnrclipxfqf", "+zve32f", check_implicit_always},
+ {"xtheadvector", "+zicsr", check_implicit_always},
+ {"xtheadzvamo", "+zaamo", check_implicit_always},
+
{"v", "+zve64d,+zvl128b", check_implicit_always},
{"zvfh", "+zvfhmin,+zfhmin", check_implicit_always},
{"zvfhmin", "+zve32f", check_implicit_always},
@@ -1213,6 +1237,8 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"zvl128b", "+zvl64b", check_implicit_always},
{"zvl64b", "+zvl32b", check_implicit_always},
+ {"zce", "+zca,+zcb,+zcmp,+zcmt", check_implicit_always},
+ {"zce", "+zcf", check_implicit_for_zcf},
{"zcb", "+zca", check_implicit_always},
{"zcd", "+d,+zca", check_implicit_always},
{"zcf", "+f,+zca", check_implicit_always},
@@ -1222,6 +1248,9 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"zicfilp", "+zicsr", check_implicit_always},
{"zicfiss", "+zimop,+zicsr", check_implicit_always},
+ {"zclsd", "+zca,+zilsd", check_implicit_always},
+
+ {"sha", "+h,+ssstateen,+shcounterenw,+shvstvala,+shtvala,+shvstvecd,+shvsatpa,+shgatpa", check_implicit_always},
{"shcounterenw", "+h", check_implicit_always},
{"shgatpa", "+h", check_implicit_always},
@@ -1260,14 +1289,19 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"zvks", "+zvksed,+zvksh,+zvkb,+zvkt", check_implicit_always},
{"smaia", "+ssaia", check_implicit_always},
+ {"smcdeleg", "+ssccfg", check_implicit_always},
{"smcsrind", "+sscsrind", check_implicit_always},
{"smcntrpmf", "+zicsr", check_implicit_always},
{"smctr", "+zicsr", check_implicit_always},
+ {"smrnmi", "+zicsr", check_implicit_always},
{"smstateen", "+ssstateen", check_implicit_always},
{"smepmp", "+zicsr", check_implicit_always},
{"smdbltrp", "+zicsr", check_implicit_always},
+ {"smnpm", "+zicsr", check_implicit_always},
+ {"smmpm", "+zicsr", check_implicit_always},
{"ssaia", "+zicsr", check_implicit_always},
+ {"ssccfg", "+sscsrind", check_implicit_always},
{"sscsrind", "+zicsr", check_implicit_always},
{"sscofpmf", "+zicsr", check_implicit_always},
{"sscounterenw", "+zicsr", check_implicit_always},
@@ -1278,6 +1312,7 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"sstvecd", "+zicsr", check_implicit_always},
{"ssu64xl", "+zicsr", check_implicit_always},
{"ssdbltrp", "+zicsr", check_implicit_always},
+ {"ssnpm", "+zicsr", check_implicit_always},
{"svade", "+zicsr", check_implicit_always},
{"svadu", "+zicsr", check_implicit_always},
@@ -1285,6 +1320,61 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{NULL, NULL, NULL}
};
+/* This table records the mapping form RISC-V Profiles into march string. */
+static struct riscv_profiles riscv_profiles_table[] =
+{
+ /* RVI20U only contains the base extension 'i' as mandatory extension. */
+ {"rvi20u64", "rv64i"},
+ {"rvi20u32", "rv32i"},
+
+ /* RVA20U contains the 'i,m,a,f,d,c,zicsr,zicntr,ziccif,ziccrse,ziccamoa,
+ zicclsm,za128rs' as mandatory extensions. */
+ {"rva20u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_za128rs"},
+
+ /* RVA22U contains the 'i,m,a,f,d,c,zicsr,zihintpause,zba,zbb,zbs,zicntr,
+ zihpm,ziccif,ziccrse,ziccamoa, zicclsm,zic64b,za64rs,zicbom,zicbop,zicboz,
+ zfhmin,zkt' as mandatory extensions. */
+ {"rva22u64", "rv64imafdc_zicsr_zicntr_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt"},
+
+ /* RVA23 contains all mandatory base ISA for RVA22U64 and the new extension
+ 'v,zihintntl,zvfhmin,zvbb,zvkt,zicond,zimop,zcmop,zfa,zawrs' as mandatory
+ extensions. */
+ {"rva23u64", "rv64imafdcbv_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb"
+ "_zfa_zawrs_supm"},
+
+ /* RVA23S contains all mandatory base ISA for RVA23U64 and the privileged
+ extensions as mandatory extensions. */
+ {"rva23s64", "rv64imafdcbv_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb"
+ "_zfa_zawrs_supm_svbare_svade_ssccptr_sstvecd_sstvala_sscounterenw_svpbmt"
+ "_svinval_svnapot_sstc_sscofpmf_ssnpm_ssu64xl_sha"},
+
+ /* RVB23 contains all mandatory base ISA for RVA22U64 and the new extension
+ 'zihintntl,zicond,zimop,zcmop,zfa,zawrs' as mandatory
+ extensions. */
+ {"rvb23u64", "rv64imafdcb_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt_zihintntl_zicond_zimop_zcmop_zcb"
+ "_zfa_zawrs_supm"},
+
+ /* RVB23S contains all mandatory base ISA for RVB23U64 and the privileged
+ extensions as mandatory extensions. */
+ {"rvb23s64", "rv64imafdcb_zicsr_zicntr_zihpm_ziccif_ziccrse_ziccamoa"
+ "_zicclsm_zic64b_za64rs_zihintpause_zba_zbb_zbs_zicbom_zicbop"
+ "_zicboz_zfhmin_zkt_zvfhmin_zvbb_zvkt_zihintntl_zicond_zimop_zcmop_zcb"
+ "_zfa_zawrs_supm_svbare_svade_ssccptr_sstvecd_sstvala_sscounterenw_svpbmt"
+ "_svinval_svnapot_sstc_sscofpmf_ssu64xl"},
+
+ /* Terminate the list. */
+ {NULL, NULL}
+};
+
/* For default_enable field, decide if the extension should
be enbaled by default. */
@@ -1360,6 +1450,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
{"zimop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zicfiss", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zicfilp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zilsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zmmul", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"za64rs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"za128rs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -1434,16 +1525,19 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
{"ztso", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zca", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcb", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zce", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcmop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcmp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"zcmt", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"zclsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{NULL, 0, 0, 0, 0}
};
static struct riscv_supported_ext riscv_supported_std_s_ext[] =
{
+ {"sha", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"shcounterenw", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"shgatpa", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"shtvala", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -1451,6 +1545,7 @@ static struct riscv_supported_ext riscv_supported_std_s_ext[] =
{"shvstvala", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"shvstvecd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"smaia", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"smcdeleg", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"smcsrind", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"smcntrpmf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"smctr", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -1459,6 +1554,7 @@ static struct riscv_supported_ext riscv_supported_std_s_ext[] =
{"smstateen", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"smdbltrp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"ssaia", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"ssccfg", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"ssccptr", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"sscsrind", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"sscofpmf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -1476,6 +1572,7 @@ static struct riscv_supported_ext riscv_supported_std_s_ext[] =
{"svinval", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"svnapot", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"svpbmt", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"svvptc", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"ssqosid", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"ssnpm", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"smnpm", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
@@ -1520,6 +1617,10 @@ static struct riscv_supported_ext riscv_supported_vendor_x_ext[] =
{"xsfvqmaccqoq", ISA_SPEC_CLASS_DRAFT, 1, 0, 0},
{"xsfvqmaccdod", ISA_SPEC_CLASS_DRAFT, 1, 0, 0},
{"xsfvfnrclipxfqf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0},
+ {"xmipscbop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"xmipscmov", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"xmipsexectl", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"xmipslsp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{NULL, 0, 0, 0, 0}
};
@@ -1937,10 +2038,11 @@ riscv_parsing_subset_version (const char *p,
static const char *
riscv_parse_extensions (riscv_parse_subset_t *rps,
const char *arch,
- const char *p)
+ const char *p,
+ bool profile)
{
- /* First letter must start with i, e or g. */
- if (*p != 'e' && *p != 'i' && *p != 'g')
+ /* First letter must start with i, e, g or a profile. */
+ if (*p != 'e' && *p != 'i' && *p != 'g' && !profile)
{
rps->error_handler
(_("%s: first ISA extension must be `e', `i' or `g'"),
@@ -2073,7 +2175,7 @@ riscv_parse_add_implicit_subsets (riscv_parse_subset_t *rps)
{
riscv_subset_t *subset = NULL;
if (riscv_lookup_subset (rps->subset_list, t->ext, &subset)
- && t->check_func (subset))
+ && t->check_func (rps, subset))
riscv_update_subset1 (rps, subset, t->implicit_exts);
}
}
@@ -2124,10 +2226,19 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
no_conflict = false;
}
if (riscv_lookup_subset (rps->subset_list, "xtheadvector", &subset)
- && riscv_lookup_subset (rps->subset_list, "v", &subset))
+ && riscv_lookup_subset (rps->subset_list, "zve32x", &subset))
+ {
+ rps->error_handler
+ (_("`xtheadvector' is conflict with the `v/zve32x' extension"));
+ no_conflict = false;
+ }
+ if (riscv_lookup_subset (rps->subset_list, "zclsd", &subset)
+ && ((riscv_lookup_subset (rps->subset_list, "c", &subset)
+ && riscv_lookup_subset (rps->subset_list, "f", &subset))
+ || riscv_lookup_subset (rps->subset_list, "zcf", &subset)))
{
rps->error_handler
- (_("`xtheadvector' is conflict with the `v' extension"));
+ (_("`zclsd' is conflict with the `c+f'/ `zcf' extension"));
no_conflict = false;
}
if (riscv_lookup_subset (rps->subset_list, "ssnpm", &subset) && xlen != 64)
@@ -2209,6 +2320,42 @@ riscv_set_default_arch (riscv_parse_subset_t *rps)
}
}
+static bool
+riscv_find_profiles (riscv_parse_subset_t *rps, const char **pp)
+{
+ const char *p = *pp;
+
+ /* Checking if input string contains a Profiles.
+ There are two cases use Profiles in -march option:
+
+ 1. Only use Profiles in '-march' as input
+ 2. Mixed Profiles with other extensions
+
+ Use '_' to split Profiles and other extensions. */
+
+ for (int i = 0; riscv_profiles_table[i].profile_name != NULL; ++i)
+ {
+ /* Find profile at the begin. */
+ if (startswith (p, riscv_profiles_table[i].profile_name))
+ {
+ /* Handle the profile string. */
+ riscv_parse_subset (rps, riscv_profiles_table[i].profile_string);
+ p += strlen (riscv_profiles_table[i].profile_name);
+ /* Handle string after profiles if exists. If missing underline
+ bewteen profile and other extensions, warn the user but not deal
+ as an error. */
+ if (*p != '\0' && *p != '_')
+ _bfd_error_handler
+ (_("Warning: should use \"_\" to contact Profiles with other "
+ "extensions"));
+ *pp = p;
+ return true;
+ }
+ }
+ /* Not found profile, return directly. */
+ return false;
+}
+
/* Function for parsing ISA string.
Return Value:
@@ -2246,8 +2393,14 @@ riscv_parse_subset (riscv_parse_subset_t *rps,
}
}
+ bool profile = false;
p = arch;
- if (startswith (p, "rv32"))
+ if (riscv_find_profiles (rps, &p))
+ {
+ /* Check if using Profiles. */
+ profile = true;
+ }
+ else if (startswith (p, "rv32"))
{
*rps->xlen = 32;
p += 4;
@@ -2268,13 +2421,13 @@ riscv_parse_subset (riscv_parse_subset_t *rps,
string is empty. */
if (strlen (arch))
rps->error_handler (
- _("%s: ISA string must begin with rv32 or rv64"),
+ _("%s: ISA string must begin with rv32, rv64 or Profiles"),
arch);
return false;
}
/* Parse single standard and prefixed extensions. */
- if (riscv_parse_extensions (rps, arch, p) == NULL)
+ if (riscv_parse_extensions (rps, arch, p, profile) == NULL)
return false;
/* Finally add implicit extensions according to the current
@@ -2798,6 +2951,12 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
case INSN_CLASS_SMCTR_OR_SSCTR:
return (riscv_subset_supports (rps, "smctr")
|| riscv_subset_supports (rps, "ssctr"));
+ case INSN_CLASS_ZILSD:
+ return riscv_subset_supports (rps, "zilsd");
+ case INSN_CLASS_ZCLSD:
+ return riscv_subset_supports (rps, "zclsd");
+ case INSN_CLASS_SMRNMI:
+ return riscv_subset_supports (rps, "smrnmi");
case INSN_CLASS_SVINVAL:
return riscv_subset_supports (rps, "svinval");
case INSN_CLASS_H:
@@ -2858,6 +3017,14 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
return riscv_subset_supports (rps, "xsfvqmaccdod");
case INSN_CLASS_XSFVFNRCLIPXFQF:
return riscv_subset_supports (rps, "xsfvfnrclipxfqf");
+ case INSN_CLASS_XMIPSCBOP:
+ return riscv_subset_supports (rps, "xmipscbop");
+ case INSN_CLASS_XMIPSCMOV:
+ return riscv_subset_supports (rps, "xmipscmov");
+ case INSN_CLASS_XMIPSEXECTL:
+ return riscv_subset_supports (rps, "xmipsexectl");
+ case INSN_CLASS_XMIPSLSP:
+ return riscv_subset_supports (rps, "xmipslsp");
default:
rps->error_handler
(_("internal: unreachable INSN_CLASS_*"));
@@ -3105,6 +3272,12 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
return "zcmt";
case INSN_CLASS_SMCTR_OR_SSCTR:
return _("smctr' or `ssctr");
+ case INSN_CLASS_ZILSD:
+ return "zilsd";
+ case INSN_CLASS_ZCLSD:
+ return "zclsd";
+ case INSN_CLASS_SMRNMI:
+ return "smrnmi";
case INSN_CLASS_SVINVAL:
return "svinval";
case INSN_CLASS_H:
@@ -3207,3 +3380,174 @@ riscv_print_extensions (void)
}
printf ("\n");
}
+
+/* Find the first input bfd with GNU property and merge it with GPROP. If no
+ such input is found, add it to a new section at the last input. Update
+ GPROP accordingly. */
+
+bfd *
+_bfd_riscv_elf_link_setup_gnu_properties (struct bfd_link_info *info,
+ uint32_t *and_prop_p)
+{
+ asection *sec;
+ bfd *pbfd;
+ bfd *ebfd = NULL;
+ elf_property *prop;
+
+ uint32_t and_prop = *and_prop_p;
+
+ /* Find a normal input file with GNU property note. */
+ for (pbfd = info->input_bfds; pbfd != NULL; pbfd = pbfd->link.next)
+ if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
+ && bfd_count_sections (pbfd) != 0)
+ {
+ ebfd = pbfd;
+
+ if (elf_properties (pbfd) != NULL)
+ break;
+ }
+
+ /* If ebfd != NULL it is either an input with property note or the last
+ input. Either way if we have and_prop, we should add it (by
+ creating a section if needed). */
+ if (ebfd != NULL && (and_prop))
+ {
+ prop = _bfd_elf_get_property (ebfd, GNU_PROPERTY_RISCV_FEATURE_1_AND, 4);
+
+ prop->u.number |= and_prop;
+ prop->pr_kind = property_number;
+
+ /* pbfd being NULL implies ebfd is the last input. Create the GNU
+ property note section. */
+ if (pbfd == NULL)
+ {
+ sec
+ = bfd_make_section_with_flags (ebfd, NOTE_GNU_PROPERTY_SECTION_NAME,
+ (SEC_ALLOC | SEC_LOAD | SEC_IN_MEMORY
+ | SEC_READONLY | SEC_HAS_CONTENTS
+ | SEC_DATA));
+ if (sec == NULL)
+ info->callbacks->einfo (
+ _ ("%F%P: failed to create GNU property section\n"));
+
+ elf_section_type (sec) = SHT_NOTE;
+ }
+ }
+
+ pbfd = _bfd_elf_link_setup_gnu_properties (info);
+
+ if (bfd_link_relocatable (info))
+ return pbfd;
+
+ /* If pbfd has any GNU_PROPERTY_RISCV_FEATURE_1_AND properties, update
+ and_prop accordingly. */
+ if (pbfd != NULL)
+ {
+ elf_property_list *p;
+ elf_property_list *plist = elf_properties (pbfd);
+
+ if ((p = _bfd_elf_find_property (plist, GNU_PROPERTY_RISCV_FEATURE_1_AND,
+ NULL))
+ != NULL)
+ and_prop = p->property.u.number
+ & (GNU_PROPERTY_RISCV_FEATURE_1_CFI_LP_UNLABELED
+ | GNU_PROPERTY_RISCV_FEATURE_1_CFI_SS);
+ }
+
+ *and_prop_p = and_prop;
+ return pbfd;
+}
+
+/* Define elf_backend_parse_gnu_properties for RISC-V. */
+
+enum elf_property_kind
+_bfd_riscv_elf_parse_gnu_properties (bfd *abfd, unsigned int type,
+ bfd_byte *ptr, unsigned int datasz)
+{
+ elf_property *prop;
+
+ switch (type)
+ {
+ case GNU_PROPERTY_RISCV_FEATURE_1_AND:
+ if (datasz != 4)
+ {
+ _bfd_error_handler (_ (
+ "error: %pB: <corrupt RISC-V used size: 0x%x>"),
+ abfd, datasz);
+ return property_corrupt;
+ }
+ prop = _bfd_elf_get_property (abfd, type, datasz);
+ /* Combine properties of the same type. */
+ prop->u.number |= bfd_h_get_32 (abfd, ptr);
+ prop->pr_kind = property_number;
+ break;
+
+ default:
+ return property_ignored;
+ }
+
+ return property_number;
+}
+
+/* Merge RISC-V GNU property BPROP with APROP also accounting for PROP.
+ If APROP isn't NULL, merge it with BPROP and/or PROP. Vice-versa if BROP
+ isn't NULL. Return TRUE if there is any update to APROP or if BPROP should
+ be merge with ABFD. */
+
+bool
+_bfd_riscv_elf_merge_gnu_properties
+ (struct bfd_link_info *info ATTRIBUTE_UNUSED, bfd *abfd ATTRIBUTE_UNUSED,
+ elf_property *aprop, elf_property *bprop, uint32_t and_prop)
+{
+ unsigned int orig_number;
+ bool updated = false;
+ unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type;
+
+ switch (pr_type)
+ {
+ case GNU_PROPERTY_RISCV_FEATURE_1_AND: {
+ if (aprop != NULL && bprop != NULL)
+ {
+ orig_number = aprop->u.number;
+ aprop->u.number = (orig_number & bprop->u.number) | and_prop;
+ updated = orig_number != aprop->u.number;
+ /* Remove the property if all feature bits are cleared. */
+ if (aprop->u.number == 0)
+ aprop->pr_kind = property_remove;
+ break;
+ }
+ /* If either is NULL, the AND would be 0 so, if there is
+ any PROP, asign it to the input that is not NULL. */
+ if (and_prop)
+ {
+ if (aprop != NULL)
+ {
+ orig_number = aprop->u.number;
+ aprop->u.number = and_prop;
+ updated = orig_number != aprop->u.number;
+ }
+ else if (bprop != NULL)
+ {
+ bprop->u.number = and_prop;
+ updated = true;
+ }
+ /* Shouldn't happen because we checked one of APROP or BPROP !=
+ * NULL. */
+ else
+ abort ();
+ }
+ /* No PROP and BPROP is NULL, so remove APROP. */
+ else if (!and_prop && bprop == NULL && aprop != NULL)
+ {
+ aprop->pr_kind = property_remove;
+ updated = true;
+ }
+ }
+ break;
+
+ default:
+ abort ();
+ }
+
+ return updated;
+}
diff --git a/bfd/elfxx-riscv.h b/bfd/elfxx-riscv.h
index 1ce682a..db494d0 100644
--- a/bfd/elfxx-riscv.h
+++ b/bfd/elfxx-riscv.h
@@ -27,6 +27,12 @@
#define RISCV_UNKNOWN_VERSION -1
+typedef enum
+{
+ PLT_NORMAL = 0x0, /* Normal plts. */
+ PLT_ZICFILP_UNLABELED = 0x1 /* Landing pad unlabeled plts. */
+} riscv_plt_type;
+
struct riscv_elf_params
{
/* Whether to relax code sequences to GP-relative addressing. */
@@ -128,3 +134,16 @@ extern void
bfd_elf32_riscv_set_data_segment_info (struct bfd_link_info *, int *);
extern void
bfd_elf64_riscv_set_data_segment_info (struct bfd_link_info *, int *);
+
+extern bfd *
+_bfd_riscv_elf_link_setup_gnu_properties (struct bfd_link_info *, uint32_t *);
+
+extern enum elf_property_kind
+_bfd_riscv_elf_parse_gnu_properties (bfd *, unsigned int, bfd_byte *,
+ unsigned int);
+
+extern bool
+_bfd_riscv_elf_merge_gnu_properties (struct bfd_link_info *, bfd *,
+ elf_property *, elf_property *, uint32_t);
+
+#define elf_backend_parse_gnu_properties _bfd_riscv_elf_parse_gnu_properties
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 625243c..4cf02bb 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -225,8 +225,6 @@
_bfd_elf_copy_private_symbol_data
#endif
-#define bfd_elfNN_init_private_section_data \
- _bfd_elf_init_private_section_data
#ifndef bfd_elfNN_bfd_copy_private_section_data
#define bfd_elfNN_bfd_copy_private_section_data \
_bfd_elf_copy_private_section_data
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
index 6ea41f2..663f40a 100644
--- a/bfd/elfxx-x86.c
+++ b/bfd/elfxx-x86.c
@@ -609,8 +609,7 @@ _bfd_elf_x86_get_local_sym_hash (struct elf_x86_link_hash_table *htab,
return &ret->elf;
}
-/* Create an entry in a x86 ELF linker hash table. NB: THIS MUST BE IN
- SYNC WITH _bfd_elf_link_hash_newfunc. */
+/* Create an entry in an x86 ELF linker hash table. */
struct bfd_hash_entry *
_bfd_x86_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
@@ -629,27 +628,14 @@ _bfd_x86_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
}
/* Call the allocation method of the superclass. */
- entry = _bfd_link_hash_newfunc (entry, table, string);
+ entry = _bfd_elf_link_hash_newfunc (entry, table, string);
if (entry != NULL)
{
struct elf_x86_link_hash_entry *eh
= (struct elf_x86_link_hash_entry *) entry;
- struct elf_link_hash_table *htab
- = (struct elf_link_hash_table *) table;
- memset (&eh->elf.size, 0,
- (sizeof (struct elf_x86_link_hash_entry)
- - offsetof (struct elf_link_hash_entry, size)));
+ memset (&eh->elf + 1, 0, sizeof (*eh) - sizeof (eh->elf));
/* Set local fields. */
- eh->elf.indx = -1;
- eh->elf.dynindx = -1;
- eh->elf.got = htab->init_got_refcount;
- eh->elf.plt = htab->init_plt_refcount;
- /* Assume that we have been called by a non-ELF symbol reader.
- This flag is then reset by the code which reads an ELF input
- file. This ensures that a symbol created by a non-ELF symbol
- reader will have the flag set correctly. */
- eh->elf.non_elf = 1;
eh->plt_second.offset = (bfd_vma) -1;
eh->plt_got.offset = (bfd_vma) -1;
eh->tlsdesc_got = (bfd_vma) -1;
@@ -1905,7 +1891,7 @@ _bfd_x86_elf_create_sframe_plt (bfd *output_bfd,
}
*ectx = sframe_encode (SFRAME_VERSION_2,
- 0,
+ SFRAME_F_FDE_FUNC_START_PCREL,
SFRAME_ABI_AMD64_ENDIAN_LITTLE,
SFRAME_CFA_FIXED_FP_INVALID,
-8, /* Fixed RA offset. */
diff --git a/bfd/format.c b/bfd/format.c
index 7769ad0..a909b70 100644
--- a/bfd/format.c
+++ b/bfd/format.c
@@ -331,6 +331,25 @@ print_and_clear_messages (struct per_xvec_messages *list,
free (iter);
iter = next;
}
+
+ /* Don't retain a pointer to free'd memory. */
+ list->next = NULL;
+}
+
+/* Discard all messages associated with TARG in LIST. Unlike
+ print_and_clear_messages, PER_XVEC_NO_TARGET is not valid for TARG. */
+
+static void
+clear_messages (struct per_xvec_messages *list,
+ const bfd_target *targ)
+{
+ struct per_xvec_messages *iter;
+
+ for (iter = list; iter != NULL; iter = iter->next)
+ {
+ if (iter->targ == targ)
+ clear_warnmsg (&iter->messages);
+ }
}
/* This a copy of lto_section defined in GCC (lto-streamer.h). */
@@ -451,7 +470,18 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
/* Avoid clashes with bfd_cache_close_all running in another
thread. */
if (!bfd_cache_set_uncloseable (abfd, true, &old_in_format_matches))
- return false;
+ {
+ free (matching_vector);
+ return false;
+ }
+
+ /* Locking is required here in order to manage _bfd_section_id. */
+ if (!bfd_lock ())
+ {
+ bfd_cache_set_uncloseable (abfd, old_in_format_matches, NULL);
+ free (matching_vector);
+ return false;
+ }
/* Presume the answer is yes. */
abfd->format = format;
@@ -461,10 +491,6 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
of an archive. */
orig_messages = _bfd_set_error_handler_caching (&messages);
- /* Locking is required here in order to manage _bfd_section_id. */
- if (!bfd_lock ())
- return false;
-
preserve_match.marker = NULL;
if (!bfd_preserve_save (abfd, &preserve, NULL))
goto err_ret;
@@ -545,6 +571,12 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
/* Change BFD's target temporarily. */
abfd->xvec = *target;
+ /* It is possible that targets appear multiple times in
+ bfd_target_vector. If this is the case, then we want to avoid
+ accumulating duplicate messages for a target in MESSAGES, so
+ discard any previous messages associated with this target. */
+ clear_messages (&messages, abfd->xvec);
+
if (bfd_seek (abfd, 0, SEEK_SET) != 0)
goto err_ret;
@@ -754,7 +786,8 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
out:
if (preserve_match.marker != NULL)
bfd_preserve_finish (abfd, &preserve_match);
- bfd_preserve_restore (abfd, &preserve);
+ if (preserve.marker != NULL)
+ bfd_preserve_restore (abfd, &preserve);
_bfd_restore_error_handler_caching (orig_messages);
print_and_clear_messages (&messages, PER_XVEC_NO_TARGET);
bfd_cache_set_uncloseable (abfd, old_in_format_matches, NULL);
diff --git a/bfd/i386aout.c b/bfd/i386aout.c
index fb09597..082ebfb 100644
--- a/bfd/i386aout.c
+++ b/bfd/i386aout.c
@@ -79,7 +79,6 @@ static const struct aout_backend_data MY (backend_data) =
MY (set_sizes),
1, /* Exec header not counted. */
0, /* Add_dynamic_symbols. */
- 0, /* Add_one_symbol. */
0, /* Link_dynamic_object. */
0, /* Write_dynamic_symbol. */
0, /* Check_dynamic_reloc. */
diff --git a/bfd/libaout.h b/bfd/libaout.h
index ca4faec..7628d6a 100644
--- a/bfd/libaout.h
+++ b/bfd/libaout.h
@@ -177,13 +177,6 @@ struct aout_backend_data
(bfd *, struct bfd_link_info *, struct external_nlist **,
bfd_size_type *, char **);
- /* Callback from the add symbols phase of the linker code to handle
- adding a single symbol to the global linker hash table. */
- bool (*add_one_symbol)
- (struct bfd_link_info *, bfd *, const char *, flagword,
- asection *, bfd_vma, const char *, bool, bool,
- struct bfd_link_hash_entry **);
-
/* Called to handle linking a dynamic object. */
bool (*link_dynamic_object)
(struct bfd_link_info *, bfd *);
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index b2f70fb..213cc7d 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -270,17 +270,14 @@ extern bool _bfd_generic_get_section_contents
#define _bfd_generic_bfd_merge_private_bfd_data \
_bfd_bool_bfd_link_true
#define _bfd_generic_bfd_set_private_flags _bfd_bool_bfd_uint_true
-#define _bfd_generic_bfd_copy_private_section_data \
- _bfd_bool_bfd_asection_bfd_asection_true
+extern bool _bfd_generic_bfd_copy_private_section_data
+ (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
+ ATTRIBUTE_HIDDEN;
#define _bfd_generic_bfd_copy_private_symbol_data \
_bfd_bool_bfd_asymbol_bfd_asymbol_true
#define _bfd_generic_bfd_copy_private_header_data _bfd_bool_bfd_bfd_true
#define _bfd_generic_bfd_print_private_bfd_data _bfd_bool_bfd_ptr_true
-extern bool _bfd_generic_init_private_section_data
- (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
- ATTRIBUTE_HIDDEN;
-
/* Routines to use for BFD_JUMP_TABLE_CORE when there is no core file
support. Use BFD_JUMP_TABLE_CORE (_bfd_nocore). */
@@ -645,12 +642,6 @@ extern bool _bfd_generic_link_add_archive_symbols
/* Forward declaration to avoid prototype errors. */
typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
-/* Generic routine to add a single symbol. */
-extern bool _bfd_generic_link_add_one_symbol
- (struct bfd_link_info *, bfd *, const char *name, flagword,
- asection *, bfd_vma, const char *, bool copy,
- bool constructor, struct bfd_link_hash_entry **) ATTRIBUTE_HIDDEN;
-
/* Generic routine to mark section as supplying symbols only. */
extern void _bfd_generic_link_just_syms
(asection *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
diff --git a/bfd/libbfd.c b/bfd/libbfd.c
index f2daf79..6587fc1 100644
--- a/bfd/libbfd.c
+++ b/bfd/libbfd.c
@@ -1514,11 +1514,11 @@ _bfd_write_unsigned_leb128 (bfd_byte *p, bfd_byte *end, bfd_vma val)
}
bool
-_bfd_generic_init_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
- asection *isec ATTRIBUTE_UNUSED,
- bfd *obfd ATTRIBUTE_UNUSED,
- asection *osec ATTRIBUTE_UNUSED,
- struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
+_bfd_generic_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
+ asection *isec ATTRIBUTE_UNUSED,
+ bfd *obfd ATTRIBUTE_UNUSED,
+ asection *osec ATTRIBUTE_UNUSED,
+ struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
{
return true;
}
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 4f6f5ea..bab1f71 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -276,17 +276,14 @@ extern bool _bfd_generic_get_section_contents
#define _bfd_generic_bfd_merge_private_bfd_data \
_bfd_bool_bfd_link_true
#define _bfd_generic_bfd_set_private_flags _bfd_bool_bfd_uint_true
-#define _bfd_generic_bfd_copy_private_section_data \
- _bfd_bool_bfd_asection_bfd_asection_true
+extern bool _bfd_generic_bfd_copy_private_section_data
+ (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
+ ATTRIBUTE_HIDDEN;
#define _bfd_generic_bfd_copy_private_symbol_data \
_bfd_bool_bfd_asymbol_bfd_asymbol_true
#define _bfd_generic_bfd_copy_private_header_data _bfd_bool_bfd_bfd_true
#define _bfd_generic_bfd_print_private_bfd_data _bfd_bool_bfd_ptr_true
-extern bool _bfd_generic_init_private_section_data
- (bfd *, asection *, bfd *, asection *, struct bfd_link_info *)
- ATTRIBUTE_HIDDEN;
-
/* Routines to use for BFD_JUMP_TABLE_CORE when there is no core file
support. Use BFD_JUMP_TABLE_CORE (_bfd_nocore). */
@@ -651,12 +648,6 @@ extern bool _bfd_generic_link_add_archive_symbols
/* Forward declaration to avoid prototype errors. */
typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
-/* Generic routine to add a single symbol. */
-extern bool _bfd_generic_link_add_one_symbol
- (struct bfd_link_info *, bfd *, const char *name, flagword,
- asection *, bfd_vma, const char *, bool copy,
- bool constructor, struct bfd_link_hash_entry **) ATTRIBUTE_HIDDEN;
-
/* Generic routine to mark section as supplying symbols only. */
extern void _bfd_generic_link_just_syms
(asection *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
@@ -3236,6 +3227,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_AARCH64_LD_GOT_LO12_NC",
"BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC",
"BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC",
+ "BFD_RELOC_AARCH64_BRANCH9",
"BFD_RELOC_TILEPRO_COPY",
"BFD_RELOC_TILEPRO_GLOB_DAT",
"BFD_RELOC_TILEPRO_JMP_SLOT",
diff --git a/bfd/libcoff.h b/bfd/libcoff.h
index d0cfd09..05ebe35 100644
--- a/bfd/libcoff.h
+++ b/bfd/libcoff.h
@@ -864,11 +864,6 @@ typedef struct
(bfd *, struct bfd_link_info *, bfd *, asection *,
struct internal_reloc *, bool *);
- bool (*_bfd_coff_link_add_one_symbol)
- (struct bfd_link_info *, bfd *, const char *, flagword,
- asection *, bfd_vma, const char *, bool, bool,
- struct bfd_link_hash_entry **);
-
bool (*_bfd_coff_link_output_has_begun)
(bfd *, struct coff_final_link_info *);
@@ -1005,10 +1000,6 @@ typedef struct
#define bfd_coff_adjust_symndx(obfd, info, ibfd, sec, rel, adjustedp)\
((coff_backend_info (abfd)->_bfd_coff_adjust_symndx)\
(obfd, info, ibfd, sec, rel, adjustedp))
-#define bfd_coff_link_add_one_symbol(info, abfd, name, flags, section,\
- value, string, cp, coll, hashp)\
- ((coff_backend_info (abfd)->_bfd_coff_link_add_one_symbol)\
- (info, abfd, name, flags, section, value, string, cp, coll, hashp))
#define bfd_coff_link_output_has_begun(a,p) \
((coff_backend_info (a)->_bfd_coff_link_output_has_begun) (a, p))
diff --git a/bfd/libecoff.h b/bfd/libecoff.h
index 51a00e0..08b601d 100644
--- a/bfd/libecoff.h
+++ b/bfd/libecoff.h
@@ -250,9 +250,6 @@ extern bool _bfd_ecoff_get_section_contents
#define _bfd_ecoff_bfd_link_split_section _bfd_generic_link_split_section
#define _bfd_ecoff_bfd_link_check_relocs _bfd_generic_link_check_relocs
-#define _bfd_ecoff_init_private_section_data \
- _bfd_generic_init_private_section_data
-
extern bool _bfd_ecoff_bfd_copy_private_bfd_data
(bfd *, bfd *);
#define _bfd_ecoff_bfd_copy_private_section_data \
diff --git a/bfd/libpei.h b/bfd/libpei.h
index 4932fb1..fc1ada2 100644
--- a/bfd/libpei.h
+++ b/bfd/libpei.h
@@ -473,7 +473,7 @@ CODEVIEW_INFO *_bfd_XXi_slurp_codeview_record
unsigned _bfd_XX_only_swap_filehdr_out (bfd *, void *, void *);
unsigned _bfd_XXi_only_swap_filehdr_out (bfd *, void *, void *);
bool _bfd_XX_bfd_copy_private_section_data
- (bfd *, asection *, bfd *, asection *);
+ (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
bool _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
bool _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
diff --git a/bfd/linker.c b/bfd/linker.c
index 2a4b8f0..a9a23e5 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -1378,7 +1378,25 @@ hash_entry_bfd (struct bfd_link_hash_entry *h)
/*NOTREACHED*/
}
-/* Add a symbol to the global hash table.
+/*
+FUNCTION
+ _bfd_generic_link_add_one_symbol
+
+SYNOPSIS
+ bool _bfd_generic_link_add_one_symbol
+ (struct bfd_link_info *info,
+ bfd *abfd,
+ const char *name,
+ flagword flags,
+ asection *section,
+ bfd_vma value,
+ const char *string,
+ bool copy,
+ bool collect,
+ struct bfd_link_hash_entry **hashp);
+
+DESCRIPTION
+ Add a symbol to the global hash table.
ABFD is the BFD the symbol comes from.
NAME is the name of the symbol.
FLAGS is the BSF_* bits associated with the symbol.
diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c
index fa1953f..e402d3a 100644
--- a/bfd/mach-o-target.c
+++ b/bfd/mach-o-target.c
@@ -74,7 +74,6 @@
#define bfd_mach_o_write_armap _bfd_noarchive_write_armap
#define bfd_mach_o_get_elt_at_index _bfd_noarchive_get_elt_at_index
#define bfd_mach_o_update_armap_timestamp _bfd_noarchive_update_armap_timestamp
-#define bfd_mach_o_init_private_section_data _bfd_generic_init_private_section_data
#define TARGET_NAME_BACKEND XCONCAT2(TARGET_NAME,_backend)
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index fb5bde1..cc191b9 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -583,15 +583,17 @@ bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED,
bool
bfd_mach_o_bfd_copy_private_section_data (bfd *ibfd, asection *isection,
- bfd *obfd, asection *osection)
+ bfd *obfd, asection *osection,
+ struct bfd_link_info *link_info)
{
- bfd_mach_o_section *os = bfd_mach_o_get_mach_o_section (osection);
- bfd_mach_o_section *is = bfd_mach_o_get_mach_o_section (isection);
-
- if (ibfd->xvec->flavour != bfd_target_mach_o_flavour
+ if (link_info != NULL
+ || ibfd->xvec->flavour != bfd_target_mach_o_flavour
|| obfd->xvec->flavour != bfd_target_mach_o_flavour)
return true;
+ bfd_mach_o_section *os = bfd_mach_o_get_mach_o_section (osection);
+ bfd_mach_o_section *is = bfd_mach_o_get_mach_o_section (isection);
+
BFD_ASSERT (is != NULL && os != NULL);
os->flags = is->flags;
diff --git a/bfd/mach-o.h b/bfd/mach-o.h
index 3aaae38..1cda072 100644
--- a/bfd/mach-o.h
+++ b/bfd/mach-o.h
@@ -691,7 +691,8 @@ bool bfd_mach_o_write_contents (bfd *);
bool bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *,
bfd *, asymbol *);
bool bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *,
- bfd *, asection *);
+ bfd *, asection *,
+ struct bfd_link_info *);
bool bfd_mach_o_bfd_copy_private_header_data (bfd *, bfd *);
bool bfd_mach_o_bfd_set_private_flags (bfd *, flagword);
bool bfd_mach_o_bfd_print_private_bfd_data (bfd *, void *);
diff --git a/bfd/mmo.c b/bfd/mmo.c
index 1b1eb87..762aeff 100644
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -3350,7 +3350,6 @@ mmo_write_object_contents (bfd *abfd)
#define mmo_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
#define mmo_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
#define mmo_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data
-#define mmo_init_private_section_data _bfd_generic_init_private_section_data
const bfd_target mmix_mmo_vec =
{
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index bdd9fc2..2d12033 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -2839,9 +2839,6 @@ aout_link_check_archive_element (bfd *abfd,
static bool
aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
{
- bool (*add_one_symbol)
- (struct bfd_link_info *, bfd *, const char *, flagword, asection *,
- bfd_vma, const char *, bool, bool, struct bfd_link_hash_entry **);
struct external_nlist *syms;
bfd_size_type sym_count;
char *strings;
@@ -2875,10 +2872,6 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
return false;
obj_aout_sym_hashes (abfd) = sym_hash;
- add_one_symbol = aout_backend_info (abfd)->add_one_symbol;
- if (add_one_symbol == NULL)
- add_one_symbol = _bfd_generic_link_add_one_symbol;
-
p = syms;
pend = p + sym_count;
for (; p < pend; p++, sym_hash++)
@@ -2951,7 +2944,7 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
break;
}
- if (! ((*add_one_symbol)
+ if (! (_bfd_generic_link_add_one_symbol
(info, abfd, name, flags, section, value, string, copy, false,
(struct bfd_link_hash_entry **) sym_hash)))
return false;
diff --git a/bfd/pe-aarch64.c b/bfd/pe-aarch64.c
index 64975d1..2204a51 100644
--- a/bfd/pe-aarch64.c
+++ b/bfd/pe-aarch64.c
@@ -48,6 +48,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pe-arm.c b/bfd/pe-arm.c
index fe4e18e..5efa559 100644
--- a/bfd/pe-arm.c
+++ b/bfd/pe-arm.c
@@ -43,6 +43,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pe-i386.c b/bfd/pe-i386.c
index 07f6743..3742fd8 100644
--- a/bfd/pe-i386.c
+++ b/bfd/pe-i386.c
@@ -36,6 +36,8 @@
#define COFF_SECTION_ALIGNMENT_ENTRIES \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pe-x86_64.c b/bfd/pe-x86_64.c
index d56d75d..9151aac 100644
--- a/bfd/pe-x86_64.c
+++ b/bfd/pe-x86_64.c
@@ -57,6 +57,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 2901268..c337fc5 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -593,7 +593,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr;
PEAOUTHDR *aouthdr_out = (PEAOUTHDR *) out;
bfd_vma sa, fa, ib;
- IMAGE_DATA_DIRECTORY idata2, idata5, tls;
+ IMAGE_DATA_DIRECTORY idata2, idata5, didat2, tls, loadcfg;
sa = extra->SectionAlignment;
fa = extra->FileAlignment;
@@ -601,7 +601,9 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
idata2 = pe->pe_opthdr.DataDirectory[PE_IMPORT_TABLE];
idata5 = pe->pe_opthdr.DataDirectory[PE_IMPORT_ADDRESS_TABLE];
+ didat2 = pe->pe_opthdr.DataDirectory[PE_DELAY_IMPORT_DESCRIPTOR];
tls = pe->pe_opthdr.DataDirectory[PE_TLS_TABLE];
+ loadcfg = pe->pe_opthdr.DataDirectory[PE_LOAD_CONFIG_TABLE];
if (aouthdr_in->tsize)
{
@@ -650,7 +652,9 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
a final link is going to be performed, it can overwrite them. */
extra->DataDirectory[PE_IMPORT_TABLE] = idata2;
extra->DataDirectory[PE_IMPORT_ADDRESS_TABLE] = idata5;
+ extra->DataDirectory[PE_DELAY_IMPORT_DESCRIPTOR] = didat2;
extra->DataDirectory[PE_TLS_TABLE] = tls;
+ extra->DataDirectory[PE_LOAD_CONFIG_TABLE] = loadcfg;
if (extra->DataDirectory[PE_IMPORT_TABLE].VirtualAddress == 0)
/* Until other .idata fixes are made (pending patch), the entry for
@@ -999,6 +1003,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out)
{ ".arch", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_DISCARDABLE | IMAGE_SCN_ALIGN_8BYTES },
{ ".bss", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_WRITE },
{ ".data", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_WRITE },
+ { ".didat", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_WRITE },
{ ".edata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
{ ".idata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
{ ".pdata", IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA },
@@ -3110,9 +3115,11 @@ bool
_bfd_XX_bfd_copy_private_section_data (bfd *ibfd,
asection *isec,
bfd *obfd,
- asection *osec)
+ asection *osec,
+ struct bfd_link_info *link_info)
{
- if (bfd_get_flavour (ibfd) != bfd_target_coff_flavour
+ if (link_info != NULL
+ || bfd_get_flavour (ibfd) != bfd_target_coff_flavour
|| bfd_get_flavour (obfd) != bfd_target_coff_flavour)
return true;
@@ -4403,6 +4410,7 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
struct coff_link_hash_entry *h1;
struct bfd_link_info *info = pfinfo->info;
bool result = true;
+ char name[20];
/* There are a few fields that need to be filled in now while we
have symbol table access.
@@ -4430,8 +4438,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
else
{
_bfd_error_handler
- (_("%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"),
- abfd);
+ (_("%pB: unable to fill in DataDirectory[%d]: %s is missing"),
+ abfd, PE_IMPORT_TABLE, ".idata$2");
result = false;
}
@@ -4450,8 +4458,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
else
{
_bfd_error_handler
- (_("%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"),
- abfd);
+ (_("%pB: unable to fill in DataDirectory[%d]: %s is missing"),
+ abfd, PE_IMPORT_TABLE, ".idata$4");
result = false;
}
@@ -4471,8 +4479,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
else
{
_bfd_error_handler
- (_("%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"),
- abfd);
+ (_("%pB: unable to fill in DataDirectory[%d]: %s is missing"),
+ abfd, PE_IMPORT_ADDRESS_TABLE, ".idata$5");
result = false;
}
@@ -4491,8 +4499,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
else
{
_bfd_error_handler
- (_("%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing"),
- abfd);
+ (_("%pB: unable to fill in DataDirectory[%d]: %s is missing"),
+ abfd, PE_IMPORT_ADDRESS_TABLE, ".idata$6");
result = false;
}
}
@@ -4533,17 +4541,62 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
else
{
_bfd_error_handler
- (_("%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)]"
- " because .idata$6 is missing"), abfd);
+ (_("%pB: unable to fill in DataDirectory[%d]: %s not defined correctly"),
+ abfd, PE_IMPORT_ADDRESS_TABLE, "__IAT_end__");
result = false;
}
}
}
+ /* The delay import directory. This is .didat$2 */
h1 = coff_link_hash_lookup (coff_hash_table (info),
- (bfd_get_symbol_leading_char (abfd) != 0
- ? "__tls_used" : "_tls_used"),
- false, false, true);
+ "__DELAY_IMPORT_DIRECTORY_start__", false, false,
+ true);
+ if (h1 != NULL
+ && (h1->root.type == bfd_link_hash_defined
+ || h1->root.type == bfd_link_hash_defweak)
+ && h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ {
+ bfd_vma delay_va;
+
+ delay_va =
+ (h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset);
+
+ h1 = coff_link_hash_lookup (coff_hash_table (info),
+ "__DELAY_IMPORT_DIRECTORY_end__", false,
+ false, true);
+ if (h1 != NULL
+ && (h1->root.type == bfd_link_hash_defined
+ || h1->root.type == bfd_link_hash_defweak)
+ && h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ {
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_DELAY_IMPORT_DESCRIPTOR].Size =
+ ((h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset)
+ - delay_va);
+ if (pe_data (abfd)->pe_opthdr.DataDirectory[PE_DELAY_IMPORT_DESCRIPTOR].Size
+ != 0)
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_DELAY_IMPORT_DESCRIPTOR].VirtualAddress =
+ delay_va - pe_data (abfd)->pe_opthdr.ImageBase;
+ }
+ else
+ {
+ _bfd_error_handler
+ (_("%pB: unable to fill in DataDirectory[%d]: %s not defined correctly"),
+ abfd, PE_DELAY_IMPORT_DESCRIPTOR,
+ "__DELAY_IMPORT_DIRECTORY_end__");
+ result = false;
+ }
+ }
+
+ name[0] = bfd_get_symbol_leading_char (abfd);
+ strcpy (name + !!name[0], "_tls_used");
+ h1 = coff_link_hash_lookup (coff_hash_table (info), name, false, false, true);
if (h1 != NULL)
{
if ((h1->root.type == bfd_link_hash_defined
@@ -4558,8 +4611,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
else
{
_bfd_error_handler
- (_("%pB: unable to fill in DataDictionary[9] because __tls_used is missing"),
- abfd);
+ (_("%pB: unable to fill in DataDirectory[%d]: %s not defined correctly"),
+ abfd, PE_TLS_TABLE, name);
result = false;
}
/* According to PECOFF sepcifications by Microsoft version 8.2
@@ -4573,6 +4626,81 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
#endif
}
+ name[0] = bfd_get_symbol_leading_char (abfd);
+ strcpy (name + !!name[0], "_load_config_used");
+ h1 = coff_link_hash_lookup (coff_hash_table (info), name, false, false, true);
+ if (h1 != NULL)
+ {
+ char data[4];
+ if ((h1->root.type == bfd_link_hash_defined
+ || h1->root.type == bfd_link_hash_defweak)
+ && h1->root.u.def.section != NULL
+ && h1->root.u.def.section->output_section != NULL)
+ {
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_LOAD_CONFIG_TABLE].VirtualAddress =
+ (h1->root.u.def.value
+ + h1->root.u.def.section->output_section->vma
+ + h1->root.u.def.section->output_offset
+ - pe_data (abfd)->pe_opthdr.ImageBase);
+
+ if (pe_data (abfd)->pe_opthdr.DataDirectory[PE_LOAD_CONFIG_TABLE].VirtualAddress
+ & (bfd_arch_bits_per_address (abfd) / bfd_arch_bits_per_byte (abfd)
+ - 1))
+ {
+ _bfd_error_handler
+ (_("%pB: unable to fill in DataDirectory[%d]: %s not properly aligned"),
+ abfd, PE_LOAD_CONFIG_TABLE, name);
+ result = false;
+ }
+
+ /* The size is stored as the first 4 bytes at _load_config_used. */
+ if (bfd_get_section_contents (abfd,
+ h1->root.u.def.section->output_section, data,
+ h1->root.u.def.section->output_offset + h1->root.u.def.value,
+ 4))
+ {
+ uint32_t size = bfd_get_32 (abfd, data);
+ /* The Microsoft PE format documentation says for compatibility
+ with Windows XP and earlier, the size must be 64 for x86
+ images. */
+ pe_data (abfd)->pe_opthdr.DataDirectory[PE_LOAD_CONFIG_TABLE].Size
+ = (bfd_get_arch (abfd) == bfd_arch_i386
+ && ((bfd_get_mach (abfd) & ~bfd_mach_i386_intel_syntax)
+ == bfd_mach_i386_i386)
+ && ((pe_data (abfd)->pe_opthdr.Subsystem
+ == IMAGE_SUBSYSTEM_WINDOWS_GUI)
+ || (pe_data (abfd)->pe_opthdr.Subsystem
+ == IMAGE_SUBSYSTEM_WINDOWS_CUI))
+ && (pe_data (abfd)->pe_opthdr.MajorSubsystemVersion * 256
+ + pe_data (abfd)->pe_opthdr.MinorSubsystemVersion
+ <= 0x0501))
+ ? 64 : size;
+
+ if (size > h1->root.u.def.section->size - h1->root.u.def.value)
+ {
+ _bfd_error_handler
+ (_("%pB: unable to fill in DataDirectory[%d]: size too large for the containing section"),
+ abfd, PE_LOAD_CONFIG_TABLE);
+ result = false;
+ }
+ }
+ else
+ {
+ _bfd_error_handler
+ (_("%pB: unable to fill in DataDirectory[%d]: size can't be read from %s"),
+ abfd, PE_LOAD_CONFIG_TABLE, name);
+ result = false;
+ }
+ }
+ else
+ {
+ _bfd_error_handler
+ (_("%pB: unable to fill in DataDirectory[%d]: %s not defined correctly"),
+ abfd, PE_LOAD_CONFIG_TABLE, name);
+ result = false;
+ }
+ }
+
/* If there is a .pdata section and we have linked pdata finally, we
need to sort the entries ascending. */
#if !defined(COFF_WITH_pep) && (defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64) || defined(COFF_WITH_peLoongArch64) || defined (COFF_WITH_peRiscV64))
diff --git a/bfd/pei-aarch64.c b/bfd/pei-aarch64.c
index 3d7f5b3..00f38e0 100644
--- a/bfd/pei-aarch64.c
+++ b/bfd/pei-aarch64.c
@@ -49,6 +49,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pei-arm.c b/bfd/pei-arm.c
index 2abc14d..07cebb5 100644
--- a/bfd/pei-arm.c
+++ b/bfd/pei-arm.c
@@ -45,6 +45,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pei-i386.c b/bfd/pei-i386.c
index 676a824..a26f170 100644
--- a/bfd/pei-i386.c
+++ b/bfd/pei-i386.c
@@ -35,6 +35,8 @@
#define COFF_SECTION_ALIGNMENT_ENTRIES \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pei-loongarch64.c b/bfd/pei-loongarch64.c
index 4b3a30d..f22498c 100644
--- a/bfd/pei-loongarch64.c
+++ b/bfd/pei-loongarch64.c
@@ -49,6 +49,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pei-riscv64.c b/bfd/pei-riscv64.c
index e87aa42..c4ae7bf 100644
--- a/bfd/pei-riscv64.c
+++ b/bfd/pei-riscv64.c
@@ -49,6 +49,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/pei-x86_64.c b/bfd/pei-x86_64.c
index 3f8f255..a5c2fd8 100644
--- a/bfd/pei-x86_64.c
+++ b/bfd/pei-x86_64.c
@@ -51,6 +51,8 @@
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 4 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".didat"), \
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
diff --git a/bfd/plugin.c b/bfd/plugin.c
index d57ae59..1c72b74 100644
--- a/bfd/plugin.c
+++ b/bfd/plugin.c
@@ -73,8 +73,6 @@ dlerror (void)
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook
#define bfd_plugin_get_section_contents _bfd_generic_get_section_contents
-#define bfd_plugin_init_private_section_data _bfd_generic_init_private_section_data
-#define bfd_plugin_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
#define bfd_plugin_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
#define bfd_plugin_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
#define bfd_plugin_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
@@ -782,7 +780,8 @@ static bool
bfd_plugin_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED,
asection *isection ATTRIBUTE_UNUSED,
bfd *obfd ATTRIBUTE_UNUSED,
- asection *osection ATTRIBUTE_UNUSED)
+ asection *osection ATTRIBUTE_UNUSED,
+ struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
{
BFD_ASSERT (0);
return true;
diff --git a/bfd/po/ms.po b/bfd/po/ms.po
index 415065a..89e2760 100644
--- a/bfd/po/ms.po
+++ b/bfd/po/ms.po
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: bfd 2.43.90\n"
"Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n"
"POT-Creation-Date: 2025-01-19 12:19+0000\n"
-"PO-Revision-Date: 2025-02-25 23:26+0800\n"
+"PO-Revision-Date: 2025-07-04 21:09+0800\n"
"Last-Translator: Sharuzzaman Ahmat Raslan <sharuzzaman@gmail.com>\n"
"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
"Language: ms\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 3.5\n"
+"X-Generator: Poedit 3.6\n"
#: aout-cris.c:196
#, c-format
@@ -35,9 +35,9 @@ msgid "%pB: bad relocation record imported: %d"
msgstr ""
#: aoutx.h:444 pdp11.c:481
-#, c-format
+#, fuzzy, c-format
msgid "%pB: %#<PRIx64> overflows header %s field"
-msgstr ""
+msgstr "Badan mesej adalah kosong tetapi tanda tangan dalam medan pengepala ialah \"(%s)\""
#: aoutx.h:1269 aoutx.h:1598 pdp11.c:1246 pdp11.c:1495
#, c-format
@@ -70,9 +70,9 @@ msgid "%pB: attempt to write out unknown reloc type"
msgstr ""
#: aoutx.h:4047 pdp11.c:3409
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unsupported relocation type"
-msgstr ""
+msgstr "Jenis _MIME tidak disokong %s"
#. Unknown relocation.
#: aoutx.h:4367 coff-alpha.c:601 coff-mips.c:356 coff-rs6000.c:3037
@@ -105,14 +105,14 @@ msgstr ""
#: elfxx-ia64.c:324 elfxx-loongarch.c:1897 elfxx-riscv.c:1062 elfxx-sparc.c:589
#: elfxx-sparc.c:639 elfxx-tilegx.c:907 elfxx-tilegx.c:947 elfnn-aarch64.c:2215
#: elfnn-aarch64.c:2313 elfnn-ia64.c:214 elfnn-ia64.c:3821 elfnn-kvx.c:259
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unsupported relocation type %#x"
-msgstr ""
+msgstr "TYPE(x)"
#: aoutx.h:5387 pdp11.c:3825
-#, c-format
+#, fuzzy, c-format
msgid "%pB: relocatable link from %s to %s not supported"
-msgstr ""
+msgstr "Pertukaran dari set aksara \"%s\" ke \"UTF-8\" tidak disokong"
#: arc-got.h:69
#, c-format
@@ -133,32 +133,38 @@ msgid "%pB: plugin needed to handle lto object"
msgstr ""
#: archive.c:2644
+#, fuzzy
msgid "Reading archive file mod timestamp"
-msgstr ""
+msgstr "Setem masa penciptaan fail imej tidak ditetapkan dalam fail"
#: archive.c:2675
+#, fuzzy
msgid "Writing updated armap timestamp"
-msgstr ""
+msgstr "Dikemaskini"
#: bfd.c:777
msgid "no error"
msgstr "tiada ralat"
#: bfd.c:778
+#, fuzzy
msgid "system call error"
-msgstr ""
+msgstr "panggilan sistem fork() gagal"
#: bfd.c:779
+#, fuzzy
msgid "invalid bfd target"
-msgstr ""
+msgstr "Nilai sasaran tak sah."
#: bfd.c:780
+#, fuzzy
msgid "file in wrong format"
-msgstr ""
+msgstr "Format fail:"
#: bfd.c:781
+#, fuzzy
msgid "archive object file in wrong format"
-msgstr ""
+msgstr "Cipta arkib dengan objek terpilih"
#: bfd.c:782
#, fuzzy
@@ -166,9 +172,8 @@ msgid "invalid operation"
msgstr "Operasi tidak sah %d\n"
#: bfd.c:783
-#, fuzzy
msgid "memory exhausted"
-msgstr "memori keletihan"
+msgstr "kehabisan memori"
#: bfd.c:784
#, fuzzy
@@ -180,32 +185,41 @@ msgid "archive has no index; run ranlib to add one"
msgstr ""
#: bfd.c:786
+#, fuzzy
msgid "no more archived files"
-msgstr ""
+msgstr "Diarkib"
#: bfd.c:787
+#, fuzzy
msgid "malformed archive"
-msgstr ""
+msgstr "Respon cacat"
#: bfd.c:788
+#, fuzzy
msgid "DSO missing from command line"
-msgstr ""
+msgstr "Alatan KDE untuk pembukaan URL daripada baris arahan"
#: bfd.c:789
+#, fuzzy
msgid "file format not recognized"
-msgstr ""
+msgstr "PNM: Format fail tidak dikenal."
#: bfd.c:790
+#, fuzzy
msgid "file format is ambiguous"
-msgstr ""
+msgstr "Format Fail"
#: bfd.c:791
+#, fuzzy
msgid "section has no contents"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: bfd.c:792
+#, fuzzy
msgid "nonrepresentable section on output"
-msgstr ""
+msgstr "&Seksyen:"
#: bfd.c:793
msgid "symbol needs debug section which does not exist"
@@ -217,8 +231,9 @@ msgid "bad value"
msgstr "nilai salah untuk maklumat keadaan ikon terlabuh %s"
#: bfd.c:795
+#, fuzzy
msgid "file truncated"
-msgstr ""
+msgstr "PNM: Fail seperti dipotong."
#: bfd.c:796
#, fuzzy
@@ -226,8 +241,9 @@ msgid "file too big"
msgstr "Fail terlalu besar."
#: bfd.c:797
+#, fuzzy
msgid "sorry, cannot handle this file"
-msgstr ""
+msgstr "pluma tidak dapat mengendali lokasi ini."
#: bfd.c:798
#, fuzzy, c-format
@@ -235,23 +251,24 @@ msgid "error reading %s: %s"
msgstr "Ralat membaca %s: %s"
#: bfd.c:799
+#, fuzzy
msgid "#<invalid error code>"
-msgstr ""
+msgstr "kod kesalahan"
#: bfd.c:2242
-#, c-format
+#, fuzzy, c-format
msgid "BFD %s assertion fail %s:%d"
-msgstr ""
+msgstr "Gagal sebelum mengembalikan media kepada pengguna: %s"
#: bfd.c:2255
-#, c-format
+#, fuzzy, c-format
msgid "%s: BFD %s internal error, aborting at %s:%d in %s\n"
-msgstr ""
+msgstr "RALAT DALAMAN pada %s:%d: regex hilang atau tidak sah"
#: bfd.c:2259
-#, c-format
+#, fuzzy, c-format
msgid "%s: BFD %s internal error, aborting at %s:%d\n"
-msgstr ""
+msgstr "RALAT DALAMAN pada %s:%d: regex hilang atau tidak sah"
#: bfd.c:2262
#, fuzzy, c-format
@@ -264,9 +281,9 @@ msgid "warning: writing section `%pA' at huge (ie negative) file offset"
msgstr ""
#: cache.c:290
-#, c-format
+#, fuzzy, c-format
msgid "reopening %pB: %s"
-msgstr ""
+msgstr "PB"
#: coff-alpha.c:450
#, c-format
@@ -295,8 +312,9 @@ msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
msgstr ""
#: coff-alpha.c:1489
+#, fuzzy
msgid "using multiple gp values"
-msgstr ""
+msgstr "Muat P_GP"
#: coff-alpha.c:1987
#, c-format
@@ -334,9 +352,9 @@ msgid "%pB: TOC reloc at %#<PRIx64> to symbol `%s' with no TOC entry"
msgstr ""
#: coff-rs6000.c:3251 coff64-rs6000.c:848
-#, c-format
+#, fuzzy, c-format
msgid "Unable to find the stub entry targeting %s"
-msgstr ""
+msgstr "Tak dapat hantar kemasukan senaraimain \"%s\""
#: coff-rs6000.c:3366
#, c-format
@@ -389,9 +407,9 @@ msgid "%pB: %#<PRIx64>: warning: could not find expected COUNT reloc"
msgstr ""
#: coff-sh.c:983 elf32-sh.c:738
-#, c-format
+#, fuzzy, c-format
msgid "%pB: %#<PRIx64>: warning: bad count"
-msgstr ""
+msgstr "Amaran: Tandatangan rosak."
#: coff-sh.c:1349 coff-sh.c:2636 elf32-sh.c:1138 elf32-sh.c:1506
#, c-format
@@ -415,8 +433,9 @@ msgid "%pB: warning: illegal symbol index %ld in relocs"
msgstr ""
#: coff-x86_64.c:147
+#, fuzzy
msgid "R_AMD64_IMAGEBASE with __ImageBase undefined"
-msgstr ""
+msgstr "Tidak ditakrif"
#: coff64-rs6000.c:447 coff64-rs6000.c:554
#, c-format
@@ -439,9 +458,9 @@ msgid "%pB: unable to load COMDAT section name"
msgstr ""
#: coffcode.h:976
-#, c-format
+#, fuzzy, c-format
msgid "%pB: warning: no symbol for section '%s' found"
-msgstr ""
+msgstr "simbol tidak dijumpai di dalam pengeluaran: %.*s"
#: coffcode.h:1148
#, c-format
@@ -487,9 +506,9 @@ msgid "%pB: reloc against a non-existent symbol index: %ld"
msgstr ""
#: coffcode.h:3162
-#, c-format
+#, fuzzy, c-format
msgid "%pB: too many sections (%d)"
-msgstr ""
+msgstr "Terlalu banyak titik henti. Maksimum ialah %d."
#: coffcode.h:3690
#, c-format
@@ -537,14 +556,14 @@ msgid "%pB: illegal relocation type %d at address %#<PRIx64>"
msgstr ""
#: coffgen.c:255 elf.c:1033
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unable to compress section %s"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: coffgen.c:265 elf.c:1043
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unable to decompress section %s"
-msgstr ""
+msgstr "Sumber pada \"%s\" gagal dinyahmampatkan"
#: coffgen.c:1778
#, c-format
@@ -558,9 +577,9 @@ msgid "<corrupt>"
msgstr "Fail rosak?"
#: coffgen.c:2191
-#, c-format
+#, fuzzy, c-format
msgid "<corrupt info> %s"
-msgstr ""
+msgstr "PNG imej kenit rosak: '%s'"
#: coffgen.c:2797 elflink.c:15435 linker.c:3011
msgid "%F%P: already_linked_table: %E\n"
@@ -572,8 +591,12 @@ msgid "removing unused section '%pA' in file '%pB'"
msgstr ""
#: coffgen.c:3216 elflink.c:14606
+#, fuzzy
msgid "warning: gc-sections option ignored"
msgstr ""
+"Amaran mengenai %(cleaner)s - %(option)s:\n"
+"\n"
+"%(warning)s"
#: cofflink.c:398
#, c-format
@@ -586,9 +609,11 @@ msgid "warning: type of symbol `%s' changed from %d to %d in %pB"
msgstr ""
#: cofflink.c:2340
-#, c-format
+#, fuzzy, c-format
msgid "%pB: relocs in section `%pA', but it has no contents"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: cofflink.c:2403 elflink.c:11809
#, c-format
@@ -631,20 +656,22 @@ msgid "warning: unable to update contents of %s section in %pB"
msgstr ""
#: dwarf2.c:702
-#, c-format
+#, fuzzy, c-format
msgid "DWARF error: can't find %s section."
-msgstr ""
+msgstr "%s: tidak dapat mencari seksyen .text dalam %s\n"
#: dwarf2.c:710
-#, c-format
+#, fuzzy, c-format
msgid "DWARF error: section %s has no contents"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#. PR 26946
#: dwarf2.c:719
-#, c-format
+#, fuzzy, c-format
msgid "DWARF error: section %s is too big"
-msgstr ""
+msgstr "Ralat: Saiz mesej %d terlalu besar\n"
#: dwarf2.c:754
#, c-format
@@ -665,8 +692,9 @@ msgid "DWARF error: mangled line number section (bad file number)"
msgstr ""
#: dwarf2.c:2614
+#, fuzzy
msgid "DWARF error: zero format count"
-msgstr ""
+msgstr "Sembunyi kiraan bila kosong:"
#: dwarf2.c:2624
#, c-format
@@ -762,58 +790,58 @@ msgid "%pB: warning: isymMax (%ld) is greater than ifdMax (%ld)"
msgstr ""
#: ecoff.c:1313
-#, c-format
+#, fuzzy, c-format
msgid "unknown basic type %d"
-msgstr ""
+msgstr "Jenis bus %d tidak diketahui"
#: ecoff.c:1571
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" End+1 symbol: %ld"
-msgstr ""
+msgstr "Tetapkan alamat &akhir simbol"
#: ecoff.c:1578 ecoff.c:1581
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" First symbol: %ld"
-msgstr ""
+msgstr "Memadam fail %ld drpd %ld"
#: ecoff.c:1596
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" End+1 symbol: %-7ld Type: %s"
-msgstr ""
+msgstr "jenis <%s> digunakan, tetapi tidak dihubungkan ke sebarang simbol"
#: ecoff.c:1604
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" Local symbol: %ld"
-msgstr ""
+msgstr "Memadam fail %ld drpd %ld"
#: ecoff.c:1612
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" struct; End+1 symbol: %ld"
-msgstr ""
+msgstr "Lumpuhkan simbol _akhir baris"
#: ecoff.c:1617
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" union; End+1 symbol: %ld"
-msgstr ""
+msgstr "Lumpuhkan simbol _akhir baris"
#: ecoff.c:1622
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" enum; End+1 symbol: %ld"
-msgstr ""
+msgstr "Lumpuhkan simbol _akhir baris"
#: ecoff.c:1630
#, fuzzy, c-format
@@ -823,8 +851,9 @@ msgid ""
msgstr "Indeks tidak sah untuk jenis %s untuk jenis asa %s"
#: elf-attrs.c:417 elf-attrs.c:447 elf-attrs.c:623
+#, fuzzy
msgid "error adding attribute"
-msgstr ""
+msgstr "Ralat ketika menambah hubungan"
#: elf-attrs.c:503
#, c-format
@@ -866,9 +895,9 @@ msgid "further warnings about FDE encoding preventing .eh_frame_hdr generation d
msgstr ""
#: elf-eh-frame.c:1872
-#, c-format
+#, fuzzy, c-format
msgid "%pB: %pA not in order"
-msgstr ""
+msgstr "PA="
#: elf-eh-frame.c:1886
#, c-format
@@ -890,13 +919,14 @@ msgid "invalid output section for .eh_frame_entry: %pA"
msgstr ""
#: elf-eh-frame.c:2340
-#, c-format
+#, fuzzy, c-format
msgid "invalid contents in %pA section"
-msgstr ""
+msgstr "PA="
#: elf-eh-frame.c:2496
+#, fuzzy
msgid ".eh_frame_hdr entry overflow"
-msgstr ""
+msgstr "Lukis bingkai disekeliling masukan"
#: elf-eh-frame.c:2498
msgid ".eh_frame_hdr refers to overlapping FDEs"
@@ -917,8 +947,9 @@ msgstr ""
#: elf32-or1k.c:1895 elf32-score.c:2724 elf32-score7.c:2535 elf32-spu.c:5081
#: elf32-tilepro.c:3369 elf32-v850.c:2297 elf32-visium.c:680
#: elf32-xstormy16.c:930 elf64-bpf.c:339 elf64-mmix.c:1537 elfxx-tilegx.c:3742
+#, fuzzy
msgid "internal error: out of range error"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elf-m10200.c:438 elf-m10300.c:2150 elf32-bfin.c:3136 elf32-cr16.c:1433
#: elf32-cris.c:2037 elf32-crx.c:926 elf32-d10v.c:514 elf32-fr30.c:598
@@ -929,15 +960,17 @@ msgstr ""
#: elf32-score7.c:2539 elf32-spu.c:5085 elf32-tilepro.c:3373 elf32-v850.c:2301
#: elf32-visium.c:684 elf32-xstormy16.c:934 elf64-mmix.c:1541
#: elfxx-mips.c:10642 elfxx-tilegx.c:3746
+#, fuzzy
msgid "internal error: unsupported relocation error"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elf-m10200.c:442 elf32-cr16.c:1437 elf32-crx.c:930 elf32-d10v.c:518
#: elf32-h8300.c:531 elf32-lm32.c:1077 elf32-m32r.c:2845 elf32-m68hc1x.c:1278
#: elf32-microblaze.c:1685 elf32-nds32.c:6100 elf32-score.c:2732
#: elf32-score7.c:2543 elf32-spu.c:5089
+#, fuzzy
msgid "internal error: dangerous error"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elf-m10200.c:446 elf-m10300.c:2167 elf32-bfin.c:3144 elf32-cr16.c:1441
#: elf32-cris.c:2045 elf32-crx.c:934 elf32-d10v.c:522 elf32-epiphany.c:578
@@ -1062,18 +1095,19 @@ msgid "%F%P: failed to create GNU property section\n"
msgstr ""
#: elf-properties.c:644 elfxx-aarch64.c:752 elfxx-x86.c:4353
-#, c-format
+#, fuzzy, c-format
msgid "%F%pA: failed to align section\n"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#. Merge .note.gnu.property sections.
#: elf-properties.c:749 elf-properties.c:751
msgid "\n"
-msgstr ""
+msgstr "\n"
#: elf-properties.c:750
+#, fuzzy
msgid "Merging program properties\n"
-msgstr ""
+msgstr "Tiada Penggabungan"
#: elf-sframe.c:239
#, c-format
@@ -1089,9 +1123,9 @@ msgid "input SFrame sections with different format versions prevent .sframe gene
msgstr ""
#: elf.c:299
-#, c-format
+#, fuzzy, c-format
msgid "%pB: string table [%u] is corrupt"
-msgstr ""
+msgstr "Fail nampaknya rosak. Melangkau jadual. "
#. PR 17512: file: f057ec89.
#: elf.c:328
@@ -1111,9 +1145,9 @@ msgid "%pB symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section"
msgstr ""
#: elf.c:614
-#, c-format
+#, fuzzy, c-format
msgid "%pB: could not read contents of group [%u]"
-msgstr ""
+msgstr "Tidak dapat membaca kandungan folder"
#: elf.c:645
#, c-format
@@ -1146,52 +1180,52 @@ msgid "%pB: invalid sh_link field (%d) in section number %d"
msgstr ""
#: elf.c:1253
-#, c-format
+#, fuzzy, c-format
msgid "%pB: failed to find link section for section %d"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: elf.c:1280
-#, c-format
+#, fuzzy, c-format
msgid "%pB: failed to find info section for section %d"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: elf.c:1457
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"Program Header:\n"
-msgstr ""
+msgstr "Program"
#: elf.c:1499
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"Dynamic Section:\n"
-msgstr ""
+msgstr "dinamik"
#: elf.c:1638
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"Version definitions:\n"
-msgstr ""
+msgstr "Sedang mentakrifkan item..."
#: elf.c:1663
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"Version References:\n"
-msgstr ""
+msgstr "Rujukan:"
#: elf.c:1668
-#, c-format
+#, fuzzy, c-format
msgid " required from %s:\n"
-msgstr ""
+msgstr "diperlukan=%s"
#: elf.c:1917
-#, c-format
+#, fuzzy, c-format
msgid "%pB: DT_STRTAB table is corrupt"
-msgstr ""
+msgstr "Fail nampaknya rosak. Melangkau jadual. "
#: elf.c:2426
#, c-format
@@ -1219,9 +1253,9 @@ msgid "%pB: warning: secondary relocation section '%s' for section %pA found - i
msgstr ""
#: elf.c:2879 elf.c:2893 elf.c:2904 elf.c:2917
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unknown type [%#x] section `%s'"
-msgstr ""
+msgstr "Seksyen tidak diketahui: %s"
#: elf.c:3586
#, c-format
@@ -1234,9 +1268,9 @@ msgid "warning: section `%pA' type changed to PROGBITS"
msgstr ""
#: elf.c:4130
-#, c-format
+#, fuzzy, c-format
msgid "%pB: too many sections: %u"
-msgstr ""
+msgstr "Terlalu banyak klien. Sambungan daripada %s:%u ditolak."
#: elf.c:4216
#, c-format
@@ -1258,19 +1292,19 @@ msgid "%F%P: failed to size relative relocations\n"
msgstr ""
#: elf.c:5440
-#, c-format
+#, fuzzy, c-format
msgid "%pB: TLS sections are not adjacent:"
-msgstr ""
+msgstr "PB"
#: elf.c:5447
#, c-format
msgid "\t TLS: %pA"
-msgstr ""
+msgstr "\t TLS: %pA"
#: elf.c:5451
-#, c-format
+#, fuzzy, c-format
msgid "\tnon-TLS: %pA"
-msgstr ""
+msgstr "PA="
#: elf.c:6075
#, c-format
@@ -1316,14 +1350,14 @@ msgid "%pB: error: non-load segment %d includes file header and/or program heade
msgstr ""
#: elf.c:6862
-#, c-format
+#, fuzzy, c-format
msgid "error: %pB has a TLS segment with execute permission"
-msgstr ""
+msgstr "Proses mempunyai keizinan untuk melakukan arahan yang terkandung di dalam segmen ingatan."
#: elf.c:6868
-#, c-format
+#, fuzzy, c-format
msgid "warning: %pB has a TLS segment with execute permission"
-msgstr ""
+msgstr "Proses mempunyai keizinan untuk melakukan arahan yang terkandung di dalam segmen ingatan."
#: elf.c:6883
#, c-format
@@ -1336,9 +1370,9 @@ msgid "warning: %pB has a LOAD segment with RWX permissions"
msgstr ""
#: elf.c:7284
-#, c-format
+#, fuzzy, c-format
msgid "%pB: symbol `%s' required but not present"
-msgstr ""
+msgstr "Satu unsur (%s) diperlukan tidak hadir."
#: elf.c:7661
#, c-format
@@ -1361,14 +1395,14 @@ msgid "unable to find equivalent output section for symbol '%s' from section '%s
msgstr ""
#: elf.c:9300
-#, c-format
+#, fuzzy, c-format
msgid "%pB: .gnu.version_r invalid entry"
-msgstr ""
+msgstr "Masukan rangkaian tidak sah."
#: elf.c:9478
-#, c-format
+#, fuzzy, c-format
msgid "%pB: .gnu.version_d invalid entry"
-msgstr ""
+msgstr "%d masukan"
#: elf.c:9981
#, c-format
@@ -1382,9 +1416,9 @@ msgstr ""
#: elf.c:10108 elf32-mcore.c:100 elf32-mcore.c:455 elf32-ppc.c:7675
#: elf32-ppc.c:8863 elf64-ppc.c:16860
-#, c-format
+#, fuzzy, c-format
msgid "%pB: %s unsupported"
-msgstr ""
+msgstr "PB"
#: elf.c:10923
#, c-format
@@ -1484,9 +1518,9 @@ msgstr ""
#: elf32-arc.c:454 elf32-arm.c:15194 elf32-frv.c:6612 elf32-iq2000.c:868
#: elf32-m32c.c:914 elf32-mt.c:560 elf32-rl78.c:1275 elf32-rx.c:3218
#: elf32-visium.c:844 elf64-ppc.c:5531 elfnn-aarch64.c:7573
-#, c-format
+#, fuzzy, c-format
msgid "private flags = 0x%lx:"
-msgstr ""
+msgstr "[find_call] %s: 0x%lx ke 0x%lx\n"
#: elf32-arc.c:641
#, c-format
@@ -1514,14 +1548,14 @@ msgid "error: %pB: cannot mix rf16 with full register set %pB"
msgstr ""
#: elf32-arc.c:789
-#, c-format
+#, fuzzy, c-format
msgid "error: %pB: conflicting attributes %s: %s with %s"
-msgstr ""
+msgstr "keluaran berkonflik kepada fail %s"
#: elf32-arc.c:816
-#, c-format
+#, fuzzy, c-format
msgid "error: %pB: conflicting attributes %s"
-msgstr ""
+msgstr "Konflik tindakan untuk %s"
#: elf32-arc.c:921
#, c-format
@@ -1535,8 +1569,9 @@ msgid "%pB: uses different e_flags (%#x) fields than previous modules (%#x)"
msgstr ""
#: elf32-arc.c:1026
+#, fuzzy
msgid "error: the ARC4 architecture is no longer supported"
-msgstr ""
+msgstr "%s: -c tidak disokong pada rekabentuk %s\n"
#: elf32-arc.c:1032
msgid "warning: unset or old architecture flags; use default machine"
@@ -1562,9 +1597,9 @@ msgid "%pB(%pA): warning: unaligned access to symbol '%s' in the small data area
msgstr ""
#: elf32-arc.c:1926 elf32-rx.c:1491
-#, c-format
+#, fuzzy, c-format
msgid "%pB(%pA): internal error: out of range error"
-msgstr ""
+msgstr "Ralat kaji hurai: Nombor terkeluar dari Julat (mesti kecil daripada %1)"
#: elf32-arc.c:1931 elf32-rx.c:1496
#, c-format
@@ -1577,9 +1612,9 @@ msgid "%pB(%pA): internal error: dangerous relocation"
msgstr ""
#: elf32-arc.c:1941 elf32-rx.c:1506
-#, c-format
+#, fuzzy, c-format
msgid "%pB(%pA): internal error: unknown error"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elf32-arc.c:2035 elf32-arc.c:2103 elf32-arm.c:15637 elf32-metag.c:2250
#: elf32-nds32.c:5542 elfnn-aarch64.c:7980 elfnn-riscv.c:722
@@ -1620,9 +1655,9 @@ msgstr ""
#: elf32-arm.c:4854 elf32-arm.c:7003 elf32-csky.c:3385 elf32-hppa.c:581
#: elf32-m68hc1x.c:163 elf32-metag.c:1179 elf64-ppc.c:3902 elf64-ppc.c:14175
#: elfnn-aarch64.c:3188 elfnn-kvx.c:894
-#, c-format
+#, fuzzy, c-format
msgid "%pB: cannot create stub entry %s"
-msgstr ""
+msgstr "%s: Tak dapat mencipta symlink ke %s"
#: elf32-arm.c:5075 elf32-csky.c:3727 elf32-hppa.c:731 elf32-hppa.c:760
#: elf32-hppa.c:841 elf32-m68hc11.c:422 elf32-m68hc12.c:542 elf32-metag.c:3344
@@ -1646,9 +1681,9 @@ msgid "%pB: invalid standard symbol `%s'; it must be a global or weak function s
msgstr ""
#: elf32-arm.c:6100
-#, c-format
+#, fuzzy, c-format
msgid "%pB: absent standard symbol `%s'"
-msgstr ""
+msgstr "%s: tiada simbol sedemikian"
#: elf32-arm.c:6112
#, c-format
@@ -1656,14 +1691,14 @@ msgid "%pB: `%s' and its special symbol are in different sections"
msgstr ""
#: elf32-arm.c:6124
-#, c-format
+#, fuzzy, c-format
msgid "%pB: entry function `%s' not output"
-msgstr ""
+msgstr "Gagal mencari fungsi titik masukan \"%s\" dalam \"%s\": %s"
#: elf32-arm.c:6131
-#, c-format
+#, fuzzy, c-format
msgid "%pB: entry function `%s' is empty"
-msgstr ""
+msgstr "Fungsi kosong"
#: elf32-arm.c:6260
#, c-format
@@ -1681,19 +1716,19 @@ msgid "entry function `%s' disappeared from secure code"
msgstr ""
#: elf32-arm.c:6355
-#, c-format
+#, fuzzy, c-format
msgid "`%s' refers to a non entry function"
-msgstr ""
+msgstr "Tuju atau hubungan merujuk pada anak yang tidak wujud"
#: elf32-arm.c:6370
-#, c-format
+#, fuzzy, c-format
msgid "%pB: visibility of symbol `%s' has changed"
-msgstr ""
+msgstr "Format mel setempat Evolution telah berubah."
#: elf32-arm.c:6379
-#, c-format
+#, fuzzy, c-format
msgid "%pB: incorrect size for symbol `%s'"
-msgstr ""
+msgstr "Tetapkan &saiz simbol"
#: elf32-arm.c:6398
#, c-format
@@ -1710,9 +1745,9 @@ msgid "start address of `%s' is different from previous link"
msgstr ""
#: elf32-arm.c:7137 elf32-arm.c:7175
-#, c-format
+#, fuzzy, c-format
msgid "unable to find %s glue '%s' for '%s'"
-msgstr ""
+msgstr "Tak menjumpai fail include: \"%s\""
#: elf32-arm.c:7886
#, c-format
@@ -1731,9 +1766,9 @@ msgid "%pB: warning: selected STM32L4XX erratum workaround is not necessary for
msgstr ""
#: elf32-arm.c:8677 elf32-arm.c:8697 elf32-arm.c:8764 elf32-arm.c:8783
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unable to find %s veneer `%s'"
-msgstr ""
+msgstr "Tidak dapat mencari \"%s\""
#: elf32-arm.c:8990
#, c-format
@@ -1741,9 +1776,9 @@ msgid "%pB(%pA+%#x): error: multiple load detected in non-last IT block instruct
msgstr ""
#: elf32-arm.c:9088
-#, c-format
+#, fuzzy, c-format
msgid "invalid TARGET2 relocation type '%s'"
-msgstr ""
+msgstr "Indeks tidak sah untuk jenis %s untuk jenis asa %s"
#. FIXME: We ought to be able to generate thumb-1 PLT
#. instructions...
@@ -1778,12 +1813,14 @@ msgid "(%s): Unknown destination type (ARM/Thumb) in %pB"
msgstr ""
#: elf32-arm.c:10615
+#, fuzzy
msgid "shared object"
-msgstr ""
+msgstr "objek memori terkongsi"
#: elf32-arm.c:10618
+#, fuzzy
msgid "PIE executable"
-msgstr ""
+msgstr "Pai"
#: elf32-arm.c:10621
#, c-format
@@ -1826,20 +1863,24 @@ msgid "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group reloc
msgstr ""
#: elf32-arm.c:12704 elf32-arm.c:12863
+#, fuzzy
msgid "local symbol index too big"
-msgstr ""
+msgstr "Tiada simbol untuk indeks"
#: elf32-arm.c:12714 elf32-arm.c:12748
+#, fuzzy
msgid "no dynamic index information available"
-msgstr ""
+msgstr "Tidak tersedia bila menggunakan senarai main dinamik"
#: elf32-arm.c:12756
+#, fuzzy
msgid "invalid dynamic index"
-msgstr ""
+msgstr "ICO: Indeks ikon tidak sah."
#: elf32-arm.c:12873
+#, fuzzy
msgid "dynamic index information not available"
-msgstr ""
+msgstr "Tidak tersedia bila menggunakan senarai main dinamik"
#: elf32-arm.c:13304 elf32-sh.c:3566
#, c-format
@@ -1865,8 +1906,9 @@ msgstr "Diluar Julat"
#: elf32-arm.c:13506 elf32-pru.c:936 elf32-tic6x.c:2645 elfnn-aarch64.c:7411
#: elfnn-kvx.c:2801
+#, fuzzy
msgid "unsupported relocation"
-msgstr ""
+msgstr " (tidak disokong)"
#: elf32-arm.c:13514 elf32-pru.c:946 elf32-tic6x.c:2653 elfnn-aarch64.c:7419
#: elfnn-kvx.c:2809
@@ -1899,9 +1941,9 @@ msgid "warning: %pB: unknown EABI object attribute %d"
msgstr ""
#: elf32-arm.c:14470
-#, c-format
+#, fuzzy, c-format
msgid "error: %pB: unknown CPU architecture"
-msgstr ""
+msgstr "Ralat tidak diketahui"
#: elf32-arm.c:14508
#, c-format
@@ -1929,14 +1971,14 @@ msgid "error: %pB: conflicting architecture profiles %c/%c"
msgstr ""
#: elf32-arm.c:14977
-#, c-format
+#, fuzzy, c-format
msgid "warning: %pB: conflicting platform configuration"
-msgstr ""
+msgstr "Kunci berkonflik dari Conflict1 yang sepatutnya beri satu amaran"
#: elf32-arm.c:14986
-#, c-format
+#, fuzzy, c-format
msgid "error: %pB: conflicting use of R9"
-msgstr ""
+msgstr "Kunci berkonflik dengan julat 0~5 yang sepatutnya berikan satu ralat"
#: elf32-arm.c:14998
#, c-format
@@ -1969,44 +2011,44 @@ msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
msgstr ""
#: elf32-arm.c:15203
-#, c-format
+#, fuzzy, c-format
msgid " [interworking enabled]"
-msgstr ""
+msgstr "tidak dihidupkan"
#: elf32-arm.c:15211
-#, c-format
+#, fuzzy, c-format
msgid " [VFP float format]"
-msgstr ""
+msgstr "apung"
#: elf32-arm.c:15213
-#, c-format
+#, fuzzy, c-format
msgid " [FPA float format]"
-msgstr ""
+msgstr "apung"
#: elf32-arm.c:15216
-#, c-format
+#, fuzzy, c-format
msgid " [floats passed in float registers]"
-msgstr ""
+msgstr "&Daftar"
#: elf32-arm.c:15219 elf32-arm.c:15304
-#, c-format
+#, fuzzy, c-format
msgid " [position independent]"
-msgstr ""
+msgstr "Dokumen bebas"
#: elf32-arm.c:15222
-#, c-format
+#, fuzzy, c-format
msgid " [new ABI]"
-msgstr ""
+msgstr "Baharu"
#: elf32-arm.c:15225
-#, c-format
+#, fuzzy, c-format
msgid " [old ABI]"
-msgstr ""
+msgstr " tua "
#: elf32-arm.c:15228
-#, c-format
+#, fuzzy, c-format
msgid " [software FP]"
-msgstr ""
+msgstr "Segerak FP dibenarkan"
#: elf32-arm.c:15236
#, c-format
@@ -2014,14 +2056,14 @@ msgid " [Version1 EABI]"
msgstr ""
#: elf32-arm.c:15239 elf32-arm.c:15250
-#, c-format
+#, fuzzy, c-format
msgid " [sorted symbol table]"
-msgstr ""
+msgstr "Simbol"
#: elf32-arm.c:15241 elf32-arm.c:15252
-#, c-format
+#, fuzzy, c-format
msgid " [unsorted symbol table]"
-msgstr ""
+msgstr "Tidak Diisih"
#: elf32-arm.c:15247
#, c-format
@@ -2029,14 +2071,14 @@ msgid " [Version2 EABI]"
msgstr ""
#: elf32-arm.c:15255
-#, c-format
+#, fuzzy, c-format
msgid " [dynamic symbols use segment index]"
-msgstr ""
+msgstr "Guna kodek bab ditemui dalam segmen."
#: elf32-arm.c:15258
-#, c-format
+#, fuzzy, c-format
msgid " [mapping symbols precede others]"
-msgstr ""
+msgstr "Simbol"
#: elf32-arm.c:15265
#, c-format
@@ -2054,53 +2096,55 @@ msgid " [Version5 EABI]"
msgstr ""
#: elf32-arm.c:15276
-#, c-format
+#, fuzzy, c-format
msgid " [soft-float ABI]"
-msgstr ""
+msgstr "Soft"
#: elf32-arm.c:15279
-#, c-format
+#, fuzzy, c-format
msgid " [hard-float ABI]"
-msgstr ""
+msgstr "Sukar"
#: elf32-arm.c:15285
#, c-format
msgid " [BE8]"
-msgstr ""
+msgstr " [BE8]"
#: elf32-arm.c:15288
#, c-format
msgid " [LE8]"
-msgstr ""
+msgstr " [LE8]"
#: elf32-arm.c:15294
-#, c-format
+#, fuzzy, c-format
msgid " <EABI version unrecognised>"
msgstr ""
+"perintah tidak dikenali: %s\n"
+"\n"
#: elf32-arm.c:15301
-#, c-format
+#, fuzzy, c-format
msgid " [relocatable executable]"
-msgstr ""
+msgstr "Skema boleh letak semula"
#: elf32-arm.c:15307
-#, c-format
+#, fuzzy, c-format
msgid " [FDPIC ABI supplement]"
-msgstr ""
+msgstr "Latin-1 Tambahan"
#: elf32-arm.c:15312 elfnn-aarch64.c:7576
-#, c-format
+#, fuzzy, c-format
msgid " <Unrecognised flag bits set>"
-msgstr ""
+msgstr "Alamat mempunyai set bit melangkaui panjang awalan"
#: elf32-arm.c:15420 elf32-arm.c:15554 elf32-i386.c:1545 elf32-s390.c:921
#: elf32-tic6x.c:2716 elf32-tilepro.c:1433 elf32-xtensa.c:1088 elf64-s390.c:843
#: elf64-x86-64.c:2173 elfxx-sparc.c:1385 elfxx-tilegx.c:1661 elfxx-x86.c:971
#: elfnn-aarch64.c:7847 elfnn-kvx.c:3247 elfnn-loongarch.c:952
#: elfnn-riscv.c:766
-#, c-format
+#, fuzzy, c-format
msgid "%pB: bad symbol index: %d"
-msgstr ""
+msgstr "Tiada simbol untuk indeks"
#: elf32-arm.c:15810
#, c-format
@@ -2108,14 +2152,14 @@ msgid "FDPIC does not yet support %s relocation to become dynamic for executable
msgstr ""
#: elf32-arm.c:17072
-#, c-format
+#, fuzzy, c-format
msgid "errors encountered processing file %pB"
-msgstr ""
+msgstr "end-of-file tak matang berlaku"
#: elf32-arm.c:17442 elflink.c:13533 elflink.c:13580
-#, c-format
+#, fuzzy, c-format
msgid "could not find section %s"
-msgstr ""
+msgstr "Gagal mencipta sesi sftp: %s"
#: elf32-arm.c:18397
#, c-format
@@ -2135,9 +2179,9 @@ msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
msgstr ""
#: elf32-arm.c:19509 elf32-arm.c:19531
-#, c-format
+#, fuzzy, c-format
msgid "%pB: error: VFP11 veneer out of range"
-msgstr ""
+msgstr "Ralat kaji hurai: Nombor terkeluar dari Julat (mesti kecil daripada %1)"
#: elf32-arm.c:19582
#, c-format
@@ -2145,9 +2189,9 @@ msgid "%pB(%#<PRIx64>): error: cannot create STM32L4XX veneer; jump out of range
msgstr ""
#: elf32-arm.c:19621
-#, c-format
+#, fuzzy, c-format
msgid "%pB: error: cannot create STM32L4XX veneer"
-msgstr ""
+msgstr "Ralat: Tidak dapat cipta fail sementara: %s\n"
#: elf32-arm.c:20704
#, c-format
@@ -2212,13 +2256,14 @@ msgid "%X%H: %s against `%s': internal error: unexpected relocation result %d\n"
msgstr ""
#: elf32-avr.c:3335 elfnn-aarch64.c:3219
-#, c-format
+#, fuzzy, c-format
msgid "cannot create stub entry %s"
-msgstr ""
+msgstr "Tidak dapat cipta folder '%s'"
#: elf32-bfin.c:107 elf32-bfin.c:364
+#, fuzzy
msgid "relocation should be even number"
-msgstr ""
+msgstr "Jumlah aksara genap diperlukan"
#: elf32-bfin.c:1589
#, c-format
@@ -2237,16 +2282,18 @@ msgid "%pB: relocation at `%pA+%#<PRIx64>' references symbol `%s' with nonzero a
msgstr ""
#: elf32-bfin.c:2663
+#, fuzzy
msgid "relocation references symbol not defined in the module"
-msgstr ""
+msgstr "simbol %s digunakan, tetapi tidak ditakrifkan sebagai token atau mempunyai hukum"
#: elf32-bfin.c:2761
msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"
msgstr ""
#: elf32-bfin.c:2801 elf32-bfin.c:2922
+#, fuzzy
msgid "cannot emit fixups in read-only section"
-msgstr ""
+msgstr "Peristiwa tidak boleh disunting, kerana kalendar terpilih adalah baca sahaja"
#: elf32-bfin.c:2831 elf32-bfin.c:2959 elf32-lm32.c:1006 elf32-sh.c:4384
msgid "cannot emit dynamic relocations in read-only section"
@@ -2257,8 +2304,9 @@ msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"
msgstr ""
#: elf32-bfin.c:3044
+#, fuzzy
msgid "relocations between different segments are not supported"
-msgstr ""
+msgstr "Operasi tidak disokong, fail berada pada lekap berbeza"
#: elf32-bfin.c:3045
msgid "warning: relocation references a different segment"
@@ -2270,16 +2318,17 @@ msgstr ""
#: elf32-msp430.c:1514 elf32-mt.c:406 elf32-or1k.c:1903 elf32-tilepro.c:3377
#: elf32-v850.c:2305 elf32-visium.c:688 elf32-xstormy16.c:938 elf64-bpf.c:348
#: elf64-mmix.c:1545 elfxx-tilegx.c:3750
+#, fuzzy
msgid "internal error: dangerous relocation"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#. Ignore init flag - it may not be set, despite the flags field containing valid data.
#: elf32-bfin.c:4728 elf32-cris.c:3860 elf32-m68hc1x.c:1414 elf32-m68k.c:1264
#: elf32-score.c:3984 elf32-score7.c:3791 elf32-vax.c:534 elf32-xgate.c:494
#: elfxx-mips.c:16366
-#, c-format
+#, fuzzy, c-format
msgid "private flags = %lx:"
-msgstr ""
+msgstr "Persendirian"
#: elf32-bfin.c:4779 elf32-frv.c:6585
#, c-format
@@ -2292,17 +2341,18 @@ msgid "%pB: cannot link fdpic object file into non-fdpic executable"
msgstr ""
#: elf32-bfin.c:4919
-#, c-format
+#, fuzzy, c-format
msgid "*** check this relocation %s"
-msgstr ""
+msgstr "Tidak dapat memeriksa folder: %s: %s"
#: elf32-bfin.c:5034
msgid "the bfin target does not currently support the generation of copy relocations"
msgstr ""
#: elf32-bfin.c:5329 elf32-cr16.c:2720 elf32-m68k.c:4420
+#, fuzzy
msgid "unsupported relocation type"
-msgstr ""
+msgstr "Jenis Python tidak disokong: %s"
#: elf32-cris.c:1119
#, c-format
@@ -2321,8 +2371,9 @@ msgstr ""
#: elf32-cris.c:1193 elf32-cris.c:1326 elf32-cris.c:1591 elf32-cris.c:1674
#: elf32-cris.c:1827 elf32-tic6x.c:2552
+#, fuzzy
msgid "[whose name is lost]"
-msgstr ""
+msgstr "Nama '%s' hilang dalam dbus mesej."
#: elf32-cris.c:1311 elf32-tic6x.c:2536
#, c-format
@@ -2391,13 +2442,14 @@ msgid "%pB, section `%pA', to symbol `%s': relocation %s should not be used in a
msgstr ""
#: elf32-cris.c:3811
+#, fuzzy
msgid "unexpected machine number"
-msgstr ""
+msgstr "Nombor pemacu %1 tak dijangka."
#: elf32-cris.c:3863
-#, c-format
+#, fuzzy, c-format
msgid " [symbols have a _ prefix]"
-msgstr ""
+msgstr "Pengenalpasti pulsar mempunyai awalan 'PSR'"
#: elf32-cris.c:3866
#, c-format
@@ -2407,7 +2459,7 @@ msgstr ""
#: elf32-cris.c:3869
#, c-format
msgid " [v32]"
-msgstr ""
+msgstr " [v32]"
#: elf32-cris.c:3913
#, c-format
@@ -2430,8 +2482,9 @@ msgid "%pB contains non-CRIS-v32 code, incompatible with previous objects"
msgstr ""
#: elf32-csky.c:2016
+#, fuzzy
msgid "GOT table size out of range"
-msgstr ""
+msgstr "Diluar Julat"
#: elf32-csky.c:2826
#, c-format
@@ -2439,9 +2492,9 @@ msgid "warning: unrecognized arch eflag '%#lx'"
msgstr ""
#: elf32-csky.c:2849
-#, c-format
+#, fuzzy, c-format
msgid "warning: unrecognised arch name '%#x'"
-msgstr ""
+msgstr "nama (x,y)"
#: elf32-csky.c:2914 elf32-csky.c:3074
#, c-format
@@ -2475,9 +2528,9 @@ msgstr ""
#. The r_type is error, not support it.
#: elf32-csky.c:4327 elf32-i386.c:344
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unsupported relocation type: %#x"
-msgstr ""
+msgstr "TYPE(x)"
#: elf32-dlx.c:141
#, c-format
@@ -2495,8 +2548,9 @@ msgid "unsupported relocation between data/insn address spaces"
msgstr ""
#: elf32-frv.c:1452 elf32-frv.c:1603
+#, fuzzy
msgid "relocation requires zero addend"
-msgstr ""
+msgstr "Sifar"
#: elf32-frv.c:2832
#, c-format
@@ -2573,9 +2627,9 @@ msgid "%H: reloc against `%s' references a different segment\n"
msgstr ""
#: elf32-frv.c:4068
-#, c-format
+#, fuzzy, c-format
msgid "%H: reloc against `%s': %s\n"
-msgstr ""
+msgstr "%s j %s"
#: elf32-frv.c:6496
#, c-format
@@ -2583,9 +2637,9 @@ msgid "%pB: compiled with %s and linked with modules that use non-pic relocation
msgstr ""
#: elf32-frv.c:6550 elf32-iq2000.c:830 elf32-m32c.c:876
-#, c-format
+#, fuzzy, c-format
msgid "%pB: compiled with %s and linked with modules compiled with %s"
-msgstr ""
+msgstr "Dia Versi %s dikompil %s, %s\n"
#: elf32-frv.c:6563
#, c-format
@@ -2608,9 +2662,9 @@ msgid "%pB: relocation %s can not be used when making a shared object; recompile
msgstr ""
#: elf32-hppa.c:2579
-#, c-format
+#, fuzzy, c-format
msgid "%pB: duplicate export stub %s"
-msgstr ""
+msgstr "%s Pb"
#: elf32-hppa.c:3235
#, c-format
@@ -2638,9 +2692,9 @@ msgid "%pB:%s has both normal and TLS relocs"
msgstr ""
#: elf32-hppa.c:4166
-#, c-format
+#, fuzzy, c-format
msgid "%pB(%pA+%#<PRIx64>): cannot handle %s for %s"
-msgstr ""
+msgstr "Caja tidak dapat mengendali lokasi \"%s\"."
#: elf32-hppa.c:4470
msgid ".got section not immediately after .plt section"
@@ -2676,9 +2730,9 @@ msgstr ""
#: elf32-i386.c:2452 elf32-i386.c:3752 elf32-i386.c:3900 elf64-x86-64.c:3107
#: elf64-x86-64.c:4790 elf64-x86-64.c:4958 elfnn-riscv.c:2406
#: elfnn-riscv.c:3318 elfnn-riscv.c:3392
-#, c-format
+#, fuzzy, c-format
msgid "Local IFUNC function `%s' in %pB\n"
-msgstr ""
+msgstr "%s Pb"
#: elf32-i386.c:2630
#, c-format
@@ -2686,16 +2740,19 @@ msgid "%pB: direct GOT relocation %s against `%s' without base register can not
msgstr ""
#: elf32-i386.c:2665 elf64-x86-64.c:3324
+#, fuzzy
msgid "hidden symbol"
-msgstr ""
+msgstr "Tersembunyi"
#: elf32-i386.c:2668 elf64-x86-64.c:3327
+#, fuzzy
msgid "internal symbol"
-msgstr ""
+msgstr "Dalaman"
#: elf32-i386.c:2671 elf64-x86-64.c:3330
+#, fuzzy
msgid "protected symbol"
-msgstr ""
+msgstr "Dilindungi"
#: elf32-i386.c:2674 elf64-x86-64.c:3333
#, fuzzy
@@ -2743,9 +2800,9 @@ msgid "global pointer relative address out of range"
msgstr ""
#: elf32-lm32.c:959
-#, c-format
+#, fuzzy, c-format
msgid "internal error: addend should be zero for %s"
-msgstr ""
+msgstr "Ralat Dalaman, kiraan bukan-sifar"
#: elf32-m32r.c:1461
msgid "SDA relocation when _SDA_BASE_ not defined"
@@ -2762,24 +2819,24 @@ msgid "%pB: instruction set mismatch with previous modules"
msgstr ""
#: elf32-m32r.c:3298 elf32-nds32.c:6899
-#, c-format
+#, fuzzy, c-format
msgid "private flags = %lx"
-msgstr ""
+msgstr "Persendirian"
#: elf32-m32r.c:3303
-#, c-format
+#, fuzzy, c-format
msgid ": m32r instructions"
-msgstr ""
+msgstr "Arahan"
#: elf32-m32r.c:3304
-#, c-format
+#, fuzzy, c-format
msgid ": m32rx instructions"
-msgstr ""
+msgstr "Arahan"
#: elf32-m32r.c:3305
-#, c-format
+#, fuzzy, c-format
msgid ": m32r2 instructions"
-msgstr ""
+msgstr "Arahan"
#: elf32-m68hc1x.c:1134
#, c-format
@@ -2822,54 +2879,54 @@ msgid "%pB: linking files compiled for HCS12 with others compiled for HC12"
msgstr ""
#: elf32-m68hc1x.c:1417 elf32-xgate.c:497
-#, c-format
+#, fuzzy, c-format
msgid "[abi=32-bit int, "
-msgstr ""
+msgstr "32-bit"
#: elf32-m68hc1x.c:1419 elf32-xgate.c:499
-#, c-format
+#, fuzzy, c-format
msgid "[abi=16-bit int, "
-msgstr ""
+msgstr "16-bit"
#: elf32-m68hc1x.c:1422 elf32-xgate.c:502
-#, c-format
+#, fuzzy, c-format
msgid "64-bit double, "
-msgstr ""
+msgstr "64-bit"
#: elf32-m68hc1x.c:1424 elf32-xgate.c:504
-#, c-format
+#, fuzzy, c-format
msgid "32-bit double, "
-msgstr ""
+msgstr "32-bit"
#: elf32-m68hc1x.c:1427
#, c-format
msgid "cpu=HC11]"
-msgstr ""
+msgstr "cpu=HC11]"
#: elf32-m68hc1x.c:1429
#, c-format
msgid "cpu=HCS12]"
-msgstr ""
+msgstr "cpu=HCS12]"
#: elf32-m68hc1x.c:1431
#, c-format
msgid "cpu=HC12]"
-msgstr ""
+msgstr "cpu=HC12]"
#: elf32-m68hc1x.c:1434
-#, c-format
+#, fuzzy, c-format
msgid " [memory=bank-model]"
-msgstr ""
+msgstr "Bank"
#: elf32-m68hc1x.c:1436
-#, c-format
+#, fuzzy, c-format
msgid " [memory=flat]"
-msgstr ""
+msgstr "Rata."
#: elf32-m68hc1x.c:1439
-#, c-format
+#, fuzzy, c-format
msgid " [XGATE RAM offsetting]"
-msgstr ""
+msgstr "Kayu pelantak."
#: elf32-m68k.c:1156 elf32-m68k.c:1164 elf32-ppc.c:3570 elf32-ppc.c:3578
#, c-format
@@ -2877,7 +2934,6 @@ msgid "%pB uses hard float, %pB uses soft float"
msgstr ""
#: elf32-m68k.c:1279 elf32-m68k.c:1280 vms-alpha.c:8089 vms-alpha.c:8105
-#, fuzzy
msgid "unknown"
msgstr "tidak diketahui"
@@ -2893,29 +2949,32 @@ msgstr ""
#. Pacify gcc -Wall.
#: elf32-mep.c:139
-#, c-format
+#, fuzzy, c-format
msgid "mep: no reloc for code %d"
-msgstr ""
+msgstr "%d kod kemunculan"
#: elf32-mep.c:146
-#, c-format
+#, fuzzy, c-format
msgid "MeP: howto %d has type %d"
-msgstr ""
+msgstr "$$ untuk hukum pertengahan pada $%d bagi %s tidak mempunyai jenis yang diisytiharkan"
#: elf32-mep.c:618
-#, c-format
+#, fuzzy, c-format
msgid "%pB and %pB are for different cores"
-msgstr ""
+msgstr "%1 PB"
#: elf32-mep.c:637
-#, c-format
+#, fuzzy, c-format
msgid "%pB and %pB are for different configurations"
-msgstr ""
+msgstr "%1 PB"
#: elf32-mep.c:675
-#, c-format
+#, fuzzy, c-format
msgid "private flags = 0x%lx"
msgstr ""
+"\n"
+"Terdapat direktori nyahpepijat dalam %s pada 0x%lx\n"
+"\n"
#: elf32-metag.c:1856
#, c-format
@@ -2929,13 +2988,14 @@ msgstr ""
#: elf32-microblaze.c:1590 elf32-tilepro.c:3018 elfxx-sparc.c:3442
#: elfxx-tilegx.c:3415
-#, c-format
+#, fuzzy, c-format
msgid "%pB: probably compiled without -fPIC?"
-msgstr ""
+msgstr "Boxes telah dikompil tanpa sokongan RDP"
#: elf32-mips.c:1776 elf64-mips.c:3515 elfn32-mips.c:3334
+#, fuzzy
msgid "literal relocation occurs for an external symbol"
-msgstr ""
+msgstr "rentetan literal %s tidak dikepilkan pada simbol"
#: elf32-mips.c:1827 elf32-score.c:563 elf32-score7.c:465 elf64-mips.c:3558
#: elfn32-mips.c:3376
@@ -2996,9 +3056,9 @@ msgid "error: %pB can use the upper region for data, but %pB assumes data is exc
msgstr ""
#: elf32-nds32.c:3673
-#, c-format
+#, fuzzy, c-format
msgid "error: can't find symbol: %s"
-msgstr ""
+msgstr "Kami tidak menemui simbol \"%s\""
#: elf32-nds32.c:5572
#, c-format
@@ -3051,14 +3111,14 @@ msgid "%pB: warning: incompatible elf-versions %s and %s"
msgstr ""
#: elf32-nds32.c:6905
-#, c-format
+#, fuzzy, c-format
msgid ": n1 instructions"
-msgstr ""
+msgstr "Arahan"
#: elf32-nds32.c:6908
-#, c-format
+#, fuzzy, c-format
msgid ": n1h instructions"
-msgstr ""
+msgstr "Arahan"
#: elf32-nds32.c:9357
#, c-format
@@ -3086,9 +3146,9 @@ msgid "%pB: Cannot handle relocation value size of %d"
msgstr ""
#: elf32-or1k.c:1375
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unknown relocation type %d"
-msgstr ""
+msgstr "Jenis objek tak diketahui %d\n"
#: elf32-or1k.c:1429
#, c-format
@@ -3116,9 +3176,9 @@ msgid "%pB: non-pic relocation against symbol %s"
msgstr ""
#: elf32-or1k.c:1686
-#, c-format
+#, fuzzy, c-format
msgid "%pB: support for local dynamic not implemented"
-msgstr ""
+msgstr "Fail yang mengandungi berkas sokongan akan dimuat turun ke sistem domestik."
#: elf32-or1k.c:1865
#, c-format
@@ -3126,9 +3186,9 @@ msgid "%pB: will not resolve runtime TLS relocation"
msgstr ""
#: elf32-or1k.c:2199
-#, c-format
+#, fuzzy, c-format
msgid "%pB: bad relocation section name `%s'"
-msgstr ""
+msgstr "Nama petimel teruk untuk tapisan: %s"
#: elf32-or1k.c:3312
#, c-format
@@ -3136,19 +3196,19 @@ msgid "%pB: %s flag mismatch with previous modules"
msgstr ""
#: elf32-ppc.c:990 elf64-ppc.c:1753
-#, c-format
+#, fuzzy, c-format
msgid "generic linker can't handle %s"
-msgstr ""
+msgstr "Tidak boleh mengendalikan lokasi \"%s:\"."
#: elf32-ppc.c:1627
-#, c-format
+#, fuzzy, c-format
msgid "corrupt %s section in %pB"
-msgstr ""
+msgstr "%s Pb"
#: elf32-ppc.c:1646
-#, c-format
+#, fuzzy, c-format
msgid "unable to read in %s section from %pB"
-msgstr ""
+msgstr "Tidak boleh baca dari: %s"
#: elf32-ppc.c:1688
#, c-format
@@ -3160,12 +3220,14 @@ msgid "failed to allocate space for new APUinfo section"
msgstr ""
#: elf32-ppc.c:1756
+#, fuzzy
msgid "failed to compute new APUinfo section"
-msgstr ""
+msgstr "Anda tidak boleh menambah direktori baru pada seksyen ini."
#: elf32-ppc.c:1759
+#, fuzzy
msgid "failed to install new APUinfo section"
-msgstr ""
+msgstr "Gagal memasang: pengesahihan tidak sah"
#: elf32-ppc.c:2867
#, c-format
@@ -3223,8 +3285,9 @@ msgid "bss-plt forced due to %pB"
msgstr ""
#: elf32-ppc.c:4028
+#, fuzzy
msgid "bss-plt forced by profiling"
-msgstr ""
+msgstr "Paksa Dihidupkan"
#: elf32-ppc.c:4606 elf64-ppc.c:8516
msgid "%H: warning: %s unexpected insn %#x.\n"
@@ -3254,8 +3317,9 @@ msgid "%P: %H: error: %s with unexpected instruction %x\n"
msgstr ""
#: elf32-ppc.c:7501
+#, fuzzy
msgid "%H: fixup branch overflow\n"
-msgstr ""
+msgstr "Rekod melimpah"
#: elf32-ppc.c:7541 elf32-ppc.c:7579
#, c-format
@@ -3268,9 +3332,9 @@ msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
msgstr ""
#: elf32-ppc.c:7679
-#, c-format
+#, fuzzy, c-format
msgid "%pB: reloc %#x unsupported"
-msgstr ""
+msgstr "%1 PB"
#: elf32-ppc.c:7962
#, c-format
@@ -3305,9 +3369,9 @@ msgid "%X%P: %H: %s relocation unsupported for bss-plt\n"
msgstr ""
#: elf32-ppc.c:9025
-#, c-format
+#, fuzzy, c-format
msgid "%H: error: %s against `%s' not a multiple of %u\n"
-msgstr ""
+msgstr "Kod ralat %u ketika menyisip satu masukan: %s"
#: elf32-ppc.c:9054
#, c-format
@@ -3315,9 +3379,11 @@ msgid "%H: unresolvable %s relocation against symbol `%s'\n"
msgstr ""
#: elf32-ppc.c:9136
-#, c-format
+#, fuzzy, c-format
msgid "%H: %s reloc against `%s': error %d\n"
msgstr ""
+"\n"
+"%02d h %02d j %02d min pada: %s"
#: elf32-ppc.c:10018
msgid "%X%P: text relocations and GNU indirect functions will result in a segfault at runtime\n"
@@ -3328,9 +3394,9 @@ msgid "%P: warning: text relocations and GNU indirect functions may result in a
msgstr ""
#: elf32-ppc.c:10067
-#, c-format
+#, fuzzy, c-format
msgid "%s not defined in linker created %pA"
-msgstr ""
+msgstr "Port %s/%s tidak dinyatakan"
#: elf32-pru.c:582 elf32-pru.c:1477
#, c-format
@@ -3338,32 +3404,39 @@ msgid "error: %pB: old incompatible object file detected"
msgstr ""
#: elf32-pru.c:931
+#, fuzzy
msgid "relocation out of range"
-msgstr ""
+msgstr "Diluar Julat"
#: elf32-pru.c:941 elf32-tic6x.c:2649
+#, fuzzy
msgid "dangerous relocation"
-msgstr ""
+msgstr "Cuba Sekat _Tapak Sesawang Merbahaya"
#: elf32-rl78.c:551
+#, fuzzy
msgid "RL78 reloc stack overflow/underflow"
-msgstr ""
+msgstr "tindanan melimpah"
#: elf32-rl78.c:555
+#, fuzzy
msgid "RL78 reloc divide by zero"
-msgstr ""
+msgstr "Bahagi [/]"
#: elf32-rl78.c:1069
+#, fuzzy
msgid "warning: RL78_SYM reloc with an unknown symbol"
-msgstr ""
+msgstr "Jenis amaran tidak diketahui"
#: elf32-rl78.c:1115
+#, fuzzy
msgid "%H: %s out of range\n"
-msgstr ""
+msgstr "integer diluar julat: %s"
#: elf32-rl78.c:1122
+#, fuzzy
msgid "%H: relocation type %u is not supported\n"
-msgstr ""
+msgstr "%U pada %h"
#: elf32-rl78.c:1134
msgid "%H: relocation %s returns an unrecognized value %x\n"
@@ -3384,14 +3457,14 @@ msgid "RL78 merge conflict: cannot link 32-bit and 64-bit objects together"
msgstr ""
#: elf32-rl78.c:1250 elf32-rl78.c:1254
-#, c-format
+#, fuzzy, c-format
msgid "- %pB is 64-bit, %pB is not"
-msgstr ""
+msgstr "%1 PB"
#: elf32-rl78.c:1281
-#, c-format
+#, fuzzy, c-format
msgid " [64-bit doubles]"
-msgstr ""
+msgstr "64-bit"
#: elf32-rx.c:618
#, c-format
@@ -3432,14 +3505,14 @@ msgid "there is a conflict merging the ELF header flags from %pB"
msgstr ""
#: elf32-rx.c:3188
-#, c-format
+#, fuzzy, c-format
msgid " the input file's flags: %s"
-msgstr ""
+msgstr "%s: fail input adalah fail output"
#: elf32-rx.c:3190
-#, c-format
+#, fuzzy, c-format
msgid " the output file's flags: %s"
-msgstr ""
+msgstr "%s: fail input adalah fail output"
#: elf32-rx.c:3797
#, c-format
@@ -3461,8 +3534,9 @@ msgid "not enough GOT space for local GOT entries"
msgstr ""
#: elf32-score.c:2737
+#, fuzzy
msgid "address not word aligned"
-msgstr ""
+msgstr "_Biar Dijajar"
#: elf32-score.c:2818 elf32-score7.c:2625
#, c-format
@@ -3485,9 +3559,9 @@ msgid " [pic]"
msgstr ""
#: elf32-score.c:3991 elf32-score7.c:3798
-#, c-format
+#, fuzzy, c-format
msgid " [fix dep]"
-msgstr ""
+msgstr "A-DEP"
#: elf32-score.c:4038 elf32-score7.c:3845
#, c-format
@@ -3688,37 +3762,39 @@ msgid "%pA:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n"
msgstr ""
#: elf32-spu.c:1908
-#, c-format
+#, fuzzy, c-format
msgid "%pB is not allowed to define %s"
-msgstr ""
+msgstr "PB"
#: elf32-spu.c:1916
-#, c-format
+#, fuzzy, c-format
msgid "you are not allowed to define %s in a script"
-msgstr ""
+msgstr "pembolehubah %%define %s ditakrif semula"
#: elf32-spu.c:1950
-#, c-format
+#, fuzzy, c-format
msgid "%s in overlay section"
-msgstr ""
+msgstr "Tiada seksyen sebegitu: %s"
#: elf32-spu.c:1979
+#, fuzzy
msgid "overlay stub relocation overflow"
-msgstr ""
+msgstr "Stab"
#: elf32-spu.c:1988 elf64-ppc.c:15362
+#, fuzzy
msgid "stubs don't match calculated size"
-msgstr ""
+msgstr "Jika pola diatas tidak sepadan:"
#: elf32-spu.c:2571
-#, c-format
+#, fuzzy, c-format
msgid "warning: %s overlaps %s\n"
-msgstr ""
+msgstr "%s: Amaran: Tak dapat %s"
#: elf32-spu.c:2587
-#, c-format
+#, fuzzy, c-format
msgid "warning: %s exceeds section size\n"
-msgstr ""
+msgstr "Bahagian"
#: elf32-spu.c:2619
#, c-format
@@ -3741,14 +3817,14 @@ msgid " calls:\n"
msgstr "Tiada panggilan"
#: elf32-spu.c:4338
-#, c-format
+#, fuzzy, c-format
msgid "%s duplicated in %s\n"
-msgstr ""
+msgstr "\"%s\" diduplikasi"
#: elf32-spu.c:4342
-#, c-format
+#, fuzzy, c-format
msgid "%s duplicated\n"
-msgstr ""
+msgstr "Satu unsur tunggal (%s) mempunyai pendua."
#: elf32-spu.c:4349
msgid "sorry, no support for duplicate object files in auto-overlay script\n"
@@ -3791,8 +3867,9 @@ msgid "%F%P: can not build overlay stubs: %E\n"
msgstr ""
#: elf32-spu.c:4811
+#, fuzzy
msgid "fatal error while creating .fixup"
-msgstr ""
+msgstr "Ralat ketika mencipta pautan ke %s."
#: elf32-spu.c:5047
#, c-format
@@ -3855,9 +3932,9 @@ msgstr ""
#: elf32-tilepro.c:3624 elfxx-tilegx.c:4017 elfxx-x86.c:2773
#: elfnn-aarch64.c:10343 elfnn-kvx.c:4628 elfnn-loongarch.c:6062
#: elfnn-riscv.c:3615
-#, c-format
+#, fuzzy, c-format
msgid "discarded output section: `%pA'"
-msgstr ""
+msgstr "Bahagian"
#: elf32-v850.c:152
#, c-format
@@ -3885,8 +3962,9 @@ msgid "variable `%s' cannot be in both zero and tiny data regions simultaneously
msgstr ""
#: elf32-v850.c:466
+#, fuzzy
msgid "failed to find previous HI16 reloc"
-msgstr ""
+msgstr "Cari terdahulu"
#: elf32-v850.c:2309
msgid "could not locate special linker symbol __gp"
@@ -3916,9 +3994,9 @@ msgid "error: %pB uses FPU-3.0 but %pB only supports FPU-2.0"
msgstr ""
#: elf32-v850.c:2601
-#, c-format
+#, fuzzy, c-format
msgid " alignment of 8-byte entities: "
-msgstr ""
+msgstr "Salin semula entiti sedia ada"
#: elf32-v850.c:2604
#, c-format
@@ -3937,9 +4015,9 @@ msgstr "tidak ditetapkan"
#: elf32-v850.c:2607 elf32-v850.c:2619 elf32-v850.c:2631 elf32-v850.c:2642
#: elf32-v850.c:2653 elf32-v850.c:2664
-#, c-format
+#, fuzzy, c-format
msgid "unknown: %x"
-msgstr ""
+msgstr "(Kod mekanisma GSSAPI tidak diketahui: %x)"
#: elf32-v850.c:2613
#, c-format
@@ -3957,9 +4035,9 @@ msgid "8-bytes"
msgstr ""
#: elf32-v850.c:2625
-#, c-format
+#, fuzzy, c-format
msgid " FPU support required: "
-msgstr ""
+msgstr "Periksa sama ada alatan sokongan yang diperlukan tersedia"
#: elf32-v850.c:2628
#, c-format
@@ -3977,9 +4055,9 @@ msgid "none"
msgstr "tiada"
#: elf32-v850.c:2637
-#, c-format
+#, fuzzy, c-format
msgid "SIMD use: "
-msgstr ""
+msgstr "_Guna sebagaimana ia"
#: elf32-v850.c:2640 elf32-v850.c:2651 elf32-v850.c:2662
#, c-format
@@ -3992,14 +4070,16 @@ msgid "no"
msgstr ""
#: elf32-v850.c:2648
-#, c-format
+#, fuzzy, c-format
msgid "CACHE use: "
msgstr ""
+"Tiada fail indeks tema dalam \"%s\".\n"
+"Jika anda pasti mahu mencipta satu cache ikon di sini, guna -ignore-theme-index.\n"
#: elf32-v850.c:2659
-#, c-format
+#, fuzzy, c-format
msgid "MMU use: "
-msgstr ""
+msgstr "Benarkan MMU"
#: elf32-v850.c:2826 elf32-v850.c:2882
#, c-format
@@ -4008,49 +4088,49 @@ msgstr ""
#. xgettext:c-format.
#: elf32-v850.c:2900
-#, c-format
+#, fuzzy, c-format
msgid "private flags = %lx: "
-msgstr ""
+msgstr "Persendirian"
#: elf32-v850.c:2905
-#, c-format
+#, fuzzy, c-format
msgid "unknown v850 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2907
-#, c-format
+#, fuzzy, c-format
msgid "v850 E3 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2909 elf32-v850.c:2916
-#, c-format
+#, fuzzy, c-format
msgid "v850 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2917
-#, c-format
+#, fuzzy, c-format
msgid "v850e architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2918
-#, c-format
+#, fuzzy, c-format
msgid "v850e1 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2919
-#, c-format
+#, fuzzy, c-format
msgid "v850e2 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2920
-#, c-format
+#, fuzzy, c-format
msgid "v850e2v3 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:2921
-#, c-format
+#, fuzzy, c-format
msgid "v850e3v5 architecture"
-msgstr ""
+msgstr "S_eni Bina"
#: elf32-v850.c:3595 elf32-v850.c:3834
#, c-format
@@ -4078,14 +4158,14 @@ msgid " [nonpic]"
msgstr ""
#: elf32-vax.c:540
-#, c-format
+#, fuzzy, c-format
msgid " [d-float]"
-msgstr ""
+msgstr "apung"
#: elf32-vax.c:543
-#, c-format
+#, fuzzy, c-format
msgid " [g-float]"
-msgstr ""
+msgstr "apung"
#: elf32-vax.c:629
#, c-format
@@ -4113,9 +4193,9 @@ msgid "%pB: compiled %s -mtune=%s and linked with modules compiled %s -mtune=%s"
msgstr ""
#: elf32-xgate.c:506
-#, c-format
+#, fuzzy, c-format
msgid "cpu=XGATE]"
-msgstr ""
+msgstr "% CPU"
#: elf32-xgate.c:508
#, c-format
@@ -4123,13 +4203,14 @@ msgid "error reading cpu type from elf private data"
msgstr ""
#: elf32-xstormy16.c:457 elf64-ia64-vms.c:2076 elfnn-ia64.c:2345
+#, fuzzy
msgid "non-zero addend in @fptr reloc"
-msgstr ""
+msgstr "Ralat Dalaman, kiraan bukan-sifar"
#: elf32-xtensa.c:996
-#, c-format
+#, fuzzy, c-format
msgid "%pB(%pA): invalid property table"
-msgstr ""
+msgstr "Jadual pemampasan paparan tidak sah"
#: elf32-xtensa.c:2730
#, c-format
@@ -4137,8 +4218,9 @@ msgid "%pB(%pA+%#<PRIx64>): relocation offset out of range (size=%#<PRIx64>)"
msgstr ""
#: elf32-xtensa.c:2813 elf32-xtensa.c:2936
+#, fuzzy
msgid "dynamic relocation in read-only section"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: elf32-xtensa.c:2913
msgid "TLS relocation invalid without dynamic sections"
@@ -4154,8 +4236,9 @@ msgid "%pB: incompatible machine type; output is 0x%x; input is 0x%x"
msgstr ""
#: elf32-xtensa.c:4731 elf32-xtensa.c:4739
+#, fuzzy
msgid "attempt to convert L32R/CALLX to CALL failed"
-msgstr ""
+msgstr "Percubaan dailan telah gagal"
#: elf32-xtensa.c:6567 elf32-xtensa.c:6646 elf32-xtensa.c:8072
#, c-format
@@ -4168,12 +4251,14 @@ msgid "%pB(%pA+%#<PRIx64>): could not decode instruction for XTENSA_ASM_SIMPLIFY
msgstr ""
#: elf32-xtensa.c:9671
+#, fuzzy
msgid "invalid relocation address"
-msgstr ""
+msgstr "Alamat IP tidak sah"
#: elf32-xtensa.c:9762
+#, fuzzy
msgid "overflow after relaxation"
-msgstr ""
+msgstr "nombor baris melimpah"
#: elf32-xtensa.c:10908
#, c-format
@@ -4186,14 +4271,14 @@ msgid "%pB: unsupported bfd mach %#lx"
msgstr ""
#: elf32-z80.c:518
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unsupported mach %#x"
-msgstr ""
+msgstr "%1 PB"
#: elf32-z80.c:546
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unsupported arch %#x"
-msgstr ""
+msgstr "PB"
#: elf64-alpha.c:472
msgid "GPDISP relocation did not find ldah and lda instructions"
@@ -4225,13 +4310,12 @@ msgid "%pB: gp-relative relocation against dynamic symbol %s"
msgstr ""
#: elf64-alpha.c:4438
-#, c-format
+#, fuzzy, c-format
msgid "%pB: change in gp: BRSGP %s"
-msgstr ""
+msgstr "%s Pb"
#: elf64-alpha.c:4463 mach-o.c:625 elfnn-loongarch.c:908 elfnn-riscv.c:724
#: elfnn-riscv.c:929 elfnn-riscv.c:971
-#, fuzzy
msgid "<unknown>"
msgstr "<tidak diketahui>"
@@ -4262,8 +4346,9 @@ msgstr ""
#. Only if it's not an unresolved symbol.
#: elf64-bpf.c:344
+#, fuzzy
msgid "internal error: relocation not supported"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elf64-gen.c:71
#, c-format
@@ -4315,14 +4400,14 @@ msgid "%pB: linking non-pic code in a position independent executable"
msgstr ""
#: elf64-ia64-vms.c:3783 elfnn-ia64.c:4223
-#, c-format
+#, fuzzy, c-format
msgid "%pB: @internal branch to dynamic symbol %s"
-msgstr ""
+msgstr "Gagal menemui simbol '%s' dalam pustaka dinamik"
#: elf64-ia64-vms.c:3786 elfnn-ia64.c:4226
-#, c-format
+#, fuzzy, c-format
msgid "%pB: speculation fixup to dynamic symbol %s"
-msgstr ""
+msgstr "Gagal menemui simbol '%s' dalam pustaka dinamik"
#: elf64-ia64-vms.c:3789 elfnn-ia64.c:4229
#, c-format
@@ -4330,8 +4415,9 @@ msgid "%pB: @pcrel relocation against dynamic symbol %s"
msgstr ""
#: elf64-ia64-vms.c:3913 elfnn-ia64.c:4426
+#, fuzzy
msgid "unsupported reloc"
-msgstr ""
+msgstr " (tidak disokong)"
#: elf64-ia64-vms.c:3950 elfnn-ia64.c:4464
#, c-format
@@ -4439,8 +4525,11 @@ msgid "%pB: error: multiple definition of `%s'; start of %s is set in a earlier
msgstr ""
#: elf64-mmix.c:2208
+#, fuzzy
msgid "register section has contents\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: elf64-mmix.c:2398
#, c-format
@@ -4448,9 +4537,9 @@ msgid "internal inconsistency: remaining %lu != max %lu; please report this bug"
msgstr ""
#: elf64-ppc.c:1361
-#, c-format
+#, fuzzy, c-format
msgid "warning: %s should be used rather than %s"
-msgstr ""
+msgstr "Baca jalur %s berbanding %s!"
#: elf64-ppc.c:4302
#, c-format
@@ -4468,8 +4557,9 @@ msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
msgstr ""
#: elf64-ppc.c:5277
+#, fuzzy
msgid "%H: %s reloc unsupported here\n"
-msgstr ""
+msgstr "%s berada di sini"
#: elf64-ppc.c:5500
#, c-format
@@ -4482,23 +4572,23 @@ msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
msgstr ""
#: elf64-ppc.c:5535
-#, c-format
+#, fuzzy, c-format
msgid " [abiv%ld]"
-msgstr ""
+msgstr "%ld:%02ld"
#: elf64-ppc.c:6844
msgid "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc\n"
msgstr ""
#: elf64-ppc.c:7111
-#, c-format
+#, fuzzy, c-format
msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
-msgstr ""
+msgstr "simbol permulaan %s tidak ditakrifkan"
#: elf64-ppc.c:7362
-#, c-format
+#, fuzzy, c-format
msgid "dynreloc miscount for %pB, section %pA"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: elf64-ppc.c:7453
#, c-format
@@ -4535,9 +4625,9 @@ msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
msgstr ""
#: elf64-ppc.c:8745 elf64-ppc.c:9461
-#, c-format
+#, fuzzy, c-format
msgid "%s defined on removed toc entry"
-msgstr ""
+msgstr "Sistem mungkin tidak berfungsi dengan baik jika masukan ini diubah suai atau dibuang."
#: elf64-ppc.c:9418
#, c-format
@@ -4550,9 +4640,9 @@ msgid "%H: got/toc optimization is not supported for %s instruction\n"
msgstr ""
#: elf64-ppc.c:10534
-#, c-format
+#, fuzzy, c-format
msgid "warning: discarding dynamic section %s"
-msgstr ""
+msgstr "Bahagian"
#: elf64-ppc.c:11687
msgid "%P: cannot find opd entry toc for `%pT'\n"
@@ -4564,9 +4654,9 @@ msgid "long branch stub `%s' offset overflow"
msgstr ""
#: elf64-ppc.c:11864
-#, c-format
+#, fuzzy, c-format
msgid "can't find branch stub `%s'"
-msgstr ""
+msgstr "Gagal mencari posisi semasa dalam fail '%s'"
#: elf64-ppc.c:11925 elf64-ppc.c:12177 elf64-ppc.c:14742
#, c-format
@@ -4574,9 +4664,9 @@ msgid "%P: linkage table error against `%pT'\n"
msgstr ""
#: elf64-ppc.c:12376
-#, c-format
+#, fuzzy, c-format
msgid "can't build branch stub `%s'"
-msgstr ""
+msgstr "Gabung %s ke dalam cabang %s"
#: elf64-ppc.c:13407
#, c-format
@@ -4593,10 +4683,10 @@ msgid "%s offset too large for .eh_frame sdata4 encoding"
msgstr ""
#: elf64-ppc.c:15370
-#, c-format
+#, fuzzy, c-format
msgid "linker stubs in %u group"
msgid_plural "linker stubs in %u groups"
-msgstr[0] ""
+msgstr[0] "Pemaut"
#: elf64-ppc.c:15377
#, c-format
@@ -4609,9 +4699,9 @@ msgid ""
msgstr ""
#: elf64-ppc.c:15759
-#, c-format
+#, fuzzy, c-format
msgid "%H: %s used with TLS symbol `%pT'\n"
-msgstr ""
+msgstr "simbol %s digunakan lebih dari sekali sebagai rentetan perkataan"
#: elf64-ppc.c:15761
#, c-format
@@ -4629,9 +4719,9 @@ msgid "%H: call to `%pT' lacks nop, can't restore toc; (toc save/adjust stub)\n"
msgstr ""
#: elf64-ppc.c:17202
-#, c-format
+#, fuzzy, c-format
msgid "%H: %s against %pT is not supported\n"
-msgstr ""
+msgstr "%s pt"
#: elf64-ppc.c:17478
#, c-format
@@ -4644,24 +4734,26 @@ msgid "%X%P: %pB: %s against %pT is not supported by glibc as a dynamic relocati
msgstr ""
#: elf64-ppc.c:17620
-#, c-format
+#, fuzzy, c-format
msgid "%P: %pB: %s is not supported for `%pT'\n"
-msgstr ""
+msgstr "%s Pb"
#: elf64-ppc.c:17889
-#, c-format
+#, fuzzy, c-format
msgid "%H: error: %s not a multiple of %u\n"
-msgstr ""
+msgstr "Kod ralat %u ketika mengesahihkan: %s"
#: elf64-ppc.c:17912
-#, c-format
+#, fuzzy, c-format
msgid "%H: unresolvable %s against `%pT'\n"
-msgstr ""
+msgstr "%s pt"
#: elf64-ppc.c:18057
-#, c-format
+#, fuzzy, c-format
msgid "%H: %s against `%pT': error %d\n"
msgstr ""
+"\n"
+"%02d h %02d j %02d min pada: %s"
#: elf64-s390.c:2490
#, c-format
@@ -4704,16 +4796,19 @@ msgid "%pB: linking UltraSPARC specific with HAL specific code"
msgstr ""
#: elf64-x86-64.c:1660
+#, fuzzy
msgid "hidden symbol "
-msgstr ""
+msgstr "Tersembunyi"
#: elf64-x86-64.c:1663
+#, fuzzy
msgid "internal symbol "
-msgstr ""
+msgstr "Dalaman"
#: elf64-x86-64.c:1666 elf64-x86-64.c:1670
+#, fuzzy
msgid "protected symbol "
-msgstr ""
+msgstr "Dilindungi"
#: elf64-x86-64.c:1672
#, fuzzy
@@ -4726,20 +4821,23 @@ msgid "undefined "
msgstr "Tidak ditakrif"
#: elf64-x86-64.c:1688 elfnn-loongarch.c:892
+#, fuzzy
msgid "a shared object"
-msgstr ""
+msgstr "objek memori terkongsi"
#: elf64-x86-64.c:1690
msgid "; recompile with -fPIC"
msgstr ""
#: elf64-x86-64.c:1695 elfnn-loongarch.c:898
+#, fuzzy
msgid "a PIE object"
-msgstr ""
+msgstr "Pai"
#: elf64-x86-64.c:1697 elfnn-loongarch.c:900
+#, fuzzy
msgid "a PDE object"
-msgstr ""
+msgstr "Tiada objek sebegitu"
#: elf64-x86-64.c:1699
msgid "; recompile with -fPIE"
@@ -4865,9 +4963,9 @@ msgid "%pB: unexpected redefinition of indirect versioned symbol `%s'"
msgstr ""
#: elflink.c:2681
-#, c-format
+#, fuzzy, c-format
msgid "%pB: version node not found for symbol %s"
-msgstr ""
+msgstr "simbol tidak dijumpai di dalam pengeluaran: %.*s"
#: elflink.c:2780
#, c-format
@@ -4917,9 +5015,9 @@ msgid "%pB: %s local symbol at index %lu (>= sh_info of %lu)"
msgstr ""
#: elflink.c:5137
-#, c-format
+#, fuzzy, c-format
msgid "%pB: not enough version information"
-msgstr ""
+msgstr "Maklumat versi"
#: elflink.c:5175
#, c-format
@@ -4927,9 +5025,9 @@ msgid "%pB: %s: invalid version %u (max %d)"
msgstr ""
#: elflink.c:5212
-#, c-format
+#, fuzzy, c-format
msgid "%pB: %s: invalid needed version %d"
-msgstr ""
+msgstr "keperluan versi tidak sah: %s"
#: elflink.c:5498
#, c-format
@@ -4945,24 +5043,24 @@ msgid "warning: NOTE: size discrepancies can cause real problems. Investigation
msgstr ""
#: elflink.c:5670
-#, c-format
+#, fuzzy, c-format
msgid "%pB: undefined reference to symbol '%s'"
-msgstr ""
+msgstr "simbol permulaan %s tidak ditakrifkan"
#: elflink.c:6759
-#, c-format
+#, fuzzy, c-format
msgid "%pB: stack size specified and %s set"
-msgstr ""
+msgstr "Fail %s tidak wujud dan tiada saiz dinyatakan.\n"
#: elflink.c:6763
-#, c-format
+#, fuzzy, c-format
msgid "%pB: %s not absolute"
-msgstr ""
+msgstr "PB"
#: elflink.c:6975
-#, c-format
+#, fuzzy, c-format
msgid "%s: undefined version: %s"
-msgstr ""
+msgstr "%s: pembolehubah %s %%define tidak ditakrifkan"
#: elflink.c:7364
msgid "error: creating an executable stack because of -z execstack command line option"
@@ -5002,18 +5100,18 @@ msgid "%pB: .preinit_array section is not allowed in DSO"
msgstr ""
#: elflink.c:9218
-#, c-format
+#, fuzzy, c-format
msgid "undefined %s reference in complex symbol: %s"
-msgstr ""
+msgstr "simbol permulaan %s tidak ditakrifkan"
#: elflink.c:9381 elflink.c:9389
msgid "division by zero"
msgstr "dibahagi dengan sifar"
#: elflink.c:9403
-#, c-format
+#, fuzzy, c-format
msgid "unknown operator '%c' in complex symbol"
-msgstr ""
+msgstr "Pilihan tidak diketahui '-%c'\n"
#. PR 21524: Let the user know if a symbol was removed by garbage collection.
#: elflink.c:9739
@@ -5039,13 +5137,14 @@ msgid "%pB: unable to sort relocs - they are of an unknown size"
msgstr ""
#: elflink.c:10136
+#, fuzzy
msgid "not enough memory to sort relocations"
-msgstr ""
+msgstr "GIF: memori tidak mencukupi."
#: elflink.c:10470
-#, c-format
+#, fuzzy, c-format
msgid "%pB: too many sections: %d (>= %d)"
-msgstr ""
+msgstr "Terlalu banyak titik henti. Maksimum ialah %d."
#: elflink.c:10746
#, c-format
@@ -5068,19 +5167,19 @@ msgid "%pB: could not find output section %pA for input section %pA"
msgstr ""
#: elflink.c:11003
-#, c-format
+#, fuzzy, c-format
msgid "%pB: protected symbol `%s' isn't defined"
-msgstr ""
+msgstr "simbol %s digunakan, tetapi tidak ditakrifkan sebagai token atau mempunyai hukum"
#: elflink.c:11006
-#, c-format
+#, fuzzy, c-format
msgid "%pB: internal symbol `%s' isn't defined"
-msgstr ""
+msgstr "simbol %s digunakan, tetapi tidak ditakrifkan sebagai token atau mempunyai hukum"
#: elflink.c:11009
-#, c-format
+#, fuzzy, c-format
msgid "%pB: hidden symbol `%s' isn't defined"
-msgstr ""
+msgstr "simbol %s digunakan, tetapi tidak ditakrifkan sebagai token atau mempunyai hukum"
#: elflink.c:11041
#, c-format
@@ -5098,28 +5197,28 @@ msgid "error: %pB: size of section %pA is not multiple of address size"
msgstr ""
#: elflink.c:12473
-#, c-format
+#, fuzzy, c-format
msgid "%pB: no symbol found for import library"
-msgstr ""
+msgstr "Pustaka \"%1\" tidak dijumpai"
#: elflink.c:13078
msgid "%F%P: %pB: failed to finish relative relocations\n"
msgstr ""
#: elflink.c:13155
-#, c-format
+#, fuzzy, c-format
msgid "%pB: file class %s incompatible with %s"
-msgstr ""
+msgstr "%s: tidak sepadan dengan fail gmon pertama\n"
#: elflink.c:13377
-#, c-format
+#, fuzzy, c-format
msgid "%pB: failed to generate import library"
-msgstr ""
+msgstr "Pustaka yang digunakan untuk menjana lakaran kenit"
#: elflink.c:13538
-#, c-format
+#, fuzzy, c-format
msgid "warning: %s section has zero size"
-msgstr ""
+msgstr "Imej GIF yang terhasil bersaiz sifar"
#: elflink.c:13586
#, c-format
@@ -5161,9 +5260,9 @@ msgid "%pB: section '%pA': corrupt VTENTRY entry"
msgstr ""
#: elflink.c:14922
-#, c-format
+#, fuzzy, c-format
msgid "unrecognized INPUT_SECTION_FLAG %s\n"
-msgstr ""
+msgstr "%s: pilihan '--%s' tidak dikenali\n"
#: elflink.c:15703
#, c-format
@@ -5245,9 +5344,9 @@ msgid "%X%pB: error: GCS is required by -z gcs, but this input object file lacks
msgstr ""
#: elfxx-loongarch.c:1911
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unsupported relocation type %s"
-msgstr ""
+msgstr "%s Pb"
#: elfxx-loongarch.c:1939
#, c-format
@@ -5260,13 +5359,14 @@ msgid "%pB: relocation %s right shift %d error 0x%lx"
msgstr ""
#: elfxx-loongarch.c:2032
-#, c-format
+#, fuzzy, c-format
msgid "%pB: relocation %s overflow 0x%lx"
-msgstr ""
+msgstr "[find_call] %s: 0x%lx ke 0x%lx\n"
#: elfxx-mips.c:1534
+#, fuzzy
msgid "static procedure (no name)"
-msgstr ""
+msgstr "nama prosedur tiada"
#: elfxx-mips.c:5849
msgid "MIPS16 and microMIPS functions cannot call each other"
@@ -5299,9 +5399,12 @@ msgid "%pB: warning: bad `%s' option size %u smaller than its header"
msgstr ""
#: elfxx-mips.c:7635
-#, c-format
+#, fuzzy, c-format
msgid "%pB: warning: truncated `%s' option"
msgstr ""
+"Amaran mengenai %(cleaner)s - %(option)s:\n"
+"\n"
+"%(warning)s"
#: elfxx-mips.c:8453 elfxx-mips.c:8579
#, c-format
@@ -5334,14 +5437,14 @@ msgid "IFUNC symbol %s in dynamic symbol table - IFUNCS are not supported"
msgstr ""
#: elfxx-mips.c:9383
-#, c-format
+#, fuzzy, c-format
msgid "non-dynamic symbol %s in dynamic symbol table"
-msgstr ""
+msgstr "Gagal menemui simbol '%s' dalam pustaka dinamik"
#: elfxx-mips.c:9603
-#, c-format
+#, fuzzy, c-format
msgid "non-dynamic relocations refer to dynamic symbol %s"
-msgstr ""
+msgstr "Gagal menemui simbol '%s' dalam pustaka dinamik"
#: elfxx-mips.c:10523
#, c-format
@@ -5397,14 +5500,14 @@ msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
msgstr ""
#: elfxx-mips.c:14729
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unknown architecture %s"
-msgstr ""
+msgstr "%s: -c tidak disokong pada rekabentuk %s\n"
#: elfxx-mips.c:15257
-#, c-format
+#, fuzzy, c-format
msgid "%pB: illegal section name `%pA'"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: elfxx-mips.c:15534
#, c-format
@@ -5467,14 +5570,14 @@ msgid "warning: %pB uses unknown MSA ABI %d (set by %pB), %pB uses unknown MSA A
msgstr ""
#: elfxx-mips.c:15894
-#, c-format
+#, fuzzy, c-format
msgid "%pB: endianness incompatible with that of the selected emulation"
-msgstr ""
+msgstr "Kekunci DSA yang diberikan tidak serasi dengan protokol TLS yang dipilih."
#: elfxx-mips.c:15908
-#, c-format
+#, fuzzy, c-format
msgid "%pB: ABI is incompatible with that of the selected emulation"
-msgstr ""
+msgstr "Kekunci DSA yang diberikan tidak serasi dengan protokol TLS yang dipilih."
#: elfxx-mips.c:15961
#, c-format
@@ -5506,34 +5609,32 @@ msgid "-mips32r2 -mfp64 (12 callee-saved)"
msgstr ""
#: elfxx-mips.c:16234 elfxx-mips.c:16245
-#, fuzzy
msgid "None"
msgstr "Tiada"
#: elfxx-mips.c:16236 elfxx-mips.c:16305
-#, fuzzy
msgid "Unknown"
msgstr "Tidak Diketahui"
#: elfxx-mips.c:16316
-#, c-format
+#, fuzzy, c-format
msgid "Hard or soft float\n"
-msgstr ""
+msgstr "apung"
#: elfxx-mips.c:16319
-#, c-format
+#, fuzzy, c-format
msgid "Hard float (double precision)\n"
-msgstr ""
+msgstr "Kepersisan"
#: elfxx-mips.c:16322
-#, c-format
+#, fuzzy, c-format
msgid "Hard float (single precision)\n"
-msgstr ""
+msgstr "Volum audio jitu tunggal"
#: elfxx-mips.c:16325
-#, c-format
+#, fuzzy, c-format
msgid "Soft float\n"
-msgstr ""
+msgstr "Soft"
#: elfxx-mips.c:16328
#, c-format
@@ -5576,9 +5677,9 @@ msgid " [abi=EABI64]"
msgstr ""
#: elfxx-mips.c:16377
-#, c-format
+#, fuzzy, c-format
msgid " [abi unknown]"
-msgstr ""
+msgstr "Tidak diketahui "
#: elfxx-mips.c:16379
#, c-format
@@ -5588,17 +5689,17 @@ msgstr ""
#: elfxx-mips.c:16381
#, c-format
msgid " [abi=64]"
-msgstr ""
+msgstr " [abi=64]"
#: elfxx-mips.c:16383
-#, c-format
+#, fuzzy, c-format
msgid " [no abi set]"
-msgstr ""
+msgstr "tidak ditetapkan"
#: elfxx-mips.c:16408
-#, c-format
+#, fuzzy, c-format
msgid " [unknown ISA]"
-msgstr ""
+msgstr "Tidak diketahui "
#: elfxx-mips.c:16428
#, c-format
@@ -5631,9 +5732,9 @@ msgid "%s: invalid prefixed ISA extension `%s' ends with <number>p"
msgstr ""
#: elfxx-riscv.c:2023
-#, c-format
+#, fuzzy, c-format
msgid "%s: unknown prefixed ISA extension `%s'"
-msgstr ""
+msgstr "%s\t\tSambungan tidak diketahui %s (%s):\n"
#: elfxx-riscv.c:2047
#, c-format
@@ -5641,31 +5742,32 @@ msgid "%s: prefixed ISA extension must separate with _"
msgstr ""
#: elfxx-riscv.c:2087
-#, c-format
+#, fuzzy, c-format
msgid "rv%de does not support the `h' extension"
-msgstr ""
+msgstr "Sambungan tidak menyokong versi shell"
#: elfxx-riscv.c:2095
-#, c-format
+#, fuzzy, c-format
msgid "rv%d does not support the `q' extension"
-msgstr ""
+msgstr "Sambungan tidak menyokong versi shell"
#: elfxx-riscv.c:2102
msgid "zcmp' is incompatible with `d/zcd' extension"
msgstr ""
#: elfxx-riscv.c:2109
-#, c-format
+#, fuzzy, c-format
msgid "rv%d does not support the `zcf' extension"
-msgstr ""
+msgstr "Sambungan tidak menyokong versi shell"
#: elfxx-riscv.c:2116
msgid "`zfinx' is conflict with the `f/d/q/zfh/zfhmin' extension"
msgstr ""
#: elfxx-riscv.c:2123
+#, fuzzy
msgid "`xtheadvector' is conflict with the `v' extension"
-msgstr ""
+msgstr "V"
#: elfxx-riscv.c:2144
msgid "zvl*b extensions need to enable either `v' or `zve' extension"
@@ -5692,62 +5794,73 @@ msgid "%sinvalid ISA extension ends with <number>p in %s `%s'"
msgstr ""
#: elfxx-riscv.c:2494
-#, c-format
+#, fuzzy, c-format
msgid "%sunknown ISA extension `%s' in %s `%s'"
-msgstr ""
+msgstr "%s\t\tSambungan tidak diketahui %s (%s):\n"
#: elfxx-riscv.c:2506
-#, c-format
+#, fuzzy, c-format
msgid "%scannot + or - base extension `%s' in %s `%s'"
-msgstr ""
+msgstr "%s\t\tSambungan tidak diketahui %s (%s):\n"
#: elfxx-riscv.c:2817 elfxx-riscv.c:3112
+#, fuzzy
msgid "internal: unreachable INSN_CLASS_*"
-msgstr ""
+msgstr "KELAS"
#: elfxx-riscv.c:2851
msgid "zicfiss' and `zcmop"
msgstr ""
#: elfxx-riscv.c:2865
+#, fuzzy
msgid "zihintntl' and `c', or `zihintntl' and `zca"
-msgstr ""
+msgstr "_C/C++"
#: elfxx-riscv.c:2870 elfxx-riscv.c:2896
+#, fuzzy
msgid "c' or `zca"
-msgstr ""
+msgstr "_C/C++"
#: elfxx-riscv.c:2878
+#, fuzzy
msgid "m' or `zmmul"
-msgstr ""
+msgstr "%a dari %m"
#: elfxx-riscv.c:2902
+#, fuzzy
msgid "f' and `c', or `f' and `zcf"
-msgstr ""
+msgstr "F"
#: elfxx-riscv.c:2907
+#, fuzzy
msgid "c' or `zcf"
-msgstr ""
+msgstr "_C/C++"
#: elfxx-riscv.c:2913
+#, fuzzy
msgid "d' and `c', or `d' and `zcd"
-msgstr ""
+msgstr "Volum %d%c (disenyapkan)"
#: elfxx-riscv.c:2918
+#, fuzzy
msgid "c' or `zcd"
-msgstr ""
+msgstr "_C/C++"
#: elfxx-riscv.c:2920
+#, fuzzy
msgid "f' or `zfinx"
-msgstr ""
+msgstr "%.f%%"
#: elfxx-riscv.c:2922
+#, fuzzy
msgid "d' or `zdinx"
-msgstr ""
+msgstr "%d × %d"
#: elfxx-riscv.c:2924
+#, fuzzy
msgid "q' or `zqinx"
-msgstr ""
+msgstr "\t\tQ: "
#: elfxx-riscv.c:2926
msgid "zfh' or `zhinx"
@@ -5758,20 +5871,24 @@ msgid "zfhmin' or `zhinxmin"
msgstr ""
#: elfxx-riscv.c:2941
+#, fuzzy
msgid "zfhmin' and `d', or `zhinxmin' and `zdinx"
-msgstr ""
+msgstr "%d × %d"
#: elfxx-riscv.c:2952
+#, fuzzy
msgid "zfhmin' and `q', or `zhinxmin' and `zqinx"
-msgstr ""
+msgstr " q, Q, Esc Keluar"
#: elfxx-riscv.c:2960
+#, fuzzy
msgid "d' and `zfa"
-msgstr ""
+msgstr "%d × %d"
#: elfxx-riscv.c:2968
+#, fuzzy
msgid "q' and `zfa"
-msgstr ""
+msgstr "\t\tQ: "
#: elfxx-riscv.c:2976
msgid "zfh' and `zfa"
@@ -5798,12 +5915,14 @@ msgid "zknd' or `zkne"
msgstr ""
#: elfxx-riscv.c:3023
+#, fuzzy
msgid "v' or `zve64x' or `zve32x"
-msgstr ""
+msgstr "Ctrl+V"
#: elfxx-riscv.c:3025
+#, fuzzy
msgid "v' or `zve64d' or `zve64f' or `zve32f"
-msgstr ""
+msgstr "Ctrl+V"
#: elfxx-riscv.c:3027
msgid "zvbb"
@@ -5846,15 +5965,15 @@ msgid "zcb' and `zbb"
msgstr ""
#: elfxx-riscv.c:3053
+#, fuzzy
msgid "zcb' and `zmmul', or `zcb' and `m"
-msgstr ""
+msgstr "Mod:"
#: elfxx-riscv.c:3061
msgid "smctr' or `ssctr"
msgstr ""
#: elfxx-riscv.c:3065
-#, fuzzy
msgid "h"
msgstr "h"
@@ -5864,9 +5983,9 @@ msgid "%pB: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s"
msgstr ""
#: elfxx-tilegx.c:4126
-#, c-format
+#, fuzzy, c-format
msgid "%pB: cannot link together %s and %s objects"
-msgstr ""
+msgstr "%s: Tak dapat memaut keras ke %s"
#: elfxx-x86.c:534 elfxx-x86.c:3597
#, c-format
@@ -5956,47 +6075,54 @@ msgid "error: %pB: <corrupt x86 property (0x%x) size: 0x%x>"
msgstr ""
#: elfxx-x86.c:4189
-#, c-format
+#, fuzzy, c-format
msgid "%pB: x86 ISA needed: "
-msgstr ""
+msgstr "Sistem x86 32-bit"
#: elfxx-x86.c:4191
-#, c-format
+#, fuzzy, c-format
msgid "%pB: x86 ISA used: "
-msgstr ""
+msgstr "Sistem x86 32-bit"
#: elfxx-x86.c:4213
-#, c-format
+#, fuzzy, c-format
msgid "<unknown: %x>"
-msgstr ""
+msgstr "(Kod mekanisma GSSAPI tidak diketahui: %x)"
#: elfxx-x86.c:4368
+#, fuzzy
msgid "%P: %pB: warning: missing %s\n"
-msgstr ""
+msgstr "%s Pb"
#: elfxx-x86.c:4369
+#, fuzzy
msgid "%X%P: %pB: error: missing %s\n"
-msgstr ""
+msgstr "Ralat dalam alamat \"%s\"— atribut hos hilang atau cacat"
#: elfxx-x86.c:4475
+#, fuzzy
msgid "IBT and SHSTK properties"
-msgstr ""
+msgstr "&Sifat…"
#: elfxx-x86.c:4477
+#, fuzzy
msgid "IBT property"
-msgstr ""
+msgstr "Si_fat:"
#: elfxx-x86.c:4479
+#, fuzzy
msgid "SHSTK property"
-msgstr ""
+msgstr "Si_fat:"
#: elfxx-x86.c:4484
+#, fuzzy
msgid "LAM_U48 property"
-msgstr ""
+msgstr "Si_fat:"
#: elfxx-x86.c:4489
+#, fuzzy
msgid "LAM_U57 property"
-msgstr ""
+msgstr "Si_fat:"
#: elfxx-x86.c:4667
msgid "%F%P: failed to create VxWorks dynamic sections\n"
@@ -6082,14 +6208,14 @@ msgid "%pB:%u: unrecognized ihex type %u in Intel Hex file"
msgstr ""
#: ihex.c:580
-#, c-format
+#, fuzzy, c-format
msgid "%pB: internal error in ihex_read_section"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: ihex.c:613
-#, c-format
+#, fuzzy, c-format
msgid "%pB: bad section length in ihex_read_section"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: ihex.c:784
#, c-format
@@ -6126,9 +6252,9 @@ msgid "attempt to do relocatable link with %s input and %s output"
msgstr ""
#: linker.c:2896
-#, c-format
+#, fuzzy, c-format
msgid "%pB: ignoring duplicate section `%pA'\n"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: linker.c:2906 linker.c:2916
#, c-format
@@ -6136,9 +6262,9 @@ msgid "%pB: duplicate section `%pA' has different size\n"
msgstr ""
#: linker.c:2930 linker.c:2938
-#, c-format
+#, fuzzy, c-format
msgid "%pB: could not read contents of section `%pA'\n"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: linker.c:2947
#, c-format
@@ -6190,9 +6316,9 @@ msgid "malformed mach-o ARM reloc: unknown reloc type: %d"
msgstr ""
#: mach-o.c:640
-#, c-format
+#, fuzzy, c-format
msgid "<unknown mask flags>"
-msgstr ""
+msgstr "Bendera"
#: mach-o.c:695
#, fuzzy
@@ -6200,49 +6326,61 @@ msgid " (<unknown>)"
msgstr "Tidak diketahui "
#: mach-o.c:707
-#, c-format
+#, fuzzy, c-format
msgid " MACH-O header:\n"
-msgstr ""
+msgstr "Output:"
#: mach-o.c:708
-#, c-format
+#, fuzzy, c-format
msgid " magic: %#lx\n"
-msgstr ""
+msgstr "Ajaib"
#: mach-o.c:709
-#, c-format
+#, fuzzy, c-format
msgid " cputype: %#lx (%s)\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpepijat dalam %s pada 0x%lx\n"
+"\n"
#: mach-o.c:711
-#, c-format
+#, fuzzy, c-format
msgid " cpusubtype: %#lx%s\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpepijat dalam %s pada 0x%lx\n"
+"\n"
#: mach-o.c:713
-#, c-format
+#, fuzzy, c-format
msgid " filetype: %#lx\n"
-msgstr ""
+msgstr "Tiada jenis fail"
#: mach-o.c:714
-#, c-format
+#, fuzzy, c-format
msgid " ncmds: %#lx\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpepijat dalam %s pada 0x%lx\n"
+"\n"
#: mach-o.c:715
-#, c-format
+#, fuzzy, c-format
msgid " sizeocmds: %#lx\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpepijat dalam %s pada 0x%lx\n"
+"\n"
#: mach-o.c:716
-#, c-format
+#, fuzzy, c-format
msgid " flags: %#lx\n"
-msgstr ""
+msgstr "Bendera"
#: mach-o.c:717
-#, c-format
+#, fuzzy, c-format
msgid " version: %x\n"
-msgstr ""
+msgstr "Versi"
#. Urg - what has happened ?
#: mach-o.c:752
@@ -6268,9 +6406,9 @@ msgid "mach-o: there are too many sections (%u) maximum is 255,\n"
msgstr ""
#: mach-o.c:2695
-#, c-format
+#, fuzzy, c-format
msgid "unable to allocate data for load command %#x"
-msgstr ""
+msgstr "Tidak boleh muatkan data imej"
#: mach-o.c:2800
#, c-format
@@ -6318,9 +6456,9 @@ msgid "bfd_mach_o_read_symtab_symbol: symbol \"%s\" specified invalid type field
msgstr ""
#: mach-o.c:5066
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unknown load command %#x"
-msgstr ""
+msgstr "Arahan tak diketahui '%1'"
#: mach-o.c:5264
#, c-format
@@ -6485,25 +6623,25 @@ msgstr ""
#: pei-x86_64.c:174 pei-x86_64.c:228 pei-x86_64.c:238 pei-x86_64.c:263
#: pei-x86_64.c:275 pei-x86_64.c:289 pei-x86_64.c:307 pei-x86_64.c:319
#: pei-x86_64.c:331
-#, c-format
+#, fuzzy, c-format
msgid "warning: corrupt unwind data\n"
-msgstr ""
+msgstr "Data piksel imej rosak"
#. PR 17512: file: 2245-7442-0.004.
#: pei-x86_64.c:352
-#, c-format
+#, fuzzy, c-format
msgid "Unknown: %x"
-msgstr ""
+msgstr "(Kod mekanisma GSSAPI tidak diketahui: %x)"
#: pei-x86_64.c:403 pei-x86_64.c:413 pei-x86_64.c:422
-#, c-format
+#, fuzzy, c-format
msgid "warning: xdata section corrupt\n"
-msgstr ""
+msgstr "Bahagian .rsrc yang rosak dikesan!\n"
#: pei-x86_64.c:477
-#, c-format
+#, fuzzy, c-format
msgid "Too many unwind codes (%ld)\n"
-msgstr ""
+msgstr "Terlalu banyak rujukan dalam jadual"
#: pei-x86_64.c:563
#, c-format
@@ -6511,9 +6649,11 @@ msgid "Warning: %s section size (%ld) is not a multiple of %d\n"
msgstr ""
#: pei-x86_64.c:570
-#, c-format
+#, fuzzy, c-format
msgid "Warning: %s section size is zero\n"
msgstr ""
+"Terima Sifar\n"
+"Saiz"
#: pei-x86_64.c:585
#, c-format
@@ -6521,11 +6661,13 @@ msgid "Warning: %s section size (%ld) is smaller than virtual size (%ld)\n"
msgstr ""
#: pei-x86_64.c:594
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"The Function Table (interpreted %s section contents)\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: pei-x86_64.c:597
#, c-format
@@ -6533,16 +6675,16 @@ msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n"
msgstr ""
#: pei-x86_64.c:722
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"Dump of %s\n"
-msgstr ""
+msgstr "Longgok Ingatan..."
#: peicode.h:823
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unrecognized import type; %x"
-msgstr ""
+msgstr "Tidak boleh menyalin jenis widget yang tidak dikenali."
#: peicode.h:840
#, c-format
@@ -6580,19 +6722,19 @@ msgid "%pB: error: debug data ends beyond end of debug directory"
msgstr ""
#: peicode.h:1598
-#, c-format
+#, fuzzy, c-format
msgid "%pB: adjusting invalid SectionAlignment"
-msgstr ""
+msgstr "Pelarasan"
#: peicode.h:1608
-#, c-format
+#, fuzzy, c-format
msgid "%pB: adjusting invalid FileAlignment"
-msgstr ""
+msgstr "Pelarasan"
#: peicode.h:1616
-#, c-format
+#, fuzzy, c-format
msgid "%pB: invalid NumberOfRvaAndSizes"
-msgstr ""
+msgstr "%1 PB"
#: plugin.c:197
#, c-format
@@ -6624,31 +6766,31 @@ msgid "plugin framework: out of file descriptors. Try using fewer objects/archiv
msgstr ""
#: ppcboot.c:392
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"ppcboot header:\n"
-msgstr ""
+msgstr "_Pengepala"
#: ppcboot.c:393
-#, c-format
+#, fuzzy, c-format
msgid "Entry offset = 0x%.8lx (%ld)\n"
-msgstr ""
+msgstr "offset fail zip kepada masukan rosak"
#: ppcboot.c:395
-#, c-format
+#, fuzzy, c-format
msgid "Length = 0x%.8lx (%ld)\n"
-msgstr ""
+msgstr "Memadam fail %ld drpd %ld"
#: ppcboot.c:399
-#, c-format
+#, fuzzy, c-format
msgid "Flag field = 0x%.2x\n"
-msgstr ""
+msgstr "2x"
#: ppcboot.c:405
-#, c-format
+#, fuzzy, c-format
msgid "Partition name = \"%s\"\n"
-msgstr ""
+msgstr "Ralat menetapkan nama sekatan"
#: ppcboot.c:425
#, c-format
@@ -6673,8 +6815,9 @@ msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
msgstr ""
#: reloc.c:8417
+#, fuzzy
msgid "INPUT_SECTION_FLAGS are not supported"
-msgstr ""
+msgstr "Bendera terima tidak disokong"
#: reloc.c:8683
#, c-format
@@ -6683,14 +6826,14 @@ msgstr ""
#. PR 21803: Suggest the most likely cause of this error.
#: reloc.c:8687
-#, c-format
+#, fuzzy, c-format
msgid "is this version of the linker - %s - out of date ?"
-msgstr ""
+msgstr "Pralihat sudah ketinggalan zaman"
#: rs6000-core.c:471
-#, c-format
+#, fuzzy, c-format
msgid "%pB: warning core file truncated"
-msgstr ""
+msgstr "Abai dan tinggalkan fail core"
#: som.c:3002
#, c-format
@@ -6709,15 +6852,16 @@ msgid "%pB[%pA]: no output section for space %pA"
msgstr ""
#: som.c:5449
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"Exec Auxiliary Header\n"
-msgstr ""
+msgstr "Jalankan"
#: som.c:5758
+#, fuzzy
msgid "som_sizeof_headers unimplemented"
-msgstr ""
+msgstr "Tak diimplementasi"
#: srec.c:260
#, c-format
@@ -6725,14 +6869,14 @@ msgid "%pB:%d: unexpected character `%s' in S-record file"
msgstr ""
#: srec.c:488
-#, c-format
+#, fuzzy, c-format
msgid "%pB:%d: byte count %d too small"
-msgstr ""
+msgstr "Saiz atom QTIF terlalu besar (%d bait)"
#: srec.c:580 srec.c:614
-#, c-format
+#, fuzzy, c-format
msgid "%pB:%d: bad checksum in S-record file"
-msgstr ""
+msgstr "%s: %s: tag buruk %d dijumpai (fail rosak?)\n"
#: stabs.c:308
#, c-format
@@ -6740,12 +6884,14 @@ msgid "%pB(%pA+%#lx): stabs entry has invalid string index"
msgstr ""
#: syms.c:1120
+#, fuzzy
msgid "unsupported .stab relocation"
-msgstr ""
+msgstr " (tidak disokong)"
#: vms-alpha.c:479
+#, fuzzy
msgid "corrupt EIHD record - size is too small"
-msgstr ""
+msgstr "Gagal menentukan saiz lightmap. Saiz lightmap maksimum terlalu kecil?"
#: vms-alpha.c:665
#, c-format
@@ -6777,9 +6923,9 @@ msgid "corrupt EGSD record: its psindx field is too big (%#lx)"
msgstr ""
#: vms-alpha.c:1441
-#, c-format
+#, fuzzy, c-format
msgid "unknown EGSD subtype %d"
-msgstr ""
+msgstr "Subjenis spline tak diketahui: %d\n"
#: vms-alpha.c:1474
#, c-format
@@ -6787,37 +6933,40 @@ msgid "stack overflow (%d) in _bfd_vms_push"
msgstr ""
#: vms-alpha.c:1488
+#, fuzzy
msgid "stack underflow in _bfd_vms_pop"
-msgstr ""
+msgstr "tindanan bawah aliran\n"
#: vms-alpha.c:1562
-#, c-format
+#, fuzzy, c-format
msgid "dst_define_location %u too large"
-msgstr ""
+msgstr "Mesej terlalu besar untuk sambungan DTLS; maksimum ialah %u bait"
#. These names have not yet been added to this switch statement.
#: vms-alpha.c:1765
-#, c-format
+#, fuzzy, c-format
msgid "unknown ETIR command %d"
-msgstr ""
+msgstr "tidak diketahui-%d"
#: vms-alpha.c:1796
+#, fuzzy
msgid "corrupt vms value"
-msgstr ""
+msgstr "Takat rosak"
#: vms-alpha.c:1927
+#, fuzzy
msgid "corrupt ETIR record encountered"
-msgstr ""
+msgstr "Fail rosak?"
#: vms-alpha.c:1989
-#, c-format
+#, fuzzy, c-format
msgid "bad section index in %s"
-msgstr ""
+msgstr "Nilai magik buruk dalam profile_section_t"
#: vms-alpha.c:2003
-#, c-format
+#, fuzzy, c-format
msgid "unsupported STA cmd %s"
-msgstr ""
+msgstr "Tema tidak disokong '%s'."
#. Insert field.
#. Unsigned shift.
@@ -6842,27 +6991,29 @@ msgstr "%s tidak sah - %s"
#. Divide by zero is supposed to give a result of zero,
#. and a non-fatal warning message.
#: vms-alpha.c:2457
-#, c-format
+#, fuzzy, c-format
msgid "%s divide by zero"
-msgstr ""
+msgstr "Bahagi [/]"
#: vms-alpha.c:2523
-#, c-format
+#, fuzzy, c-format
msgid "invalid use of %s with contexts"
-msgstr ""
+msgstr "Tidak dapat menyenaraikan konteks fail"
#: vms-alpha.c:2581
-#, c-format
+#, fuzzy, c-format
msgid "reserved cmd %d"
-msgstr ""
+msgstr "Simpanan"
#: vms-alpha.c:2665
+#, fuzzy
msgid "corrupt EEOM record - size is too small"
-msgstr ""
+msgstr "Gagal menentukan saiz lightmap. Saiz lightmap maksimum terlalu kecil?"
#: vms-alpha.c:2674
+#, fuzzy
msgid "object module not error-free !"
-msgstr ""
+msgstr "Ralat: Laluan objek tidak dinyatakan\n"
#: vms-alpha.c:4006
#, c-format
@@ -6870,23 +7021,23 @@ msgid "SEC_RELOC with no relocs in section %pA"
msgstr ""
#: vms-alpha.c:4058 vms-alpha.c:4286
-#, c-format
+#, fuzzy, c-format
msgid "size error in section %pA"
-msgstr ""
+msgstr "Ralat sintaks dalam pengepala seksyen profil"
#: vms-alpha.c:4229
msgid "spurious ALPHA_R_BSR reloc"
msgstr ""
#: vms-alpha.c:4272
-#, c-format
+#, fuzzy, c-format
msgid "unhandled relocation %s"
-msgstr ""
+msgstr "Pengecualian tidak dikendalikan berlaku: %s"
#: vms-alpha.c:4637
-#, c-format
+#, fuzzy, c-format
msgid "unknown source command %d"
-msgstr ""
+msgstr "tidak diketahui-%d"
#: vms-alpha.c:4789 vms-alpha.c:4794 vms-alpha.c:4799 vms-alpha.c:4804
#: vms-alpha.c:4809 vms-alpha.c:4832 vms-alpha.c:4837 vms-alpha.c:4842
@@ -6896,122 +7047,125 @@ msgid "%s not implemented"
msgstr "%s tidak dilaksanakan"
#: vms-alpha.c:4883
-#, c-format
+#, fuzzy, c-format
msgid "unknown line command %d"
-msgstr ""
+msgstr "Nilai data tridak diketahui \"%s\" pada baris %d. Diabaikan."
#: vms-alpha.c:5322
+#, fuzzy
msgid "corrupt reloc record"
-msgstr ""
+msgstr "Fail rosak?"
#: vms-alpha.c:5352 vms-alpha.c:5370 vms-alpha.c:5387 vms-alpha.c:5405
#: vms-alpha.c:5418 vms-alpha.c:5430 vms-alpha.c:5443
-#, c-format
+#, fuzzy, c-format
msgid "unknown reloc %s + %s"
-msgstr ""
+msgstr "\t\tSambungan tidak diketahui %s (%s):\n"
#: vms-alpha.c:5502
-#, c-format
+#, fuzzy, c-format
msgid "unknown reloc %s"
-msgstr ""
+msgstr "\t\tSambungan tidak diketahui %s (%s):\n"
#: vms-alpha.c:5516
+#, fuzzy
msgid "invalid section index in ETIR"
-msgstr ""
+msgstr "Objek profile_section tidak sah"
#: vms-alpha.c:5525
+#, fuzzy
msgid "relocation for non-REL psect"
-msgstr ""
+msgstr "Direktori-direktori untuk diindeks secara bukan-rekursif"
#: vms-alpha.c:5578
-#, c-format
+#, fuzzy, c-format
msgid "unknown symbol in command %s"
-msgstr ""
+msgstr "arahan tidak diketahui: '%1$s'"
#: vms-alpha.c:5996
-#, c-format
+#, fuzzy, c-format
msgid "reloc (%d) is *UNKNOWN*"
-msgstr ""
+msgstr "Mod piksel tidak diketahui: %d\n"
#: vms-alpha.c:6113
-#, c-format
+#, fuzzy, c-format
msgid " EMH %d (len=%u): "
-msgstr ""
+msgstr "Ralat membaca dari klien, len = %d\n"
#: vms-alpha.c:6118 vms-alpha.c:6137 vms-alpha.c:6216
-#, c-format
+#, fuzzy, c-format
msgid " Error: %s min length is %u\n"
-msgstr ""
+msgstr "Jarak Fokus Min"
#: vms-alpha.c:6141
-#, c-format
+#, fuzzy, c-format
msgid "Module header\n"
-msgstr ""
+msgstr "Modul"
#: vms-alpha.c:6142
-#, c-format
+#, fuzzy, c-format
msgid " structure level: %u\n"
-msgstr ""
+msgstr "Struktur"
#: vms-alpha.c:6143
-#, c-format
+#, fuzzy, c-format
msgid " max record size: %u\n"
-msgstr ""
+msgstr "Nilai tidak sah bagi record_size"
#: vms-alpha.c:6149
-#, c-format
+#, fuzzy, c-format
msgid " Error: The module name is missing\n"
-msgstr ""
+msgstr "Nama tidak ditulis"
#: vms-alpha.c:6155
-#, c-format
+#, fuzzy, c-format
msgid " Error: The module name is too long\n"
-msgstr ""
+msgstr "Nama arkib terlalu panjang."
#: vms-alpha.c:6158
-#, c-format
+#, fuzzy, c-format
msgid " module name : %.*s\n"
-msgstr ""
+msgstr "Nama Modul Teratas"
#: vms-alpha.c:6162
-#, c-format
+#, fuzzy, c-format
msgid " Error: The module version is missing\n"
-msgstr ""
+msgstr "Ralat kaji hurai: Ruang Putih Hilang"
#: vms-alpha.c:6168
-#, c-format
+#, fuzzy, c-format
msgid " Error: The module version is too long\n"
-msgstr ""
+msgstr "Menunggu sistem fail terlalu lama"
#: vms-alpha.c:6171
-#, c-format
+#, fuzzy, c-format
msgid " module version : %.*s\n"
-msgstr ""
+msgstr "versi modul tidak sepadan dalam `%s'"
#: vms-alpha.c:6174
-#, c-format
+#, fuzzy, c-format
msgid " Error: The compile date is truncated\n"
-msgstr ""
+msgstr "Kompil ke…"
#: vms-alpha.c:6176
-#, c-format
+#, fuzzy, c-format
msgid " compile date : %.17s\n"
-msgstr ""
+msgstr "Kompil ke…"
#: vms-alpha.c:6181
-#, c-format
+#, fuzzy, c-format
msgid "Language Processor Name\n"
-msgstr ""
+msgstr "Bahasa Melayu"
#: vms-alpha.c:6182
-#, c-format
+#, fuzzy, c-format
msgid " language name: %.*s\n"
-msgstr ""
+msgstr "Bahasa: %s"
#: vms-alpha.c:6186
-#, c-format
+#, fuzzy, c-format
msgid "Source Files Header\n"
-msgstr ""
+msgstr "Jana pengepala sumber"
#: vms-alpha.c:6187
#, fuzzy, c-format
@@ -7019,9 +7173,9 @@ msgid " file: %.*s\n"
msgstr "Tiada fail %s sebegitu"
#: vms-alpha.c:6191
-#, c-format
+#, fuzzy, c-format
msgid "Title Text Header\n"
-msgstr ""
+msgstr "Pengepala Tetingkap - Tajuk"
#: vms-alpha.c:6192
#, fuzzy, c-format
@@ -7037,9 +7191,9 @@ msgstr ""
" under lay = %s\n"
#: vms-alpha.c:6196
-#, c-format
+#, fuzzy, c-format
msgid "Copyright Header\n"
-msgstr ""
+msgstr "Hakcipta"
#: vms-alpha.c:6197
#, fuzzy, c-format
@@ -7047,39 +7201,39 @@ msgid " copyright: %.*s\n"
msgstr "Hakcipta %s."
#: vms-alpha.c:6201
-#, c-format
+#, fuzzy, c-format
msgid "unhandled emh subtype %u\n"
-msgstr ""
+msgstr "Subjenis"
#: vms-alpha.c:6211
-#, c-format
+#, fuzzy, c-format
msgid " EEOM (len=%u):\n"
-msgstr ""
+msgstr "LEN(\"hello\") mengembalikan 5"
#: vms-alpha.c:6221
-#, c-format
+#, fuzzy, c-format
msgid " number of cond linkage pairs: %u\n"
-msgstr ""
+msgstr "bilangan pasangan asas per giliran heliks"
#: vms-alpha.c:6223
-#, c-format
+#, fuzzy, c-format
msgid " completion code: %u\n"
-msgstr ""
+msgstr "Kod ralat %u ketika mengesahihkan: %s"
#: vms-alpha.c:6228
-#, c-format
+#, fuzzy, c-format
msgid " transfer addr flags: 0x%02x\n"
-msgstr ""
+msgstr "DVDRead tidak dapa membaca blok %d/%d pada 0x%02x."
#: vms-alpha.c:6229
-#, c-format
+#, fuzzy, c-format
msgid " transfer addr psect: %u\n"
-msgstr ""
+msgstr "%u pemindahan selesai"
#: vms-alpha.c:6231
-#, c-format
+#, fuzzy, c-format
msgid " transfer address : 0x%08x\n"
-msgstr ""
+msgstr "Pindah"
#: vms-alpha.c:6240
#, fuzzy
@@ -7087,9 +7241,8 @@ msgid " WEAK"
msgstr "Lemah"
#: vms-alpha.c:6242
-#, fuzzy
msgid " DEF"
-msgstr "DEF"
+msgstr " DEF"
#: vms-alpha.c:6244
#, fuzzy
@@ -7173,9 +7326,9 @@ msgid " 64B"
msgstr ""
#: vms-alpha.c:6294
-#, c-format
+#, fuzzy, c-format
msgid " EGSD (len=%u):\n"
-msgstr ""
+msgstr "LEN(\"hello\") mengembalikan 5"
#: vms-alpha.c:6309
#, c-format
@@ -7183,24 +7336,24 @@ msgid " EGSD entry %2u (type: %u, len: %u): "
msgstr ""
#: vms-alpha.c:6315 vms-alpha.c:6610
-#, c-format
+#, fuzzy, c-format
msgid " Erroneous length\n"
-msgstr ""
+msgstr "Jangka masa"
#: vms-alpha.c:6328
-#, c-format
+#, fuzzy, c-format
msgid "PSC - Program section definition\n"
-msgstr ""
+msgstr "program tidak dibenarkan dalam seksyen ini"
#: vms-alpha.c:6329 vms-alpha.c:6349
-#, c-format
+#, fuzzy, c-format
msgid " alignment : 2**%u\n"
-msgstr ""
+msgstr "J&ajaran"
#: vms-alpha.c:6330 vms-alpha.c:6350
-#, c-format
+#, fuzzy, c-format
msgid " flags : 0x%04x"
-msgstr ""
+msgstr "(0x%04x, '%s'): "
#: vms-alpha.c:6334
#, c-format
@@ -7210,7 +7363,7 @@ msgstr ""
#: vms-alpha.c:6336 vms-alpha.c:6402 vms-alpha.c:6470
#, fuzzy, c-format
msgid " name : %.*s\n"
-msgstr "Nama: %s, EntitiID: %s"
+msgstr " nama: %.*s\n"
#: vms-alpha.c:6348
#, c-format
@@ -7223,79 +7376,79 @@ msgid " alloc (len) : %u (0x%08x)\n"
msgstr ""
#: vms-alpha.c:6355
-#, c-format
+#, fuzzy, c-format
msgid " image offset : 0x%08x\n"
-msgstr ""
+msgstr "Ofset kawasan imej"
#: vms-alpha.c:6357
-#, c-format
+#, fuzzy, c-format
msgid " symvec offset : 0x%08x\n"
-msgstr ""
+msgstr "ofset"
#: vms-alpha.c:6360
#, fuzzy, c-format
msgid " name : %.*s\n"
-msgstr "Nama: %s, EntitiID: %s"
+msgstr " nama: %.*s\n"
#: vms-alpha.c:6376
-#, c-format
+#, fuzzy, c-format
msgid "SYM - Global symbol definition\n"
-msgstr ""
+msgstr "Lompat ke takrifan simbol"
#: vms-alpha.c:6377 vms-alpha.c:6458 vms-alpha.c:6482 vms-alpha.c:6505
-#, c-format
+#, fuzzy, c-format
msgid " flags: 0x%04x"
-msgstr ""
+msgstr "(0x%04x, '%s'): "
#: vms-alpha.c:6380
-#, c-format
+#, fuzzy, c-format
msgid " psect offset: 0x%08x\n"
-msgstr ""
+msgstr "ofset"
#: vms-alpha.c:6384
-#, c-format
+#, fuzzy, c-format
msgid " code address: 0x%08x\n"
-msgstr ""
+msgstr "ralat tidak diketahui (kod ralat %08x)."
#: vms-alpha.c:6386
-#, c-format
+#, fuzzy, c-format
msgid " psect index for entry point : %u\n"
-msgstr ""
+msgstr "Masukan palet %u"
#: vms-alpha.c:6389 vms-alpha.c:6489 vms-alpha.c:6512
-#, c-format
+#, fuzzy, c-format
msgid " psect index : %u\n"
-msgstr ""
+msgstr "%U"
#: vms-alpha.c:6392 vms-alpha.c:6492 vms-alpha.c:6515
#, fuzzy, c-format
msgid " name : %.*s\n"
-msgstr "Nama: %s, EntitiID: %s"
+msgstr " nama: %.*s\n"
#: vms-alpha.c:6400
-#, c-format
+#, fuzzy, c-format
msgid "SYM - Global symbol reference\n"
-msgstr ""
+msgstr "Simbol"
#: vms-alpha.c:6415
-#, c-format
+#, fuzzy, c-format
msgid "IDC - Ident Consistency check\n"
-msgstr ""
+msgstr "IDENT: socket() gagal"
#: vms-alpha.c:6416
-#, c-format
+#, fuzzy, c-format
msgid " flags : 0x%08x"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:6420
-#, c-format
+#, fuzzy, c-format
msgid " id match : %x\n"
-msgstr ""
+msgstr "Tiada padanan"
#: vms-alpha.c:6422
-#, c-format
+#, fuzzy, c-format
msgid " error severity: %x\n"
-msgstr ""
+msgstr "ralat dalaman X: %s\n"
#: vms-alpha.c:6426
#, fuzzy, c-format
@@ -7303,24 +7456,24 @@ msgid " entity name : %.*s\n"
msgstr "Nama entiti \"%-.*s\" tidak diketahui"
#: vms-alpha.c:6432
-#, c-format
+#, fuzzy, c-format
msgid " object name : %.*s\n"
-msgstr ""
+msgstr "Nama Objek"
#: vms-alpha.c:6441
-#, c-format
+#, fuzzy, c-format
msgid " binary ident : 0x%08x\n"
-msgstr ""
+msgstr "binari"
#: vms-alpha.c:6445
-#, c-format
+#, fuzzy, c-format
msgid " ascii ident : %.*s\n"
-msgstr ""
+msgstr "IDENT: disambungkan kepada %s:%u"
#: vms-alpha.c:6457
-#, c-format
+#, fuzzy, c-format
msgid "SYMG - Universal symbol definition\n"
-msgstr ""
+msgstr "Lompat ke takrifan simbol"
#: vms-alpha.c:6461
#, c-format
@@ -7328,49 +7481,49 @@ msgid " symbol vector offset: 0x%08x\n"
msgstr ""
#: vms-alpha.c:6463
-#, c-format
+#, fuzzy, c-format
msgid " entry point: 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:6465
-#, c-format
+#, fuzzy, c-format
msgid " proc descr : 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:6467
-#, c-format
+#, fuzzy, c-format
msgid " psect index: %u\n"
-msgstr ""
+msgstr "%U"
#: vms-alpha.c:6481
-#, c-format
+#, fuzzy, c-format
msgid "SYMV - Vectored symbol definition\n"
-msgstr ""
+msgstr "Lompat ke takrifan simbol"
#: vms-alpha.c:6485
-#, c-format
+#, fuzzy, c-format
msgid " vector : 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:6487 vms-alpha.c:6510
-#, c-format
+#, fuzzy, c-format
msgid " psect offset: %u\n"
-msgstr ""
+msgstr "ofset"
#: vms-alpha.c:6504
-#, c-format
+#, fuzzy, c-format
msgid "SYMM - Global symbol definition with version\n"
-msgstr ""
+msgstr "Lompat ke takrifan simbol"
#: vms-alpha.c:6508
-#, c-format
+#, fuzzy, c-format
msgid " version mask: 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:6521
-#, c-format
+#, fuzzy, c-format
msgid "unhandled egsd entry type %u\n"
-msgstr ""
+msgstr "Xmpdatum %1 tidak dikendali bagi jenis %2"
#: vms-alpha.c:6560
#, c-format
@@ -7393,34 +7546,34 @@ msgid " psect idx 3: %u, offset 3: 0x%08x %08x\n"
msgstr ""
#: vms-alpha.c:6580
-#, c-format
+#, fuzzy, c-format
msgid " global name: %.*s\n"
-msgstr ""
+msgstr "Tidak boleh bertembung dengan nama pemalar global yang telah wujud."
#: vms-alpha.c:6592
-#, c-format
+#, fuzzy, c-format
msgid " %s (len=%u):\n"
-msgstr ""
+msgstr "Len Tower"
#: vms-alpha.c:6615
-#, c-format
+#, fuzzy, c-format
msgid " (type: %3u, size: %3u): "
-msgstr ""
+msgstr "jenis saiz tidak sah `%c'"
#: vms-alpha.c:6621
-#, c-format
+#, fuzzy, c-format
msgid "STA_GBL (stack global) %.*s\n"
-msgstr ""
+msgstr "Batalkan perincian sejagat untuk repositori \"%s\":"
#: vms-alpha.c:6625
-#, c-format
+#, fuzzy, c-format
msgid "STA_LW (stack longword)"
-msgstr ""
+msgstr "Tarikh m_ula:"
#: vms-alpha.c:6631
-#, c-format
+#, fuzzy, c-format
msgid "STA_QW (stack quadword)"
-msgstr ""
+msgstr "Tarikh m_ula:"
#: vms-alpha.c:6638
#, c-format
@@ -7433,14 +7586,14 @@ msgid " psect: %u, offset: 0x%08x %08x\n"
msgstr ""
#: vms-alpha.c:6647
-#, c-format
+#, fuzzy, c-format
msgid "STA_LI (stack literal)\n"
-msgstr ""
+msgstr "Tarikh m_ula:"
#: vms-alpha.c:6650
-#, c-format
+#, fuzzy, c-format
msgid "STA_MOD (stack module)\n"
-msgstr ""
+msgstr "Modul %(mod)r tidak dipasang"
#: vms-alpha.c:6653
#, c-format
@@ -7448,24 +7601,24 @@ msgid "STA_CKARG (compare procedure argument)\n"
msgstr ""
#: vms-alpha.c:6657
-#, c-format
+#, fuzzy, c-format
msgid "STO_B (store byte)\n"
-msgstr ""
+msgstr "bait,bait,B"
#: vms-alpha.c:6660
-#, c-format
+#, fuzzy, c-format
msgid "STO_W (store word)\n"
-msgstr ""
+msgstr " -W, --word-mode banding perkataan dan bukannya baris\n"
#: vms-alpha.c:6663
-#, c-format
+#, fuzzy, c-format
msgid "STO_LW (store longword)\n"
-msgstr ""
+msgstr "&Simpan"
#: vms-alpha.c:6666
-#, c-format
+#, fuzzy, c-format
msgid "STO_QW (store quadword)\n"
-msgstr ""
+msgstr "&Simpan"
#: vms-alpha.c:6673
#, c-format
@@ -7473,9 +7626,9 @@ msgid "STO_IMMR (store immediate repeat) %u bytes\n"
msgstr ""
#: vms-alpha.c:6682
-#, c-format
+#, fuzzy, c-format
msgid "STO_GBL (store global) %.*s\n"
-msgstr ""
+msgstr "Batalkan perincian sejagat untuk repositori \"%s\":"
#: vms-alpha.c:6687
#, c-format
@@ -7488,9 +7641,9 @@ msgid "STO_RB (store relative branch)\n"
msgstr ""
#: vms-alpha.c:6694
-#, c-format
+#, fuzzy, c-format
msgid "STO_AB (store absolute branch)\n"
-msgstr ""
+msgstr "Punca simpanan %s bukan laluan mutlak"
#: vms-alpha.c:6697
#, c-format
@@ -7523,79 +7676,79 @@ msgid "STO_BR_PS (store branch psect + offset) *todo*\n"
msgstr ""
#: vms-alpha.c:6727
-#, c-format
+#, fuzzy, c-format
msgid "OPR_NOP (no-operation)\n"
-msgstr ""
+msgstr "Sisip &nop"
#: vms-alpha.c:6730
-#, c-format
+#, fuzzy, c-format
msgid "OPR_ADD (add)\n"
-msgstr ""
+msgstr "Tambah"
#: vms-alpha.c:6733
-#, c-format
+#, fuzzy, c-format
msgid "OPR_SUB (subtract)\n"
-msgstr ""
+msgstr "Tolak [-]"
#: vms-alpha.c:6736
-#, c-format
+#, fuzzy, c-format
msgid "OPR_MUL (multiply)\n"
-msgstr ""
+msgstr "Darab [*]"
#: vms-alpha.c:6739
-#, c-format
+#, fuzzy, c-format
msgid "OPR_DIV (divide)\n"
-msgstr ""
+msgstr "Bahagi [/]"
#: vms-alpha.c:6742
-#, c-format
+#, fuzzy, c-format
msgid "OPR_AND (logical and)\n"
-msgstr ""
+msgstr "logikal not"
#: vms-alpha.c:6745
-#, c-format
+#, fuzzy, c-format
msgid "OPR_IOR (logical inclusive or)\n"
-msgstr ""
+msgstr "logikal not"
#: vms-alpha.c:6748
-#, c-format
+#, fuzzy, c-format
msgid "OPR_EOR (logical exclusive or)\n"
-msgstr ""
+msgstr "Boolean Exclusive OR"
#: vms-alpha.c:6751
-#, c-format
+#, fuzzy, c-format
msgid "OPR_NEG (negate)\n"
-msgstr ""
+msgstr "Sangkal"
#: vms-alpha.c:6754
-#, c-format
+#, fuzzy, c-format
msgid "OPR_COM (complement)\n"
-msgstr ""
+msgstr "pelengkap"
#: vms-alpha.c:6757
-#, c-format
+#, fuzzy, c-format
msgid "OPR_INSV (insert field)\n"
-msgstr ""
+msgstr "Selitkan Ke Dalam Medan Edit"
#: vms-alpha.c:6760
-#, c-format
+#, fuzzy, c-format
msgid "OPR_ASH (arithmetic shift)\n"
-msgstr ""
+msgstr "Abu Gunung Berapi"
#: vms-alpha.c:6763
-#, c-format
+#, fuzzy, c-format
msgid "OPR_USH (unsigned shift)\n"
-msgstr ""
+msgstr "K_osongkan Peti Keluar"
#: vms-alpha.c:6766
-#, c-format
+#, fuzzy, c-format
msgid "OPR_ROT (rotate)\n"
-msgstr ""
+msgstr "&Putar..."
#: vms-alpha.c:6769
-#, c-format
+#, fuzzy, c-format
msgid "OPR_SEL (select)\n"
-msgstr ""
+msgstr "%(sel)s daripada %(cnt)s dipilih"
#: vms-alpha.c:6772
#, c-format
@@ -7603,9 +7756,9 @@ msgid "OPR_REDEF (redefine symbol to curr location)\n"
msgstr ""
#: vms-alpha.c:6775
-#, c-format
+#, fuzzy, c-format
msgid "OPR_REDEF (define a literal)\n"
-msgstr ""
+msgstr "Bidang perlu menjadi perkataan literal."
#: vms-alpha.c:6779
#, c-format
@@ -7618,9 +7771,9 @@ msgid "STC_LP_PSB (store cond linkage pair + signature)\n"
msgstr ""
#: vms-alpha.c:6787
-#, c-format
+#, fuzzy, c-format
msgid " linkage index: %u, procedure: %.*s\n"
-msgstr ""
+msgstr "%s bukan objek prosedur"
#: vms-alpha.c:6794
#, fuzzy, c-format
@@ -7633,9 +7786,9 @@ msgid "STC_GBL (store cond global)\n"
msgstr ""
#: vms-alpha.c:6803
-#, c-format
+#, fuzzy, c-format
msgid " linkage index: %u, global: %.*s\n"
-msgstr ""
+msgstr "Batalkan perincian sejagat untuk repositori \"%s\":"
#: vms-alpha.c:6808
#, c-format
@@ -7643,9 +7796,9 @@ msgid "STC_GCA (store cond code address)\n"
msgstr ""
#: vms-alpha.c:6811
-#, c-format
+#, fuzzy, c-format
msgid " linkage index: %u, procedure name: %.*s\n"
-msgstr ""
+msgstr "gagal mendapatkan nama untuk platform %u (%s)"
#: vms-alpha.c:6816
#, c-format
@@ -7718,19 +7871,19 @@ msgid "CTL_AUGRB (augment relocation base) %u\n"
msgstr ""
#: vms-alpha.c:6879
-#, c-format
+#, fuzzy, c-format
msgid "CTL_DFLOC (define location)\n"
-msgstr ""
+msgstr "Lokasi:"
#: vms-alpha.c:6882
-#, c-format
+#, fuzzy, c-format
msgid "CTL_STLOC (set location)\n"
-msgstr ""
+msgstr "Arahan log keluar belum ditetapkan"
#: vms-alpha.c:6885
-#, c-format
+#, fuzzy, c-format
msgid "CTL_STKDL (stack defined location)\n"
-msgstr ""
+msgstr "Laluan ke direktori pembayang. Jika tiada laluan ditakrifkan, lokasi lalai akan digunakan."
#: vms-alpha.c:6888 vms-alpha.c:7316 vms-alpha.c:7477
#, fuzzy, c-format
@@ -7738,9 +7891,9 @@ msgid "*unhandled*\n"
msgstr "Ralat tidak boleh kendali"
#: vms-alpha.c:6913
-#, c-format
+#, fuzzy, c-format
msgid "cannot read GST record header\n"
-msgstr ""
+msgstr "Gagal membaca pengepala QTIF"
#. Ill-formed.
#: vms-alpha.c:6936
@@ -7749,19 +7902,19 @@ msgid "cannot find EMH in first GST record\n"
msgstr ""
#: vms-alpha.c:6960
-#, c-format
+#, fuzzy, c-format
msgid "corrupted GST\n"
-msgstr ""
+msgstr "profil-gst"
#: vms-alpha.c:6973
-#, c-format
+#, fuzzy, c-format
msgid "cannot read GST record\n"
-msgstr ""
+msgstr "profil-gst"
#: vms-alpha.c:7000
-#, c-format
+#, fuzzy, c-format
msgid " unhandled EOBJ record type %u\n"
-msgstr ""
+msgstr "Xmpdatum %1 tidak dikendali bagi jenis %2"
#: vms-alpha.c:7025
#, c-format
@@ -7774,14 +7927,14 @@ msgid " bitmap: 0x%08x (count: %u):\n"
msgstr ""
#: vms-alpha.c:7046
-#, fuzzy, c-format
+#, c-format
msgid " %08x"
-msgstr "ralat tidak diketahui (kod ralat %08x)."
+msgstr " %08x"
#: vms-alpha.c:7073
-#, c-format
+#, fuzzy, c-format
msgid " image %u (%u entries)\n"
-msgstr ""
+msgstr "Menyimpan imej “%s” (%u/%u)"
#: vms-alpha.c:7079
#, c-format
@@ -7789,20 +7942,20 @@ msgid " offset: 0x%08x, val: 0x%08x\n"
msgstr ""
#: vms-alpha.c:7102
-#, c-format
+#, fuzzy, c-format
msgid " image %u (%u entries), offsets:\n"
-msgstr ""
+msgstr "Menyimpan imej “%s” (%u/%u)"
#: vms-alpha.c:7109
#, c-format
msgid " 0x%08x"
-msgstr ""
+msgstr " 0x%08x"
#. 64 bits.
#: vms-alpha.c:7235
-#, c-format
+#, fuzzy, c-format
msgid "64 bits *unhandled*\n"
-msgstr ""
+msgstr "64 bit"
#: vms-alpha.c:7240
#, c-format
@@ -7810,9 +7963,9 @@ msgid "class: %u, dtype: %u, length: %u, pointer: 0x%08x\n"
msgstr ""
#: vms-alpha.c:7251
-#, c-format
+#, fuzzy, c-format
msgid "non-contiguous array of %s\n"
-msgstr ""
+msgstr "data berterusan"
#: vms-alpha.c:7258
#, c-format
@@ -7835,24 +7988,24 @@ msgid "Bounds:\n"
msgstr "Batas Kiri"
#: vms-alpha.c:7288
-#, c-format
+#, fuzzy, c-format
msgid "[%u]: Lower: %u, upper: %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:7302
-#, c-format
+#, fuzzy, c-format
msgid "unaligned bit-string of %s\n"
-msgstr ""
+msgstr "Tidak boleh membaca petikan bit: %s\n"
#: vms-alpha.c:7309
-#, c-format
+#, fuzzy, c-format
msgid "base: %u, pos: %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:7335
-#, c-format
+#, fuzzy, c-format
msgid "vflags: 0x%02x, value: 0x%08x "
-msgstr ""
+msgstr "DVDRead tidak dapa membaca blok %d/%d pada 0x%02x."
#: vms-alpha.c:7342
#, fuzzy, c-format
@@ -7875,19 +8028,19 @@ msgid "(descriptor)\n"
msgstr "Penerang salin"
#: vms-alpha.c:7356
-#, c-format
+#, fuzzy, c-format
msgid "(trailing value)\n"
-msgstr ""
+msgstr "Slash dibelakang"
#: vms-alpha.c:7359
-#, c-format
+#, fuzzy, c-format
msgid "(value spec follows)\n"
-msgstr ""
+msgstr "spec RPM"
#: vms-alpha.c:7362
-#, c-format
+#, fuzzy, c-format
msgid "(at bit offset %u)\n"
-msgstr ""
+msgstr "%u bit"
#: vms-alpha.c:7366
#, c-format
@@ -7914,14 +8067,14 @@ msgid "reg"
msgstr "Reg "
#: vms-alpha.c:7403
-#, c-format
+#, fuzzy, c-format
msgid "len: %2u, kind: %2u "
-msgstr ""
+msgstr "Len Tower"
#: vms-alpha.c:7411
-#, c-format
+#, fuzzy, c-format
msgid "atomic, type=0x%02x %s\n"
-msgstr ""
+msgstr "DVDRead tidak dapa membaca blok %d/%d pada 0x%02x."
#: vms-alpha.c:7416
#, c-format
@@ -7929,44 +8082,44 @@ msgid "indirect, defined at 0x%08x\n"
msgstr ""
#: vms-alpha.c:7420
-#, c-format
+#, fuzzy, c-format
msgid "typed pointer\n"
-msgstr ""
+msgstr "hukum kosong untuk bukan terminal ditaip, dan tiada tindakan"
#: vms-alpha.c:7424
-#, fuzzy, c-format
+#, c-format
msgid "pointer\n"
-msgstr "Penuding: %p"
+msgstr "penunjuk\n"
#: vms-alpha.c:7435
-#, c-format
+#, fuzzy, c-format
msgid "array, dim: %u, bitmap: "
-msgstr ""
+msgstr "Tatasusunan"
#: vms-alpha.c:7450
-#, c-format
+#, fuzzy, c-format
msgid "array descriptor:\n"
-msgstr ""
+msgstr "Penerang salin"
#: vms-alpha.c:7461
-#, c-format
+#, fuzzy, c-format
msgid "type spec for element:\n"
-msgstr ""
+msgstr "Jenis tidak dikenali \"%s\" pada unsur <%s>"
#: vms-alpha.c:7463
-#, c-format
+#, fuzzy, c-format
msgid "type spec for subscript %u:\n"
-msgstr ""
+msgstr "spec RPM"
#: vms-alpha.c:7488
-#, c-format
+#, fuzzy, c-format
msgid "Debug symbol table:\n"
-msgstr ""
+msgstr "nyahpepijat"
#: vms-alpha.c:7499
-#, c-format
+#, fuzzy, c-format
msgid "cannot read DST header\n"
-msgstr ""
+msgstr "Gagal membaca pengepala QTIF"
#: vms-alpha.c:7505
#, c-format
@@ -7974,19 +8127,19 @@ msgid " type: %3u, len: %3u (at 0x%08x): "
msgstr ""
#: vms-alpha.c:7524
-#, c-format
+#, fuzzy, c-format
msgid "cannot read DST symbol\n"
-msgstr ""
+msgstr "Tak dalat membaca CD: %s"
#: vms-alpha.c:7568
-#, c-format
+#, fuzzy, c-format
msgid "standard data: %s\n"
-msgstr ""
+msgstr "Hantar data sebagai &input standard"
#: vms-alpha.c:7572 vms-alpha.c:7696
-#, fuzzy, c-format
+#, c-format
msgid " name: %.*s\n"
-msgstr "Nama: %s, EntitiID: %s"
+msgstr " nama: %.*s\n"
#: vms-alpha.c:7580
#, c-format
@@ -7999,14 +8152,14 @@ msgid " flags: %d, language: %u, major: %u, minor: %u\n"
msgstr ""
#: vms-alpha.c:7594 vms-alpha.c:7963
-#, c-format
+#, fuzzy, c-format
msgid " module name: %.*s\n"
-msgstr ""
+msgstr "Nama Modul Teratas"
#: vms-alpha.c:7601
-#, fuzzy, c-format
+#, c-format
msgid " compiler : %.*s\n"
-msgstr "Pengkompil: %s\n"
+msgstr " pembina : %.*s\n"
#: vms-alpha.c:7608
#, c-format
@@ -8023,14 +8176,14 @@ msgid " flags: %u, address: 0x%08x, pd-address: 0x%08x\n"
msgstr ""
#: vms-alpha.c:7628
-#, c-format
+#, fuzzy, c-format
msgid " routine name: %.*s\n"
-msgstr ""
+msgstr "Nama: %s, EntitiID: %s"
#: vms-alpha.c:7639
-#, c-format
+#, fuzzy, c-format
msgid "rtnend: size 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:7649
#, c-format
@@ -8038,39 +8191,39 @@ msgid "prolog: bkpt address 0x%08x\n"
msgstr ""
#: vms-alpha.c:7659
-#, c-format
+#, fuzzy, c-format
msgid "epilog: flags: %u, count: %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:7674
-#, c-format
+#, fuzzy, c-format
msgid "blkbeg: address: 0x%08x, name: %.*s\n"
-msgstr ""
+msgstr "%s: nama hos adalah sah tetatpi tidak mempunyai alamat IP."
#: vms-alpha.c:7686
-#, c-format
+#, fuzzy, c-format
msgid "blkend: size: 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:7692
-#, c-format
+#, fuzzy, c-format
msgid "typspec (len: %u)\n"
-msgstr ""
+msgstr "LEN(\"hello\") mengembalikan 5"
#: vms-alpha.c:7708
-#, c-format
+#, fuzzy, c-format
msgid "septyp, name: %.*s\n"
-msgstr ""
+msgstr "Nama: %s, EntitiID: %s"
#: vms-alpha.c:7725
-#, c-format
+#, fuzzy, c-format
msgid "recbeg: name: %.*s\n"
-msgstr ""
+msgstr "Nama: %s, EntitiID: %s"
#: vms-alpha.c:7731
-#, c-format
+#, fuzzy, c-format
msgid " len: %u bits\n"
-msgstr ""
+msgstr "%u bit"
#: vms-alpha.c:7737
#, c-format
@@ -8078,14 +8231,14 @@ msgid "recend\n"
msgstr ""
#: vms-alpha.c:7742
-#, c-format
+#, fuzzy, c-format
msgid "enumbeg, len: %u, name: %.*s\n"
-msgstr ""
+msgstr "gagal mendapatkan nama untuk platform %u (%s)"
#: vms-alpha.c:7748
-#, c-format
+#, fuzzy, c-format
msgid "enumelt, name: %.*s\n"
-msgstr ""
+msgstr "Nama: %s, EntitiID: %s"
#: vms-alpha.c:7754
#, c-format
@@ -8093,69 +8246,69 @@ msgid "enumend\n"
msgstr ""
#: vms-alpha.c:7761
-#, c-format
+#, fuzzy, c-format
msgid "label, name: %.*s\n"
-msgstr ""
+msgstr "%s kehilangan nama atau label"
#: vms-alpha.c:7764
-#, c-format
+#, fuzzy, c-format
msgid " address: 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:7776
-#, c-format
+#, fuzzy, c-format
msgid "discontiguous range (nbr: %u)\n"
-msgstr ""
+msgstr "Blok buruk %u diluar julat; diabaikan.\n"
#: vms-alpha.c:7783
-#, c-format
+#, fuzzy, c-format
msgid " address: 0x%08x, size: %u\n"
-msgstr ""
+msgstr "%s: saiz alamat mempunyai nilai %u tidak dijangka\n"
#: vms-alpha.c:7794
-#, c-format
+#, fuzzy, c-format
msgid "line num (len: %u)\n"
-msgstr ""
+msgstr "%u aksara setiap baris"
#: vms-alpha.c:7813
-#, c-format
+#, fuzzy, c-format
msgid "delta_pc_w %u\n"
-msgstr ""
+msgstr "PC"
#: vms-alpha.c:7822
-#, c-format
+#, fuzzy, c-format
msgid "incr_linum(b): +%u\n"
-msgstr ""
+msgstr "%U"
#: vms-alpha.c:7830
-#, c-format
+#, fuzzy, c-format
msgid "incr_linum_w: +%u\n"
-msgstr ""
+msgstr "%U"
#: vms-alpha.c:7838
-#, c-format
+#, fuzzy, c-format
msgid "incr_linum_l: +%u\n"
-msgstr ""
+msgstr "Had Laju Muat Naik"
#: vms-alpha.c:7846
-#, c-format
+#, fuzzy, c-format
msgid "set_line_num(w) %u\n"
-msgstr ""
+msgstr "%u aksara setiap baris"
#: vms-alpha.c:7853
-#, c-format
+#, fuzzy, c-format
msgid "set_line_num_b %u\n"
-msgstr ""
+msgstr "%u aksara setiap baris"
#: vms-alpha.c:7860
-#, c-format
+#, fuzzy, c-format
msgid "set_line_num_l %u\n"
-msgstr ""
+msgstr "Kedua-dua L dan U dinyatakan.\n"
#: vms-alpha.c:7867
-#, c-format
+#, fuzzy, c-format
msgid "set_abs_pc: 0x%08x\n"
-msgstr ""
+msgstr "PC set 1"
#: vms-alpha.c:7873
#, c-format
@@ -8170,22 +8323,22 @@ msgstr ""
#: vms-alpha.c:7882
#, c-format
msgid " pc: 0x%08x\n"
-msgstr ""
+msgstr " pc: 0x%08x\n"
#: vms-alpha.c:7889
-#, c-format
+#, fuzzy, c-format
msgid "term_w: 0x%04x"
-msgstr ""
+msgstr "(0x%04x, '%s'): "
#: vms-alpha.c:7891
#, c-format
msgid " pc: 0x%08x\n"
-msgstr ""
+msgstr " pc: 0x%08x\n"
#: vms-alpha.c:7897
-#, c-format
+#, fuzzy, c-format
msgid "delta pc +%-4d"
-msgstr ""
+msgstr "PC"
#: vms-alpha.c:7901
#, c-format
@@ -8193,14 +8346,14 @@ msgid " pc: 0x%08x line: %5u\n"
msgstr ""
#: vms-alpha.c:7906
-#, c-format
+#, fuzzy, c-format
msgid " *unhandled* cmd %u\n"
-msgstr ""
+msgstr "Ralat tidak boleh kendali"
#: vms-alpha.c:7921
-#, c-format
+#, fuzzy, c-format
msgid "source (len: %u)\n"
-msgstr ""
+msgstr "LEN(\"hello\") mengembalikan 5"
#: vms-alpha.c:7940
#, c-format
@@ -8213,29 +8366,29 @@ msgid " rms: cdt: 0x%08x %08x, ebk: 0x%08x, ffb: 0x%04x, rfo: %u\n"
msgstr ""
#: vms-alpha.c:7957
-#, fuzzy, c-format
+#, c-format
msgid " filename : %.*s\n"
-msgstr "Nama fail \"%s\" tidak sah"
+msgstr " nama fail : %.*s\n"
#: vms-alpha.c:7973
-#, c-format
+#, fuzzy, c-format
msgid " setfile %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:7980 vms-alpha.c:7987
-#, c-format
+#, fuzzy, c-format
msgid " setrec %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:7994 vms-alpha.c:8001
-#, c-format
+#, fuzzy, c-format
msgid " setlnum %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:8008 vms-alpha.c:8015
-#, c-format
+#, fuzzy, c-format
msgid " deflines %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:8019
#, c-format
@@ -8243,43 +8396,42 @@ msgid " formfeed\n"
msgstr ""
#: vms-alpha.c:8023
-#, c-format
+#, fuzzy, c-format
msgid " *unhandled* cmd %u\n"
-msgstr ""
+msgstr "Ralat tidak boleh kendali"
#: vms-alpha.c:8035
-#, c-format
+#, fuzzy, c-format
msgid "*unhandled* dst type %u\n"
-msgstr ""
+msgstr "Xmpdatum %1 tidak dikendali bagi jenis %2"
#: vms-alpha.c:8067
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EIHD\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8071
-#, c-format
+#, fuzzy, c-format
msgid "EIHD: (size: %u, nbr blocks: %u)\n"
-msgstr ""
+msgstr "Blok buruk: %u"
#: vms-alpha.c:8075
-#, c-format
+#, fuzzy, c-format
msgid " majorid: %u, minorid: %u\n"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:8083
-#, fuzzy
msgid "executable"
-msgstr "Boleh Laku"
+msgstr "boleh laksana"
#: vms-alpha.c:8086
msgid "linkable image"
msgstr ""
#: vms-alpha.c:8093
-#, c-format
+#, fuzzy, c-format
msgid " image type: %u (%s)"
-msgstr ""
+msgstr "Menyimpan imej “%s” (%u/%u)"
#: vms-alpha.c:8099
msgid "native"
@@ -8290,9 +8442,9 @@ msgid "CLI"
msgstr "CLI"
#: vms-alpha.c:8109
-#, c-format
+#, fuzzy, c-format
msgid ", subtype: %u (%s)\n"
-msgstr ""
+msgstr "Gagal untuk menambah sub jenis '%s': %s\n"
#: vms-alpha.c:8116
#, c-format
@@ -8300,21 +8452,21 @@ msgid " offsets: isd: %u, activ: %u, symdbg: %u, imgid: %u, patch: %u\n"
msgstr ""
#: vms-alpha.c:8120
-#, c-format
+#, fuzzy, c-format
msgid " fixup info rva: "
-msgstr ""
+msgstr "Jenis Saiz Rva Offset\n"
#: vms-alpha.c:8122
-#, c-format
+#, fuzzy, c-format
msgid ", symbol vector rva: "
-msgstr ""
+msgstr "Grafik Vektor"
#: vms-alpha.c:8125
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
" version array off: %u\n"
-msgstr ""
+msgstr "Menggunakan VTE versi %u.%u.%u"
#: vms-alpha.c:8130
#, c-format
@@ -8322,9 +8474,9 @@ msgid " img I/O count: %u, nbr channels: %u, req pri: %08x%08x\n"
msgstr ""
#: vms-alpha.c:8136
-#, c-format
+#, fuzzy, c-format
msgid " linker flags: %08x:"
-msgstr ""
+msgstr "Pemaut"
#: vms-alpha.c:8167
#, c-format
@@ -8332,9 +8484,9 @@ msgid " ident: 0x%08x, sysver: 0x%08x, match ctrl: %u, symvect_size: %u\n"
msgstr ""
#: vms-alpha.c:8173
-#, c-format
+#, fuzzy, c-format
msgid " BPAGE: %u"
-msgstr ""
+msgstr "%u × %u"
#: vms-alpha.c:8180
#, c-format
@@ -8342,24 +8494,24 @@ msgid ", ext fixup offset: %u, no_opt psect off: %u"
msgstr ""
#: vms-alpha.c:8183
-#, c-format
+#, fuzzy, c-format
msgid ", alias: %u\n"
-msgstr ""
+msgstr "Alias"
#: vms-alpha.c:8191
-#, c-format
+#, fuzzy, c-format
msgid "system version array information:\n"
-msgstr ""
+msgstr "sistem, maklumat, terperinci, grafik, bunyi, kernel, versi"
#: vms-alpha.c:8195
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EIHVN header\n"
-msgstr ""
+msgstr "Gagal membaca pengepala QTIF"
#: vms-alpha.c:8205
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EIHVN version\n"
-msgstr ""
+msgstr "Versi Baca Jenis Doc"
#: vms-alpha.c:8208
#, c-format
@@ -8379,32 +8531,37 @@ msgid "IO "
msgstr "IO "
#: vms-alpha.c:8221
+#, fuzzy
msgid "FILES_VOLUMES "
-msgstr ""
+msgstr "_Volum"
#: vms-alpha.c:8224
+#, fuzzy
msgid "PROCESS_SCHED "
-msgstr ""
+msgstr "(dalam proses)"
#: vms-alpha.c:8227
msgid "SYSGEN "
msgstr ""
#: vms-alpha.c:8230
+#, fuzzy
msgid "CLUSTERS_LOCKMGR "
-msgstr ""
+msgstr "kelompok"
#: vms-alpha.c:8233
+#, fuzzy
msgid "LOGICAL_NAMES "
-msgstr ""
+msgstr "logikal not"
#: vms-alpha.c:8236
msgid "SECURITY "
msgstr "KESELAMATAN "
#: vms-alpha.c:8239
+#, fuzzy
msgid "IMAGE_ACTIVATOR "
-msgstr ""
+msgstr "Bukan imej"
#: vms-alpha.c:8242
msgid "NETWORKS "
@@ -8439,8 +8596,9 @@ msgid "POSIX "
msgstr "POSIX "
#: vms-alpha.c:8266
+#, fuzzy
msgid "MULTI_PROCESSING "
-msgstr ""
+msgstr "pelbagai"
#: vms-alpha.c:8269
msgid "GALAXY "
@@ -8451,14 +8609,14 @@ msgid "*unknown* "
msgstr "*tidak diketahui* "
#: vms-alpha.c:8288 vms-alpha.c:8575
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EIHA\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8291
-#, c-format
+#, fuzzy, c-format
msgid "Image activation: (size=%u)\n"
-msgstr ""
+msgstr "Saiz blok=%u (log=%u)\n"
#: vms-alpha.c:8294
#, c-format
@@ -8486,44 +8644,44 @@ msgid " Shared image : 0x%08x 0x%08x\n"
msgstr ""
#: vms-alpha.c:8321
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EIHI\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8325
-#, c-format
+#, fuzzy, c-format
msgid "Image identification: (major: %u, minor: %u)\n"
-msgstr ""
+msgstr "Menyimpan imej “%s” (%u/%u)"
#: vms-alpha.c:8331
-#, c-format
+#, fuzzy, c-format
msgid " image name : %.*s\n"
-msgstr ""
+msgstr "Nama peta imej"
#: vms-alpha.c:8332
-#, c-format
+#, fuzzy, c-format
msgid " link time : %s\n"
-msgstr ""
+msgstr "Pautan %s terpilih %s"
#: vms-alpha.c:8337
-#, c-format
+#, fuzzy, c-format
msgid " image ident : %.*s\n"
-msgstr ""
+msgstr "IDENT: disambungkan kepada %s:%u"
#: vms-alpha.c:8341
-#, c-format
+#, fuzzy, c-format
msgid " linker ident : %.*s\n"
-msgstr ""
+msgstr "IDENT: disambungkan kepada %s:%u"
#: vms-alpha.c:8345
-#, c-format
+#, fuzzy, c-format
msgid " image build ident: %.*s\n"
-msgstr ""
+msgstr "IDENT: disambungkan kepada %s:%u"
#: vms-alpha.c:8354
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EIHS\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8358
#, c-format
@@ -8546,9 +8704,9 @@ msgid " debug module table : vbn: %u, size: %u\n"
msgstr ""
#: vms-alpha.c:8387
-#, c-format
+#, fuzzy, c-format
msgid "cannot read EISD\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8398
#, c-format
@@ -8561,14 +8719,14 @@ msgid " section: base: 0x%08x%08x size: 0x%08x\n"
msgstr ""
#: vms-alpha.c:8411
-#, c-format
+#, fuzzy, c-format
msgid " flags: 0x%04x"
-msgstr ""
+msgstr "(0x%04x, '%s'): "
#: vms-alpha.c:8449
-#, c-format
+#, fuzzy, c-format
msgid " vbn: %u, pfc: %u, matchctl: %u type: %u ("
-msgstr ""
+msgstr "Satu integer biasa tidak bertanda tangan, jenis 'u'"
#: vms-alpha.c:8455
msgid "NORMAL"
@@ -8599,24 +8757,24 @@ msgid ")\n"
msgstr ""
#: vms-alpha.c:8483
-#, c-format
+#, fuzzy, c-format
msgid " ident: 0x%08x, name: %.*s\n"
-msgstr ""
+msgstr "IDENT: recvline() gagal: %s."
#: vms-alpha.c:8494
-#, c-format
+#, fuzzy, c-format
msgid "cannot read DMT\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8498
-#, c-format
+#, fuzzy, c-format
msgid "Debug module table:\n"
-msgstr ""
+msgstr "Ruang jadual"
#: vms-alpha.c:8507
-#, c-format
+#, fuzzy, c-format
msgid "cannot read DMT header\n"
-msgstr ""
+msgstr "Gagal membaca pengepala QTIF"
#: vms-alpha.c:8513
#, c-format
@@ -8624,9 +8782,9 @@ msgid " module offset: 0x%08x, size: 0x%08x, (%u psects)\n"
msgstr ""
#: vms-alpha.c:8523
-#, c-format
+#, fuzzy, c-format
msgid "cannot read DMT psect\n"
-msgstr ""
+msgstr "Tak dalat membaca CD: %s"
#: vms-alpha.c:8527
#, c-format
@@ -8634,19 +8792,19 @@ msgid " psect start: 0x%08x, length: %u\n"
msgstr ""
#: vms-alpha.c:8540
-#, c-format
+#, fuzzy, c-format
msgid "cannot read DST\n"
-msgstr ""
+msgstr "Tidak Dapat Baca"
#: vms-alpha.c:8550
-#, c-format
+#, fuzzy, c-format
msgid "cannot read GST\n"
-msgstr ""
+msgstr "profil-gst"
#: vms-alpha.c:8554
-#, c-format
+#, fuzzy, c-format
msgid "Global symbol table:\n"
-msgstr ""
+msgstr "Simbol"
#: vms-alpha.c:8581
#, c-format
@@ -8654,14 +8812,14 @@ msgid "Image activator fixup: (major: %u, minor: %u)\n"
msgstr ""
#: vms-alpha.c:8585
-#, c-format
+#, fuzzy, c-format
msgid " iaflink : 0x%08x %08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:8589
-#, c-format
+#, fuzzy, c-format
msgid " fixuplnk: 0x%08x %08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:8592
#, c-format
@@ -8669,9 +8827,9 @@ msgid " size : %u\n"
msgstr " saiz : %u\n"
#: vms-alpha.c:8594
-#, c-format
+#, fuzzy, c-format
msgid " flags: 0x%08x\n"
-msgstr ""
+msgstr "Ralat DDE %08x tidak diketahui"
#: vms-alpha.c:8599
#, c-format
@@ -8704,9 +8862,9 @@ msgid " shlextra : %5u, permctx : %5u\n"
msgstr ""
#: vms-alpha.c:8622
-#, c-format
+#, fuzzy, c-format
msgid " base_va : 0x%08x\n"
-msgstr ""
+msgstr "Penyahkod video VA-API"
#: vms-alpha.c:8624
#, c-format
@@ -8714,9 +8872,9 @@ msgid " lppsbfixoff: %5u\n"
msgstr ""
#: vms-alpha.c:8631
-#, c-format
+#, fuzzy, c-format
msgid " Shareable images:\n"
-msgstr ""
+msgstr "Senarai Main Boleh Kongsi (%s)"
#: vms-alpha.c:8642
#, c-format
@@ -8724,14 +8882,14 @@ msgid " %u: size: %u, flags: 0x%02x, name: %.*s\n"
msgstr ""
#: vms-alpha.c:8649
-#, c-format
+#, fuzzy, c-format
msgid " quad-word relocation fixups:\n"
-msgstr ""
+msgstr "Anak Panah Quad"
#: vms-alpha.c:8655
-#, c-format
+#, fuzzy, c-format
msgid " long-word relocation fixups:\n"
-msgstr ""
+msgstr "perkataan"
#: vms-alpha.c:8661
#, c-format
@@ -8739,24 +8897,24 @@ msgid " quad-word .address reference fixups:\n"
msgstr ""
#: vms-alpha.c:8666
-#, c-format
+#, fuzzy, c-format
msgid " long-word .address reference fixups:\n"
-msgstr ""
+msgstr "Panjang %u terlalu panjang untuk alamat"
#: vms-alpha.c:8671
-#, c-format
+#, fuzzy, c-format
msgid " Code Address Reference Fixups:\n"
-msgstr ""
+msgstr "Rujukan(en)"
#: vms-alpha.c:8676
-#, c-format
+#, fuzzy, c-format
msgid " Linkage Pairs Reference Fixups:\n"
-msgstr ""
+msgstr "Pasangan AT"
#: vms-alpha.c:8684
-#, c-format
+#, fuzzy, c-format
msgid " Change Protection (%u entries):\n"
-msgstr ""
+msgstr "Sebuah penyimpan buku catatan yang berguna, menyimpan %u masukan."
#: vms-alpha.c:8693
#, c-format
@@ -8766,8 +8924,9 @@ msgstr ""
#. FIXME: we do not yet support relocatable link. It is not obvious
#. how to do it for debug infos.
#: vms-alpha.c:9570
+#, fuzzy
msgid "%P: relocatable link is not supported\n"
-msgstr ""
+msgstr "Skema boleh letak semula"
#: vms-alpha.c:9641
#, c-format
@@ -8775,9 +8934,9 @@ msgid "%P: multiple entry points: in modules %pB and %pB\n"
msgstr ""
#: vms-lib.c:1530
-#, c-format
+#, fuzzy, c-format
msgid "could not open shared image '%s' from '%s'"
-msgstr ""
+msgstr "Tidak dapat membuka penukar dari \"%s\" ke \"%s\""
#: vms-misc.c:374
msgid "_bfd_vms_output_counted called with zero bytes"
@@ -8798,9 +8957,9 @@ msgid "%pB: XCOFF shared object when not producing XCOFF output"
msgstr ""
#: xcofflink.c:902
-#, c-format
+#, fuzzy, c-format
msgid "%pB: dynamic object with no .loader section"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: xcofflink.c:1484
#, c-format
@@ -8833,19 +8992,19 @@ msgid "%pB: TOC entry `%s' has a R_TLSMLrelocation not targeting itself"
msgstr ""
#: xcofflink.c:1776
-#, c-format
+#, fuzzy, c-format
msgid "%pB: csect `%s' not in enclosing section"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: xcofflink.c:1885
-#, c-format
+#, fuzzy, c-format
msgid "%pB: misplaced XTY_LD `%s'"
-msgstr ""
+msgstr "%s Pb"
#: xcofflink.c:2228
-#, c-format
+#, fuzzy, c-format
msgid "%pB: reloc %s:%<PRId64> not in csect"
-msgstr ""
+msgstr "%s Pb"
#: xcofflink.c:3337
#, c-format
@@ -8858,13 +9017,14 @@ msgid "%s: no such symbol"
msgstr "%s: tiada simbol sedemikian"
#: xcofflink.c:3494
-#, c-format
+#, fuzzy, c-format
msgid "warning: attempt to export undefined symbol `%s'"
-msgstr ""
+msgstr "amaran: pembolehubah tidak dinyatakan `%.*s'"
#: xcofflink.c:3842
+#, fuzzy
msgid "error: undefined symbol __rtinit"
-msgstr ""
+msgstr "simbol permulaan %s tidak ditakrifkan"
#: xcofflink.c:4855
#, c-format
@@ -8872,9 +9032,9 @@ msgid "%pB: Unable to find a stub csect in rangeof relocation at %#<PRIx64> targ
msgstr ""
#: xcofflink.c:4884
-#, c-format
+#, fuzzy, c-format
msgid "%pB: Cannot create stub entry '%s'"
-msgstr ""
+msgstr "%s: Tak dapat mencipta symlink ke %s"
#: xcofflink.c:5004
msgid "TOC overflow during stub generation; try -mminimal-toc when compiling"
@@ -8886,9 +9046,9 @@ msgid "%pB: loader reloc in unrecognized section `%s'"
msgstr ""
#: xcofflink.c:5084
-#, c-format
+#, fuzzy, c-format
msgid "%pB: `%s' in loader reloc but not loader sym"
-msgstr ""
+msgstr "Ralat dalaman pada pemuat GIF (%s)"
#: xcofflink.c:5101
#, c-format
@@ -8901,34 +9061,35 @@ msgid "TOC overflow: %#<PRIx64> > 0x10000; try -mminimal-toc when compiling"
msgstr ""
#: xcofflink.c:7296
-#, c-format
+#, fuzzy, c-format
msgid "Unable to link input file: %s"
-msgstr ""
+msgstr "menutup fail input %s"
#: xtensa-dynconfig.c:60
+#, fuzzy
msgid "Unable to load DLL."
-msgstr ""
+msgstr "Tidak boleh muatkan lokasi"
#: xtensa-dynconfig.c:86
-#, c-format
+#, fuzzy, c-format
msgid "%s is defined but could not be loaded: %s"
-msgstr ""
+msgstr "Profil tidak dapat dimuatkan: %s"
#: xtensa-dynconfig.c:102
-#, c-format
+#, fuzzy, c-format
msgid "%s is loaded but symbol \"%s\" is not found: %s"
-msgstr ""
+msgstr "simbol tidak dijumpai di dalam pengeluaran: %.*s"
#: xtensa-dynconfig.c:115
-#, c-format
+#, fuzzy, c-format
msgid "%s is defined but plugin support is disabled"
-msgstr ""
+msgstr "Gagal memulakan perkhidmatan Penjejak: %s. Pemalam dilumpuhkan."
#. Not fatal, this callback cannot fail.
#: elfnn-aarch64.c:2878 elfnn-riscv.c:5739
-#, c-format
+#, fuzzy, c-format
msgid "unknown attribute for symbol `%s': 0x%02x"
-msgstr ""
+msgstr "Vendor GPU anda tidak diketahui: %s (0x%X)"
#: elfnn-aarch64.c:5468
#, c-format
@@ -8993,61 +9154,61 @@ msgid "%pB(%pA+%#<PRIx64>): unresolvable %s relocation in section `%s'"
msgstr ""
#: elfnn-kvx.c:2850
-#, c-format
+#, fuzzy, c-format
msgid "%s: Bad ELF id: `%d'"
-msgstr ""
+msgstr "%s: ofset teruk pada halaman %d\n"
#: elfnn-kvx.c:2905
-#, c-format
+#, fuzzy, c-format
msgid "%s: compiled as 32-bit object and %s is 64-bit"
-msgstr ""
+msgstr "Dikompil oleh %s pada %s (%s)\n"
#: elfnn-kvx.c:2908
-#, c-format
+#, fuzzy, c-format
msgid "%s: compiled as 64-bit object and %s is 32-bit"
-msgstr ""
+msgstr "Dikompil oleh %s pada %s (%s)\n"
#: elfnn-kvx.c:2910
-#, c-format
+#, fuzzy, c-format
msgid "%s: object size does not match that of target %s"
-msgstr ""
+msgstr "Direktori sasaran \"%s\" tidak wujud"
#. Ignore init flag - it may not be set, despite the flags field
#. containing valid data.
#: elfnn-kvx.c:2998
-#, c-format
+#, fuzzy, c-format
msgid "Private flags = 0x%lx : "
-msgstr ""
+msgstr "[find_call] %s: 0x%lx ke 0x%lx\n"
#: elfnn-kvx.c:3002
-#, c-format
+#, fuzzy, c-format
msgid "Coolidge (kv3) V1 64 bits"
-msgstr ""
+msgstr "64 bit"
#: elfnn-kvx.c:3004
-#, c-format
+#, fuzzy, c-format
msgid "Coolidge (kv3) V2 64 bits"
-msgstr ""
+msgstr "64 bit"
#: elfnn-kvx.c:3006
-#, c-format
+#, fuzzy, c-format
msgid "Coolidge (kv4) V1 64 bits"
-msgstr ""
+msgstr "64 bit"
#: elfnn-kvx.c:3011
-#, c-format
+#, fuzzy, c-format
msgid "Coolidge (kv3) V1 32 bits"
-msgstr ""
+msgstr "Himpun data dengan 32 bit"
#: elfnn-kvx.c:3013
-#, c-format
+#, fuzzy, c-format
msgid "Coolidge (kv3) V2 32 bits"
-msgstr ""
+msgstr "Himpun data dengan 32 bit"
#: elfnn-kvx.c:3015
-#, c-format
+#, fuzzy, c-format
msgid "Coolidge (kv4) V1 32 bits"
-msgstr ""
+msgstr "Himpun data dengan 32 bit"
#: elfnn-kvx.c:3847
#, c-format
@@ -9072,8 +9233,9 @@ msgid "%pB: can't link different ABI object."
msgstr ""
#: elfnn-loongarch.c:726
+#, fuzzy
msgid "Internal error: unreachable."
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elfnn-loongarch.c:906
#, c-format
@@ -9081,8 +9243,9 @@ msgid "%pB:(%pA+%#lx): relocation %s against `%s` can not be used when making %s
msgstr ""
#: elfnn-loongarch.c:910
+#, fuzzy
msgid " and check the symbol visibility"
-msgstr ""
+msgstr "Simbol"
#: elfnn-loongarch.c:1036
#, c-format
@@ -9149,9 +9312,9 @@ msgid "%%pcrel_lo overflow with an addend, the value of %%pcrel_hi is 0x%<PRIx64
msgstr ""
#: elfnn-riscv.c:2156
-#, c-format
+#, fuzzy, c-format
msgid "%pcrel_lo overflow with an addend"
-msgstr ""
+msgstr "Rekod melimpah"
#: elfnn-riscv.c:2639
#, c-format
@@ -9187,9 +9350,9 @@ msgid "%pcrel_lo section symbol with an addend"
msgstr ""
#: elfnn-riscv.c:2923
-#, c-format
+#, fuzzy, c-format
msgid "%tlsdesc_lo with addend"
-msgstr ""
+msgstr "Tambah _Lokasi...:"
#: elfnn-riscv.c:3156
#, c-format
@@ -9197,20 +9360,24 @@ msgid "%%X%%P: unresolvable %s relocation against symbol `%s'\n"
msgstr ""
#: elfnn-riscv.c:3191
+#, fuzzy
msgid "%X%P: internal error: out of range error\n"
-msgstr ""
+msgstr "ralat dalaman X: %s\n"
#: elfnn-riscv.c:3196
+#, fuzzy
msgid "%X%P: internal error: unsupported relocation error\n"
-msgstr ""
+msgstr "ralat dalaman X: %s\n"
#: elfnn-riscv.c:3202
+#, fuzzy
msgid "dangerous relocation error"
-msgstr ""
+msgstr "Fail berpontensi bahaya"
#: elfnn-riscv.c:3208
+#, fuzzy
msgid "%X%P: internal error: unknown error\n"
-msgstr ""
+msgstr "Ralat dalaman: Ralat tidak diketahui"
#: elfnn-riscv.c:3785
#, c-format
@@ -9247,9 +9414,9 @@ msgid "error: %pB use %u-byte stack aligned but the output use %u-byte stack ali
msgstr ""
#: elfnn-riscv.c:4238
-#, c-format
+#, fuzzy, c-format
msgid "%pB: can't link %s modules with %s modules"
-msgstr ""
+msgstr "Tidak dapat awalkan modul berdaftar PKCS#11: %s"
#: elfnn-riscv.c:4248
#, c-format
@@ -9267,9 +9434,9 @@ msgid "%pB: relocation %s against non-absolute symbol `%s' can not be used in RV
msgstr ""
#: peXXigen.c:161
-#, c-format
+#, fuzzy, c-format
msgid "%pB: unable to find name for empty section"
-msgstr ""
+msgstr "Pemasangan: Tidak jumpa nama folder yang sesuai untuk $1"
#: peXXigen.c:188
#, c-format
@@ -9287,9 +9454,9 @@ msgid "%pB:%.8s: section below image base"
msgstr ""
#: peXXigen.c:929
-#, c-format
+#, fuzzy, c-format
msgid "%pB:%.8s: RVA truncated"
-msgstr ""
+msgstr "DIPANGKAS"
#: peXXigen.c:1061
#, c-format
@@ -9301,60 +9468,76 @@ msgid "Export Directory [.edata (or where ever we found it)]"
msgstr ""
#: peXXigen.c:1228
+#, fuzzy
msgid "Import Directory [parts of .idata]"
-msgstr ""
+msgstr "bahagian"
#: peXXigen.c:1229
+#, fuzzy
msgid "Resource Directory [.rsrc]"
-msgstr ""
+msgstr "Sumber pada \"%s\" bukan satu direktori"
#: peXXigen.c:1230
+#, fuzzy
msgid "Exception Directory [.pdata]"
-msgstr ""
+msgstr "Maklumat pengecualian:"
#: peXXigen.c:1231
+#, fuzzy
msgid "Security Directory"
-msgstr ""
+msgstr "KESELAMATAN "
#: peXXigen.c:1232
+#, fuzzy
msgid "Base Relocation Directory [.reloc]"
-msgstr ""
+msgstr "_Pangkalan Direktori:"
#: peXXigen.c:1233
+#, fuzzy
msgid "Debug Directory"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: peXXigen.c:1234
+#, fuzzy
msgid "Description Directory"
-msgstr ""
+msgstr "Keterangan"
#: peXXigen.c:1235
+#, fuzzy
msgid "Special Directory"
-msgstr ""
+msgstr "SPECIAL"
#: peXXigen.c:1236
+#, fuzzy
msgid "Thread Storage Directory [.tls]"
-msgstr ""
+msgstr "Gagal memulakan benang: ralat menulis TLS."
#: peXXigen.c:1237
+#, fuzzy
msgid "Load Configuration Directory"
-msgstr ""
+msgstr "Muatkan item tambahan konfigurasi"
#: peXXigen.c:1238
+#, fuzzy
msgid "Bound Import Directory"
-msgstr ""
+msgstr "Import direktori"
#: peXXigen.c:1239
+#, fuzzy
msgid "Import Address Table Directory"
-msgstr ""
+msgstr "Import direktori"
#: peXXigen.c:1240
+#, fuzzy
msgid "Delay Import Directory"
-msgstr ""
+msgstr "Import direktori"
#: peXXigen.c:1241
+#, fuzzy
msgid "CLR Runtime Header"
-msgstr ""
+msgstr "Masa Jalan"
#: peXXigen.c:1242
msgid "Reserved"
@@ -9368,25 +9551,29 @@ msgid ""
msgstr ""
#: peXXigen.c:1313
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"There is an import table in %s, but that section has no contents\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: peXXigen.c:1320
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"There is an import table in %s at 0x%lx\n"
-msgstr ""
+msgstr "[find_call] %s: 0x%lx ke 0x%lx\n"
#: peXXigen.c:1326
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"The Import Tables (interpreted %s section contents)\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: peXXigen.c:1329
#, c-format
@@ -9396,11 +9583,11 @@ msgid ""
msgstr ""
#: peXXigen.c:1378
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"\tDLL Name: %.*s\n"
-msgstr ""
+msgstr "Nama: %s, EntitiID: %s"
#: peXXigen.c:1394
#, c-format
@@ -9415,9 +9602,9 @@ msgid ""
msgstr ""
#: peXXigen.c:1469 peXXigen.c:1514
-#, c-format
+#, fuzzy, c-format
msgid "\t<corrupt: 0x%08lx>"
-msgstr ""
+msgstr "Eksponen: 0x"
#: peXXigen.c:1608
#, c-format
@@ -9434,41 +9621,43 @@ msgid ""
msgstr ""
#: peXXigen.c:1629
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"There is an export table in %s, but contents cannot be read\n"
-msgstr ""
+msgstr "Tidak dapat menyediakan kandungan sebagai \"%s\""
#: peXXigen.c:1635
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"There is an export table in %s at 0x%lx\n"
-msgstr ""
+msgstr "[find_call] %s: 0x%lx ke 0x%lx\n"
#: peXXigen.c:1666
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"The Export Tables (interpreted %s section contents)\n"
"\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: peXXigen.c:1670
-#, c-format
+#, fuzzy, c-format
msgid "Export Flags \t\t\t%lx\n"
-msgstr ""
+msgstr "Eksport"
#: peXXigen.c:1673
-#, c-format
+#, fuzzy, c-format
msgid "Time/Date stamp \t\t%lx\n"
-msgstr ""
+msgstr "Setem Tarikh GPS"
#: peXXigen.c:1677
-#, c-format
+#, fuzzy, c-format
msgid "Major/Minor \t\t\t%d/%d\n"
-msgstr ""
+msgstr "Penggunaan: %s [OPSYEN]... NAMA JENIS [MAJOR MINOR]\n"
#: peXXigen.c:1680
#, c-format
@@ -9476,9 +9665,9 @@ msgid "Name \t\t\t\t"
msgstr "Nama \t\t\t\t"
#: peXXigen.c:1691
-#, c-format
+#, fuzzy, c-format
msgid "Ordinal Base \t\t\t%ld\n"
-msgstr ""
+msgstr "ordinal"
#: peXXigen.c:1694
#, c-format
@@ -9486,34 +9675,34 @@ msgid "Number in:\n"
msgstr "Nombor dalam:\n"
#: peXXigen.c:1697
-#, c-format
+#, fuzzy, c-format
msgid "\tExport Address Table \t\t%08lx\n"
-msgstr ""
+msgstr "Eksport"
#: peXXigen.c:1701
-#, c-format
+#, fuzzy, c-format
msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n"
-msgstr ""
+msgstr "Nama jadual adalah kosong!"
#: peXXigen.c:1704
-#, c-format
+#, fuzzy, c-format
msgid "Table Addresses\n"
-msgstr ""
+msgstr "Alamat:"
#: peXXigen.c:1707
-#, c-format
+#, fuzzy, c-format
msgid "\tExport Address Table \t\t"
-msgstr ""
+msgstr "Eksport"
#: peXXigen.c:1712
-#, c-format
+#, fuzzy, c-format
msgid "\tName Pointer Table \t\t"
-msgstr ""
+msgstr "Nama jadual adalah kosong!"
#: peXXigen.c:1717
-#, c-format
+#, fuzzy, c-format
msgid "\tOrdinal Table \t\t\t"
-msgstr ""
+msgstr "ordinal"
#: peXXigen.c:1731
#, c-format
@@ -9528,12 +9717,14 @@ msgid "\tInvalid Export Address Table rva (0x%lx) or entry count (0x%lx)\n"
msgstr ""
#: peXXigen.c:1760
+#, fuzzy
msgid "Forwarder RVA"
-msgstr ""
+msgstr "Jenis Saiz Rva Offset\n"
#: peXXigen.c:1772
+#, fuzzy
msgid "Export RVA"
-msgstr ""
+msgstr "Jenis Saiz Rva Offset\n"
#: peXXigen.c:1779
#, c-format
@@ -9614,34 +9805,34 @@ msgid "\treloc %4d offset %4x [%4lx] %s"
msgstr ""
#: peXXigen.c:2276
-#, c-format
+#, fuzzy, c-format
msgid "%03x %*.s Entry: "
-msgstr ""
+msgstr " Sumber bermula pada offset: %#03x\n"
#: peXXigen.c:2300
-#, c-format
+#, fuzzy, c-format
msgid "name: [val: %08lx len %d]: "
-msgstr ""
+msgstr "Ralat membaca dari klien, len = %d\n"
#: peXXigen.c:2320
-#, c-format
+#, fuzzy, c-format
msgid "<corrupt string length: %#x>\n"
-msgstr ""
+msgstr "-X <rentetan>"
#: peXXigen.c:2330
-#, c-format
+#, fuzzy, c-format
msgid "<corrupt string offset: %#lx>\n"
-msgstr ""
+msgstr "ofset"
#: peXXigen.c:2335
#, c-format
msgid "ID: %#08lx"
-msgstr ""
+msgstr "ID: %#08lx"
#: peXXigen.c:2338
-#, c-format
+#, fuzzy, c-format
msgid ", Value: %#08lx\n"
-msgstr ""
+msgstr "nilai"
#: peXXigen.c:2360
#, c-format
@@ -9651,7 +9842,7 @@ msgstr ""
#: peXXigen.c:2402
#, c-format
msgid "<unknown directory type: %d>\n"
-msgstr ""
+msgstr "<jenis direktori tidak diketahui: %d>\n"
#: peXXigen.c:2410
#, c-format
@@ -9661,7 +9852,7 @@ msgstr ""
#: peXXigen.c:2498
#, c-format
msgid "Corrupt .rsrc section detected!\n"
-msgstr ""
+msgstr "Bahagian .rsrc yang rosak dikesan!\n"
#: peXXigen.c:2522
#, c-format
@@ -9671,21 +9862,23 @@ msgid ""
msgstr ""
#: peXXigen.c:2528
-#, c-format
+#, fuzzy, c-format
msgid " String table starts at offset: %#03x\n"
-msgstr ""
+msgstr " Sumber bermula pada offset: %#03x\n"
#: peXXigen.c:2531
#, c-format
msgid " Resources start at offset: %#03x\n"
-msgstr ""
+msgstr " Sumber bermula pada offset: %#03x\n"
#: peXXigen.c:2588
-#, c-format
+#, fuzzy, c-format
msgid ""
"\n"
"There is a debug directory, but the section containing it could not be found\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: peXXigen.c:2594
#, c-format
@@ -9693,6 +9886,8 @@ msgid ""
"\n"
"There is a debug directory in %s, but that section has no contents\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpijat dalam %s, tetapi bahagian itu tidak mempunyai kandungan\n"
#: peXXigen.c:2601
#, c-format
@@ -9708,6 +9903,9 @@ msgid ""
"There is a debug directory in %s at 0x%lx\n"
"\n"
msgstr ""
+"\n"
+"Terdapat direktori nyahpepijat dalam %s pada 0x%lx\n"
+"\n"
#: peXXigen.c:2613
#, c-format
@@ -9717,7 +9915,7 @@ msgstr ""
#: peXXigen.c:2618
#, c-format
msgid "Type Size Rva Offset\n"
-msgstr ""
+msgstr "Jenis Saiz Rva Offset\n"
#: peXXigen.c:2666
#, c-format
@@ -9738,6 +9936,8 @@ msgid ""
"\n"
"Characteristics 0x%x\n"
msgstr ""
+"\n"
+"Ciri-ciri 0x%x\n"
#: peXXigen.c:3047
#, c-format
@@ -9746,12 +9946,12 @@ msgstr ""
#: peXXigen.c:3088
msgid "failed to update file offsets in debug directory"
-msgstr ""
+msgstr "gagal mengemaskini offset fail dalam direktori nyahpijat"
#: peXXigen.c:3097
#, c-format
msgid "%pB: failed to read debug data section"
-msgstr ""
+msgstr "%pB: gagal membaca bahagian data nyahpepijat"
#: peXXigen.c:3900
#, c-format
@@ -9785,9 +9985,9 @@ msgstr ""
#. Corrupted .rsrc section - cannot merge.
#: peXXigen.c:4286
-#, c-format
+#, fuzzy, c-format
msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
-msgstr ""
+msgstr "Bahagian .rsrc yang rosak dikesan!\n"
#: peXXigen.c:4294
#, c-format
diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c
index b4b59c9..dd70267 100644
--- a/bfd/ppcboot.c
+++ b/bfd/ppcboot.c
@@ -474,7 +474,6 @@ ppcboot_bfd_print_private_bfd_data (bfd *abfd, void * farg)
#define ppcboot_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
#define ppcboot_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
-#define ppcboot_init_private_section_data _bfd_generic_init_private_section_data
#define ppcboot_bfd_copy_private_section_data _bfd_generic_bfd_copy_private_section_data
#define ppcboot_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data
#define ppcboot_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
diff --git a/bfd/reloc.c b/bfd/reloc.c
index d3ddafb..c9d53bb 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -7419,6 +7419,12 @@ ENUMDOC
AArch64 pseudo relocation code to be used internally by the AArch64
assembler and not (currently) written to any object files.
ENUM
+ BFD_RELOC_AARCH64_BRANCH9
+ENUMDOC
+ AArch64 9 bit pc-relative conditional branch and compare & branch.
+ The lowest two bits must be zero and are not stored in the
+ instruction, giving an 11 bit signed byte offset.
+ENUM
BFD_RELOC_TILEPRO_COPY
ENUMX
BFD_RELOC_TILEPRO_GLOB_DAT
diff --git a/bfd/section.c b/bfd/section.c
index 9460ff9..5f0cf6e 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -1667,7 +1667,8 @@ FUNCTION
SYNOPSIS
bool bfd_copy_private_section_data
- (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
+ (bfd *ibfd, asection *isec, bfd *obfd, asection *osec,
+ struct bfd_link_info *link_info);
DESCRIPTION
Copy private section information from @var{isec} in the BFD
@@ -1678,9 +1679,9 @@ DESCRIPTION
o <<bfd_error_no_memory>> -
Not enough memory exists to create private data for @var{osec}.
-.#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
+.#define bfd_copy_private_section_data(ibfd, isec, obfd, osec, link_info) \
. BFD_SEND (obfd, _bfd_copy_private_section_data, \
-. (ibfd, isection, obfd, osection))
+. (ibfd, isec, obfd, osec, link_info))
*/
/*
diff --git a/bfd/som.c b/bfd/som.c
index d3e0876..5c60f60 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -5372,17 +5372,17 @@ static bool
som_bfd_copy_private_section_data (bfd *ibfd,
asection *isection,
bfd *obfd,
- asection *osection)
+ asection *osection,
+ struct bfd_link_info *link_info)
{
- size_t amt;
-
/* One day we may try to grok other private data. */
- if (ibfd->xvec->flavour != bfd_target_som_flavour
+ if (link_info != NULL
+ || ibfd->xvec->flavour != bfd_target_som_flavour
|| obfd->xvec->flavour != bfd_target_som_flavour
|| (!som_is_space (isection) && !som_is_subspace (isection)))
return true;
- amt = sizeof (struct som_copyable_section_data_struct);
+ size_t amt = sizeof (struct som_copyable_section_data_struct);
som_section_data (osection)->copy_data = bfd_zalloc (obfd, amt);
if (som_section_data (osection)->copy_data == NULL)
return false;
@@ -5401,7 +5401,8 @@ som_bfd_copy_private_section_data (bfd *ibfd,
{
/* User has specified a subspace without its containing space. */
_bfd_error_handler (_("%pB[%pA]: no output section for space %pA"),
- obfd, osection, som_section_data (osection)->copy_data->container);
+ obfd, osection,
+ som_section_data (osection)->copy_data->container);
return false;
}
}
@@ -6779,7 +6780,6 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
#define som_bfd_link_hide_symbol _bfd_generic_link_hide_symbol
#define som_bfd_define_start_stop bfd_generic_define_start_stop
#define som_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
-#define som_init_private_section_data _bfd_generic_init_private_section_data
#define som_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
#define som_bfd_set_private_flags _bfd_generic_bfd_set_private_flags
#define som_find_inliner_info _bfd_nosymbols_find_inliner_info
diff --git a/bfd/syms.c b/bfd/syms.c
index 95017ba..df2229b 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -594,6 +594,7 @@ struct section_to_type
adding entries. Since it is so short, a linear search is used. */
static const struct section_to_type stt[] =
{
+ {".didat", 'i'}, /* MSVC's .didat (delay import) section */
{".drectve", 'i'}, /* MSVC's .drective section */
{".edata", 'e'}, /* MSVC's .edata (export) section */
{".idata", 'i'}, /* MSVC's .idata (import) section */
diff --git a/bfd/targets.c b/bfd/targets.c
index 18f5782..2333370 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -282,7 +282,6 @@ BFD_JUMP_TABLE macros.
.#define BFD_JUMP_TABLE_COPY(NAME) \
. NAME##_bfd_copy_private_bfd_data, \
. NAME##_bfd_merge_private_bfd_data, \
-. NAME##_init_private_section_data, \
. NAME##_bfd_copy_private_section_data, \
. NAME##_bfd_copy_private_symbol_data, \
. NAME##_bfd_copy_private_header_data, \
@@ -295,16 +294,10 @@ BFD_JUMP_TABLE macros.
. {* Called to merge BFD general private data from one object file
. to a common output file when linking. *}
. bool (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
-. {* Called to initialize BFD private section data from one object file
-. to another. *}
-.#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
-. BFD_SEND (obfd, _bfd_init_private_section_data, \
-. (ibfd, isec, obfd, osec, link_info))
-. bool (*_bfd_init_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
-. struct bfd_link_info *);
. {* Called to copy BFD private section data from one object file
. to another. *}
-. bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);
+. bool (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr,
+. struct bfd_link_info *);
. {* Called to copy BFD private symbol data from one symbol
. to another. *}
. bool (*_bfd_copy_private_symbol_data) (bfd *, asymbol *,
diff --git a/bfd/version.h b/bfd/version.h
index a6afff6..7739244 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -16,7 +16,7 @@
In releases, the date is not included in either version strings or
sonames. */
-#define BFD_VERSION_DATE 20250319
+#define BFD_VERSION_DATE 20250710
#define BFD_VERSION @bfd_version@
#define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@
#define REPORT_BUGS_TO @report_bugs_to@
diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c
index 548a979..c4b2484 100644
--- a/bfd/vms-alpha.c
+++ b/bfd/vms-alpha.c
@@ -10156,7 +10156,6 @@ bfd_vms_get_data (bfd *abfd)
#define vms_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
#define vms_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data
-#define vms_init_private_section_data _bfd_generic_init_private_section_data
#define vms_bfd_copy_private_section_data _bfd_generic_bfd_copy_private_section_data
#define vms_bfd_copy_private_symbol_data _bfd_generic_bfd_copy_private_symbol_data
#define vms_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 446fa5a..b50b17f 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -243,6 +243,55 @@ xcoff_get_section_contents (bfd *abfd, asection *sec)
return contents;
}
+/* Read .loader and swap in the header. Sanity check to prevent
+ buffer overflows. Don't bother to check for overlap as that sort
+ of insanity shouldn't lead to incorrect program behaviour. */
+
+static bfd_byte *
+xcoff_get_ldhdr (bfd *abfd, asection *lsec, struct internal_ldhdr *ldhdr)
+{
+ bfd_byte *contents = xcoff_get_section_contents (abfd, lsec);
+ if (contents)
+ {
+ bfd_xcoff_swap_ldhdr_in (abfd, contents, ldhdr);
+ if (ldhdr->l_nsyms != 0)
+ {
+ bfd_vma symoff = bfd_xcoff_loader_symbol_offset (abfd, ldhdr);
+ if (symoff > lsec->size)
+ goto fail;
+ bfd_size_type onesym = bfd_xcoff_ldsymsz (abfd);
+ bfd_size_type syms;
+ if (_bfd_mul_overflow (ldhdr->l_nsyms, onesym, &syms)
+ || syms > lsec->size - symoff)
+ goto fail;
+ }
+ if (ldhdr->l_stlen != 0
+ && (ldhdr->l_stoff > lsec->size
+ || ldhdr->l_stlen > lsec->size - ldhdr->l_stoff))
+ goto fail;
+ if (ldhdr->l_nreloc != 0)
+ {
+ bfd_vma reloff = bfd_xcoff_loader_reloc_offset (abfd, ldhdr);
+ if (reloff > lsec->size)
+ goto fail;
+ bfd_size_type onerel = bfd_xcoff_ldrelsz (abfd);
+ bfd_size_type rels;
+ if (_bfd_mul_overflow (ldhdr->l_nreloc, onerel, &rels)
+ || rels > lsec->size - reloff)
+ goto fail;
+ }
+ if (ldhdr->l_nimpid != 0
+ && (ldhdr->l_impoff > lsec->size
+ || ldhdr->l_istlen > lsec->size - ldhdr->l_impoff))
+ goto fail;
+ }
+ return contents;
+
+ fail:
+ bfd_set_error (bfd_error_file_truncated);
+ return NULL;
+}
+
/* Get the size required to hold the dynamic symbols. */
long
@@ -265,12 +314,10 @@ _bfd_xcoff_get_dynamic_symtab_upper_bound (bfd *abfd)
return -1;
}
- contents = xcoff_get_section_contents (abfd, lsec);
+ contents = xcoff_get_ldhdr (abfd, lsec, &ldhdr);
if (!contents)
return -1;
- bfd_xcoff_swap_ldhdr_in (abfd, (void *) contents, &ldhdr);
-
return (ldhdr.l_nsyms + 1) * sizeof (asymbol *);
}
@@ -299,12 +346,10 @@ _bfd_xcoff_canonicalize_dynamic_symtab (bfd *abfd, asymbol **psyms)
return -1;
}
- contents = xcoff_get_section_contents (abfd, lsec);
+ contents = xcoff_get_ldhdr (abfd, lsec, &ldhdr);
if (!contents)
return -1;
- bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
-
strings = (char *) contents + ldhdr.l_stoff;
symbuf = bfd_zalloc (abfd, ldhdr.l_nsyms * sizeof (* symbuf));
@@ -322,9 +367,7 @@ _bfd_xcoff_canonicalize_dynamic_symtab (bfd *abfd, asymbol **psyms)
symbuf->symbol.the_bfd = abfd;
- if (ldsym._l._l_l._l_zeroes == 0)
- symbuf->symbol.name = strings + ldsym._l._l_l._l_offset;
- else
+ if (ldsym._l._l_l._l_zeroes != 0)
{
char *c;
@@ -335,6 +378,10 @@ _bfd_xcoff_canonicalize_dynamic_symtab (bfd *abfd, asymbol **psyms)
c[SYMNMLEN] = '\0';
symbuf->symbol.name = c;
}
+ else if (ldsym._l._l_l._l_offset < ldhdr.l_stlen)
+ symbuf->symbol.name = strings + ldsym._l._l_l._l_offset;
+ else
+ symbuf->symbol.name = _("<corrupt>");
if (ldsym.l_smclas == XMC_XO)
symbuf->symbol.section = bfd_abs_section_ptr;
@@ -384,12 +431,10 @@ _bfd_xcoff_get_dynamic_reloc_upper_bound (bfd *abfd)
return -1;
}
- contents = xcoff_get_section_contents (abfd, lsec);
+ contents = xcoff_get_ldhdr (abfd, lsec, &ldhdr);
if (!contents)
return -1;
- bfd_xcoff_swap_ldhdr_in (abfd, (struct external_ldhdr *) contents, &ldhdr);
-
return (ldhdr.l_nreloc + 1) * sizeof (arelent *);
}
@@ -419,12 +464,10 @@ _bfd_xcoff_canonicalize_dynamic_reloc (bfd *abfd,
return -1;
}
- contents = xcoff_get_section_contents (abfd, lsec);
+ contents = xcoff_get_ldhdr (abfd, lsec, &ldhdr);
if (!contents)
return -1;
- bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
-
relbuf = bfd_alloc (abfd, ldhdr.l_nreloc * sizeof (arelent));
if (relbuf == NULL)
return -1;
@@ -905,7 +948,7 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
return false;
}
- contents = xcoff_get_section_contents (abfd, lsec);
+ contents = xcoff_get_ldhdr (abfd, lsec, &ldhdr);
if (!contents)
return false;
@@ -913,8 +956,6 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
included in the link. */
bfd_section_list_clear (abfd);
- bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
-
strings = (char *) contents + ldhdr.l_stoff;
elsym = contents + bfd_xcoff_loader_symbol_offset(abfd, &ldhdr);
@@ -934,14 +975,16 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info)
if ((ldsym.l_smtype & L_EXPORT) == 0)
continue;
- if (ldsym._l._l_l._l_zeroes == 0)
- name = strings + ldsym._l._l_l._l_offset;
- else
+ if (ldsym._l._l_l._l_zeroes != 0)
{
memcpy (nambuf, ldsym._l._l_name, SYMNMLEN);
nambuf[SYMNMLEN] = '\0';
name = nambuf;
}
+ else if (ldsym._l._l_l._l_offset < ldhdr.l_stlen)
+ name = strings + ldsym._l._l_l._l_offset;
+ else
+ continue;
/* Normally we could not call xcoff_link_hash_lookup in an add
symbols routine, since we might not be using an XCOFF hash
@@ -2368,12 +2411,10 @@ xcoff_link_check_dynamic_ar_symbols (bfd *abfd,
/* There are no symbols, so don't try to include it. */
return true;
- contents = xcoff_get_section_contents (abfd, lsec);
+ contents = xcoff_get_ldhdr (abfd, lsec, &ldhdr);
if (!contents)
return false;
- bfd_xcoff_swap_ldhdr_in (abfd, contents, &ldhdr);
-
strings = (char *) contents + ldhdr.l_stoff;
elsym = contents + bfd_xcoff_loader_symbol_offset (abfd, &ldhdr);
@@ -2392,14 +2433,16 @@ xcoff_link_check_dynamic_ar_symbols (bfd *abfd,
if ((ldsym.l_smtype & L_EXPORT) == 0)
continue;
- if (ldsym._l._l_l._l_zeroes == 0)
- name = strings + ldsym._l._l_l._l_offset;
- else
+ if (ldsym._l._l_l._l_zeroes != 0)
{
memcpy (nambuf, ldsym._l._l_name, SYMNMLEN);
nambuf[SYMNMLEN] = '\0';
name = nambuf;
}
+ else if (ldsym._l._l_l._l_offset < ldhdr.l_stlen)
+ name = strings + ldsym._l._l_l._l_offset;
+ else
+ continue;
h = bfd_link_hash_lookup (info->hash, name, false, false, true);