]> sourceware.org Git - glibc.git/commitdiff
Build divdi3 only for architecture that required it
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 15 Mar 2017 18:44:59 +0000 (15:44 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 6 Apr 2017 18:14:34 +0000 (15:14 -0300)
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.

ChangeLog
sysdeps/i386/symbol-hacks.h [new file with mode: 0644]
sysdeps/m68k/symbol-hacks.h [new file with mode: 0644]
sysdeps/powerpc/powerpc32/symbol-hacks.h [new file with mode: 0644]
sysdeps/s390/s390-32/symbol-hacks.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/i386/Makefile
sysdeps/unix/sysv/linux/m68k/Makefile
sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
sysdeps/unix/sysv/linux/s390/s390-32/Makefile
sysdeps/wordsize-32/Makefile [deleted file]
sysdeps/wordsize-32/divdi3-symbol-hacks.h [moved from sysdeps/wordsize-32/symbol-hacks.h with 89% similarity]

index c586ef2e5dce6db0e013515b960e793c3bb7a2a7..e70ecd78631ed27eef9f2e4016702aab355fb34c 100644 (file)
--- 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 (file)
index 0000000..36a13c8
--- /dev/null
@@ -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 (file)
index 0000000..e449d29
--- /dev/null
@@ -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/powerpc/powerpc32/symbol-hacks.h b/sysdeps/powerpc/powerpc32/symbol-hacks.h
new file mode 100644 (file)
index 0000000..dbb3141
--- /dev/null
@@ -0,0 +1,21 @@
+/* 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
+   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/s390/s390-32/symbol-hacks.h b/sysdeps/s390/s390-32/symbol-hacks.h
new file mode 100644 (file)
index 0000000..585c423
--- /dev/null
@@ -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"
index 6aac0dfe157e66b86228169bd8eb4ac247567e73..4080b8c966625b6cea1456702c0fd22bbf798cfb 100644 (file)
@@ -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)
index 5c50ce69275f57839826cb1c34a464b172bc1803..ce1f696a6fbe9c0531cce375cf4965d0e8eba1f1 100644 (file)
@@ -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)
index 3d6c150582e0d9b45dc1242cce6b255fa6205a55..1f45659ed1d78f7ca07910b434360c21fab61979 100644 (file)
@@ -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
index da3b3c76b454ca9dfdca1a8da474ebe4531530aa..fd8cf92633e0eaae3d3257ee6edb9e8d84709a10 100644 (file)
@@ -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 (file)
index 82beac4..0000000
+++ /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
similarity index 89%
rename from sysdeps/wordsize-32/symbol-hacks.h
rename to sysdeps/wordsize-32/divdi3-symbol-hacks.h
index 0aec1e0b9700791401a310cc1fadfc0d54dffff1..6c90cb796de163183fc4e22ae29e4cd9b079289f 100644 (file)
@@ -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.
 
    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");
This page took 0.208912 seconds and 5 git commands to generate.