1 /* |
1 /* |
2 * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
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 |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
25 #ifndef _PROC_SERVICE_H_ |
25 #ifndef _PROC_SERVICE_H_ |
26 #define _PROC_SERVICE_H_ |
26 #define _PROC_SERVICE_H_ |
27 |
27 |
28 #include <stdio.h> |
28 #include <stdio.h> |
29 #include <thread_db.h> |
29 #include <thread_db.h> |
|
30 #include "jni.h" |
30 |
31 |
31 // Linux does not have the proc service library, though it does provide the |
32 // Linux does not have the proc service library, though it does provide the |
32 // thread_db library which can be used to manipulate threads without having |
33 // thread_db library which can be used to manipulate threads without having |
33 // to know the details of NPTL |
34 // to know the details of NPTL |
34 |
35 |
42 PS_NOSYM, /* p_lookup() could not find given symbol */ |
43 PS_NOSYM, /* p_lookup() could not find given symbol */ |
43 PS_NOFREGS /* FPU register set not available for given lwp */ |
44 PS_NOFREGS /* FPU register set not available for given lwp */ |
44 } ps_err_e; |
45 } ps_err_e; |
45 |
46 |
46 // ps_getpid() is only defined on Linux to return a thread's process ID |
47 // ps_getpid() is only defined on Linux to return a thread's process ID |
47 pid_t ps_getpid(struct ps_prochandle *ph); |
48 JNIEXPORT pid_t |
|
49 ps_getpid(struct ps_prochandle *ph); |
48 |
50 |
49 // ps_pglobal_lookup() looks up the symbol sym_name in the symbol table |
51 // ps_pglobal_lookup() looks up the symbol sym_name in the symbol table |
50 // of the load object object_name in the target process identified by ph. |
52 // of the load object object_name in the target process identified by ph. |
51 // It returns the symbol's value as an address in the target process in |
53 // It returns the symbol's value as an address in the target process in |
52 // *sym_addr. |
54 // *sym_addr. |
53 |
55 |
54 ps_err_e ps_pglobal_lookup(struct ps_prochandle *ph, const char *object_name, |
56 JNIEXPORT ps_err_e |
|
57 ps_pglobal_lookup(struct ps_prochandle *ph, const char *object_name, |
55 const char *sym_name, psaddr_t *sym_addr); |
58 const char *sym_name, psaddr_t *sym_addr); |
56 |
59 |
57 // read "size" bytes of data from debuggee at address "addr" |
60 // read "size" bytes of data from debuggee at address "addr" |
58 ps_err_e ps_pdread(struct ps_prochandle *ph, psaddr_t addr, |
61 JNIEXPORT ps_err_e |
|
62 ps_pdread(struct ps_prochandle *ph, psaddr_t addr, |
59 void *buf, size_t size); |
63 void *buf, size_t size); |
60 |
64 |
61 // write "size" bytes of data to debuggee at address "addr" |
65 // write "size" bytes of data to debuggee at address "addr" |
62 ps_err_e ps_pdwrite(struct ps_prochandle *ph, psaddr_t addr, |
66 JNIEXPORT ps_err_e |
|
67 ps_pdwrite(struct ps_prochandle *ph, psaddr_t addr, |
63 const void *buf, size_t size); |
68 const void *buf, size_t size); |
64 |
69 |
65 ps_err_e ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lid, const prfpregset_t *fpregs); |
70 JNIEXPORT ps_err_e |
|
71 ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lid, const prfpregset_t *fpregs); |
66 |
72 |
67 ps_err_e ps_lsetregs(struct ps_prochandle *ph, lwpid_t lid, const prgregset_t gregset); |
73 JNIEXPORT ps_err_e |
|
74 ps_lsetregs(struct ps_prochandle *ph, lwpid_t lid, const prgregset_t gregset); |
68 |
75 |
69 ps_err_e ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lid, prfpregset_t *fpregs); |
76 JNIEXPORT ps_err_e |
|
77 ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lid, prfpregset_t *fpregs); |
70 |
78 |
71 ps_err_e ps_lgetregs(struct ps_prochandle *ph, lwpid_t lid, prgregset_t gregset); |
79 JNIEXPORT ps_err_e |
|
80 ps_lgetregs(struct ps_prochandle *ph, lwpid_t lid, prgregset_t gregset); |
72 |
81 |
73 // new libthread_db of NPTL seem to require this symbol |
82 // new libthread_db of NPTL seem to require this symbol |
74 ps_err_e ps_get_thread_area(); |
83 JNIEXPORT ps_err_e |
|
84 ps_get_thread_area(); |
75 |
85 |
76 #endif /* _PROC_SERVICE_H_ */ |
86 #endif /* _PROC_SERVICE_H_ */ |