[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/16715] -Bsymbolic breaks PMF comparison under ARM
From: |
thomas at kdab dot com |
Subject: |
[Bug ld/16715] -Bsymbolic breaks PMF comparison under ARM |
Date: |
Thu, 20 Mar 2014 10:26:11 +0000 |
https://sourceware.org/bugzilla/show_bug.cgi?id=16715
--- Comment #2 from Thomas McGuire <thomas at kdab dot com> ---
Attached a C-only testcase (forgot to rename the files from .cpp to .c, but I
don't think that matters). The testcase simply outputs the function pointer of
a function in a shared library, and one can see that the address is not the
same.
Compile with:
gcc -fPIC -shared -Wall -o libshared.so -Wl,-Bsymbolic shared.cpp
gcc -fPIE -Wall -o main main.cpp -L. -lshared
The output on my machine is:
# ./main
0x8518
0x2ac595cc
The root of the problem seems to be that main gets the following undefined
symbol:
Num: Value Size Type Bind Vis Ndx Name
14: 0000853c 0 FUNC GLOBAL DEFAULT UND testFunction()
This is a special hack - an undefined symbol that nevertheless has a value! See
http://www.airs.com/blog/archives/42 for details on how that hack is supposed
to work.
The idea is to use a different symbol value depending on the relocation type -
a relocation for R_ARM_JUMP_SLOT should always resolve to the local PLT, but a
relocation of type R_ARM_GLOB_DAT should use the symbol value defined in main.
The problem is that libshared.so doesn't contain a R_ARM_GLOB_DAT relocation
when taking the address of the function, but a R_ARM_RELATIVE relocation, and
will therefore never resolve the function address to the value in main.
I guess this is a consequence of using -Bsymbolic - when taking the address of
a function, it should still go through the GOT, with a R_ARM_GLOB_DAT
relocation, despite -Bsymbolic being set.
Or at least that is what I think is the cause of the problem, I am by no means
a Linker export, I only recently started being interested in this topic.
--
You are receiving this mail because:
You are on the CC list for the bug.
- [Bug ld/16715] New: -Bsymbolic breaks PMF comparison under ARM, giuseppe.dangelo at kdab dot com, 2014/03/17
- [Bug ld/16715] -Bsymbolic breaks PMF comparison under ARM, thomas at kdab dot com, 2014/03/19
- [Bug ld/16715] -Bsymbolic breaks PMF comparison under ARM, thomas at kdab dot com, 2014/03/20
- [Bug ld/16715] -Bsymbolic breaks PMF comparison under ARM,
thomas at kdab dot com <=
- [Bug ld/16715] -Bsymbolic breaks PMF comparison under ARM, thomas at kdab dot com, 2014/03/20
- [Bug ld/16715] -Bsymbolic breaks function pointer comparison under ARM, giuseppe.dangelo at kdab dot com, 2014/03/20
- [Bug ld/16715] -Bsymbolic breaks function pointer comparison under ARM, thomas at kdab dot com, 2014/03/20
- [Bug ld/16715] -Bsymbolic breaks function pointer comparison under ARM, cvs-commit at gcc dot gnu.org, 2014/03/20
- [Bug ld/16715] -Bsymbolic breaks function pointer comparison under ARM, giuseppe.dangelo at kdab dot com, 2014/03/20