Mercurial > hg > truffle
annotate agent/src/os/linux/libproc_impl.h @ 20888:0f3d81231ecb
Truffle/Instrumentation: Javadoc
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Fri, 10 Apr 2015 17:56:10 -0700 |
parents | 2394a89e89f4 |
children |
rev | line source |
---|---|
0 | 1 /* |
8058 | 2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. |
0 | 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 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
25 #ifndef _LIBPROC_IMPL_H_ | |
26 #define _LIBPROC_IMPL_H_ | |
27 | |
28 #include <unistd.h> | |
29 #include <limits.h> | |
30 #include "libproc.h" | |
31 #include "symtab.h" | |
32 | |
33 // data structures in this file mimic those of Solaris 8.0 - libproc's Pcontrol.h | |
34 | |
35 #define BUF_SIZE (PATH_MAX + NAME_MAX + 1) | |
36 | |
37 // list of shared objects | |
38 typedef struct lib_info { | |
39 char name[BUF_SIZE]; | |
40 uintptr_t base; | |
41 struct symtab* symtab; | |
42 int fd; // file descriptor for lib | |
43 struct lib_info* next; | |
44 } lib_info; | |
45 | |
46 // list of threads | |
47 typedef struct thread_info { | |
48 lwpid_t lwp_id; | |
49 pthread_t pthread_id; // not used cores, always -1 | |
50 struct user_regs_struct regs; // not for process, core uses for caching regset | |
51 struct thread_info* next; | |
52 } thread_info; | |
53 | |
54 // list of virtual memory maps | |
55 typedef struct map_info { | |
56 int fd; // file descriptor | |
57 off_t offset; // file offset of this mapping | |
58 uintptr_t vaddr; // starting virtual address | |
59 size_t memsz; // size of the mapping | |
60 struct map_info* next; | |
61 } map_info; | |
62 | |
63 // vtable for ps_prochandle | |
64 typedef struct ps_prochandle_ops { | |
65 // "derived class" clean-up | |
66 void (*release)(struct ps_prochandle* ph); | |
67 // read from debuggee | |
68 bool (*p_pread)(struct ps_prochandle *ph, | |
69 uintptr_t addr, char *buf, size_t size); | |
70 // write into debuggee | |
71 bool (*p_pwrite)(struct ps_prochandle *ph, | |
72 uintptr_t addr, const char *buf , size_t size); | |
73 // get integer regset of a thread | |
74 bool (*get_lwp_regs)(struct ps_prochandle* ph, lwpid_t lwp_id, struct user_regs_struct* regs); | |
75 } ps_prochandle_ops; | |
76 | |
77 // the ps_prochandle | |
78 | |
79 struct core_data { | |
80 int core_fd; // file descriptor of core file | |
81 int exec_fd; // file descriptor of exec file | |
82 int interp_fd; // file descriptor of interpreter (ld-linux.so.2) | |
83 // part of the class sharing workaround | |
84 int classes_jsa_fd; // file descriptor of class share archive | |
85 uintptr_t dynamic_addr; // address of dynamic section of a.out | |
86 uintptr_t ld_base_addr; // base address of ld.so | |
87 size_t num_maps; // number of maps. | |
88 map_info* maps; // maps in a linked list | |
89 // part of the class sharing workaround | |
90 map_info* class_share_maps;// class share maps in a linked list | |
91 map_info** map_array; // sorted (by vaddr) array of map_info pointers | |
92 }; | |
93 | |
94 struct ps_prochandle { | |
95 ps_prochandle_ops* ops; // vtable ptr | |
96 pid_t pid; | |
97 int num_libs; | |
98 lib_info* libs; // head of lib list | |
99 lib_info* lib_tail; // tail of lib list - to append at the end | |
100 int num_threads; | |
101 thread_info* threads; // head of thread list | |
102 struct core_data* core; // data only used for core dumps, NULL for process | |
103 }; | |
104 | |
105 int pathmap_open(const char* name); | |
106 | |
107 void print_debug(const char* format,...); | |
8058 | 108 void print_error(const char* format,...); |
0 | 109 bool is_debug(); |
110 | |
111 typedef bool (*thread_info_callback)(struct ps_prochandle* ph, pthread_t pid, lwpid_t lwpid); | |
112 | |
113 // reads thread info using libthread_db and calls above callback for each thread | |
114 bool read_thread_info(struct ps_prochandle* ph, thread_info_callback cb); | |
115 | |
116 // adds a new shared object to lib list, returns NULL on failure | |
117 lib_info* add_lib_info(struct ps_prochandle* ph, const char* libname, uintptr_t base); | |
118 | |
119 // adds a new shared object to lib list, supply open lib file descriptor as well | |
120 lib_info* add_lib_info_fd(struct ps_prochandle* ph, const char* libname, int fd, | |
121 uintptr_t base); | |
122 | |
123 // adds a new thread to threads list, returns NULL on failure | |
124 thread_info* add_thread_info(struct ps_prochandle* ph, pthread_t pthread_id, lwpid_t lwp_id); | |
125 | |
126 // a test for ELF signature without using libelf | |
127 bool is_elf_file(int fd); | |
128 | |
129 #endif //_LIBPROC_IMPL_H_ |