From aa6dfe41b1e919104ad1ddd95591f4005289481452ae4e4cdceaa790b005d6d2 Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Thu, 10 Nov 2011 14:05:53 +0000 Subject: [PATCH] Accepting request 90934 from openSUSE:Factory:ARM - fix building with ports again: * ifuncs tracing backport requires adjustments - avoid using asynchronous-unwind-tables only during configure, but still built the library with unwind tables enabled - replace arm build hack with a proper solution ------------------------------------------------------------------ - armv8l architecture does not exist OBS-URL: https://build.opensuse.org/request/show/90934 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=128 --- crypt_blowfish-1.2-hack_around_arm.diff | 16 ++--- glibc-ports-2.15-ifunc-trace.patch | 95 +++++++++++++++++++++++++ glibc.changes | 12 +++- glibc.spec | 39 ++++++---- nscd-avoid-gcc-warning.diff | 11 +++ 5 files changed, 149 insertions(+), 24 deletions(-) create mode 100644 glibc-ports-2.15-ifunc-trace.patch create mode 100644 nscd-avoid-gcc-warning.diff diff --git a/crypt_blowfish-1.2-hack_around_arm.diff b/crypt_blowfish-1.2-hack_around_arm.diff index 95a0887..3beb8ea 100644 --- a/crypt_blowfish-1.2-hack_around_arm.diff +++ b/crypt_blowfish-1.2-hack_around_arm.diff @@ -1,13 +1,9 @@ --- x86.S +++ x86.S -@@ -196,8 +196,8 @@ - hlt - jmp BF_die - --#endif -- - #if defined(__ELF__) && defined(__linux__) - .section .note.GNU-stack,"",@progbits +@@ -199,5 +199,5 @@ + #endif + + #if defined(__ELF__) && defined(__linux__) +-.section .note.GNU-stack,"",@progbits ++.section .note.GNU-stack,"",%progbits #endif -+ -+#endif diff --git a/glibc-ports-2.15-ifunc-trace.patch b/glibc-ports-2.15-ifunc-trace.patch new file mode 100644 index 0000000..ae5861c --- /dev/null +++ b/glibc-ports-2.15-ifunc-trace.patch @@ -0,0 +1,95 @@ +commit 0507f293c9b67d8eec92e8178308d72f1ed88449 +Author: Andreas Schwab +Date: Wed Oct 5 11:51:41 2011 +0200 + + arm: don't call ifunc functions in trace mode + +--- a/sysdeps/arm/dl-machine.h ++++ b/sysdeps/arm/dl-machine.h +@@ -335,7 +335,7 @@ auto inline void + __attribute__ ((always_inline)) + elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, + const Elf32_Sym *sym, const struct r_found_version *version, +- void *const reloc_addr_arg) ++ void *const reloc_addr_arg, int skip_ifunc) + { + Elf32_Addr *const reloc_addr = reloc_addr_arg; + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); +@@ -369,9 +369,9 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, + Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; + + if (sym != NULL +- && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, +- 0) +- && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)) ++ && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) ++ && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) ++ && __builtin_expect (!skip_ifunc, 1)) + value = ((Elf32_Addr (*) (void)) value) (); + + switch (r_type) +@@ -430,7 +430,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, + } + case R_ARM_TLS_DESC: + { +- struct tlsdesc volatile *td = ++ struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; + + # ifndef RTLD_BOOTSTRAP +@@ -454,10 +454,10 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, + else + # endif + # endif +- { ++ { + td->argument.value = value + sym_map->l_tls_offset; + td->entry = _dl_tlsdesc_return; +- } ++ } + } + } + break; +@@ -525,7 +525,7 @@ auto inline void + __attribute__ ((always_inline)) + elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, + const Elf32_Sym *sym, const struct r_found_version *version, +- void *const reloc_addr_arg) ++ void *const reloc_addr_arg, int skip_ifunc) + { + Elf32_Addr *const reloc_addr = reloc_addr_arg; + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); +@@ -543,9 +543,9 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, + Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; + + if (sym != NULL +- && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, +- 0) +- && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)) ++ && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0) ++ && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1) ++ && __builtin_expect (!skip_ifunc, 1)) + value = ((Elf32_Addr (*) (void)) value) (); + + switch (r_type) +@@ -656,7 +656,8 @@ elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, + auto inline void + __attribute__ ((always_inline)) + elf_machine_lazy_rel (struct link_map *map, +- Elf32_Addr l_addr, const Elf32_Rel *reloc) ++ Elf32_Addr l_addr, const Elf32_Rel *reloc, ++ int skip_ifunc) + { + Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); +@@ -674,8 +675,8 @@ elf_machine_lazy_rel (struct link_map *map, + (struct tlsdesc volatile *)reloc_addr; + + /* The linker must have given us the parameter we need in the +- first GOT entry, and left the second one empty. We fill the +- last with the resolver address */ ++ first GOT entry, and left the second one empty. We fill the ++ last with the resolver address */ + assert (td->entry == 0); + td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + + map->l_addr); diff --git a/glibc.changes b/glibc.changes index d84f663..85666e2 100644 --- a/glibc.changes +++ b/glibc.changes @@ -4,6 +4,16 @@ Tue Nov 8 22:55:40 CET 2011 - dmueller@suse.de - make glibc-static provide versioned ------------------------------------------------------------------- +Tue Nov 8 18:20:39 CET 2011 - dmueller@suse.de + +- fix building with ports again: + * ifuncs tracing backport requires adjustments + +- avoid using asynchronous-unwind-tables only during configure, + but still built the library with unwind tables enabled +- replace arm build hack with a proper solution + +------------------------------------------------------------------ Mon Nov 7 21:06:32 CET 2011 - dmueller@suse.de - update glibc-ports to 2.14.1: @@ -79,8 +89,8 @@ Thu Sep 22 21:07:43 CEST 2011 - dmueller@suse.de ------------------------------------------------------------------- Thu Sep 22 13:10:02 UTC 2011 - adrian@suse.de -- add armv8l architecture - don't enforce armv5tel for all arm architectures anymore +- armv8l architecture does not exist ------------------------------------------------------------------- Tue Sep 20 07:54:21 UTC 2011 - aj@suse.de diff --git a/glibc.spec b/glibc.spec index 211672d..82121fe 100644 --- a/glibc.spec +++ b/glibc.spec @@ -80,10 +80,12 @@ Obsoletes: glibc-32bit Version: 2.14.1 Release: 12 %define git_id 4f2b767fef50 +%define glibc_ports_ver %version Url: http://www.gnu.org/software/libc/libc.html BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: glibc-%{version}-%{git_id}.tar.bz2 -Source2: http://ftp.gnu.org/gnu/glibc/glibc-ports-%{version}.tar.bz2 +%define glibc_ports_dir glibc-ports-%{glibc_ports_ver} +Source2: http://ftp.gnu.org/gnu/glibc/glibc-ports-%{glibc_ports_ver}.tar.bz2 Source3: noversion.tar.bz2 Source4: manpages.tar.bz2 Source8: nsswitch.conf @@ -209,6 +211,8 @@ Patch73: glibc-resolv-assert.diff Patch74: glibc-2.14-fix-ctors.patch # PATCH-FIX-UPSTREAM Fix trace and ifuncs aj@suse.de Patch75: glibc-2.15-ifunc-trace.patch +# PATCH-FIX-UPSTREAM Fix trace and ifuncs (talk to aj@suse.de) +Patch76: glibc-ports-2.15-ifunc-trace.patch # PATCH-FEATURE-OPENSUSE -- add sha support to crypt_blowfish lnussel@suse.de Patch80: crypt_blowfish-1.2-sha.diff # PATCH-FEATURE-OPENSUSE -- use separate symbol version for Owl extensions - lnussel@suse.de @@ -217,6 +221,8 @@ Patch81: crypt_blowfish-1.2-versioning.diff Patch82: crypt_blowfish-1.2-hack_around_arm.diff # PATCH-FIX-UPSTREAM fix unwinding when using clone() Patch83: glibc-arm-clone-unwind-fix.diff +# PATCH-FIX-OPENSUSE avoid false positive warning that triggers brp postcheck fail +Patch84: nscd-avoid-gcc-warning.diff %description The GNU C Library provides the most important standard libraries used @@ -377,8 +383,10 @@ versions of your software. %ifarch %arm # add glibc-ports for arm %setup -n glibc-%{version} -q -a 2 -a 3 -a 4 -mv glibc-ports-* ports -%patch83 +pushd %glibc_ports_dir +%patch76 -p1 +%patch83 -p1 +popd %else # any other leave out ports %setup -n glibc-%{version} -q -a 3 -a 4 @@ -388,9 +396,7 @@ tar -xzf %SOURCE50 pushd crypt_blowfish-%{crypt_bf_version} %patch80 -p1 %patch81 -p1 -%ifarch %arm %patch82 -%endif popd mv crypt/{crypt.h,gnu-crypt.h} mv crypt_blowfish-%crypt_bf_version/*.[chS] crypt/ @@ -456,6 +462,7 @@ rm nscd/s-stamp %patch73 -p1 %patch74 -p1 %patch75 -p1 +%patch84 # # Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed! @@ -548,14 +555,11 @@ PARALLEL="%{?_smp_mflags}" %ifarch %ix86 add_ons=$add_ons,noversion %endif -%ifarch %arm - add_ons=$add_ons,ports +%ifarch %arm mipsel + add_ons=$add_ons,%glibc_ports_dir # fails to build otherwise - need to recheck and fix %define enable_stackguard_randomization 0 %endif -%ifarch mipsel - add_ons=$add_ons,ports -%endif configure_and_build_glibc() { local dirname="$1"; shift @@ -563,7 +567,15 @@ configure_and_build_glibc() { local addons="$1"; shift mkdir "cc-$dirname" cd "cc-$dirname" - CFLAGS="$cflags" CC="$BuildCC" CXX="$BuildCCplus" ../configure \ +%ifarch %arm + # remove asynchronous-unwind-tables during configure as it causes + # some checks to fail spuriously on %arm + conf_cflags="${cflags/-fasynchronous-unwind-tables/}" + conf_cflags="${conf_cflags/-funwind-tables/}" +%else + conf_cflags="$cflags" +%endif + CFLAGS="$conf_cflags" CC="$BuildCC" CXX="$BuildCCplus" ../configure \ --prefix=%{_prefix} \ --libexecdir=%{_libdir} --infodir=%{_infodir} \ --enable-add-ons=nptl$addons --without-cvs --enable-profile \ @@ -584,7 +596,8 @@ configure_and_build_glibc() { --with-tls --with-__thread --enable-kernel=%{enablekernel} \ --enable-bind-now # Should we enable --enable-nss-crypt to build use freebl3 hash functions? - make $PARALLEL + # explicitly set CFLAGS to use the full CFLAGS (not the reduced one for configure) + make $PARALLEL CFLAGS="$cflags" cd .. } @@ -937,7 +950,7 @@ exit 0 %ifarch x86_64 /%{_lib}/ld-linux-x86-64.so.2 %else - %ifarch %arm armv5tel armv7l armv8l + %ifarch %arm /%{_lib}/ld-linux.so.3 %else /%{_lib}/ld-linux.so.2 diff --git a/nscd-avoid-gcc-warning.diff b/nscd-avoid-gcc-warning.diff new file mode 100644 index 0000000..2737722 --- /dev/null +++ b/nscd-avoid-gcc-warning.diff @@ -0,0 +1,11 @@ +--- nscd/connections.c ++++ nscd/connections.c +@@ -1717,6 +1717,8 @@ + ++nready; + } + /* NOTREACHED */ ++ assert(0); ++ return 0; + } + +