diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | sysdeps/mips/Makefile | 7 | ||||
-rw-r--r-- | sysdeps/mips/tst-undefined-weak-lib.S | 43 | ||||
-rw-r--r-- | sysdeps/mips/tst-undefined-weak.c | 28 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/ldsodefs.h | 2 |
5 files changed, 91 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index bd4071ac28..61ffd520eb 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 7ac6fa5031..6ad69e9ef9 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 0000000000..a175ebf90e --- /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 0000000000..1231da6912 --- /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 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 */ |