Arm64/ELF: accept relocations against STN_UNDEF
authorJan Beulich <jbeulich@suse.com>
Fri, 31 Mar 2023 06:15:53 +0000 (08:15 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 31 Mar 2023 06:15:53 +0000 (08:15 +0200)
While only a secondary issue there, the testcase of PR gas/27212 exposes
an oversight in relocation handling: Just like e.g. Arm32, which has a
similar comment and a similar check, relocations against STN_UNDEF have
to be permitted to satisfy the ELF spec.

bfd/elfnn-aarch64.c

index c4db1e6f168e97938089a23d9328ab42b08b8991..c23cbd3601ab9216820a313abfac0c72374bd592 100644 (file)
@@ -6946,8 +6946,12 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
 
          /* An object file might have a reference to a local
             undefined symbol.  This is a daft object file, but we
-            should at least do something about it.  */
+            should at least do something about it.  NONE and NULL
+            relocations do not use the symbol and are explicitly
+            allowed to use an undefined one, so allow those.
+            Likewise for relocations against STN_UNDEF.  */
          if (r_type != R_AARCH64_NONE && r_type != R_AARCH64_NULL
+             && r_symndx != STN_UNDEF
              && bfd_is_und_section (sec)
              && ELF_ST_BIND (sym->st_info) != STB_WEAK)
            (*info->callbacks->undefined_symbol)