This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/19041] New: -fvisibility=hidden causes bad codegen for common symbols
- From: "austern at apple dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Dec 2004 18:50:44 -0000
- Subject: [Bug c/19041] New: -fvisibility=hidden causes bad codegen for common symbols
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Compile the following file with -fvisibility=hidden
int foo;
void bar(void) { foo = 0; }
You will find that the assembler rejects the .s file that the compiler creates, giving the error:
/var/tmp//cclfEVh7.s:16:non-relocatable subtraction expression, "_foo" minus "L00000000001$pb"
/var/tmp//cclfEVh7.s:16:symbol: "_foo" can't be undefined in a subtraction expression
The assembler is right to complain. The compiler generates these lines:
addis r2,r31,ha16(_foo-"L00000000001$pb")
la r2,lo16(_foo-"L00000000001$pb")(r2)
This is incorrect. Common symbols must be treated as undefined symbols, so they must be addressed
indirectly through non-lazy pointers. Without -fvisibility=hidden, the compiler gets this right.
--
Summary: -fvisibility=hidden causes bad codegen for common
symbols
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: austern at apple dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: powerpc-apple-darwin7.6.0
GCC host triplet: powerpc-apple-darwin7.6.0
GCC target triplet: powerpc-apple-darwin7.6.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19041