From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 39236 invoked by alias); 13 Apr 2017 07:46:57 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 39223 invoked by uid 89); 13 Apr 2017 07:46:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=REGISTER, transition, tough, Fake X-HELO: mail-pg0-f43.google.com Received: from mail-pg0-f43.google.com (HELO mail-pg0-f43.google.com) (74.125.83.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Apr 2017 07:46:52 +0000 Received: by mail-pg0-f43.google.com with SMTP id g2so26658228pge.3 for ; Thu, 13 Apr 2017 00:46:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:user-agent; bh=VxterZfpJWh2fN8oUhCJ8e3hwqNs7jOz158Kapmpqcw=; b=dUeW3BjGnUZj6crYcVDZhIxsXinaT686dHSDlWseo8lbpnh+oToSpnZZLuCKN7XwUH 58oqTRryXRvt6Ad+lKvuo3dl30D0j74UR7xsopIvTVGWTqPDdKLDAwYBS8zXU1/4K9S/ JmVBgvbiFF4RCrnbtUiMH0LVjc+q+Wqv0u4+LzMofgLonmUqMHtN8y+cJCjC7FT2O6xR P6WUQAgm8cFCAiMBYH0aFsYvCbml6pz2P75f0QyT5ME/kzBju0qtCOhF5w3PwqJmXE7b 01SE9/2mu/bHMW3AMYGFZCJgf3hBGPm5EtaqKBFlJ2EqTkJzatcAxECdezRyBIgCifPH b2lw== X-Gm-Message-State: AN3rC/70a4VuV8V959KKQC/IWOVlx/Gm5/Fta3nmFfp3cGdta11sVEny qtyR2kq5FtklQDAP X-Received: by 10.84.222.135 with SMTP id x7mr2520768pls.50.1492069611339; Thu, 13 Apr 2017 00:46:51 -0700 (PDT) Received: from bubble.grove.modra.org (CPE-58-160-71-80.tyqh2.lon.bigpond.net.au. [58.160.71.80]) by smtp.gmail.com with ESMTPSA id h7sm35003360pfc.99.2017.04.13.00.46.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Apr 2017 00:46:50 -0700 (PDT) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id 2DA37C0E23; Thu, 13 Apr 2017 17:16:47 +0930 (ACST) Date: Thu, 13 Apr 2017 07:46:00 -0000 From: Alan Modra To: binutils@sourceware.org Subject: Rewrite bfd error handler Message-ID: <20170413074647.GP24006@bubble.grove.modra.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.24 (2015-08-30) X-IsSubscribed: yes X-SW-Source: 2017-04/txt/msg00132.txt.bz2 This steals _doprnt from libiberty, extended to handle %A and %B. Which lets us do away with the current horrible %A and %B handling that requires all %A and %B arguments to be passed first, rather than in the natural order. diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 09578f1..b8a218f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,31 @@ 2017-04-13 Alan Modra + * bfd.c (PRINT_TYPE): Define. + (_doprnt): New function. + (error_handler_internal): Use _doprnt. + * coff-arm.c: Put %A and %B arguments to _bfd_error_handler + calls in their natural order, throughout file. + * coff-mcore.c: Likewise. + * coff-ppc.c: Likewise. + * coff-tic80.c: Likewise. + * cofflink.c: Likewise. + * elf-s390-common.c: Likewise. + * elf.c: Likewise. + * elf32-arm.c: Likewise. + * elf32-i386.c: Likewise. + * elf32-m32r.c: Likewise. + * elf32-msp430.c: Likewise. + * elf32-spu.c: Likewise. + * elf64-ia64-vms.c: Likewise. + * elf64-sparc.c: Likewise. + * elf64-x86-64.c: Likewise. + * elflink.c: Likewise. + * elfnn-aarch64.c: Likewise. + * elfnn-ia64.c: Likewise. + * elfxx-mips.c: Likewise. + +2017-04-13 Alan Modra + * elf32-arm.c (arm_type_of_stub): Supply missing args to "long branch veneers" error. Fix double space and format message. * elf32-avr.c (avr_add_stub): Do not pass NULL as %B arg. diff --git a/bfd/bfd.c b/bfd/bfd.c index a9402e48..23a4350 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -611,176 +611,240 @@ CODE_FRAGMENT static const char *_bfd_error_program_name; -/* This is the default routine to handle BFD error messages. - Like fprintf (stderr, ...), but also handles some extra format specifiers. - - %A section name from section. For group components, print group name too. - %B file name from bfd. For archive components, prints archive too. - - Note - because these two extra format specifiers require special handling - they are scanned for and processed in this function, before calling - vfprintf. This means that the *arguments* for these format specifiers - must be the first ones in the variable argument list, regardless of where - the specifiers appear in the format string. Thus for example calling - this function with a format string of: - - "blah %s blah %A blah %d blah %B" - - would involve passing the arguments as: - - "blah %s blah %A blah %d blah %B", - asection_for_the_%A, - bfd_for_the_%B, - string_for_the_%s, - integer_for_the_%d); - */ - -static void -error_handler_internal (const char *fmt, va_list ap) +/* This macro and _doprnt taken from libiberty _doprnt.c, tidied a + little and extended to handle '%A' and '%B'. */ + +#define PRINT_TYPE(TYPE) \ + do \ + { \ + TYPE value = va_arg (ap, TYPE); \ + result = fprintf (stream, specifier, value); \ + } while (0) + +static int +_doprnt (FILE *stream, const char *format, va_list ap) { - char *bufp; - const char *new_fmt, *p; - size_t avail = 1000; - char buf[1000]; - - /* PR 4992: Don't interrupt output being sent to stdout. */ - fflush (stdout); + const char *ptr = format; + char specifier[128]; + int total_printed = 0; - if (_bfd_error_program_name != NULL) - fprintf (stderr, "%s: ", _bfd_error_program_name); - else - fprintf (stderr, "BFD: "); - - new_fmt = fmt; - bufp = buf; - - /* Reserve enough space for the existing format string. */ - avail -= strlen (fmt) + 1; - if (avail > 1000) - _exit (EXIT_FAILURE); - - p = fmt; - while (1) + while (*ptr != '\0') { - char *q; - size_t len, extra, trim; + int result; - p = strchr (p, '%'); - if (p == NULL || p[1] == '\0') + if (*ptr != '%') { - if (new_fmt == buf) - { - len = strlen (fmt); - memcpy (bufp, fmt, len + 1); - } - break; + /* While we have regular characters, print them. */ + char *end = strchr (ptr, '%'); + if (end != NULL) + result = fprintf (stream, "%.*s", (int) (end - ptr), ptr); + else + result = fprintf (stream, "%s", ptr); + ptr += result; } - - if (p[1] == 'A' || p[1] == 'B') + else { - len = p - fmt; - memcpy (bufp, fmt, len); - bufp += len; - fmt = p + 2; - new_fmt = buf; - - /* If we run out of space, tough, you lose your ridiculously - long file or section name. It's not safe to try to alloc - memory here; We might be printing an out of memory message. */ - if (avail == 0) + /* We have a format specifier! */ + char *sptr = specifier; + int wide_width = 0, short_width = 0; + + /* Copy the % and move forward. */ + *sptr++ = *ptr++; + + /* Move past flags. */ + while (strchr ("-+ #0", *ptr)) + *sptr++ = *ptr++; + + if (*ptr == '*') { - *bufp++ = '*'; - *bufp++ = '*'; - *bufp = '\0'; + int value = abs (va_arg (ap, int)); + sptr += sprintf (sptr, "%d", value); + ptr++; } else + /* Handle explicit numeric value. */ + while (ISDIGIT (*ptr)) + *sptr++ = *ptr++; + + if (*ptr == '.') { - if (p[1] == 'B') + /* Copy and go past the period. */ + *sptr++ = *ptr++; + if (*ptr == '*') { - bfd *abfd = va_arg (ap, bfd *); - - if (abfd == NULL) - /* Invoking %B with a null bfd pointer is an internal error. */ - abort (); - else if (abfd->my_archive - && !bfd_is_thin_archive (abfd->my_archive)) - snprintf (bufp, avail, "%s(%s)", - abfd->my_archive->filename, abfd->filename); - else - snprintf (bufp, avail, "%s", abfd->filename); + int value = abs (va_arg (ap, int)); + sptr += sprintf (sptr, "%d", value); + ptr++; } else + /* Handle explicit numeric value. */ + while (ISDIGIT (*ptr)) + *sptr++ = *ptr++; + } + while (strchr ("hlL", *ptr)) + { + switch (*ptr) { - asection *sec = va_arg (ap, asection *); - bfd *abfd; - const char *group = NULL; - struct coff_comdat_info *ci; - - if (sec == NULL) - /* Invoking %A with a null section pointer is an internal error. */ - abort (); - abfd = sec->owner; - if (abfd != NULL - && bfd_get_flavour (abfd) == bfd_target_elf_flavour - && elf_next_in_group (sec) != NULL - && (sec->flags & SEC_GROUP) == 0) - group = elf_group_name (sec); - else if (abfd != NULL - && bfd_get_flavour (abfd) == bfd_target_coff_flavour - && (ci = bfd_coff_get_comdat_section (sec->owner, - sec)) != NULL) - group = ci->name; - if (group != NULL) - snprintf (bufp, avail, "%s[%s]", sec->name, group); - else - snprintf (bufp, avail, "%s", sec->name); - } - len = strlen (bufp); - avail = avail - len + 2; - - /* We need to replace any '%' we printed by "%%". - First count how many. */ - q = bufp; - bufp += len; - extra = 0; - while ((q = strchr (q, '%')) != NULL) - { - ++q; - ++extra; + case 'h': + short_width = 1; + break; + case 'l': + wide_width++; + break; + case 'L': + wide_width = 2; + break; + default: + abort(); } + *sptr++ = *ptr++; + } - /* If there isn't room, trim off the end of the string. */ - q = bufp; - bufp += extra; - if (extra > avail) - { - trim = extra - avail; - bufp -= trim; - do - { - if (*--q == '%') - --extra; - } - while (--trim != 0); - *q = '\0'; - avail = extra; - } - avail -= extra; + /* Copy the type specifier, and NULL terminate. */ + *sptr++ = *ptr++; + *sptr = '\0'; - /* Now double all '%' chars, shuffling the string as we go. */ - while (extra != 0) - { - while ((q[extra] = *q) != '%') - --q; - q[--extra] = '%'; - --q; - } + switch (ptr[-1]) + { + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'c': + { + /* Short values are promoted to int, so just copy it + as an int and trust the C library printf to cast it + to the right width. */ + if (short_width) + PRINT_TYPE (int); + else + { + switch (wide_width) + { + case 0: + PRINT_TYPE (int); + break; + case 1: + PRINT_TYPE (long); + break; + case 2: + default: +#if defined(__GNUC__) || defined(HAVE_LONG_LONG) + PRINT_TYPE (long long); +#else + /* Fake it and hope for the best. */ + PRINT_TYPE (long); +#endif + break; + } + } + } + break; + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + { + if (wide_width == 0) + PRINT_TYPE (double); + else + { +#if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE) + PRINT_TYPE (long double); +#else + /* Fake it and hope for the best. */ + PRINT_TYPE (double); +#endif + } + } + break; + case 's': + PRINT_TYPE (char *); + break; + case 'p': + PRINT_TYPE (void *); + break; + case '%': + fputc ('%', stream); + result = 1; + break; + case 'A': + { + asection *sec = va_arg (ap, asection *); + bfd *abfd; + const char *group = NULL; + struct coff_comdat_info *ci; + + if (sec == NULL) + /* Invoking %A with a null section pointer is an + internal error. */ + abort (); + abfd = sec->owner; + if (abfd != NULL + && bfd_get_flavour (abfd) == bfd_target_elf_flavour + && elf_next_in_group (sec) != NULL + && (sec->flags & SEC_GROUP) == 0) + group = elf_group_name (sec); + else if (abfd != NULL + && bfd_get_flavour (abfd) == bfd_target_coff_flavour + && (ci = bfd_coff_get_comdat_section (sec->owner, + sec)) != NULL) + group = ci->name; + if (group != NULL) + result = fprintf (stream, "%s[%s]", sec->name, group); + else + result = fprintf (stream, "%s", sec->name); + } + break; + case 'B': + { + bfd *abfd = va_arg (ap, bfd *); + + if (abfd == NULL) + /* Invoking %B with a null bfd pointer is an + internal error. */ + abort (); + else if (abfd->my_archive + && !bfd_is_thin_archive (abfd->my_archive)) + result = fprintf (stream, "%s(%s)", + abfd->my_archive->filename, abfd->filename); + else + result = fprintf (stream, "%s", abfd->filename); + } + break; + default: + abort(); } } - p = p + 2; + if (result == -1) + return -1; + total_printed += result; } - vfprintf (stderr, new_fmt, ap); + return total_printed; +} + +/* This is the default routine to handle BFD error messages. + Like fprintf (stderr, ...), but also handles some extra format specifiers. + + %A section name from section. For group components, print group name too. + %B file name from bfd. For archive components, prints archive too. */ + +static void +error_handler_internal (const char *fmt, va_list ap) +{ + /* PR 4992: Don't interrupt output being sent to stdout. */ + fflush (stdout); + + if (_bfd_error_program_name != NULL) + fprintf (stderr, "%s: ", _bfd_error_program_name); + else + fprintf (stderr, "BFD: "); + + _doprnt (stderr, fmt, ap); /* On AIX, putc is implemented as a macro that triggers a -Wunused-value warning, so use the fputc function to avoid it. */ diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index 3c892ef..b66ebe4 100644 --- a/bfd/coff-arm.c +++ b/bfd/coff-arm.c @@ -1362,7 +1362,7 @@ coff_arm_relocate_section (bfd *output_bfd, /* xgettext:c-format */ (_("%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: arm call to thumb"), - h_sec->owner, input_bfd, name); + h_sec->owner, name, input_bfd); --my_offset; myh->root.u.def.value = my_offset; @@ -1453,7 +1453,7 @@ coff_arm_relocate_section (bfd *output_bfd, (_("%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: thumb call to arm\n" " consider relinking with --support-old-code enabled"), - h_sec->owner, input_bfd, name); + h_sec->owner, name, input_bfd); -- my_offset; myh->root.u.def.value = my_offset; @@ -1744,7 +1744,7 @@ coff_arm_relocate_section (bfd *output_bfd, _bfd_error_handler /* xgettext:c-format */ (_("%B: bad reloc address 0x%lx in section `%A'"), - input_bfd, input_section, (unsigned long) rel->r_vaddr); + input_bfd, (unsigned long) rel->r_vaddr, input_section); return FALSE; case bfd_reloc_overflow: { @@ -2201,9 +2201,8 @@ coff_arm_merge_private_bfd_data (bfd * ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext: c-format */ (_("error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"), - ibfd, obfd, - APCS_26_FLAG (ibfd) ? 26 : 32, - APCS_26_FLAG (obfd) ? 26 : 32 + ibfd, APCS_26_FLAG (ibfd) ? 26 : 32, + obfd, APCS_26_FLAG (obfd) ? 26 : 32 ); bfd_set_error (bfd_error_wrong_format); diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c index 4d4bcbc..3ede766 100644 --- a/bfd/coff-mcore.c +++ b/bfd/coff-mcore.c @@ -480,7 +480,7 @@ coff_mcore_relocate_section (bfd * output_bfd, /* xgettext: c-format */ (_("Warning: unsupported reloc %s \n" "sym %ld (%s), r_vaddr %ld (%lx)"), - input_bfd, input_section, howto->name, + howto->name, input_bfd, input_section, rel->r_symndx, my_name, (long) rel->r_vaddr, (unsigned long) rel->r_vaddr); break; diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c index 7cd29ac..9dca30c 100644 --- a/bfd/coff-ppc.c +++ b/bfd/coff-ppc.c @@ -1243,7 +1243,7 @@ coff_ppc_relocate_section (bfd *output_bfd, /* xgettext: c-format */ (_("Warning: unsupported reloc %s \n" "sym %ld (%s), r_vaddr %ld (%lx)"), - input_bfd, input_section, howto->name, + howto->name, input_bfd, input_section, rel->r_symndx, my_name, (long) rel->r_vaddr, (unsigned long) rel->r_vaddr); } diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c index c3e20d9..ec1d1fd 100644 --- a/bfd/coff-tic80.c +++ b/bfd/coff-tic80.c @@ -668,7 +668,7 @@ coff_tic80_relocate_section (bfd *output_bfd, _bfd_error_handler /* xgettext: c-format */ (_("%B: bad reloc address 0x%lx in section `%A'"), - input_bfd, input_section, (unsigned long) rel->r_vaddr); + input_bfd, (unsigned long) rel->r_vaddr, input_section); return FALSE; case bfd_reloc_overflow: { diff --git a/bfd/cofflink.c b/bfd/cofflink.c index 41cf77d..033b64e 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -447,8 +447,9 @@ coff_link_add_symbols (bfd *abfd, || BTYPE (sym.n_type) == T_NULL))) _bfd_error_handler /* xgettext: c-format */ - (_("Warning: type of symbol `%s' changed from %d to %d in %B"), - abfd, name, (*sym_hash)->type, sym.n_type); + (_("Warning: type of symbol `%s' changed" + " from %d to %d in %B"), + name, (*sym_hash)->type, sym.n_type, abfd); /* We don't want to change from a meaningful base type to a null one, but if we know @@ -3124,7 +3125,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, _bfd_error_handler /* xgettext: c-format */ (_("%B: bad reloc address 0x%lx in section `%A'"), - input_bfd, input_section, (unsigned long) rel->r_vaddr); + input_bfd, (unsigned long) rel->r_vaddr, input_section); return FALSE; case bfd_reloc_overflow: { diff --git a/bfd/elf-s390-common.c b/bfd/elf-s390-common.c index 3f4f088..1570365 100644 --- a/bfd/elf-s390-common.c +++ b/bfd/elf-s390-common.c @@ -306,7 +306,7 @@ elf_s390_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext:c-format */ (_("Warning: %B uses vector %s ABI, %B uses %s ABI"), - ibfd, obfd, abi_str[in_attr->i], abi_str[out_attr->i]); + ibfd, abi_str[in_attr->i], obfd, abi_str[out_attr->i]); } if (in_attr->i > out_attr->i) out_attr->i = in_attr->i; diff --git a/bfd/elf.c b/bfd/elf.c index 1f02d42..802a339 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -836,7 +836,7 @@ _bfd_elf_setup_sections (bfd *abfd) _bfd_error_handler /* xgettext:c-format */ (_("%B: sh_link [%d] in section `%A' is incorrect"), - s->owner, s, elfsec); + s->owner, elfsec, s); result = FALSE; } @@ -3213,7 +3213,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg) _bfd_error_handler /* xgettext:c-format */ (_("%B: error: Alignment power %d of section `%A' is too big"), - abfd, asect, asect->alignment_power); + abfd, asect->alignment_power, asect); arg->failed = TRUE; return; } diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index e04caef..e0ae923 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -4092,7 +4092,7 @@ arm_type_of_stub (struct bfd_link_info *info, _bfd_error_handler (_("%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: Thumb call to ARM"), - sym_sec->owner, input_bfd, name); + sym_sec->owner, name, input_bfd); } stub_type = @@ -8810,7 +8810,7 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info, _bfd_error_handler (_("%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: Thumb call to ARM"), - sym_sec->owner, input_bfd, name); + sym_sec->owner, name, input_bfd); return FALSE; } @@ -8900,7 +8900,7 @@ elf32_arm_create_thumb_stub (struct bfd_link_info * info, _bfd_error_handler (_("%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: arm call to thumb"), - sym_sec->owner, input_bfd, name); + sym_sec->owner, name, input_bfd); } --my_offset; @@ -19697,9 +19697,8 @@ elf32_arm_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) { _bfd_error_handler (_("error: Source object %B has EABI version %d, but target %B has EABI version %d"), - ibfd, obfd, - (in_flags & EF_ARM_EABIMASK) >> 24, - (out_flags & EF_ARM_EABIMASK) >> 24); + ibfd, (in_flags & EF_ARM_EABIMASK) >> 24, + obfd, (out_flags & EF_ARM_EABIMASK) >> 24); return FALSE; } @@ -19713,9 +19712,8 @@ elf32_arm_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) { _bfd_error_handler (_("error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"), - ibfd, obfd, - in_flags & EF_ARM_APCS_26 ? 26 : 32, - out_flags & EF_ARM_APCS_26 ? 26 : 32); + ibfd, in_flags & EF_ARM_APCS_26 ? 26 : 32, + obfd, out_flags & EF_ARM_APCS_26 ? 26 : 32); flags_compatible = FALSE; } diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 7f2723d..3e3aa16 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -1569,8 +1569,8 @@ elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, /* xgettext:c-format */ (_("%B: TLS transition from %s to %s against `%s' at 0x%lx " "in section `%A' failed"), - abfd, sec, from->name, to->name, name, - (unsigned long) rel->r_offset); + abfd, from->name, to->name, name, + (unsigned long) rel->r_offset, sec); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -3836,7 +3836,7 @@ elf_i386_relocate_section (bfd *output_bfd, _bfd_error_handler /* xgettext:c-format */ (_("%B: unrecognized relocation (0x%x) in section `%A'"), - input_bfd, input_section, r_type); + input_bfd, r_type, input_section); bfd_set_error (bfd_error_bad_value); return FALSE; } diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index 645a1ff..7ecf95f 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -2983,9 +2983,9 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, /* xgettext:c-format */ (_("%B: The target (%s) of an %s relocation is in the wrong section (%A)"), input_bfd, - sec, sym_name, - m32r_elf_howto_table[(int) r_type].name); + m32r_elf_howto_table[(int) r_type].name, + sec); /*bfd_set_error (bfd_error_bad_value); ??? why? */ ret = FALSE; continue; diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c index 43fcff5..8755280 100644 --- a/bfd/elf32-msp430.c +++ b/bfd/elf32-msp430.c @@ -2445,9 +2445,8 @@ elf32_msp430_merge_mspabi_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext:c-format */ (_("error: %B uses %s instructions but %B uses %s"), - ibfd, first_input_bfd, - isa_type (in_attr[OFBA_MSPABI_Tag_ISA].i), - isa_type (out_attr[OFBA_MSPABI_Tag_ISA].i)); + ibfd, isa_type (in_attr[OFBA_MSPABI_Tag_ISA].i), + first_input_bfd, isa_type (out_attr[OFBA_MSPABI_Tag_ISA].i)); result = FALSE; } @@ -2458,9 +2457,8 @@ elf32_msp430_merge_mspabi_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext:c-format */ (_("error: %B uses the %s code model whereas %B uses the %s code model"), - ibfd, first_input_bfd, - code_model (in_attr[OFBA_MSPABI_Tag_Code_Model].i), - code_model (out_attr[OFBA_MSPABI_Tag_Code_Model].i)); + ibfd, code_model (in_attr[OFBA_MSPABI_Tag_Code_Model].i), + first_input_bfd, code_model (out_attr[OFBA_MSPABI_Tag_Code_Model].i)); result = FALSE; } @@ -2482,9 +2480,8 @@ elf32_msp430_merge_mspabi_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext:c-format */ (_("error: %B uses the %s data model whereas %B uses the %s data model"), - ibfd, first_input_bfd, - data_model (in_attr[OFBA_MSPABI_Tag_Data_Model].i), - data_model (out_attr[OFBA_MSPABI_Tag_Data_Model].i)); + ibfd, data_model (in_attr[OFBA_MSPABI_Tag_Data_Model].i), + first_input_bfd, data_model (out_attr[OFBA_MSPABI_Tag_Data_Model].i)); result = FALSE; } @@ -2507,8 +2504,8 @@ elf32_msp430_merge_mspabi_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext:c-format */ (_("error: %B uses the %s data model but %B only uses MSP430 instructions"), - ibfd, first_input_bfd, - data_model (in_attr[OFBA_MSPABI_Tag_Data_Model].i)); + ibfd, data_model (in_attr[OFBA_MSPABI_Tag_Data_Model].i), + first_input_bfd); result = FALSE; } diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index a8e7ef2..cbb026e 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -1019,7 +1019,7 @@ needs_ovl_stub (struct elf_link_hash_entry *h, _bfd_error_handler /* xgettext:c-format */ (_("warning: call to non-function symbol %s defined in %B"), - sym_sec->owner, sym_name); + sym_name, sym_sec->owner); } } diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c index 3e316d3..7c4dfb3 100644 --- a/bfd/elf64-ia64-vms.c +++ b/bfd/elf64-ia64-vms.c @@ -584,8 +584,9 @@ elf64_ia64_relax_section (bfd *abfd, asection *sec, { _bfd_error_handler /* xgettext:c-format */ - (_("%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch."), - sec->owner, sec, (unsigned long) roff); + (_("%B: Can't relax br at 0x%lx in section `%A'." + " Please use brl or indirect branch."), + sec->owner, (unsigned long) roff, sec); bfd_set_error (bfd_error_bad_value); goto error_return; } @@ -3947,9 +3948,10 @@ elf64_ia64_relocate_section (bfd *output_bfd, case R_IA64_LTOFF_DTPREL22: _bfd_error_handler /* xgettext:c-format */ - (_("%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."), - input_bfd, input_section, howto->name, name, - rel->r_offset); + (_("%B: missing TLS section for relocation %s against `%s'" + " at 0x%lx in section `%A'."), + input_bfd, howto->name, name, + rel->r_offset, input_section); break; case R_IA64_PCREL21B: @@ -3963,9 +3965,10 @@ elf64_ia64_relocate_section (bfd *output_bfd, that the section is too big to relax. */ _bfd_error_handler /* xgettext:c-format */ - (_("%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)."), - input_bfd, input_section, howto->name, name, - rel->r_offset, input_section->size); + (_("%B: Can't relax br (%s) to `%s' at 0x%lx in section" + " `%A' with size 0x%lx (> 0x1000000)."), + input_bfd, howto->name, name, rel->r_offset, + input_section, input_section->size); break; } /* Fall through. */ @@ -5135,15 +5138,15 @@ error_free_dyn: /* xgettext:c-format */ (_("Warning: alignment %u of common symbol `%s' in %B" " is greater than the alignment (%u) of its section %A"), - common_bfd, h->root.u.def.section, - 1 << common_align, name, 1 << normal_align); + 1 << common_align, name, common_bfd, + 1 << normal_align, h->root.u.def.section); else _bfd_error_handler /* xgettext:c-format */ (_("Warning: alignment %u of symbol `%s' in %B" " is smaller than %u in %B"), - normal_bfd, common_bfd, - 1 << normal_align, name, 1 << common_align); + 1 << normal_align, name, normal_bfd, + 1 << common_align, common_bfd); } } @@ -5158,9 +5161,8 @@ error_free_dyn: /* xgettext:c-format */ (_("Warning: size of symbol `%s' changed" " from %lu in %B to %lu in %B"), - old_bfd, abfd, - name, (unsigned long) h->size, - (unsigned long) isym->st_size); + name, (unsigned long) h->size, old_bfd, + (unsigned long) isym->st_size, abfd); h->size = isym->st_size; } @@ -5186,7 +5188,7 @@ error_free_dyn: /* xgettext:c-format */ (_("Warning: type of symbol `%s' changed" " from %d to %d in %B"), - abfd, name, h->type, type); + name, h->type, type, abfd); h->type = type; } diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 7425dbe..9456b59 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -466,10 +466,10 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, { _bfd_error_handler /* xgettext:c-format */ - (_("Register %%g%d used incompatibly: %s in %B, previously %s in %B"), - abfd, p->abfd, (int) sym->st_value, - **namep ? *namep : "#scratch", - *p->name ? p->name : "#scratch"); + (_("Register %%g%d used incompatibly: %s in %B," + " previously %s in %B"), + (int) sym->st_value, **namep ? *namep : "#scratch", abfd, + *p->name ? p->name : "#scratch", p->abfd); return FALSE; } @@ -490,8 +490,9 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, type = 0; _bfd_error_handler /* xgettext:c-format */ - (_("Symbol `%s' has differing types: REGISTER in %B, previously %s in %B"), - abfd, p->abfd, *namep, stt_types[type]); + (_("Symbol `%s' has differing types: REGISTER in %B," + " previously %s in %B"), + *namep, abfd, stt_types[type], p->abfd); return FALSE; } @@ -536,8 +537,9 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, type = 0; _bfd_error_handler /* xgettext:c-format */ - (_("Symbol `%s' has differing types: %s in %B, previously REGISTER in %B"), - abfd, p->abfd, *namep, stt_types[type]); + (_("Symbol `%s' has differing types: %s in %B," + " previously REGISTER in %B"), + *namep, stt_types[type], abfd, p->abfd); return FALSE; } } diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 5d3a653..dbbdf89 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -1702,8 +1702,8 @@ elf_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, /* xgettext:c-format */ (_("%B: TLS transition from %s to %s against `%s' at 0x%lx " "in section `%A' failed"), - abfd, sec, from->name, to->name, name, - (unsigned long) rel->r_offset); + abfd, from->name, to->name, name, + (unsigned long) rel->r_offset, sec); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -4284,7 +4284,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, _bfd_error_handler /* xgettext:c-format */ (_("%B: unrecognized relocation (0x%x) in section `%A'"), - input_bfd, input_section, r_type); + input_bfd, r_type, input_section); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -5065,18 +5065,16 @@ direct: (_("%B: addend -0x%x in relocation %s against " "symbol `%s' at 0x%lx in section `%A' is " "out of range"), - input_bfd, input_section, addend, - howto->name, name, - (unsigned long) rel->r_offset); + input_bfd, addend, howto->name, name, + (unsigned long) rel->r_offset, input_section); else _bfd_error_handler /* xgettext:c-format */ (_("%B: addend 0x%x in relocation %s against " "symbol `%s' at 0x%lx in section `%A' is " "out of range"), - input_bfd, input_section, addend, - howto->name, name, - (unsigned long) rel->r_offset); + input_bfd, addend, howto->name, name, + (unsigned long) rel->r_offset, input_section); bfd_set_error (bfd_error_bad_value); return FALSE; } diff --git a/bfd/elflink.c b/bfd/elflink.c index c00d712..ae8fe24 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -1298,25 +1298,25 @@ _bfd_elf_merge_symbol (bfd *abfd, /* xgettext:c-format */ (_("%s: TLS definition in %B section %A " "mismatches non-TLS definition in %B section %A"), - tbfd, tsec, ntbfd, ntsec, h->root.root.string); + h->root.root.string, tbfd, tsec, ntbfd, ntsec); else if (!tdef && !ntdef) _bfd_error_handler /* xgettext:c-format */ (_("%s: TLS reference in %B " "mismatches non-TLS reference in %B"), - tbfd, ntbfd, h->root.root.string); + h->root.root.string, tbfd, ntbfd); else if (tdef) _bfd_error_handler /* xgettext:c-format */ (_("%s: TLS definition in %B section %A " "mismatches non-TLS reference in %B"), - tbfd, tsec, ntbfd, h->root.root.string); + h->root.root.string, tbfd, tsec, ntbfd); else _bfd_error_handler /* xgettext:c-format */ (_("%s: TLS reference in %B " "mismatches non-TLS definition in %B section %A"), - tbfd, ntbfd, ntsec, h->root.root.string); + h->root.root.string, tbfd, ntbfd, ntsec); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -2359,8 +2359,8 @@ elf_link_read_relocs_from_section (bfd *abfd, /* xgettext:c-format */ (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)" " for offset 0x%lx in section `%A'"), - abfd, sec, - (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); + abfd, (unsigned long) r_symndx, (unsigned long) nsyms, + irela->r_offset, sec); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -2369,10 +2369,11 @@ elf_link_read_relocs_from_section (bfd *abfd, { _bfd_error_handler /* xgettext:c-format */ - (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'" + (_("%B: non-zero symbol index (0x%lx)" + " for offset 0x%lx in section `%A'" " when the object file has no symbol table"), - abfd, sec, - (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); + abfd, (unsigned long) r_symndx, (unsigned long) nsyms, + irela->r_offset, sec); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -4673,15 +4674,15 @@ error_free_dyn: /* xgettext:c-format */ (_("Warning: alignment %u of common symbol `%s' in %B is" " greater than the alignment (%u) of its section %A"), - common_bfd, h->root.u.def.section, - 1 << common_align, name, 1 << normal_align); + 1 << common_align, name, common_bfd, + 1 << normal_align, h->root.u.def.section); else _bfd_error_handler /* xgettext:c-format */ (_("Warning: alignment %u of symbol `%s' in %B" " is smaller than %u in %B"), - normal_bfd, common_bfd, - 1 << normal_align, name, 1 << common_align); + 1 << normal_align, name, normal_bfd, + 1 << common_align, common_bfd); } } @@ -4697,9 +4698,8 @@ error_free_dyn: /* xgettext:c-format */ (_("Warning: size of symbol `%s' changed" " from %lu in %B to %lu in %B"), - old_bfd, abfd, - name, (unsigned long) h->size, - (unsigned long) isym->st_size); + name, (unsigned long) h->size, old_bfd, + (unsigned long) isym->st_size, abfd); h->size = isym->st_size; } @@ -4733,7 +4733,7 @@ error_free_dyn: _bfd_error_handler (_("Warning: type of symbol `%s' changed" " from %d to %d in %B"), - abfd, name, h->type, type); + name, h->type, type, abfd); h->type = type; } @@ -9456,8 +9456,8 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data) def_bfd = flinfo->output_bfd; if (hi->root.u.def.section != bfd_abs_section_ptr) def_bfd = hi->root.u.def.section->owner; - _bfd_error_handler (msg, flinfo->output_bfd, def_bfd, - h->root.root.string); + _bfd_error_handler (msg, flinfo->output_bfd, + h->root.root.string, def_bfd); bfd_set_error (bfd_error_bad_value); eoinfo->failed = TRUE; return FALSE; @@ -10384,7 +10384,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) /* xgettext:c-format */ (_("error: %B contains a reloc (0x%s) for section %A " "that references a non-existent global symbol"), - input_bfd, o, buffer); + input_bfd, buffer, o); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -12982,8 +12982,8 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info) if (info->print_gc_sections && o->size != 0) /* xgettext:c-format */ - _bfd_error_handler (_("Removing unused section '%s' in file '%B'"), - sub, o->name); + _bfd_error_handler (_("Removing unused section '%A' in file '%B'"), + o, sub); /* But we also have to update some of the relocation info we collected before. */ diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 710e2c3..9976638 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -6109,7 +6109,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, /* xgettext:c-format */ _bfd_error_handler (_("%B: unrecognized relocation (0x%x) in section `%A'"), - input_bfd, input_section, r_type); + input_bfd, r_type, input_section); return FALSE; } bfd_r_type = elfNN_aarch64_bfd_reloc_from_howto (howto); diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c index 6f92b34..3c27f5d 100644 --- a/bfd/elfnn-ia64.c +++ b/bfd/elfnn-ia64.c @@ -617,8 +617,9 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec, { _bfd_error_handler /* xgettext:c-format */ - (_("%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch."), - sec->owner, sec, (unsigned long) roff); + (_("%B: Can't relax br at 0x%lx in section `%A'." + " Please use brl or indirect branch."), + sec->owner, (unsigned long) roff, sec); bfd_set_error (bfd_error_bad_value); goto error_return; } @@ -4474,9 +4475,10 @@ missing_tls_sec: case R_IA64_LTOFF_DTPREL22: _bfd_error_handler /* xgettext:c-format */ - (_("%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."), - input_bfd, input_section, howto->name, name, - rel->r_offset); + (_("%B: missing TLS section for relocation %s against `%s'" + " at 0x%lx in section `%A'."), + input_bfd, howto->name, name, + rel->r_offset, input_section); break; case R_IA64_PCREL21B: @@ -4490,9 +4492,10 @@ missing_tls_sec: that the section is too big to relax. */ _bfd_error_handler /* xgettext:c-format */ - (_("%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)."), - input_bfd, input_section, howto->name, name, - rel->r_offset, input_section->size); + (_("%B: Can't relax br (%s) to `%s' at 0x%lx" + " in section `%A' with size 0x%lx (> 0x1000000)."), + input_bfd, howto->name, name, rel->r_offset, + input_section, input_section->size); break; } /* Fall through. */ diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 901ddc1..4efa513 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -10132,9 +10132,10 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, sec); _bfd_error_handler /* xgettext:c-format */ - (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"), - input_bfd, input_section, name, howto->name, - rel->r_offset); + (_("%B: Can't find matching LO16 reloc against `%s'" + " for %s at 0x%lx in section `%A'"), + input_bfd, name, + howto->name, rel->r_offset, input_section); } } else @@ -10679,8 +10680,8 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, "beyond the range of ADDIUPC"), output_bfd, htab->root.sgotplt->output_section, - htab->root.splt->output_section, - (long) gotpc_offset); + (long) gotpc_offset, + htab->root.splt->output_section); bfd_set_error (bfd_error_no_error); return FALSE; } @@ -11246,8 +11247,8 @@ mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"), output_bfd, htab->root.sgotplt->output_section, - htab->root.splt->output_section, - (long) gotpc_offset); + (long) gotpc_offset, + htab->root.splt->output_section); bfd_set_error (bfd_error_no_error); return FALSE; } @@ -15197,19 +15198,19 @@ mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler (_("Warning: %B uses unknown floating point ABI %d " "(set by %B), %B uses unknown floating point ABI %d"), - obfd, abi_fp_bfd, ibfd, out_fp, in_fp); + obfd, out_fp, abi_fp_bfd, ibfd, in_fp); else if (!out_string) _bfd_error_handler /* xgettext:c-format */ (_("Warning: %B uses unknown floating point ABI %d " "(set by %B), %B uses %s"), - obfd, abi_fp_bfd, ibfd, out_fp, in_string); + obfd, out_fp, abi_fp_bfd, ibfd, in_string); else if (!in_string) _bfd_error_handler /* xgettext:c-format */ (_("Warning: %B uses %s (set by %B), " "%B uses unknown floating point ABI %d"), - obfd, abi_fp_bfd, ibfd, out_string, in_fp); + obfd, out_string, abi_fp_bfd, ibfd, in_fp); else { /* If one of the bfds is soft-float, the other must be @@ -15222,7 +15223,7 @@ mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) _bfd_error_handler /* xgettext:c-format */ (_("Warning: %B uses %s (set by %B), %B uses %s"), - obfd, abi_fp_bfd, ibfd, out_string, in_string); + obfd, out_string, abi_fp_bfd, ibfd, in_string); } } } @@ -15242,8 +15243,8 @@ mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) /* xgettext:c-format */ (_("Warning: %B uses %s (set by %B), " "%B uses unknown MSA ABI %d"), - obfd, abi_msa_bfd, ibfd, - "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i); + obfd, "-mmsa", abi_msa_bfd, + ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i); break; default: @@ -15254,8 +15255,8 @@ mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) /* xgettext:c-format */ (_("Warning: %B uses unknown MSA ABI %d " "(set by %B), %B uses %s"), - obfd, abi_msa_bfd, ibfd, - out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa"); + obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i, + abi_msa_bfd, ibfd, "-mmsa"); break; default: @@ -15263,9 +15264,8 @@ mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info) /* xgettext:c-format */ (_("Warning: %B uses unknown MSA ABI %d " "(set by %B), %B uses unknown MSA ABI %d"), - obfd, abi_msa_bfd, ibfd, - out_attr[Tag_GNU_MIPS_ABI_MSA].i, - in_attr[Tag_GNU_MIPS_ABI_MSA].i); + obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i, + abi_msa_bfd, ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i); break; } } -- Alan Modra Australia Development Lab, IBM