diff options
Diffstat (limited to 'bfd')
67 files changed, 3216 insertions, 1827 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 1b71104..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; @@ -562,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/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 ec60f23..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) { @@ -7015,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, @@ -7621,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, \ @@ -7634,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 *, @@ -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 e2f1a4d..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; diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index ae9a0f6..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 \ diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index ec7ed08..d335348 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -2621,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, @@ -2892,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 bd0374f..b81195d 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -5955,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 ab4d790..c1811cb 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -44,6 +44,7 @@ #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. */ @@ -3120,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) { @@ -3141,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/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-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); @@ -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-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 919f2a7..666399b 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -12232,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; @@ -14058,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; 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 68e004ef..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 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 ec25491..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,9 +1289,11 @@ 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}, @@ -1270,6 +1301,7 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] = {"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}, @@ -1288,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. */ @@ -1363,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 }, @@ -1437,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 }, @@ -1454,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 }, @@ -1462,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 }, @@ -1479,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 }, @@ -1523,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} }; @@ -1940,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'"), @@ -2076,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); } } @@ -2127,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) @@ -2212,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: @@ -2249,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; @@ -2271,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 @@ -2801,6 +2951,10 @@ 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: @@ -2863,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_*")); @@ -3110,6 +3272,10 @@ 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: @@ -3214,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 bc9bb70..663f40a 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -1891,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/libbfd-in.h b/bfd/libbfd-in.h index ae6d303..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). */ 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 d367fea..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). */ @@ -3230,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/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/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 *); @@ -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/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 9938108..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, loadcfg; + IMAGE_DATA_DIRECTORY idata2, idata5, didat2, tls, loadcfg; sa = extra->SectionAlignment; fa = extra->FileAlignment; @@ -601,6 +601,7 @@ _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]; @@ -651,6 +652,7 @@ _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; @@ -1001,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 }, @@ -3112,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; @@ -4543,6 +4548,52 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo) } } + /* The delay import directory. This is .didat$2 */ + h1 = coff_link_hash_lookup (coff_hash_table (info), + "__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); 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)) */ /* @@ -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 @@ -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 61a84a9..4371993 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 20250426 +#define BFD_VERSION_DATE 20250709 #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 |