I need some help for GCC optimization behavior which inserts call to
`memcpy` when
it detects that there is a structure variable assignment.

I have below sample code (copied from a similar gcc-help question):

[  0] [15:21:40] root@localhost : # cat b.c
struct foo_t {
        int x[1048576];
} *foo0, *foo1;

void bar(struct foo_t* foo)
{
        *foo1 = *foo;
}

int main()
{
        return 0;
}

# /usr/src/gcc-6.1.0/build/bin/gcc -fPIE -S b.c

This leads to GCC compiler issuing a call to `memcpy@PLT()' in function bar1.

I want to create a position independent executable from this source
and run this on
a secure environment which implements ASLR and the loader disallows any binary
which has PLT/GOT based relocations.

I have tried with option `-fno-tree-loop-distribute-patterns' but even
with this option,
if `-fPIE' flag is present I see that there is reference to `memcpy@PLT'.

I have even tried options like `-fno-plt' and
`-mstringop-strategy=loop' but I do not want
to use the output program generated with these options.

My problem is not with memcpy but with PLT portion; I want GCC to
generate reference
to `memcpy' (and not to `memcpy@PLT') in a position independent
executable when it
detects that there is structure variable assignment.

I have also tried by putting hidden visibility for this file but there
is same PLT
reference in this case also.
#pragma GCC visibility push(hidden)

Does GCC always insert call to `memcpy@PLT' for position independent
executables when
it detects that there is a structure variable assignment?

Is it possible to instruct GCC to insert `memcpy' with -fPIE flag for
structure variable assignments?

- GampuZ

Reply via email to