1 Star 0 Fork 81

Alex Gao/openjdk-1.8.0

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
8263185-Mallinfo-deprecated-in-glibc-2.33.patch 4.33 KB
一键复制 编辑 原始数据 按行查看 历史
eapen 提交于 2023-01-11 10:00 . I69W1Y: Add feature and bug fix for 8u352
From ccd4293dbec4b1048bf7eb342b8de8241a3667d4 Mon Sep 17 00:00:00 2001
From: eapen <zhangyipeng7@huawei.com>
Date: Mon, 12 Dec 2022 18:44:43 +0800
Subject: [PATCH 13/33] I68TO2: 8263185: Mallinfo deprecated in glibc 2.33
---
hotspot/src/os/linux/vm/os_linux.cpp | 39 ++++++++++++++++++++++++++----------
hotspot/src/os/linux/vm/os_linux.hpp | 34 +++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp
index c687b1c..099dafa 100644
--- a/hotspot/src/os/linux/vm/os_linux.cpp
+++ b/hotspot/src/os/linux/vm/os_linux.cpp
@@ -152,6 +152,11 @@ const char * os::Linux::_glibc_version = NULL;
const char * os::Linux::_libpthread_version = NULL;
pthread_condattr_t os::Linux::_condattr[1];
+#ifdef __GLIBC__
+os::Linux::mallinfo_func_t os::Linux::_mallinfo = NULL;
+os::Linux::mallinfo2_func_t os::Linux::_mallinfo2 = NULL;
+#endif // __GLIBC__
+
static jlong initial_time_count=0;
static int clock_tics_per_sec = 100;
@@ -2343,18 +2348,25 @@ void os::Linux::print_process_memory_info(outputStream* st) {
// Print glibc outstanding allocations.
// (note: there is no implementation of mallinfo for muslc)
#ifdef __GLIBC__
- struct mallinfo mi = ::mallinfo();
-
- // mallinfo is an old API. Member names mean next to nothing and, beyond that, are int.
- // So values may have wrapped around. Still useful enough to see how much glibc thinks
- // we allocated.
- const size_t total_allocated = (size_t)(unsigned)mi.uordblks;
- st->print("C-Heap outstanding allocations: " SIZE_FORMAT "K", total_allocated / K);
- // Since mallinfo members are int, glibc values may have wrapped. Warn about this.
- if ((info.vmrss * K) > UINT_MAX && (info.vmrss * K) > (total_allocated + UINT_MAX)) {
- st->print(" (may have wrapped)");
+ size_t total_allocated = 0;
+ bool might_have_wrapped = false;
+ if (_mallinfo2 != NULL) {
+ struct glibc_mallinfo2 mi = _mallinfo2();
+ total_allocated = mi.uordblks;
+ } else if (_mallinfo != NULL) {
+ // mallinfo is an old API. Member names mean next to nothing and, beyond that, are int.
+ // So values may have wrapped around. Still useful enough to see how much glibc thinks
+ // we allocated.
+ struct glibc_mallinfo mi = _mallinfo();
+ total_allocated = (size_t)(unsigned)mi.uordblks;
+ // Since mallinfo members are int, glibc values may have wrapped. Warn about this.
+ might_have_wrapped = (info.vmrss * K) > UINT_MAX && (info.vmrss * K) > (total_allocated + UINT_MAX);
+ }
+ if (_mallinfo2 != NULL || _mallinfo != NULL) {
+ st->print_cr("C-Heap outstanding allocations: " SIZE_FORMAT "K%s",
+ total_allocated / K,
+ might_have_wrapped ? " (may have wrapped)" : "");
}
- st->cr();
#endif // __GLIBC__
@@ -5174,6 +5186,11 @@ void os::init(void) {
Linux::initialize_system_info();
+#ifdef __GLIBC__
+ Linux::_mallinfo = CAST_TO_FN_PTR(Linux::mallinfo_func_t, dlsym(RTLD_DEFAULT, "mallinfo"));
+ Linux::_mallinfo2 = CAST_TO_FN_PTR(Linux::mallinfo2_func_t, dlsym(RTLD_DEFAULT, "mallinfo2"));
+#endif // __GLIBC__
+
// _main_thread points to the thread that created/loaded the JVM.
Linux::_main_thread = pthread_self();
diff --git a/hotspot/src/os/linux/vm/os_linux.hpp b/hotspot/src/os/linux/vm/os_linux.hpp
index 2c4efff..2bb3fd2 100644
--- a/hotspot/src/os/linux/vm/os_linux.hpp
+++ b/hotspot/src/os/linux/vm/os_linux.hpp
@@ -338,6 +338,40 @@ private:
};
static NumaAllocationPolicy _current_numa_policy;
+#ifdef __GLIBC__
+ struct glibc_mallinfo {
+ int arena;
+ int ordblks;
+ int smblks;
+ int hblks;
+ int hblkhd;
+ int usmblks;
+ int fsmblks;
+ int uordblks;
+ int fordblks;
+ int keepcost;
+ };
+
+ struct glibc_mallinfo2 {
+ size_t arena;
+ size_t ordblks;
+ size_t smblks;
+ size_t hblks;
+ size_t hblkhd;
+ size_t usmblks;
+ size_t fsmblks;
+ size_t uordblks;
+ size_t fordblks;
+ size_t keepcost;
+ };
+
+ typedef struct glibc_mallinfo (*mallinfo_func_t)(void);
+ typedef struct glibc_mallinfo2 (*mallinfo2_func_t)(void);
+
+ static mallinfo_func_t _mallinfo;
+ static mallinfo2_func_t _mallinfo2;
+#endif
+
public:
static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) {
--
1.8.3.1
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gaoxiang90/openjdk-1.8.0.git
git@gitee.com:gaoxiang90/openjdk-1.8.0.git
gaoxiang90
openjdk-1.8.0
openjdk-1.8.0
master

搜索帮助