From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13327 invoked by alias); 23 Jan 2006 23:26:18 -0000 Received: (qmail 13315 invoked by uid 48); 23 Jan 2006 23:26:16 -0000 Date: Mon, 23 Jan 2006 23:26:00 -0000 From: "vapier at gentoo dot org" To: glibc-bugs@sources.redhat.com Message-ID: <20060123232615.2198.vapier@gentoo.org> Reply-To: sourceware-bugzilla@sourceware.org Subject: [Bug libc/2198] New: fix __hidden_ver1 when USER_LABEL_PREFIX is defined to something other than "" X-Bugzilla-Reason: CC Mailing-List: contact glibc-bugs-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: glibc-bugs-owner@sourceware.org X-SW-Source: 2006-01/txt/msg00135.txt.bz2 List-Id: i'm playing with the blackfin target which defines USER_LABEL_PREFIX to "_" and i seem to be ending up with symbols with too many _ prefixes ... i traced it back to the libc_hidden_def() macro in libc-symbols.h for example, this bit of code: int __libc_close(int fd) { return fd; } strong_alias(__libc_close,close) libc_hidden_proto(close) libc_hidden_def(close) on a target where USER_LABEL_PREFIX is defined to "", we'd correctly end up with global symbols __libc_close and close, and an internal hidden __GI_close however, on an a target where USER_LABEL_PREFIX is defined to "_", we'd end up with global symbols ___libc_close and _close, an internal hidden ___GI_close, and an undefined reference to ____GI_close i'm thinking it's because __hidden_ver1() is incorrectly using __hidden_asmname() when defining the __EI_##name alias ... the alias name is processed by gcc itself which will insert USER_LABEL_PREFIX, so calling __hidden_asmname() which also inserts USER_LABEL_PREFIX for us generates an alias to a double prefixed asmname if i change __hidden_ver1() to call __hidden_asmname1() with an empty prefix for the alias, my final object ends up with the correct prefixes ... sample file along with patch are attached, tested against x86_64 and bfin elf targets current cvs: $ gcc -c hidden-test.c && readelf -s hidden-test.o | grep close 8: 0000000000000000 12 FUNC GLOBAL DEFAULT 1 __libc_close 9: 0000000000000000 12 FUNC GLOBAL DEFAULT 1 close 10: 0000000000000000 12 FUNC GLOBAL HIDDEN 1 __GI_close $ bfin-elf-gcc -c hidden-test.c && readelf -s hidden-test.o | grep close 6: 00000000 14 FUNC GLOBAL DEFAULT 1 ___libc_close 7: 00000000 14 FUNC GLOBAL HIDDEN 1 ___GI_close 8: 00000000 0 NOTYPE GLOBAL DEFAULT UND ____GI_close with my simple patch: $ gcc -DFIX -c hidden-test.c && readelf -s hidden-test.o | grep close 8: 0000000000000000 12 FUNC GLOBAL DEFAULT 1 __libc_close 9: 0000000000000000 12 FUNC GLOBAL DEFAULT 1 close 10: 0000000000000000 12 FUNC GLOBAL HIDDEN 1 __GI_close $ bfin-elf-gcc -DFIX -c hidden-test.c && readelf -s hidden-test.o | grep close 6: 00000000 14 FUNC GLOBAL DEFAULT 1 ___libc_close 7: 00000000 14 FUNC GLOBAL DEFAULT 1 _close 8: 00000000 14 FUNC GLOBAL HIDDEN 1 ___GI_close -- Summary: fix __hidden_ver1 when USER_LABEL_PREFIX is defined to something other than "" Product: glibc Version: unspecified Status: NEW Severity: minor Priority: P2 Component: libc AssignedTo: drepper at redhat dot com ReportedBy: vapier at gentoo dot org CC: glibc-bugs at sources dot redhat dot com GCC build triplet: x86_64-linux GCC host triplet: bfin-uclinux http://sourceware.org/bugzilla/show_bug.cgi?id=2198 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is.