[Bug target/38643] New: Doesn't hide (visibility-wise) vtables and VTTs on ARM EABI
tbm at cyrius dot com
gcc-bugzilla@gcc.gnu.org
Sat Dec 27 17:15:00 GMT 2008
[ Forwarded from http://bugs.debian.org/490173 ]
Mike Hommey <mh@glandium.org> reported the following bug to Debian:
GCC doesn't hide (visibility-wise) vtables and VTTs on ARM (EABI).
The problem can be seen on the following code:
-----8<---------
class A {
public:
int a;
virtual int v();
};
int A::v() {
return 2;
}
class B : public A {
public:
int b;
};
extern "C" __attribute__((visibility("default"))) int test(void) {
B *b = new B;
return b->v();
}
-------->8-------
Build with: g++ -fvisibility=hidden -o test.o -c test.cpp
Take a look at symbols with objdump -x test.o
Relevant part:
00000000 g O .rodata 0000000c _ZTV1A
00000000 w O .rodata._ZTV1B 0000000c _ZTV1B
These should be marked .hidden.
Resulting shared library (g++ -shared -fvisibility=hidden -o test.so test.cpp)
exports both _ZTV1A and _ZTV1B symbols as a result of this, which is
unexpected.
Proper result is obtained on other architectures (x86 below):
00000000 w O .rodata._ZTV1A 0000000c .hidden _ZTV1A
00000000 w O .rodata._ZTV1B 0000000c .hidden _ZTV1B
Note this may be related to the fact that apparently, ARM doesn't have vtables
in .rodata.
This happens with gcc 4.2, 4.3 and trunk.
--
Summary: Doesn't hide (visibility-wise) vtables and VTTs on ARM
EABI
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tbm at cyrius dot com
GCC target triplet: arm-linux-gnueabi
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38643
More information about the Gcc-bugs
mailing list