Async SHMLBA value with kernel
(cherry picked from commit f957e6025c012709b2f98fe9fac290c7f40e92cc)
This commit is contained in:
parent
bf65691800
commit
f2871bed32
142
LoongArch-Fix-ptr-mangling-demangling-and-SHMLBA.patch
Normal file
142
LoongArch-Fix-ptr-mangling-demangling-and-SHMLBA.patch
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
diff --git a/sysdeps/loongarch/__longjmp.S b/sysdeps/loongarch/__longjmp.S
|
||||||
|
index 5cc1bc78..fa86f797 100644
|
||||||
|
--- a/sysdeps/loongarch/__longjmp.S
|
||||||
|
+++ b/sysdeps/loongarch/__longjmp.S
|
||||||
|
@@ -20,8 +20,15 @@
|
||||||
|
#include <sys/asm.h>
|
||||||
|
|
||||||
|
ENTRY (__longjmp)
|
||||||
|
+#ifdef PTR_MANGLE
|
||||||
|
+ REG_L t0, a0, 0*SZREG
|
||||||
|
+ PTR_DEMANGLE (ra, t0, t1)
|
||||||
|
+ REG_L t0, a0, 1*SZREG
|
||||||
|
+ PTR_DEMANGLE2 (sp, t0, t1)
|
||||||
|
+#else
|
||||||
|
REG_L ra, a0, 0*SZREG
|
||||||
|
REG_L sp, a0, 1*SZREG
|
||||||
|
+#endif
|
||||||
|
REG_L x, a0, 2*SZREG
|
||||||
|
REG_L fp, a0, 3*SZREG
|
||||||
|
REG_L s0, a0, 4*SZREG
|
||||||
|
diff --git a/sysdeps/loongarch/setjmp.S b/sysdeps/loongarch/setjmp.S
|
||||||
|
index 00ea14b2..6201d0e6 100644
|
||||||
|
--- a/sysdeps/loongarch/setjmp.S
|
||||||
|
+++ b/sysdeps/loongarch/setjmp.S
|
||||||
|
@@ -29,8 +29,15 @@ ENTRY (setjmp)
|
||||||
|
END (setjmp)
|
||||||
|
|
||||||
|
ENTRY (__sigsetjmp)
|
||||||
|
+#ifdef PTR_MANGLE
|
||||||
|
+ PTR_MANGLE (t0, ra, t1)
|
||||||
|
+ REG_S t0, a0, 0*SZREG
|
||||||
|
+ PTR_MANGLE2 (t0, sp, t1)
|
||||||
|
+ REG_S t0, a0, 1*SZREG
|
||||||
|
+#else
|
||||||
|
REG_S ra, a0, 0*SZREG
|
||||||
|
REG_S sp, a0, 1*SZREG
|
||||||
|
+#endif
|
||||||
|
REG_S x, a0, 2*SZREG
|
||||||
|
REG_S fp, a0, 3*SZREG
|
||||||
|
REG_S s0, a0, 4*SZREG
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/bits/shmlba.h b/sysdeps/unix/sysv/linux/loongarch/bits/shmlba.h
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..28ff9d5c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/loongarch/bits/shmlba.h
|
||||||
|
@@ -0,0 +1,24 @@
|
||||||
|
+/* Define SHMLBA. LoongArch version.
|
||||||
|
+ Copyright (C) 2018-2023 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
|
||||||
|
+ <https://www.gnu.org/licenses/>. */
|
||||||
|
+
|
||||||
|
+#ifndef _SYS_SHM_H
|
||||||
|
+# error "Never use <bits/shmlba.h> directly; include <sys/shm.h> instead."
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+/* Segment low boundary address multiple. */
|
||||||
|
+#define SHMLBA 0x10000
|
||||||
|
diff --git a/sysdeps/unix/sysv/linux/loongarch/sysdep.h b/sysdeps/unix/sysv/linux/loongarch/sysdep.h
|
||||||
|
index b2587091..3f2d691b 100644
|
||||||
|
--- a/sysdeps/unix/sysv/linux/loongarch/sysdep.h
|
||||||
|
+++ b/sysdeps/unix/sysv/linux/loongarch/sysdep.h
|
||||||
|
@@ -313,8 +313,64 @@ extern long int __syscall_error (long int neg_errno);
|
||||||
|
|
||||||
|
#endif /* ! __ASSEMBLER__ */
|
||||||
|
|
||||||
|
-/* Pointer mangling is not supported. */
|
||||||
|
-#define PTR_MANGLE(var) (void) (var)
|
||||||
|
-#define PTR_DEMANGLE(var) (void) (var)
|
||||||
|
+/* Pointer mangling is supported for LoongArch. */
|
||||||
|
+
|
||||||
|
+/* Load a got-relative EXPR into G, using T.
|
||||||
|
+ Note G and T are register names. */
|
||||||
|
+#define LD_GLOBAL(G, EXPR) \
|
||||||
|
+ la.global G, EXPR; \
|
||||||
|
+ REG_L G, G, 0;
|
||||||
|
+
|
||||||
|
+/* Load a pc-relative EXPR into G, using T.
|
||||||
|
+ Note G and T are register names. */
|
||||||
|
+#define LD_PCREL(G, EXPR) \
|
||||||
|
+ la.pcrel G, EXPR; \
|
||||||
|
+ REG_L G, G, 0;
|
||||||
|
+
|
||||||
|
+#if (IS_IN (rtld) \
|
||||||
|
+ || (!defined SHARED && (IS_IN (libc) \
|
||||||
|
+ || IS_IN (libpthread))))
|
||||||
|
+
|
||||||
|
+#ifdef __ASSEMBLER__
|
||||||
|
+#define PTR_MANGLE(dst, src, guard) \
|
||||||
|
+ LD_PCREL (guard, __pointer_chk_guard_local); \
|
||||||
|
+ PTR_MANGLE2 (dst, src, guard);
|
||||||
|
+#define PTR_DEMANGLE(dst, src, guard) \
|
||||||
|
+ LD_PCREL (guard, __pointer_chk_guard_local); \
|
||||||
|
+ PTR_DEMANGLE2 (dst, src, guard);
|
||||||
|
+/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */
|
||||||
|
+#define PTR_MANGLE2(dst, src, guard) \
|
||||||
|
+ xor dst, src, guard;
|
||||||
|
+#define PTR_DEMANGLE2(dst, src, guard) \
|
||||||
|
+ PTR_MANGLE2 (dst, src, guard);
|
||||||
|
+#else
|
||||||
|
+extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
|
||||||
|
+#define PTR_MANGLE(var) \
|
||||||
|
+ (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
|
||||||
|
+#define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+
|
||||||
|
+#ifdef __ASSEMBLER__
|
||||||
|
+#define PTR_MANGLE(dst, src, guard) \
|
||||||
|
+ LD_GLOBAL (guard, __pointer_chk_guard); \
|
||||||
|
+ PTR_MANGLE2 (dst, src, guard);
|
||||||
|
+#define PTR_DEMANGLE(dst, src, guard) \
|
||||||
|
+ LD_GLOBAL (guard, __pointer_chk_guard); \
|
||||||
|
+ PTR_DEMANGLE2 (dst, src, guard);
|
||||||
|
+/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */
|
||||||
|
+#define PTR_MANGLE2(dst, src, guard) \
|
||||||
|
+ xor dst, src, guard;
|
||||||
|
+#define PTR_DEMANGLE2(dst, src, guard) \
|
||||||
|
+ PTR_MANGLE2 (dst, src, guard);
|
||||||
|
+#else
|
||||||
|
+extern uintptr_t __pointer_chk_guard attribute_relro;
|
||||||
|
+#define PTR_MANGLE(var) \
|
||||||
|
+ (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard)
|
||||||
|
+#define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#endif /* linux/loongarch/sysdep.h */
|
||||||
22
glibc.spec
22
glibc.spec
@ -66,7 +66,7 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: 2.34
|
Version: 2.34
|
||||||
Release: 119
|
Release: 120
|
||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
License: %{all_license}
|
License: %{all_license}
|
||||||
URL: http://www.gnu.org/software/glibc/
|
URL: http://www.gnu.org/software/glibc/
|
||||||
@ -294,14 +294,15 @@ Patch9028: 4_6-LoongArch-Optimize-string-functions-strcmp-strncmp.patch
|
|||||||
Patch9029: 5_6-LoongArch-Optimize-string-function-strcpy.patch
|
Patch9029: 5_6-LoongArch-Optimize-string-function-strcpy.patch
|
||||||
Patch9030: 6_6-LoongArch-Optimize-string-functions-strlen-strnlen.patch
|
Patch9030: 6_6-LoongArch-Optimize-string-functions-strlen-strnlen.patch
|
||||||
Patch9031: math-Fix-asin-and-acos-invalid-exception-with-old-gc.patch
|
Patch9031: math-Fix-asin-and-acos-invalid-exception-with-old-gc.patch
|
||||||
|
Patch9032: LoongArch-Fix-ptr-mangling-demangling-and-SHMLBA.patch
|
||||||
%endif
|
%endif
|
||||||
Patch9032: add-pthread_cond_clockwait-GLIBC_2_28.patch
|
Patch9033: add-pthread_cond_clockwait-GLIBC_2_28.patch
|
||||||
Patch9033: 0001-ld.so-support-ld.so-mmap-hugetlb-hugepage-according-.patch
|
Patch9034: 0001-ld.so-support-ld.so-mmap-hugetlb-hugepage-according-.patch
|
||||||
Patch9034: 0002-elf-ld.so-keep-compatible-with-the-original-policy-o.patch
|
Patch9035: 0002-elf-ld.so-keep-compatible-with-the-original-policy-o.patch
|
||||||
Patch9035: 0003-elf-ld.so-remove-_mmap_hole-when-ld.so-mmap-PT_LOAD-.patch
|
Patch9036: 0003-elf-ld.so-remove-_mmap_hole-when-ld.so-mmap-PT_LOAD-.patch
|
||||||
Patch9036: elf-ld.so-add-MAP_NORESERVE-flag-for-the-first-mmap-2MB-contig.patch
|
Patch9037: elf-ld.so-add-MAP_NORESERVE-flag-for-the-first-mmap-2MB-contig.patch
|
||||||
Patch9037: elf-ld.so-prohibit-multiple-i-options-and-do-not-allow-i-speci.patch
|
Patch9038: elf-ld.so-prohibit-multiple-i-options-and-do-not-allow-i-speci.patch
|
||||||
Patch9038: elf-ld.so-Consider-maybe-existing-hole-between-PT_LO.patch
|
Patch9039: elf-ld.so-Consider-maybe-existing-hole-between-PT_LO.patch
|
||||||
|
|
||||||
Provides: ldconfig rtld(GNU_HASH) bundled(gnulib)
|
Provides: ldconfig rtld(GNU_HASH) bundled(gnulib)
|
||||||
|
|
||||||
@ -1467,6 +1468,11 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri May 19 2023 Peng Fan <fanpeng@loongson.cn> - 2.34-120
|
||||||
|
- Backport LoongArch patches:
|
||||||
|
- Fix ptr mangling/demangling features.
|
||||||
|
- Keep SHMLBA the same value with kernel.
|
||||||
|
|
||||||
* Mon May 08 2023 laokz <zhangkai@iscas.ac.cn> - 2.34-119
|
* Mon May 08 2023 laokz <zhangkai@iscas.ac.cn> - 2.34-119
|
||||||
- Backport RISC-V patches:
|
- Backport RISC-V patches:
|
||||||
- Align stack in clone (from v2.35)
|
- Align stack in clone (from v2.35)
|
||||||
|
|||||||
@ -133,3 +133,5 @@ elf/tst-ifunc-fault-bindnow:loongarch64
|
|||||||
elf/tst-ifunc-fault-lazy:loongarch64
|
elf/tst-ifunc-fault-lazy:loongarch64
|
||||||
locale/tst-localedef-path-norm:loongarch64
|
locale/tst-localedef-path-norm:loongarch64
|
||||||
misc/tst-glibcsyscalls:loongarch64
|
misc/tst-glibcsyscalls:loongarch64
|
||||||
|
# Failed for environment, remove it later.
|
||||||
|
resolv/tst-resolv-res_init-multi:loongarch64
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user