MIPS/LD: Continue processing with refused relocations in PIC code
authorMaciej W. Rozycki <macro@linux-mips.org>
Tue, 27 Nov 2018 16:34:03 +0000 (16:34 +0000)
committerMaciej W. Rozycki <macro@linux-mips.org>
Tue, 27 Nov 2018 16:34:03 +0000 (16:34 +0000)
Switch from `_bfd_error_handler' to `info->callbacks->einfo' with error
reporting concerning the use of position-dependent relocations such as
R_MIPS_HI16 or R_MIPS_26 in PIC code and continue processing so that any
subsequent link errors are also shown rather than the linker terminating
right away.  This can reduce user frustration where correcting one error
only reveals another one; instead all are shown together making them all
possible to investigate at once.  The use of the `%X' specifier causes
the linker to terminate unsuccessfully at the end of processing.

Also fix the message to say `cannot' rather than `can not'.

bfd/
* elfxx-mips.c (_bfd_mips_elf_check_relocs) <R_MIPS16_26>
<R_MIPS_26, R_MICROMIPS_26_S1>: Use `info->callbacks->einfo'
rather than `_bfd_error_handler' to report refused relocations
in PIC code and continue processing.  Fix error message: `can
not' -> `cannot'.

bfd/ChangeLog
bfd/elfxx-mips.c

index 272ae0e1076276e110dd0bf4ae3ca1405bd47eab..e737f35e4b255adbff72176b99a2679f56082fb0 100644 (file)
@@ -1,3 +1,11 @@
+2018-11-27  Maciej W. Rozycki  <macro@linux-mips.org>
+
+       * elfxx-mips.c (_bfd_mips_elf_check_relocs) <R_MIPS16_26>
+       <R_MIPS_26, R_MICROMIPS_26_S1>: Use `info->callbacks->einfo'
+       rather than `_bfd_error_handler' to report refused relocations
+       in PIC code and continue processing.  Fix error message: `can
+       not' -> `cannot'.
+
 2018-11-27  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/23919
index dfb36014066e84915c553909249bd4770f47aa0c..298f465e432e1b36753016b1bfb972d486555e9c 100644 (file)
@@ -9077,14 +9077,13 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
            case R_MIPS_26:
            case R_MICROMIPS_26_S1:
              howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
-             _bfd_error_handler
+             info->callbacks->einfo
                /* xgettext:c-format */
-               (_("%pB: relocation %s against `%s' can not be used"
-                  " when making a shared object; recompile with -fPIC"),
-                abfd, howto->name,
+               (_("%X%H: relocation %s against `%s' cannot be used"
+                  " when making a shared object; recompile with -fPIC\n"),
+                abfd, sec, rel->r_offset, howto->name,
                 (h) ? h->root.root.string : "a local symbol");
-             bfd_set_error (bfd_error_bad_value);
-             return FALSE;
+             break;
            default:
              break;
            }