Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/os/bsd/os_bsd.hpp
40949 views
1
/*
2
* Copyright (c) 1999, 2021, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#ifndef OS_BSD_OS_BSD_HPP
26
#define OS_BSD_OS_BSD_HPP
27
28
// Bsd_OS defines the interface to Bsd operating systems
29
30
// Information about the protection of the page at address '0' on this os.
31
static bool zero_page_read_protected() { return true; }
32
33
class Bsd {
34
friend class os;
35
36
#ifdef __APPLE__
37
// mach_absolute_time
38
static mach_timebase_info_data_t _timebase_info;
39
static volatile uint64_t _max_abstime;
40
#endif
41
42
static GrowableArray<int>* _cpu_to_node;
43
44
protected:
45
46
static julong _physical_memory;
47
static pthread_t _main_thread;
48
static int _page_size;
49
50
static julong available_memory();
51
static julong physical_memory() { return _physical_memory; }
52
static void initialize_system_info();
53
54
static void rebuild_cpu_to_node_map();
55
static GrowableArray<int>* cpu_to_node() { return _cpu_to_node; }
56
57
static bool hugetlbfs_sanity_check(bool warn, size_t page_size);
58
59
public:
60
61
static void init_thread_fpu_state();
62
static pthread_t main_thread(void) { return _main_thread; }
63
64
static pid_t gettid();
65
66
static int page_size(void) { return _page_size; }
67
static void set_page_size(int val) { _page_size = val; }
68
69
static intptr_t* ucontext_get_sp(const ucontext_t* uc);
70
static intptr_t* ucontext_get_fp(const ucontext_t* uc);
71
72
static bool get_frame_at_stack_banging_point(JavaThread* thread, ucontext_t* uc, frame* fr);
73
74
// Real-time clock functions
75
static void clock_init(void);
76
77
// Stack repair handling
78
79
// none present
80
81
private:
82
typedef int (*sched_getcpu_func_t)(void);
83
typedef int (*numa_node_to_cpus_func_t)(int node, unsigned long *buffer, int bufferlen);
84
typedef int (*numa_max_node_func_t)(void);
85
typedef int (*numa_available_func_t)(void);
86
typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
87
typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
88
89
static sched_getcpu_func_t _sched_getcpu;
90
static numa_node_to_cpus_func_t _numa_node_to_cpus;
91
static numa_max_node_func_t _numa_max_node;
92
static numa_available_func_t _numa_available;
93
static numa_tonode_memory_func_t _numa_tonode_memory;
94
static numa_interleave_memory_func_t _numa_interleave_memory;
95
static unsigned long* _numa_all_nodes;
96
97
static void set_sched_getcpu(sched_getcpu_func_t func) { _sched_getcpu = func; }
98
static void set_numa_node_to_cpus(numa_node_to_cpus_func_t func) { _numa_node_to_cpus = func; }
99
static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
100
static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
101
static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
102
static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
103
static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
104
public:
105
static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
106
static int numa_node_to_cpus(int node, unsigned long *buffer, int bufferlen) {
107
return _numa_node_to_cpus != NULL ? _numa_node_to_cpus(node, buffer, bufferlen) : -1;
108
}
109
static int numa_max_node() { return _numa_max_node != NULL ? _numa_max_node() : -1; }
110
static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
111
static int numa_tonode_memory(void *start, size_t size, int node) {
112
return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
113
}
114
static void numa_interleave_memory(void *start, size_t size) {
115
if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
116
_numa_interleave_memory(start, size, _numa_all_nodes);
117
}
118
}
119
static int get_node_by_cpu(int cpu_id);
120
121
static void print_uptime_info(outputStream* st);
122
};
123
124
#endif // OS_BSD_OS_BSD_HPP
125
126