From abce07110050beee89886ba9dc57ddf39cfe309f0154e224f8fb853c26e6a81e Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Sun, 22 Apr 2012 18:07:48 +0000 Subject: [PATCH] Accepting request 114965 from home:a_jaeger:my-factory-packages Fix building for PowerPC and GCC 4.7 OBS-URL: https://build.opensuse.org/request/show/114965 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=172 --- glibc-2.16-powerpc-initfini.patch | 795 ++++++++++++++++++++++++++++++ glibc.changes | 13 + glibc.spec | 11 +- 3 files changed, 818 insertions(+), 1 deletion(-) create mode 100644 glibc-2.16-powerpc-initfini.patch diff --git a/glibc-2.16-powerpc-initfini.patch b/glibc-2.16-powerpc-initfini.patch new file mode 100644 index 0000000..4153398 --- /dev/null +++ b/glibc-2.16-powerpc-initfini.patch @@ -0,0 +1,795 @@ +commit 3add8e1353d62d77fdd9b4ca363cdfe7006b0efb +Author: Joseph Myers +Date: Wed Feb 8 01:45:26 2012 +0000 + + Support crti.S and crtn.S provided directly by architectures. + +2012-02-08 Joseph Myers + + Support crti.S and crtn.S provided directly by architectures. + * csu/Makefile [crti.S in sysdirs] (generated): Do not append. + [crti.S in sysdirs] (omit-deps): Likewise. + [crti.S in sysdirs] (CFLAGS-initfini.s): Do not define variable. + [crti.S in sysdirs] ($(crtstuff:%=$(objpfx)%.o)): Disable rule. + [crti.S in sysdirs] ($(objpfx)initfini.s): Likewise. + [crti.S in sysdirs] ($(objpfx)crti.S): Likewise. + [crti.S in sysdirs] ($(objpfx)crtn.S): Likewise. + [crti.S in sysdirs] ($(patsubst %,$(objpfx)crt%.o,i n)): Likewise. + [crti.S in sysdirs] ($(objpfx)defs.h): Likewise. + [crti.S in sysdirs] (initfini.c): Remove vpath directive. + * sysdeps/i386/crti.S, sysdeps/i386/crtn.S: New files, based on + compiler output for sysdeps/generic/initfini.c. + * sysdeps/i386/elf/Makefile: Remove file. + * sysdeps/i386/Makefile (CFLAGS-initfini.s): Remove variable. + +Index: glibc-2.15/csu/Makefile +=================================================================== +--- glibc-2.15.orig/csu/Makefile ++++ glibc-2.15/csu/Makefile +@@ -75,10 +75,6 @@ before-compile += $(objpfx)abi-tag.h + generated += abi-tag.h + endif + +-ifeq ($(have-initfini),yes) +- +-CPPFLAGS += -DHAVE_INITFINI +- + # These are the special initializer/finalizer files. They are always the + # first and last file in the link. crti.o ... crtn.o define the global + # "functions" _init and _fini to run the .init and .fini sections. +@@ -86,6 +82,13 @@ crtstuff = crti crtn + + install-lib += $(crtstuff:=.o) + extra-objs += $(crtstuff:=.o) ++ ++# Conditionals on the existence of a sysdeps version of crti.S are ++# temporary until all targets either have such a file or have been ++# removed, after which the old approach of postprocessing compiler ++# output will be removed. ++ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) ++ + generated += $(crtstuff:=.S) initfini.s defs.h + omit-deps += $(crtstuff) + +Index: glibc-2.15/nptl/Makefile +=================================================================== +--- glibc-2.15.orig/nptl/Makefile ++++ glibc-2.15/nptl/Makefile +@@ -335,15 +335,22 @@ ifneq (,$(patsubst .,,$(multidir))) + generated-dirs := $(firstword $(subst /, , $(multidir))) + crti-objs += $(multidir)/crti.o + crtn-objs += $(multidir)/crtn.o ++# Conditionals on the existence of a sysdeps version of crti.S are ++# temporary until all targets either have such a file or have been ++# removed, after which the old approach of postprocessing compiler ++# output will be removed. ++ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) + omit-deps += $(multidir)/crti $(multidir)/crtn ++endif + $(objpfx)$(multidir): + mkdir -p $@ + endif + extra-objs += $(crti-objs) $(crtn-objs) ++ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) + omit-deps += crti crtn +- + CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) -fno-unwind-tables -fno-asynchronous-unwind-tables + endif ++endif + + CFLAGS-flockfile.c = -D_IO_MTSAFE_IO + CFLAGS-ftrylockfile.c = -D_IO_MTSAFE_IO +@@ -543,15 +550,24 @@ $(addprefix $(objpfx),$(tests) $(test-sr + endif + + ifeq ($(build-shared),yes) ++ifeq (,$(wildcard $(sysdirs:%=%/crti.S))) + vpath pt-initfini.c $(sysdirs) + + $(objpfx)pt-initfini.s: pt-initfini.c + $(compile.c) -S $(CFLAGS-pt-initfini.s) -finhibit-size-directive \ + $(patsubst -f%,-fno-%,$(exceptions)) -o $@ ++endif + + $(objpfx)tst-cleanup0.out: /dev/null $(objpfx)tst-cleanup0 + $(make-test-out) 2>&1 | cmp - tst-cleanup0.expect > $@ + ++ifneq (,$(wildcard $(sysdirs:%=%/crti.S))) ++ ++$(objpfx)crti.o: $(objpfx)pt-crti.o ++ ln -f $< $@ ++ ++else ++ + # We only have one kind of startup code files. Static binaries and + # shared libraries are build using the PIC version. + $(objpfx)crti.S: $(objpfx)pt-initfini.s +@@ -573,6 +589,8 @@ $(objpfx)crti.o: $(objpfx)crti.S $(objpf + $(objpfx)crtn.o: $(objpfx)crtn.S $(objpfx)defs.h + $(compile.S) -g0 $(ASFLAGS-.os) -o $@ + ++endif ++ + ifneq ($(multidir),.) + $(objpfx)$(multidir)/crti.o: $(objpfx)crti.o $(objpfx)$(multidir)/ + ln -f $< $@ +Index: glibc-2.15/nptl/pt-crti.S +=================================================================== +--- /dev/null ++++ glibc-2.15/nptl/pt-crti.S +@@ -0,0 +1,44 @@ ++/* Special .init and .fini section support for libpthread. ++ Copyright (C) 2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* Arrange for __pthread_initialize_minimal_internal to be called at ++ libpthread startup, instead of conditionally calling ++ __gmon_start__. */ ++ ++#define PREINIT_FUNCTION __pthread_initialize_minimal_internal ++#define PREINIT_FUNCTION_WEAK 0 ++ ++#include +Index: glibc-2.15/sysdeps/i386/Makefile +=================================================================== +--- glibc-2.15.orig/sysdeps/i386/Makefile ++++ glibc-2.15/sysdeps/i386/Makefile +@@ -5,12 +5,6 @@ asm-CPPFLAGS += -DGAS_SYNTAX + # The i386 `long double' is a distinct type we support. + long-double-fcts = yes + +-ifeq ($(subdir),csu) +-# On i686 we must avoid generating the trampoline functions generated +-# to get the GOT pointer. +-CFLAGS-initfini.s += -march=i386 -mtune=i386 +-endif +- + ifeq ($(subdir),gmon) + sysdep_routines += i386-mcount + endif +Index: glibc-2.15/sysdeps/i386/crti.S +=================================================================== +--- /dev/null ++++ glibc-2.15/sysdeps/i386/crti.S +@@ -0,0 +1,85 @@ ++/* Special .init and .fini section support for x86. ++ Copyright (C) 1995-2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* crti.S puts a function prologue at the beginning of the .init and ++ .fini sections and defines global symbols for those addresses, so ++ they can be called as functions. The symbols _init and _fini are ++ magic and cause the linker to emit DT_INIT and DT_FINI. */ ++ ++#include ++#include ++ ++#ifndef PREINIT_FUNCTION ++# define PREINIT_FUNCTION __gmon_start__ ++#endif ++ ++#ifndef PREINIT_FUNCTION_WEAK ++# define PREINIT_FUNCTION_WEAK 1 ++#endif ++ ++#if PREINIT_FUNCTION_WEAK ++ weak_extern (PREINIT_FUNCTION) ++#else ++ .hidden PREINIT_FUNCTION ++#endif ++ ++ .section .init,"ax",@progbits ++ .p2align 2 ++ .globl _init ++ .type _init, @function ++_init: ++ pushl %ebx ++ /* Maintain 16-byte stack alignment for called functions. */ ++ subl $8, %esp ++ LOAD_PIC_REG (bx) ++#if PREINIT_FUNCTION_WEAK ++ movl PREINIT_FUNCTION@GOT(%ebx), %eax ++ testl %eax, %eax ++ je .Lno_weak_fn ++ call PREINIT_FUNCTION@PLT ++.Lno_weak_fn: ++#else ++ call PREINIT_FUNCTION ++#endif ++ ++ .section .fini,"ax",@progbits ++ .p2align 2 ++ .globl _fini ++ .type _fini, @function ++_fini: ++ pushl %ebx ++ subl $8, %esp ++ LOAD_PIC_REG (bx) +Index: glibc-2.15/sysdeps/i386/crtn.S +=================================================================== +--- /dev/null ++++ glibc-2.15/sysdeps/i386/crtn.S +@@ -0,0 +1,48 @@ ++/* Special .init and .fini section support for x86. ++ Copyright (C) 1995-2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* crtn.S puts function epilogues in the .init and .fini sections ++ corresponding to the prologues in crti.S. */ ++ ++ .section .init,"ax",@progbits ++ addl $8, %esp ++ popl %ebx ++ ret ++ ++ .section .fini,"ax",@progbits ++ addl $8, %esp ++ popl %ebx ++ ret +Index: glibc-2.15/sysdeps/i386/elf/Makefile +=================================================================== +--- glibc-2.15.orig/sysdeps/i386/elf/Makefile ++++ /dev/null +@@ -1,4 +0,0 @@ +-ifeq ($(subdir),csu) +-# Turn off -fasynchronous-unwind-tables +-CFLAGS-initfini.s += -fno-asynchronous-unwind-tables +-endif +Index: glibc-2.15/Makeconfig +=================================================================== +--- glibc-2.15.orig/Makeconfig ++++ glibc-2.15/Makeconfig +@@ -394,11 +394,6 @@ ifndef asm-CPPFLAGS + asm-CPPFLAGS = + endif + +-# ELF always supports init/fini sections +-ifeq ($(elf),yes) +-have-initfini = yes +-endif +- + ifeq ($(have-as-needed),yes) + as-needed := -Wl,--as-needed + no-as-needed := -Wl,--no-as-needed +@@ -412,14 +407,8 @@ no-whole-archive = -Wl,--no-whole-archiv + whole-archive = -Wl,--whole-archive + + # Installed name of the startup code. +-ifneq ($(have-initfini),yes) +-# When not having init/fini, there is just one startfile, called crt0.o. +-start-installed-name = crt0.o +-else +-# On systems having init/fini, crt0.o is called crt1.o, and there are +-# some additional bizarre files. ++# The ELF convention is that the startfile is called crt1.o + start-installed-name = crt1.o +-endif + # On systems that do not need a special startfile for statically linked + # binaries, simply set it to the normal name. + ifndef static-start-installed-name +Index: glibc-2.15/config.h.in +=================================================================== +--- glibc-2.15.orig/config.h.in ++++ glibc-2.15/config.h.in +@@ -42,9 +42,6 @@ + assembler instructions per line. Default is `;' */ + #undef ASM_LINE_SEP + +-/* Define if not using ELF, but `.init' and `.fini' sections are available. */ +-#undef HAVE_INITFINI +- + /* Define if __attribute__((section("foo"))) puts quotes around foo. */ + #undef HAVE_SECTION_QUOTES + +Index: glibc-2.15/config.make.in +=================================================================== +--- glibc-2.15.orig/config.make.in ++++ glibc-2.15/config.make.in +@@ -48,11 +48,9 @@ all-warnings = @all_warnings@ + elf = @elf@ + have-z-combreloc = @libc_cv_z_combreloc@ + have-z-execstack = @libc_cv_z_execstack@ +-have-initfini = @libc_cv_have_initfini@ + have-Bgroup = @libc_cv_Bgroup@ + have-as-needed = @libc_cv_as_needed@ + libgcc_s_suffix = @libc_cv_libgcc_s_suffix@ +-need-nopic-initfini = @nopic_initfini@ + with-fp = @with_fp@ + old-glibc-headers = @old_glibc_headers@ + unwind-find-fde = @libc_cv_gcc_unwind_find_fde@ +Index: glibc-2.15/configure +=================================================================== +--- glibc-2.15.orig/configure ++++ glibc-2.15/configure +@@ -610,7 +610,6 @@ RELEASE + VERSION + mach_interface_list + DEFINES +-nopic_initfini + static_nss + bounded + omitfp +@@ -7995,7 +7994,6 @@ $as_echo "$libc_cv_pic_default" >&6; } + + + +- + + + +Index: glibc-2.15/configure.in +=================================================================== +--- glibc-2.15.orig/configure.in ++++ glibc-2.15/configure.in +@@ -2377,7 +2377,6 @@ AC_SUBST(profile) + AC_SUBST(omitfp) + AC_SUBST(bounded) + AC_SUBST(static_nss) +-AC_SUBST(nopic_initfini) + + AC_SUBST(DEFINES) + +Index: glibc-2.15/csu/gmon-start.c +=================================================================== +--- glibc-2.15.orig/csu/gmon-start.c ++++ glibc-2.15/csu/gmon-start.c +@@ -1,5 +1,5 @@ + /* Code to enable profiling at program startup. +- Copyright (C) 1995,1996,1997,2000,2001,2002 Free Software Foundation, Inc. ++ Copyright (C) 1995,1996,1997,2000,2001,2002,2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -43,23 +43,14 @@ extern char etext[]; + # endif + #endif + +-#ifndef HAVE_INITFINI +-/* This function gets called at startup by the normal constructor +- mechanism. We link this file together with start.o to produce gcrt1.o, +- so this constructor will be first in the list. */ +- +-extern void __gmon_start__ (void) __attribute__ ((constructor)); +-#else +-/* In ELF and COFF, we cannot use the normal constructor mechanism to call ++/* We cannot use the normal constructor mechanism to call + __gmon_start__ because gcrt1.o appears before crtbegin.o in the link. +- Instead crti.o calls it specially (see initfini.c). */ ++ Instead crti.o calls it specially. */ + extern void __gmon_start__ (void); +-#endif + + void + __gmon_start__ (void) + { +-#ifdef HAVE_INITFINI + /* Protect from being called more than once. Since crti.o is linked + into every shared library, each of their init functions will call us. */ + static int called; +@@ -68,7 +59,6 @@ __gmon_start__ (void) + return; + + called = 1; +-#endif + + /* Start keeping profiling records. */ + __monstartup ((u_long) TEXT_START, (u_long) &etext); +Index: glibc-2.15/sysdeps/powerpc/powerpc32/crti.S +=================================================================== +--- /dev/null ++++ glibc-2.15/sysdeps/powerpc/powerpc32/crti.S +@@ -0,0 +1,90 @@ ++/* Special .init and .fini section support for PowerPC. ++ Copyright (C) 2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* crti.S puts a function prologue at the beginning of the .init and ++ .fini sections and defines global symbols for those addresses, so ++ they can be called as functions. The symbols _init and _fini are ++ magic and cause the linker to emit DT_INIT and DT_FINI. */ ++ ++#include ++#include ++ ++#ifndef PREINIT_FUNCTION ++# define PREINIT_FUNCTION __gmon_start__ ++#endif ++ ++#ifndef PREINIT_FUNCTION_WEAK ++# define PREINIT_FUNCTION_WEAK 1 ++#endif ++ ++#if PREINIT_FUNCTION_WEAK ++ weak_extern (PREINIT_FUNCTION) ++#else ++ .hidden PREINIT_FUNCTION ++#endif ++ ++ .section .init,"ax",@progbits ++ .align 2 ++ .globl _init ++ .type _init, @function ++_init: ++ stwu r1, -16(r1) ++ mflr r0 ++ stw r0, 20(r1) ++ stw r30, 8(r1) ++ SETUP_GOT_ACCESS (r30, .Lgot_label_i) ++ addis r30, r30, _GLOBAL_OFFSET_TABLE_-.Lgot_label_i@ha ++ addi r30, r30, _GLOBAL_OFFSET_TABLE_-.Lgot_label_i@l ++#if PREINIT_FUNCTION_WEAK ++ lwz r0, PREINIT_FUNCTION@got(r30) ++ cmpwi cr7, r0, 0 ++ beq+ cr7, 1f ++ bl PREINIT_FUNCTION@plt ++1: ++#else ++ bl PREINIT_FUNCTION@local ++#endif ++ ++ .section .fini,"ax",@progbits ++ .align 2 ++ .globl _fini ++ .type _fini, @function ++_fini: ++ stwu r1, -16(r1) ++ mflr r0 ++ stw r0, 20(r1) ++ stw r30, 8(r1) ++ SETUP_GOT_ACCESS (r30, .Lgot_label_f) +Index: glibc-2.15/sysdeps/powerpc/powerpc32/crtn.S +=================================================================== +--- /dev/null ++++ glibc-2.15/sysdeps/powerpc/powerpc32/crtn.S +@@ -0,0 +1,54 @@ ++/* Special .init and .fini section support for PowerPC. ++ Copyright (C) 2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* crtn.S puts function epilogues in the .init and .fini sections ++ corresponding to the prologues in crti.S. */ ++ ++#include ++ ++ .section .init,"ax",@progbits ++ lwz r0, 20(r1) ++ mtlr r0 ++ lwz r30, 8(r1) ++ addi r1, r1, 16 ++ blr ++ ++ .section .fini,"ax",@progbits ++ lwz r0, 20(r1) ++ mtlr r0 ++ lwz r30, 8(r1) ++ addi r1, r1, 16 ++ blr +Index: glibc-2.15/sysdeps/powerpc/powerpc64/crti.S +=================================================================== +--- /dev/null ++++ glibc-2.15/sysdeps/powerpc/powerpc64/crti.S +@@ -0,0 +1,107 @@ ++/* Special .init and .fini section support for PowerPC64. ++ Copyright (C) 2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* crti.S puts a function prologue at the beginning of the .init and ++ .fini sections and defines global symbols for those addresses, so ++ they can be called as functions. The symbols _init and _fini are ++ magic and cause the linker to emit DT_INIT and DT_FINI. */ ++ ++#include ++#include ++ ++#ifndef PREINIT_FUNCTION ++# define PREINIT_FUNCTION __gmon_start__ ++#endif ++ ++#ifndef PREINIT_FUNCTION_WEAK ++# define PREINIT_FUNCTION_WEAK 1 ++#endif ++ ++#if PREINIT_FUNCTION_WEAK ++ weak_extern (PREINIT_FUNCTION) ++#else ++ .hidden PREINIT_FUNCTION ++#endif ++ ++#if PREINIT_FUNCTION_WEAK ++ .section ".toc", "aw" ++.LC0: ++ .tc PREINIT_FUNCTION[TC], PREINIT_FUNCTION ++#endif ++ .type BODY_LABEL (_init), @function ++ .globl _init ++ .section ".opd", "aw" ++ .align 3 ++_init: OPD_ENT (_init) ++#ifdef HAVE_ASM_GLOBAL_DOT_NAME ++ .globl BODY_LABEL (_init) ++ .size _init, 24 ++#else ++ .type _init, @function ++#endif ++ .section ".init", "ax", @progbits ++ .align ALIGNARG (2) ++BODY_LABEL (_init): ++ mflr 0 ++ std 0, 16(r1) ++ stdu r1, -112(r1) ++#if PREINIT_FUNCTION_WEAK ++ addis r9, r2, .LC0@toc@ha ++ ld r0, .LC0@toc@l(r9) ++ cmpdi cr7, r0, 0 ++ beq+ cr7, 1f ++#endif ++ bl JUMPTARGET (PREINIT_FUNCTION) ++ nop ++1: ++ ++ .type BODY_LABEL (_fini), @function ++ .globl _fini ++ .section ".opd", "aw" ++ .align 3 ++_fini: OPD_ENT (_fini) ++#ifdef HAVE_ASM_GLOBAL_DOT_NAME ++ .globl BODY_LABEL (_fini) ++ .size _fini, 24 ++#else ++ .type _fini, @function ++#endif ++ .section ".fini", "ax", @progbits ++ .align ALIGNARG (2) ++BODY_LABEL (_fini): ++ mflr 0 ++ std 0, 16(r1) ++ stdu r1, -112(r1) +Index: glibc-2.15/sysdeps/powerpc/powerpc64/crtn.S +=================================================================== +--- /dev/null ++++ glibc-2.15/sysdeps/powerpc/powerpc64/crtn.S +@@ -0,0 +1,52 @@ ++/* Special .init and .fini section support for PowerPC64. ++ Copyright (C) 2012 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ In addition to the permissions in the GNU Lesser General Public ++ License, the Free Software Foundation gives you unlimited ++ permission to link the compiled version of this file with other ++ programs, and to distribute those programs without any restriction ++ coming from the use of this file. (The GNU Lesser General Public ++ License restrictions do apply in other respects; for example, they ++ cover modification of the file, and distribution when not linked ++ into another program.) ++ ++ Note that people who make modified versions of this file are not ++ obligated to grant this special exception for their modified ++ versions; it is their choice whether to do so. The GNU Lesser ++ General Public License gives permission to release a modified ++ version without this exception; this exception also makes it ++ possible to release a modified version which carries forward this ++ exception. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++/* crtn.S puts function epilogues in the .init and .fini sections ++ corresponding to the prologues in crti.S. */ ++ ++#include ++ ++ .section .init,"ax",@progbits ++ addi r1, r1, 112 ++ ld r0, 16(r1) ++ mtlr r0 ++ blr ++ ++ .section .fini,"ax",@progbits ++ addi r1, r1, 112 ++ ld r0, 16(r1) ++ mtlr r0 ++ blr diff --git a/glibc.changes b/glibc.changes index b7fdb33..0115fb2 100644 --- a/glibc.changes +++ b/glibc.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Sun Apr 22 11:35:05 UTC 2012 - aj@suse.de + +- gcc 4.7 does not build crt files properly on powerpc64, backport + patch from upstream to handle this + (glibc-2.16-powerpc-initfini.patch) + +------------------------------------------------------------------- +Fri Apr 20 18:28:18 UTC 2012 - aj@suse.de + +- Disable patch x86-cpuid-level2.patch, this should be fixed in + valgrind now. + ------------------------------------------------------------------- Thu Apr 19 11:12:43 UTC 2012 - aj@suse.de diff --git a/glibc.spec b/glibc.spec index 88209ec..53f8166 100644 --- a/glibc.spec +++ b/glibc.spec @@ -197,6 +197,8 @@ Patch17: glibc-compiled-binaries.diff # PATCH-FEATURE-SLE increase cpusetsize to 4096, needs to be kept for compatibility kukuk@suse.de (XXX: Review) Patch18: glibc-cpusetsize.diff # PATCH-FIX-OPENSUSE Do not trigger an abort when an i586 Intel CPU is running the i686 library, as valgrind does. bnc#681398 aj@suse.de +# According the the Debian bug report, this is fixed in valgrind now, so disable +# this patch. Patch19: x86-cpuid-level2.patch ### Locale related patches @@ -266,6 +268,8 @@ Patch1007: glibc-2.16-fix-check-abi.patch Patch1008: glibc-2.16-fix-check-localplt.patch # PATCH-FIX-UPSTREAM - Allow compilation with -altivec aj@suse.de Patch1009: glibc-uio-cell.diff +# PATCH-FIX-UPSTREAM - do not use initfini anymore +Patch1010: glibc-2.16-powerpc-initfini.patch ### # Patches awaiting upstream approval @@ -496,7 +500,8 @@ rm nscd/s-stamp %patch16 -p1 %patch17 -p1 %patch18 -p1 -%patch19 -p1 +# This should be fixed in valgrind now +#%patch19 -p1 %patch100 -p1 %patch101 -p1 @@ -530,6 +535,10 @@ rm nscd/s-stamp %patch1007 -p1 %patch1008 -p1 %patch1009 -p1 +%ifarch ppc ppc64 +# to support further architectures, some more changes are needed +%patch1010 -p1 +%endif %patch2001 -p1 %ifarch armv7l