elf: dynamic linker load lib use hugepage
This patch provides environment variables HUGEPAGE_PROBE and LD_HUGEPAGE_LIB to enable load shared object use hugepage. Signed-off-by: Lv Ying <lvying6@huawei.com> Reviewed-by: zhoukang <gameoverboss@163.com>
This commit is contained in:
parent
a2a495635a
commit
5793040e7a
1179
0001-elf-dynamic-linker-load-shared-object-use-hugepage-a.patch
Normal file
1179
0001-elf-dynamic-linker-load-shared-object-use-hugepage-a.patch
Normal file
File diff suppressed because it is too large
Load Diff
1177
0002-elf-ld.so-add-testcase-for-ld.so-load-shared-object-.patch
Normal file
1177
0002-elf-ld.so-add-testcase-for-ld.so-load-shared-object-.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,69 @@
|
|||||||
|
From 49986b3674d002c43fa09e6b777555bdc772018b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lv Ying <lvying6@huawei.com>
|
||||||
|
Date: Tue, 25 Jan 2022 09:29:32 +0000
|
||||||
|
Subject: [PATCH 3/3] elf/ld.so: use special mmap for hugepage to get symbols
|
||||||
|
|
||||||
|
use special mmap for hugepage to get symbols in hugepage area for debug
|
||||||
|
purpose; kernel need to support file mmap hugepage;
|
||||||
|
---
|
||||||
|
elf/dl-load.h | 2 --
|
||||||
|
elf/dl-map-segments-hugepage.h | 25 +++----------------------
|
||||||
|
2 files changed, 3 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/elf/dl-load.h b/elf/dl-load.h
|
||||||
|
index d3f69466..fcf91a47 100644
|
||||||
|
--- a/elf/dl-load.h
|
||||||
|
+++ b/elf/dl-load.h
|
||||||
|
@@ -134,8 +134,6 @@ static const char *_dl_map_segments (struct link_map *l, int fd,
|
||||||
|
#ifdef HUGEPAGE_SHARED_LIB
|
||||||
|
#define DL_MAP_SEGMENTS_ERROR_TYPE \
|
||||||
|
N_("cannot map Non shared object file in hugepage")
|
||||||
|
-#define DL_MAP_SEGMENTS_ERROR_READ_SEGMENT \
|
||||||
|
- N_("failed to read shared object file")
|
||||||
|
#define DL_MAP_SEGMENTS_ERROR_ARRANGE \
|
||||||
|
N_("shared object's PT_LOAD segment in wrong arrange")
|
||||||
|
#define DL_MAP_SEGMENTS_ERROR_MAP_HOLE_FILL \
|
||||||
|
diff --git a/elf/dl-map-segments-hugepage.h b/elf/dl-map-segments-hugepage.h
|
||||||
|
index cd7b6d79..37788ef9 100644
|
||||||
|
--- a/elf/dl-map-segments-hugepage.h
|
||||||
|
+++ b/elf/dl-map-segments-hugepage.h
|
||||||
|
@@ -302,33 +302,14 @@ _mmap_segment_filesz(struct link_map *l, const struct loadcmd *c, ElfW(Addr) map
|
||||||
|
|
||||||
|
size_t mod = len % SIZE_2MB;
|
||||||
|
if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_FILES))
|
||||||
|
- _dl_debug_printf("\t\tmmap hugepage: [%lx-%lx)\n", mapstart, mapstart + len - mod);
|
||||||
|
+ _dl_debug_printf("\t\tmmap hugepage: [%lx-%lx), mapoff = %lx\n", mapstart,
|
||||||
|
+ mapstart + len - mod, c->mapoff + relro_len + prev_map_len);
|
||||||
|
mapstart = (ElfW(Addr))__mmap((void *)mapstart, len - mod, c->prot,
|
||||||
|
MAP_FIXED|MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB|(SHFIT_2MB << MAP_HUGE_SHIFT),
|
||||||
|
- -1, 0);
|
||||||
|
+ fd, c->mapoff + relro_len + prev_map_len);
|
||||||
|
if (__glibc_unlikely ((void *)mapstart == MAP_FAILED))
|
||||||
|
return DL_MAP_SEGMENTS_ERROR_MAP_SEGMENT;
|
||||||
|
|
||||||
|
- if ((c->prot & PROT_WRITE) == 0 && __mprotect((void *)mapstart, len - mod, c->prot | PROT_WRITE) < 0)
|
||||||
|
- {
|
||||||
|
- return DL_MAP_SEGMENTS_ERROR_MPROTECT;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- /* Read the segment contents from the file. */
|
||||||
|
- size_t file_len = (size_t)(c->dataend - c->mapstart) <= prev_map_len + relro_len ? 0 :
|
||||||
|
- (size_t)(c->dataend - c->mapstart) - prev_map_len - relro_len;
|
||||||
|
- if (file_len > 0)
|
||||||
|
- {
|
||||||
|
- lseek(fd, c->mapoff + relro_len + prev_map_len, SEEK_SET);
|
||||||
|
- if ( __read(fd, (void *)mapstart, file_len < len - mod ? file_len : len - mod) < 0)
|
||||||
|
- return DL_MAP_SEGMENTS_ERROR_READ_SEGMENT;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if ((c->prot & PROT_WRITE) == 0 && __mprotect((void *)mapstart, len - mod, c->prot) < 0)
|
||||||
|
- {
|
||||||
|
- return DL_MAP_SEGMENTS_ERROR_MPROTECT;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
map_addr = map_addr == 0 ? (void *)mapstart : map_addr;
|
||||||
|
mapstart += len - mod;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
||||||
@ -66,7 +66,7 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: 2.34
|
Version: 2.34
|
||||||
Release: 67
|
Release: 68
|
||||||
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/
|
||||||
@ -218,6 +218,9 @@ Patch9012: fix-CVE-2019-1010023.patch
|
|||||||
Patch9013: fix-tst-glibcsyscalls-due-to-kernel-reserved-some-sy.patch
|
Patch9013: fix-tst-glibcsyscalls-due-to-kernel-reserved-some-sy.patch
|
||||||
Patch9014: use-region-to-instead-of-country-for-extract-timezon.patch
|
Patch9014: use-region-to-instead-of-country-for-extract-timezon.patch
|
||||||
Patch9015: strcmp-delete-align-for-loop_aligned.patch
|
Patch9015: strcmp-delete-align-for-loop_aligned.patch
|
||||||
|
Patch9016: 0001-elf-dynamic-linker-load-shared-object-use-hugepage-a.patch
|
||||||
|
Patch9017: 0002-elf-ld.so-add-testcase-for-ld.so-load-shared-object-.patch
|
||||||
|
Patch9018: 0003-elf-ld.so-use-special-mmap-for-hugepage-to-get-symbo.patch
|
||||||
|
|
||||||
Obsoletes: nscd < 2.35
|
Obsoletes: nscd < 2.35
|
||||||
Provides: ldconfig rtld(GNU_HASH) bundled(gnulib)
|
Provides: ldconfig rtld(GNU_HASH) bundled(gnulib)
|
||||||
@ -1289,6 +1292,9 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Mar 5 2022 zhoukang <gameoverboss@163.com> - 2.34-68
|
||||||
|
- add dynamic linker load lib use hugepage
|
||||||
|
|
||||||
* Thu Mar 3 2022 qinyu <qinyu16@huawei.com> - 2.34-67
|
* Thu Mar 3 2022 qinyu <qinyu16@huawei.com> - 2.34-67
|
||||||
- disable rseq by default with tunable
|
- disable rseq by default with tunable
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user