about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/sparc/sparc32/Makefile6
-rw-r--r--sysdeps/sparc/sparc32/sparcv8/udiv.S1
-rw-r--r--sysdeps/sparc/sparc32/sparcv9/udiv.S1
-rw-r--r--sysdeps/sparc/sparc32/udiv.S1
5 files changed, 15 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e70ecd7863..9024e62fc7 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 da205898cf..14d6e03c6f 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 d71954351e..e9cab4e4ef 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 de79899756..368f85ede2 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 8dfff66158..ade0afdf40 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)