R_X86_64_COPY bug

Florian Weimer fweimer@redhat.com
Sun Apr 7 10:47:00 GMT 2013


On 04/07/2013 03:48 AM, Fredrick Prashanth John Berchmans wrote:
> A struct with zero length array is defined in a shared library as a global data.
> A binary links with this shared library and accesses the struct.
> Because of copy relocation semantics, the binary linking with that
> library sees(correctly) only the portion of the struct without the
> zero length array.
> We understand that it is due to the wrong or apparent size calculation
> of the struct by GCC and using copy relocation semantics to resolve this
> shared symbol is causing this problem.

This seems to be a bug in GCC:

	.globl	test_dynamic
	.data
	.align 4
	.type	test_dynamic, @object
	.size	test_dynamic, 4
test_dynamic:
	.long	6
	.long	1
	.long	2
	.long	3
	.long	4
	.long	5
	.long	6

The .size directive is wrong.  I couldn't find anything matching in 
Bugzilla, so you probably should file a new bug.

As a workaround, you could declare the struct object in question as 
static.  This should disable copy relocation.

-- 
Florian Weimer / Red Hat Product Security Team



More information about the Binutils mailing list