public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc] [MIPS] Raise highest supported EI_ABIVERSION value [BZ #24916]
@ 2019-08-23 16:47 Joseph Myers
  0 siblings, 0 replies; only message in thread
From: Joseph Myers @ 2019-08-23 16:47 UTC (permalink / raw)
  To: glibc-cvs

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=edd8d70b91e1ccef549a7c668499596cc4d56ad1

commit edd8d70b91e1ccef549a7c668499596cc4d56ad1
Author: Mihailo Stojanovic <mihailo.stojanovic@rt-rk.com>
Date:   Fri Aug 23 16:47:27 2019 +0000

    [MIPS] Raise highest supported EI_ABIVERSION value [BZ #24916]
    
    This bumps the highest valid EI_ABIVERSION value to ABSOLUTE ABI.
    
    New testcase loads the symbol from the GOT with the "lb" instruction
    so that the EI_ABIVERSION header field of the shared object is set
    to ABSOLUTE (it doesn't actually check the value of the symbol), and
    makes sure that the main executable is executed without "ABI version
    invalid" error.
    
    Tested for all three ABIs (o32, n32, n64) using both static linker which
    handles undefined weak symbols correctly [1] (and sets the EI_ABIVERSION
    of the test module) and the one that doesn't (EI_ABIVERSION left as 0).
    
    [1] https://sourceware.org/ml/binutils/2018-07/msg00268.html
    
    	[BZ #24916]
    	* sysdeps/mips/Makefile [$(subdir) = elf] (tests): Add
    	tst-undefined-weak.
    	[$(subdir) = elf] (modules-names): Add tst-undefined-weak-lib.
    	[$(subdir) = elf] ($(objpfx)tst-undefined-weak): Add dependency.
    	* sysdeps/mips/tst-undefined-weak-lib.S: New file.
    	* sysdeps/mips/tst-undefined-weak.c: Likewise.
    	* sysdeps/unix/sysv/linux/mips/ldsodefs.h (VALID_ELF_ABIVERSION):
    	Increment highest valid ABIVERSION value.

Diff:
---
 ChangeLog                               | 12 +++++++++
 sysdeps/mips/Makefile                   |  7 ++++++
 sysdeps/mips/tst-undefined-weak-lib.S   | 43 +++++++++++++++++++++++++++++++++
 sysdeps/mips/tst-undefined-weak.c       | 28 +++++++++++++++++++++
 sysdeps/unix/sysv/linux/mips/ldsodefs.h |  2 +-
 5 files changed, 91 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index bd4071a..61ffd52 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2019-08-23  Mihailo Stojanovic  <mihailo.stojanovic@rt-rk.com>
+
+	[BZ #24916]
+	* sysdeps/mips/Makefile [$(subdir) = elf] (tests): Add
+	tst-undefined-weak.
+	[$(subdir) = elf] (modules-names): Add tst-undefined-weak-lib.
+	[$(subdir) = elf] ($(objpfx)tst-undefined-weak): Add dependency.
+	* sysdeps/mips/tst-undefined-weak-lib.S: New file.
+	* sysdeps/mips/tst-undefined-weak.c: Likewise.
+	* sysdeps/unix/sysv/linux/mips/ldsodefs.h (VALID_ELF_ABIVERSION):
+	Increment highest valid ABIVERSION value.
+
 2019-08-23  Dragan Mladjenovic  <dmladjenovic@wavecomp.com>
 
 	* sysdeps/unix/sysv/linux/mips/Makefile
diff --git a/sysdeps/mips/Makefile b/sysdeps/mips/Makefile
index 7ac6fa5..6ad69e9 100644
--- a/sysdeps/mips/Makefile
+++ b/sysdeps/mips/Makefile
@@ -82,3 +82,10 @@ $(objpfx)tst-mode-switch-2: $(shared-thread-library)
 endif
 endif
 endif
+
+ifeq ($(subdir),elf)
+tests += tst-undefined-weak
+modules-names += tst-undefined-weak-lib
+
+$(objpfx)tst-undefined-weak: $(objpfx)tst-undefined-weak-lib.so
+endif
diff --git a/sysdeps/mips/tst-undefined-weak-lib.S b/sysdeps/mips/tst-undefined-weak-lib.S
new file mode 100644
index 0000000..a175ebf
--- /dev/null
+++ b/sysdeps/mips/tst-undefined-weak-lib.S
@@ -0,0 +1,43 @@
+/* Undefined weak symbol loading shared module.
+   Copyright (C) 2019 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 <sgidefs.h>
+
+    .text
+    .globl	x
+    .set	nomips16
+    .set	nomicromips
+    .ent	x
+    .type	x, @function
+x:
+    .set noreorder
+#if _MIPS_SIM == _ABIO32
+    .cpload  $25
+    jr  $31
+    lb  $2,%got(a)($28)
+#else
+    .cpsetup  $25,$24,x
+    lb  $2,%got_disp(a)($28)
+    jr  $31
+    .cpreturn
+#endif
+    .set reorder
+    .end	x
+    .size	x, .-x
+    .weak	a
+    .hidden	a
diff --git a/sysdeps/mips/tst-undefined-weak.c b/sysdeps/mips/tst-undefined-weak.c
new file mode 100644
index 0000000..1231da6
--- /dev/null
+++ b/sysdeps/mips/tst-undefined-weak.c
@@ -0,0 +1,28 @@
+/* Undefined weak symbol loading main executable.
+   Copyright (C) 2019 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/>.  */
+
+int *x (void);
+
+int
+do_test (void)
+{
+  x ();
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/sysdeps/unix/sysv/linux/mips/ldsodefs.h b/sysdeps/unix/sysv/linux/mips/ldsodefs.h
index 8dde855..28257f8 100644
--- a/sysdeps/unix/sysv/linux/mips/ldsodefs.h
+++ b/sysdeps/unix/sysv/linux/mips/ldsodefs.h
@@ -34,7 +34,7 @@ extern void _dl_static_init (struct link_map *map);
 #undef VALID_ELF_ABIVERSION
 #define VALID_ELF_ABIVERSION(osabi,ver)			\
   (ver == 0						\
-   || (osabi == ELFOSABI_SYSV && ver < 4)		\
+   || (osabi == ELFOSABI_SYSV && ver < 5)		\
    || (osabi == ELFOSABI_GNU && ver < LIBC_ABI_MAX))
 
 #endif /* ldsodefs.h */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-08-23 16:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-23 16:47 [glibc] [MIPS] Raise highest supported EI_ABIVERSION value [BZ #24916] Joseph Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).