Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/jdk.hotspot.agent/linux/native/libsaproc/libproc.h
41149 views
1
/*
2
* Copyright (c) 2003, 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 _LIBPROC_H_
26
#define _LIBPROC_H_
27
28
#include <jni.h>
29
#include <unistd.h>
30
#include <stdint.h>
31
32
#include <sys/procfs.h>
33
#include <sys/ptrace.h>
34
35
36
#if defined(ppc64) || defined(ppc64le)
37
#include <asm/ptrace.h>
38
#define user_regs_struct pt_regs
39
#endif
40
#if defined(aarch64) || defined(arm64)
41
#include <asm/ptrace.h>
42
#define user_regs_struct user_pt_regs
43
#elif defined(arm)
44
#include <asm/ptrace.h>
45
#define user_regs_struct pt_regs
46
#endif
47
48
// This C bool type must be int for compatibility with Linux calls and
49
// it would be a mistake to equivalence it to C++ bool on many platforms
50
#ifndef __cplusplus
51
typedef int bool;
52
#define true 1
53
#define false 0
54
#endif
55
56
struct ps_prochandle;
57
struct lib_info;
58
59
#ifdef __cplusplus
60
extern "C" {
61
#endif
62
63
// attach to a process
64
JNIEXPORT struct ps_prochandle* JNICALL
65
Pgrab(pid_t pid, char* err_buf, size_t err_buf_len);
66
67
// attach to a core dump
68
JNIEXPORT struct ps_prochandle* JNICALL
69
Pgrab_core(const char* execfile, const char* corefile);
70
71
// release a process or core
72
JNIEXPORT void JNICALL
73
Prelease(struct ps_prochandle* ph);
74
75
// functions not directly available in Solaris libproc
76
77
// initialize libproc (call this only once per app)
78
// pass true to make library verbose
79
JNIEXPORT bool JNICALL
80
init_libproc(bool verbose);
81
82
// get number of threads
83
int get_num_threads(struct ps_prochandle* ph);
84
85
// get lwp_id of n'th thread
86
lwpid_t get_lwp_id(struct ps_prochandle* ph, int index);
87
88
// get regs for a given lwp
89
bool get_lwp_regs(struct ps_prochandle* ph, lwpid_t lid, struct user_regs_struct* regs);
90
91
// get number of shared objects
92
int get_num_libs(struct ps_prochandle* ph);
93
94
// get name of n'th lib
95
const char* get_lib_name(struct ps_prochandle* ph, int index);
96
97
// get base of lib
98
uintptr_t get_lib_base(struct ps_prochandle* ph, int index);
99
100
// get address range of lib
101
void get_lib_addr_range(struct ps_prochandle* ph, int index, uintptr_t* base, uintptr_t* memsz);
102
103
// returns true if given library is found in lib list
104
bool find_lib(struct ps_prochandle* ph, const char *lib_name);
105
106
// returns lib which contains pc
107
struct lib_info *find_lib_by_address(struct ps_prochandle* ph, uintptr_t pc);
108
109
// symbol lookup
110
uintptr_t lookup_symbol(struct ps_prochandle* ph, const char* object_name,
111
const char* sym_name);
112
113
// address->nearest symbol lookup. return NULL for no symbol
114
const char* symbol_for_pc(struct ps_prochandle* ph, uintptr_t addr, uintptr_t* poffset);
115
116
struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj);
117
118
void throw_new_debugger_exception(JNIEnv* env, const char* errMsg);
119
120
#ifdef __cplusplus
121
}
122
#endif
123
124
#endif //__LIBPROC_H_
125
126