This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.25-182-gbdc543e


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  bdc543e338281da051b3dc06eae96c330a485ce6 (commit)
       via  db3d848e154b00071f4a5e729d5884efad410109 (commit)
      from  12fb180108f461c3c6884a512f59c9a4c5dbfb88 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=bdc543e338281da051b3dc06eae96c330a485ce6

commit bdc543e338281da051b3dc06eae96c330a485ce6
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Thu Mar 16 09:15:57 2017 -0300

    sparc: Fix .udiv plt on libc
    
    With the removal of divdi3 object from sparcv9-linux-gnu build, its
    definition came from libgcc and its functions internall calls .udiv.
    Since glibc also exports these symbols for compatibility reasons, it
    will end up creating PLT calls internally in libc.so.
    
    To avoid it, this patch uses the linker option --wrap to replace all
    the internal libc.so .udiv calls to the wrapper __wrap_.udiv. Along
    with strong alias in the udiv implementations, it makes linker do
    local calls.
    
    Checked on sparcv9-linux-gnu.
    
    	* sysdeps/sparc/sparc32/Makefile (libc.so-gnulib): New rule.
    	* sysdeps/sparc/sparc32/sparcv8/udiv.S (.udiv): Make a strong_alias
    	to __wrap_.udiv.
    	* sysdeps/sparc/sparc32/sparcv9/udiv.S (.udiv): Likewise.
    	* sysdeps/sparc/sparc32/udiv.S (.udiv): Likewise.

diff --git a/ChangeLog b/ChangeLog
index e70ecd7..9024e62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2017-04-05  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+	* sysdeps/sparc/sparc32/Makefile (libc.so-gnulib): New rule.
+	* sysdeps/sparc/sparc32/sparcv8/udiv.S (.udiv): Make a strong_alias
+	to __wrap_.udiv.
+	* sysdeps/sparc/sparc32/sparcv9/udiv.S (.udiv): Likewise.
+	* sysdeps/sparc/sparc32/udiv.S (.udiv): Likewise.
+
 	* sysdeps/i386/symbol-hacks.h: New file.
 	* sysdeps/m68k/symbol-hacks.h: New file.
 	* sysdeps/powerpc/powerpc32/symbol-hacks.h: New file.
diff --git a/sysdeps/sparc/sparc32/Makefile b/sysdeps/sparc/sparc32/Makefile
index da20589..14d6e03 100644
--- a/sysdeps/sparc/sparc32/Makefile
+++ b/sysdeps/sparc/sparc32/Makefile
@@ -47,3 +47,9 @@ $(divrem:%=$(sysdep_dir)/sparc/sparc32/%.S): $(sysdep_dir)/sparc/sparc32/divrem.
 	mv -f $@-tmp $@
 
 sysdep-realclean := $(sysdep-realclean) $(divrem:%=sysdeps/sparc/sparc32/%.S)
+
+# libgcc __divdi3 and __moddi3 uses .udiv and since it is also exported by
+# libc.so linker will create PLTs for the symbol.  To avoid it we strong alias
+# the exported libc one to __wrap_.udiv and use linker option --wrap to make any
+# call to .udiv to call the wrapper symbol.
+libc.so-gnulib += -Wl,--wrap=.udiv
diff --git a/sysdeps/sparc/sparc32/sparcv8/udiv.S b/sysdeps/sparc/sparc32/sparcv8/udiv.S
index d719543..e9cab4e 100644
--- a/sysdeps/sparc/sparc32/sparcv8/udiv.S
+++ b/sysdeps/sparc/sparc32/sparcv8/udiv.S
@@ -13,3 +13,4 @@ ENTRY(.udiv)
 	 udiv	%o0, %o1, %o0
 
 END(.udiv)
+strong_alias (.udiv, __wrap_.udiv)
diff --git a/sysdeps/sparc/sparc32/sparcv9/udiv.S b/sysdeps/sparc/sparc32/sparcv9/udiv.S
index de79899..368f85e 100644
--- a/sysdeps/sparc/sparc32/sparcv9/udiv.S
+++ b/sysdeps/sparc/sparc32/sparcv9/udiv.S
@@ -15,3 +15,4 @@ ENTRY(.udiv)
 	 udiv		%o0, %o1, %o0
 
 END(.udiv)
+strong_alias (.udiv, __wrap_.udiv)
diff --git a/sysdeps/sparc/sparc32/udiv.S b/sysdeps/sparc/sparc32/udiv.S
index 8dfff66..ade0afd 100644
--- a/sysdeps/sparc/sparc32/udiv.S
+++ b/sysdeps/sparc/sparc32/udiv.S
@@ -344,3 +344,4 @@ LOC(got_result):
 	mov %o2, %o0
 
 END(.udiv)
