https://sourceware.org/bugzilla/show_bug.cgi?id=29655
--- Comment #12 from Andreas Krebbel <krebbel at linux dot ibm.com> ---
So do I understand it correctly that for the Qt case the example would look
more like this:
test2.c:
#include <stdio.h>
void alias () __attribute__ ((weak, alias ("bar")));
void bar() { printf("bar=%p alias=%p\n", bar, alias); }
test1.c:
void bar();
// void *get_bar_addr() { return bar; }
int main() { bar(); }
which gives the expected result on x86 (with line 2 commented out):
bar=0x7f1e4cdb4109 alias=0x7f1e4cdb4109
but not on s390x because we always resolve to the PLT slot:
bar=0x10004b8 alias=0x3fffdf00640
On the other hand the behavior Qt is relying on depends on whether the address
of bar is taken in main. So by uncommenting line 2 the problem occurs also on
x86:
bar=0x401030 alias=0x7f63ae84a109
Neither target appears to guarantee that aliases behave the same wrt pointer
equality. On non-s390x targets it only works because Qt happens to trigger a
case where it accidentally matches.
--
You are receiving this mail because:
You are on the CC list for the bug.