Bug 1573872 - ld should allow "lea foo@GOT, %ecx"
Summary: ld should allow "lea foo@GOT, %ecx"
Alias: None
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: binutils
Version: 7.6
Hardware: x86_64
OS: Linux
Target Milestone: rc
: ---
Assignee: Nick Clifton
QA Contact: Miloš Prchlík
Keywords: ZStream
: 1593421 (view as bug list)
Depends On:
Blocks: 1582602
TreeView+ depends on / blocked
Reported: 2018-05-02 12:18 UTC by Deepu K S
Modified: 2018-10-30 07:51 UTC (History)
10 users (show)

  The BFD based linker was being needlessly restrictive
  in its handling of a special form of the x86 LEA 
  instruction when building a shared library.

  The linker would reject valid code with an error
  message about an unsupported address mode.

  Patch the linker so that it can handle the addressing

  The linker no longers complains, but instead accepts
  and links the input file.
Clone Of:
: 1582602 (view as bug list)
Last Closed: 2018-10-30 07:50:06 UTC

Attachments (Terms of Use)

External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2018:3032 None None None 2018-10-30 07:51 UTC
Sourceware 21168 None None None 2018-05-02 12:18 UTC
Red Hat Knowledge Base (Solution) 3451312 None None None 2018-05-21 18:07 UTC
Red Hat Knowledge Base (Solution) 3452571 None None None 2018-05-23 14:45 UTC

Description Deepu K S 2018-05-02 12:18:45 UTC
Description of problem:
$ cat x.S 
	.globl	bar
	.type	bar, @function
	call	__x86.get_pc_thunk.ax
	addl	$_GLOBAL_OFFSET_TABLE_, %eax
	lea	foo@GOT, %ecx
	mov	(%eax,%ecx,1), %eax
	.section	.text.__x86.get_pc_thunk.ax,"axG",@progbits,__x86.get_pc_thunk.ax,comdat
	.globl	__x86.get_pc_thunk.ax
	.hidden	__x86.get_pc_thunk.ax
	.type	__x86.get_pc_thunk.ax, @function
	movl	(%esp), %eax
	.section	.note.GNU-stack,"",@progbits

# gcc -B./ -m32 -c -o x.o x.S
# ld -melf_i386 -shared -o libx.so x.o
ld: x.o: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object
ld: final link failed: Bad value

Version-Release number of selected component (if applicable):
Red Hat Enterprise Linux 7.5

How reproducible:

Steps to Reproduce:
1. Reproducer program provided in bug description.

Actual results:
ld: x.o: direct GOT relocation R_386_GOT32 against `foo' without base register can not be used when making a shared object
ld: final link failed: Bad value

Expected results:
No linker failures.

Additional info:

Comment 2 Nick Clifton 2018-05-02 14:57:36 UTC
This is PR 21168:


Patch on its way....

Comment 3 Nick Clifton 2018-05-02 15:21:12 UTC
Fixed in binutils-2.27-31.base.el7.

Comment 7 Nick Clifton 2018-06-21 12:13:16 UTC
*** Bug 1593421 has been marked as a duplicate of this bug. ***

Comment 8 Miloš Prchlík 2018-07-26 07:01:18 UTC
Verified for build binutils-2.27-34.base.el7 by manually running /tools/binutils/Regression/bz1573872-ld-should-allow-lea-foo-GOT-ecx test using the provided reproducer.

Comment 10 errata-xmlrpc 2018-10-30 07:50:06 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.


Note You need to log in before you can comment on or make changes to this bug.