+strong_alias (.udiv, __wrap_.udiv)

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=db3d848e154b00071f4a5e729d5884efad410109

commit db3d848e154b00071f4a5e729d5884efad410109
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Mar 15 15:44:59 2017 -0300

    Build divdi3 only for architecture that required it
    
    As noted in [1], divdi3 object is only exported in a handful ABIs
    (i386, m68k, powerpc32, s390-32, and ia64), however it is built
    for all current architectures regardless.
    
    This patch refact the make rules for this object to so only the
    aforementioned architectures that actually require it builds it.
    
    Also, to avoid internal PLT calls to the exported symbol from the
    module, glibc uses an internal header (symbol-hacks.h) which is
    unrequired (and in fact breaks the build for architectures that
    intend to get symbol definitions from libgcc.a).  The patch also
    changes it to create its own header (divdi3-symbol-hacks.h) and
    adjust the architectures that require it accordingly.
    
    I checked the build/check (with run-built-tests=no) on the
    following architectures (which I think must cover all supported
    ABI/builds) using GCC 6.3:
    
    aarch64-linux-gnu
    alpha-linux-gnu
    arm-linux-gnueabihf
    hppa-linux-gnu
    ia64-linux-gnu
    m68k-linux-gnu
    microblaze-linux-gnu
    mips64-n32-linux-gnu
    mips-linux-gnu
    mips64-linux-gnu
    nios2-linux-gnu
    powerpc-linux-gnu
    powerpc-linux-gnu-power4
    powerpc64-linux-gnu
    powerpc64le-linux-gnu
    s390x-linux-gnu
    s390-linux-gnu
    sh4-linux-gnu
    sh4-linux-gnu-soft
    sparc64-linux-gnu
    sparcv9-linux-gnu
    tilegx-linux-gnu
    tilegx-linux-gnu-32
    tilepro-linux-gnu
    x86_64-linux-gnu
    x86_64-linux-gnu-x32
    i686-linux-gnu
    
    I only saw one regression on sparcv9-linux-gnu (extra PLT call to
    .udiv) which I address in next patch in the set.  It also correctly
    build SH with GCC 7.0.1 (without any regression from c89721e25d).
    
    [1] https://sourceware.org/ml/libc-alpha/2017-03/msg00243.html
    
    	* sysdeps/i386/symbol-hacks.h: New file.
    	* sysdeps/m68k/symbol-hacks.h: New file.
    	* sysdeps/powerpc/powerpc32/symbol-hacks.h: New file.
    	* sysdeps/s390/s390-32/symbol-hacks.h: New file.
    	* sysdeps/unix/sysv/linux/i386/Makefile
    	[$(subdir) = csu] (sysdep_routines): New rule: divdi3 object.
    	[$(subdir) = csu] (sysdep-only-routines): Likewise.
    	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
    	* sysdeps/unix/sysv/linux/m68k/Makefile
    	[$(subdir) = csu] (sysdep_routines): Likewise.
    	[$(subdir) = csu] (sysdep-only-routines): Likewise.
    	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
    	[$(subdir) = csu] (sysdep_routines): Likewise.
    	[$(subdir) = csu] (sysdep-only-routines): Likewise.
    	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/Makefile
    	[$(subdir) = csu] (sysdep_routines): Likewise.
    	[$(subdir) = csu] (sysdep-only-routines): Likewise.
    	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
    	* sysdeps/wordsize-32/Makefile: Remove file.
    	* sysdeps/wordsize-32/symbol-hacks.h: Definitions move to ...
    	* sysdeps/wordsize-32/divdi3-symbol-hacks.h: ... here.

diff --git a/ChangeLog b/ChangeLog
index c586ef2..e70ecd7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+2017-04-05  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	* sysdeps/i386/symbol-hacks.h: New file.
+	* sysdeps/m68k/symbol-hacks.h: New file.
+	* sysdeps/powerpc/powerpc32/symbol-hacks.h: New file.
+	* sysdeps/s390/s390-32/symbol-hacks.h: New file.
+	* sysdeps/unix/sysv/linux/i386/Makefile
+	[$(subdir) = csu] (sysdep_routines): New rule: divdi3 object.
+	[$(subdir) = csu] (sysdep-only-routines): Likewise.
+	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+	* sysdeps/unix/sysv/linux/m68k/Makefile
+	[$(subdir) = csu] (sysdep_routines): Likewise.
+	[$(subdir) = csu] (sysdep-only-routines): Likewise.
+	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
+	[$(subdir) = csu] (sysdep_routines): Likewise.
+	[$(subdir) = csu] (sysdep-only-routines): Likewise.
+	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/Makefile
+	[$(subdir) = csu] (sysdep_routines): Likewise.
+	[$(subdir) = csu] (sysdep-only-routines): Likewise.
+	[$(subdir) = csu] (CFLAGS-divdi3.c): Likewise.
+	* sysdeps/wordsize-32/Makefile: Remove file.
+	* sysdeps/wordsize-32/symbol-hacks.h: Definitions move to ...
+	* sysdeps/wordsize-32/divdi3-symbol-hacks.h: ... here.
+
 2017-04-05  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* elf/tst-dlopen-aout.c (TEST_FUNCTION): Removed.
