about summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorMihailo Stojanovic <mihailo.stojanovic@rt-rk.com>2019-08-23 16:47:27 +0000
committerJoseph Myers <joseph@codesourcery.com>2019-08-23 16:47:27 +0000
commitedd8d70b91e1ccef549a7c668499596cc4d56ad1 (patch)
tree381abb05ebdfcd3b936d0ce0f1be15176df04e53 /sysdeps/unix
parent33bc9efd91de1b14354291fc8ebd5bce96379f12 (diff)
downloadglibc-edd8d70b91e1ccef549a7c668499596cc4d56ad1.tar.gz
glibc-edd8d70b91e1ccef549a7c668499596cc4d56ad1.tar.xz
glibc-edd8d70b91e1ccef549a7c668499596cc4d56ad1.zip
[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.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/mips/ldsodefs.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/mips/ldsodefs.h b/sysdeps/unix/sysv/linux/mips/ldsodefs.h
index 8dde855754..28257f83ae 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 */