|
Message-ID: <20121030160020.GA12267@cachalot> Date: Tue, 30 Oct 2012 20:00:20 +0400 From: Vasily Kulikov <segoon@...nwall.com> To: owl-dev@...ts.openwall.com Subject: Re: glibc On Tue, Oct 30, 2012 at 05:57 +0400, Dmitry V. Levin wrote: > On Mon, Oct 29, 2012 at 11:34:39PM +0400, Dmitry V. Levin wrote: > > On Mon, Oct 29, 2012 at 10:17:48PM +0400, Vasily Kulikov wrote: > > [...] > > > 'strncmp' symbol is present on x86_64, but absent on i686: > > > > > > $ readelf -s logs/glibc-build-i386/elf/rtld-libc.a | grep strncmp > > > 22: 00000000 0 NOTYPE GLOBAL DEFAULT UND strncmp > > > File: logs/glibc-build-i386/elf/rtld-libc.a(rtld-strncmp-c.os) > > > 1: 00000000 0 FILE LOCAL DEFAULT ABS strncmp-c.c > > > 15: 00000000 279 FUNC GLOBAL DEFAULT 1 __strncmp_ia32 > > > 16: 00000000 279 FUNC GLOBAL DEFAULT 1 __GI_strncmp > > > > > > $ readelf -s logs/glibc-build-x86_64/elf/rtld-libc.a | grep strncmp > > > 19: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND strncmp > > > File: logs/glibc-build-x86_64/elf/rtld-libc.a(rtld-strncmp.os) > > > 10: 0000000000000000 33 FUNC GLOBAL DEFAULT 1 strncmp > > > File: logs/glibc-build-x86_64/elf/rtld-libc.a(rtld-strncmp-ssse3.os) > > > 11: 0000000000000000 33 FUNC GLOBAL DEFAULT 4 __strncmp_ssse3 > > > > The difference between x86_64 and i686 is due to STT_GNU_IFUNC. > > Try this: > > --- a/sysdeps/i386/i686/multiarch/Makefile > +++ b/sysdeps/i386/i686/multiarch/Makefile > @@ -24,6 +24,7 @@ sysdep_routines += bzero-sse2 memset-sse2 memcpy-ssse3 mempcpy-ssse3 \ > strcasecmp_l-c strcasecmp-c strcasecmp_l-ssse3 \ > strncase_l-c strncase-c strncase_l-ssse3 \ > strcasecmp_l-sse4 strncase_l-sse4 > +sysdep-rtld-routines += strncmp-c strncmp-ssse3 strncmp-sse4 > ifeq (yes,$(config-cflags-sse4)) > sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c > CFLAGS-varshift.c += -msse4 The same error. strncmp-c is compiled in rtld-libc.a: $ readelf -s rtld-libc.a | grep strncmp-c. File: rtld-libc.a(rtld-strncmp-c.os) 1: 00000000 0 FILE LOCAL DEFAULT ABS strncmp-c.c However, strncmp-{ssse3,sse4} are not. Btw, I see that there is no XXX symbol for any __GI_XXX symbol defined in 'readelf -s elf/rtld-libc.a'. IOW, no STT_GNU_IFUNC'ish function wouldn't work in rtld. Weird. (from another email) > > The direct using of 'getenv' adds the dependency. Commenting 2 usages > > of 'getenv' in the patch removed the linking problem. > > Which ones? const char *value = getenv (cp); and const char *value = getenv (nextp); from _dl_non_dynamic_init() and process_envvars(), respectively. -- Vasiliy
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.