diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.27/bfd/elfnn-aarch64.c --- binutils.orig/bfd/elfnn-aarch64.c 2017-02-21 10:45:19.311956006 +0000 +++ binutils-2.27/bfd/elfnn-aarch64.c 2017-02-21 11:55:07.517922655 +0000 @@ -4947,6 +4947,7 @@ elfNN_aarch64_final_link_relocate (reloc it here if it is defined in a non-shared object. */ if (h != NULL && h->type == STT_GNU_IFUNC + && (input_section->flags & SEC_ALLOC) && h->def_regular) { asection *plt; Only in binutils.orig/ld/testsuite/ld-ifunc: .#pr18808b.c Only in binutils.orig/ld/testsuite/ld-ifunc: #pr18808b.c# diff -rup binutils.orig/ld/testsuite/ld-ifunc/pr18808b.c binutils-2.27/ld/testsuite/ld-ifunc/pr18808b.c --- binutils.orig/ld/testsuite/ld-ifunc/pr18808b.c 2017-02-21 10:45:27.418826491 +0000 +++ binutils-2.27/ld/testsuite/ld-ifunc/pr18808b.c 2017-02-21 10:45:41.049608726 +0000 @@ -6,7 +6,7 @@ static int foo_impl(int x) return x; } -int bar() +void bar () { int (*f)(int) = foo;