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