diff --git a/sysdeps/i386/symbol-hacks.h b/sysdeps/i386/symbol-hacks.h
new file mode 100644
index 0000000..36a13c8
--- /dev/null
+++ b/sysdeps/i386/symbol-hacks.h
@@ -0,0 +1,21 @@
+/* Hacks needed for symbol manipulation.  i386 version.
+   Copyright (C) 2017 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.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
+
+#include_next "symbol-hacks.h"
diff --git a/sysdeps/m68k/symbol-hacks.h b/sysdeps/m68k/symbol-hacks.h
new file mode 100644
index 0000000..e449d29
--- /dev/null
+++ b/sysdeps/m68k/symbol-hacks.h
@@ -0,0 +1,21 @@
+/* Hacks needed for symbol manipulation.  m68k version.
+   Copyright (C) 2017 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.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
+
+#include_next "symbol-hacks.h"
diff --git a/sysdeps/wordsize-32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
similarity index 54%
copy from sysdeps/wordsize-32/symbol-hacks.h
copy to sysdeps/powerpc/powerpc32/symbol-hacks.h
index 0aec1e0..dbb3141 100644
--- a/sysdeps/wordsize-32/symbol-hacks.h
+++ b/sysdeps/powerpc/powerpc32/symbol-hacks.h
@@ -1,5 +1,5 @@
-/* Hacks needed for symbol manipulation.
-   Copyright (C) 2004-2017 Free Software Foundation, Inc.
+/* Hacks needed for symbol manipulation.  powerpc version.
+   Copyright (C) 2017 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
@@ -16,16 +16,6 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include_next "symbol-hacks.h"
+#include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
 
-/* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
-   __moddi3, and __umoddi3.  These functions are exported and
-   therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
-   task which might not be worth it so we play tricks with the
-   assembler.  */
-#if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
-asm ("__divdi3 = __divdi3_internal");
-asm ("__udivdi3 = __udivdi3_internal");
-asm ("__moddi3 = __moddi3_internal");
-asm ("__umoddi3 = __umoddi3_internal");
-#endif
+#include_next "symbol-hacks.h"
diff --git a/sysdeps/s390/s390-32/symbol-hacks.h b/sysdeps/s390/s390-32/symbol-hacks.h
new file mode 100644
index 0000000..585c423
--- /dev/null
+++ b/sysdeps/s390/s390-32/symbol-hacks.h
@@ -0,0 +1,21 @@
+/* Hacks needed for symbol manipulation.  s390 version.
+   Copyright (C) 2017 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.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/wordsize-32/divdi3-symbol-hacks.h>
+
+#include_next "symbol-hacks.h"
diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
index 6aac0df..4080b8c 100644
--- a/sysdeps/unix/sysv/linux/i386/Makefile
+++ b/sysdeps/unix/sysv/linux/i386/Makefile
@@ -26,6 +26,11 @@ endif
 
 ifeq ($(subdir),csu)
 sysdep-dl-routines += sysdep
+ifeq (yes,$(build-shared))
+sysdep_routines += divdi3
+shared-only-routines += divdi3
+CPPFLAGS-divdi3.c = -Din_divdi3_c
+endif
 endif
 
 ifeq ($(subdir),nptl)
diff --git a/sysdeps/unix/sysv/linux/m68k/Makefile b/sysdeps/unix/sysv/linux/m68k/Makefile
index 5c50ce6..ce1f696 100644
--- a/sysdeps/unix/sysv/linux/m68k/Makefile
+++ b/sysdeps/unix/sysv/linux/m68k/Makefile
@@ -4,6 +4,11 @@ m68k-syntax-flag = -DMOTOROLA_SYNTAX
 
 ifeq ($(subdir),csu)
 sysdep_routines += m68k-helpers
+ifeq (yes,$(build-shared))
+sysdep_routines += divdi3
+shared-only-routines += divdi3
+CPPFLAGS-divdi3.c = -Din_divdi3_c
+endif
 endif
 
 ifeq ($(subdir),misc)
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
index 3d6c150..1f45659 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
@@ -1,2 +1,10 @@
 # See Makeconfig regarding the use of default-abi.
 default-abi := 32
+
+ifeq ($(subdir),csu)
+ifeq (yes,$(build-shared))
+sysdep_routines += divdi3
+shared-only-routines += divdi3
+CPPFLAGS-divdi3.c = -Din_divdi3_c
+endif
+endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
index da3b3c7..fd8cf92 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
@@ -21,3 +21,11 @@ endif
 ifeq ($(subdir),stdlib)
 sysdep_routines += __makecontext_ret
 endif
+
+ifeq ($(subdir),csu)
+ifeq (yes,$(build-shared))
+sysdep_routines += divdi3
+shared-only-routines += divdi3
+CPPFLAGS-divdi3.c = -Din_divdi3_c
+endif
+endif
diff --git a/sysdeps/wordsize-32/Makefile b/sysdeps/wordsize-32/Makefile
deleted file mode 100644
index 82beac4..0000000
--- a/sysdeps/wordsize-32/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-ifeq ($(subdir),csu)
-ifeq (yes,$(build-shared))
-sysdep_routines += divdi3
-shared-only-routines += divdi3
-CPPFLAGS-divdi3.c = -Din_divdi3_c
-endif
-endif
diff --git a/sysdeps/wordsize-32/symbol-hacks.h b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
similarity index 89%
rename from sysdeps/wordsize-32/symbol-hacks.h
rename to sysdeps/wordsize-32/divdi3-symbol-hacks.h
index 0aec1e0..6c90cb7 100644
--- a/sysdeps/wordsize-32/symbol-hacks.h
+++ b/sysdeps/wordsize-32/divdi3-symbol-hacks.h
@@ -1,4 +1,4 @@
-/* Hacks needed for symbol manipulation.
+/* Hacks needed for divdi3 symbol manipulation.
    Copyright (C) 2004-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -16,13 +16,13 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include_next "symbol-hacks.h"
-
 /* A very dirty trick: gcc emits references to __divdi3, __udivdi3,
    __moddi3, and __umoddi3.  These functions are exported and
    therefore we get PLTs.  Unnecessarily so.  Changing gcc is a big
    task which might not be worth it so we play tricks with the
-   assembler.  */
+   assembler.
+   Note: in_divdi3_c is only used to avoid symbol alias on divdi3
+   build itself.  */
 #if !defined __ASSEMBLER__ && !defined in_divdi3_c && IS_IN (libc) && defined SHARED
 asm ("__divdi3 = __divdi3_internal");
 asm ("__udivdi3 = __udivdi3_internal");

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   32 ++++++++++++++++++++
 sysdeps/i386/symbol-hacks.h                        |   21 +++++++++++++
 sysdeps/m68k/symbol-hacks.h                        |   21 +++++++++++++
 sysdeps/powerpc/powerpc32/symbol-hacks.h           |   21 +++++++++++++
 sysdeps/s390/s390-32/symbol-hacks.h                |   21 +++++++++++++
 sysdeps/sparc/sparc32/Makefile                     |    6 ++++
 sysdeps/sparc/sparc32/sparcv8/udiv.S               |    1 +
 sysdeps/sparc/sparc32/sparcv9/udiv.S               |    1 +
 sysdeps/sparc/sparc32/udiv.S                       |    1 +
 sysdeps/unix/sysv/linux/i386/Makefile              |    5 +++
 sysdeps/unix/sysv/linux/m68k/Makefile              |    5 +++
 sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile |    8 +++++
 sysdeps/unix/sysv/linux/s390/s390-32/Makefile      |    8 +++++
 sysdeps/wordsize-32/Makefile                       |    7 ----
 sysdeps/wordsize-32/divdi3-symbol-hacks.h          |   31 +++++++++++++++++++
 sysdeps/wordsize-32/symbol-hacks.h                 |   31 -------------------
 16 files changed, 182 insertions(+), 38 deletions(-)
 create mode 100644 sysdeps/i386/symbol-hacks.h
 create mode 100644 sysdeps/m68k/symbol-hacks.h
 create mode 100644 sysdeps/powerpc/powerpc32/symbol-hacks.h
 create mode 100644 sysdeps/s390/s390-32/symbol-hacks.h
 delete mode 100644 sysdeps/wordsize-32/Makefile
 create mode 100644 sysdeps/wordsize-32/divdi3-symbol-hacks.h
 delete mode 100644 sysdeps/wordsize-32/symbol-hacks.h


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]