Bug 19939 - Incorrect error message for undefined symbols
Summary: Incorrect error message for undefined symbols
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: ld (show other bugs)
Version: 2.27
: P2 normal
Target Milestone: 2.27
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-04-11 15:58 UTC by H.J. Lu
Modified: 2016-04-12 11:07 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2016-04-11 15:58:00 UTC
[hjl@gnu-6 xxx]$ cat x.S
	.text
selector:
#ifdef __x86_64__
	movq	foo@GOTPCREL(%rip), %rax
#else
	movl	foo@GOT(%eax), %eax
#endif
	jmp	xxx
	.type   selector, %gnu_indirect_function
	.globl	bar
bar:
	jmp	selector@PLT
[hjl@gnu-6 xxx]$ make LD=ld
gcc -B./  -c -o x.o x.S
ld -shared -z defs -o x.so x.o
ld: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
ld: failed to set dynamic section sizes: Bad value
Makefile:24: recipe for target 'x.so' failed
make: *** [x.so] Error 1
[hjl@gnu-6 xxx]$ 

The dynamic reloc in read-only section is against normal symbol, xxx,
not IFUNC symbol, selector.
Comment 1 cvs-commit@gcc.gnu.org 2016-04-12 02:46:14 UTC
The master branch has been updated by H.J. Lu <hjl@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2df3368d851b653880c2e3312c99eb8adf89f3db

commit 2df3368d851b653880c2e3312c99eb8adf89f3db
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Apr 11 19:41:37 2016 -0700

    Properly handle dynamic reloc against normal symbol
    
    We shouldn't issue an error for read-only segment with dynamic IFUNC
    relocations when dynamic relocations are against normal symbols.
    
    bfd/
    
    	PR ld/19939
    	* elf-bfd.h (_bfd_elf_allocate_ifunc_dyn_relocs): Add a pointer
    	to bfd_boolean.
    	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Updated.
    	Set *readonly_dynrelocs_against_ifunc_p to TRUE if dynamic reloc
    	applies to read-only section.
    	* elf32-i386.c (elf_i386_link_hash_table): Add
    	readonly_dynrelocs_against_ifunc.
    	(elf_i386_allocate_dynrelocs): Updated.
    	(elf_i386_size_dynamic_sections): Issue an error for read-only
    	segment with dynamic IFUNC relocations only if
    	readonly_dynrelocs_against_ifunc is TRUE.
    	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add
    	readonly_dynrelocs_against_ifunc.
    	(elf_x86_64_allocate_dynrelocs): Updated.
    	(elf_x86_64_size_dynamic_sections): Issue an error for read-only
    	segment with dynamic IFUNC relocations only if
    	readonly_dynrelocs_against_ifunc is TRUE.
    	* elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs):
    	Updated.
    
    ld/
    
    	PR ld/19939
    	* testsuite/ld-i386/i386.exp: Run PR ld/19939 tests.
    	* testsuite/ld-x86-64/x86-64.exp: Likewise.
    	* testsuite/ld-i386/pr19939.s: New file.
    	* testsuite/ld-i386/pr19939a.d: Likewise.
    	* testsuite/ld-i386/pr19939b.d: Likewise.
    	* testsuite/ld-x86-64/pr19939.s: Likewise.
    	* testsuite/ld-x86-64/pr19939a.d: Likewise.
    	* testsuite/ld-x86-64/pr19939b.d: Likewise.
Comment 2 H.J. Lu 2016-04-12 11:07:07 UTC
Fixed for 2.27.