OLD | NEW |
1 /* Machine independent support for SVR4 /proc (process file system) for GDB. | 1 /* Machine independent support for SVR4 /proc (process file system) for GDB. |
2 | 2 |
3 Copyright (C) 1999-2003, 2006-2012 Free Software Foundation, Inc. | 3 Copyright (C) 1999-2003, 2006-2012 Free Software Foundation, Inc. |
4 | 4 |
5 Written by Michael Snyder at Cygnus Solutions. | 5 Written by Michael Snyder at Cygnus Solutions. |
6 Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. | 6 Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others. |
7 | 7 |
8 This file is part of GDB. | 8 This file is part of GDB. |
9 | 9 |
10 This program is free software; you can redistribute it and/or modify | 10 This program is free software; you can redistribute it and/or modify |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 /* Prototypes for supply_gregset etc. */ | 105 /* Prototypes for supply_gregset etc. */ |
106 #include "gregset.h" | 106 #include "gregset.h" |
107 | 107 |
108 /* =================== TARGET_OPS "MODULE" =================== */ | 108 /* =================== TARGET_OPS "MODULE" =================== */ |
109 | 109 |
110 /* This module defines the GDB target vector and its methods. */ | 110 /* This module defines the GDB target vector and its methods. */ |
111 | 111 |
112 static void procfs_attach (struct target_ops *, char *, int); | 112 static void procfs_attach (struct target_ops *, char *, int); |
113 static void procfs_detach (struct target_ops *, char *, int); | 113 static void procfs_detach (struct target_ops *, char *, int); |
114 static void procfs_resume (struct target_ops *, | 114 static void procfs_resume (struct target_ops *, |
115 » » » ptid_t, int, enum target_signal); | 115 » » » ptid_t, int, enum gdb_signal); |
116 static void procfs_stop (ptid_t); | 116 static void procfs_stop (ptid_t); |
117 static void procfs_files_info (struct target_ops *); | 117 static void procfs_files_info (struct target_ops *); |
118 static void procfs_fetch_registers (struct target_ops *, | 118 static void procfs_fetch_registers (struct target_ops *, |
119 struct regcache *, int); | 119 struct regcache *, int); |
120 static void procfs_store_registers (struct target_ops *, | 120 static void procfs_store_registers (struct target_ops *, |
121 struct regcache *, int); | 121 struct regcache *, int); |
122 static void procfs_pass_signals (int, unsigned char *); | 122 static void procfs_pass_signals (int, unsigned char *); |
123 static void procfs_kill_inferior (struct target_ops *ops); | 123 static void procfs_kill_inferior (struct target_ops *ops); |
124 static void procfs_mourn_inferior (struct target_ops *ops); | 124 static void procfs_mourn_inferior (struct target_ops *ops); |
125 static void procfs_create_inferior (struct target_ops *, char *, | 125 static void procfs_create_inferior (struct target_ops *, char *, |
126 char *, char **, int); | 126 char *, char **, int); |
127 static ptid_t procfs_wait (struct target_ops *, | 127 static ptid_t procfs_wait (struct target_ops *, |
128 ptid_t, struct target_waitstatus *, int); | 128 ptid_t, struct target_waitstatus *, int); |
129 static int procfs_xfer_memory (CORE_ADDR, gdb_byte *, int, int, | 129 static int procfs_xfer_memory (CORE_ADDR, gdb_byte *, int, int, |
130 struct mem_attrib *attrib, | 130 struct mem_attrib *attrib, |
131 struct target_ops *); | 131 struct target_ops *); |
132 static LONGEST procfs_xfer_partial (struct target_ops *ops, | 132 static LONGEST procfs_xfer_partial (struct target_ops *ops, |
133 enum target_object object, | 133 enum target_object object, |
134 const char *annex, | 134 const char *annex, |
135 gdb_byte *readbuf, | 135 gdb_byte *readbuf, |
136 const gdb_byte *writebuf, | 136 const gdb_byte *writebuf, |
137 ULONGEST offset, LONGEST len); | 137 ULONGEST offset, LONGEST len); |
138 | 138 |
139 static int procfs_thread_alive (struct target_ops *ops, ptid_t); | 139 static int procfs_thread_alive (struct target_ops *ops, ptid_t); |
140 | 140 |
141 void procfs_find_new_threads (struct target_ops *ops); | 141 static void procfs_find_new_threads (struct target_ops *ops); |
142 char *procfs_pid_to_str (struct target_ops *, ptid_t); | 142 static char *procfs_pid_to_str (struct target_ops *, ptid_t); |
143 | 143 |
144 static int proc_find_memory_regions (int (*) (CORE_ADDR, | 144 static int proc_find_memory_regions (int (*) (CORE_ADDR, |
145 unsigned long, | 145 unsigned long, |
146 int, int, int, | 146 int, int, int, |
147 void *), | 147 void *), |
148 void *); | 148 void *); |
149 | 149 |
150 static char * procfs_make_note_section (bfd *, int *); | 150 static char * procfs_make_note_section (bfd *, int *); |
151 | 151 |
152 static int procfs_can_use_hw_breakpoint (int, int, int); | 152 static int procfs_can_use_hw_breakpoint (int, int, int); |
153 | 153 |
| 154 static void procfs_info_proc (struct target_ops *, char *, |
| 155 enum info_proc_what); |
| 156 |
154 #if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64) | 157 #if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64) |
155 /* When GDB is built as 64-bit application on Solaris, the auxv data | 158 /* When GDB is built as 64-bit application on Solaris, the auxv data |
156 is presented in 64-bit format. We need to provide a custom parser | 159 is presented in 64-bit format. We need to provide a custom parser |
157 to handle that. */ | 160 to handle that. */ |
158 static int | 161 static int |
159 procfs_auxv_parse (struct target_ops *ops, gdb_byte **readptr, | 162 procfs_auxv_parse (struct target_ops *ops, gdb_byte **readptr, |
160 gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) | 163 gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) |
161 { | 164 { |
162 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch); | 165 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch); |
163 gdb_byte *ptr = *readptr; | 166 gdb_byte *ptr = *readptr; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 t->to_files_info = procfs_files_info; | 207 t->to_files_info = procfs_files_info; |
205 t->to_stop = procfs_stop; | 208 t->to_stop = procfs_stop; |
206 | 209 |
207 t->to_find_new_threads = procfs_find_new_threads; | 210 t->to_find_new_threads = procfs_find_new_threads; |
208 t->to_thread_alive = procfs_thread_alive; | 211 t->to_thread_alive = procfs_thread_alive; |
209 t->to_pid_to_str = procfs_pid_to_str; | 212 t->to_pid_to_str = procfs_pid_to_str; |
210 | 213 |
211 t->to_has_thread_control = tc_schedlock; | 214 t->to_has_thread_control = tc_schedlock; |
212 t->to_find_memory_regions = proc_find_memory_regions; | 215 t->to_find_memory_regions = proc_find_memory_regions; |
213 t->to_make_corefile_notes = procfs_make_note_section; | 216 t->to_make_corefile_notes = procfs_make_note_section; |
| 217 t->to_info_proc = procfs_info_proc; |
214 | 218 |
215 #if defined(PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64) | 219 #if defined(PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64) |
216 t->to_auxv_parse = procfs_auxv_parse; | 220 t->to_auxv_parse = procfs_auxv_parse; |
217 #endif | 221 #endif |
218 | 222 |
219 t->to_magic = OPS_MAGIC; | 223 t->to_magic = OPS_MAGIC; |
220 | 224 |
221 return t; | 225 return t; |
222 } | 226 } |
223 | 227 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 #ifdef HAVE_PR_SIGACTION64_T | 259 #ifdef HAVE_PR_SIGACTION64_T |
256 typedef pr_sigaction64_t gdb_sigaction_t; | 260 typedef pr_sigaction64_t gdb_sigaction_t; |
257 #else | 261 #else |
258 typedef struct sigaction gdb_sigaction_t; | 262 typedef struct sigaction gdb_sigaction_t; |
259 #endif | 263 #endif |
260 | 264 |
261 /* siginfo */ | 265 /* siginfo */ |
262 #ifdef HAVE_PR_SIGINFO64_T | 266 #ifdef HAVE_PR_SIGINFO64_T |
263 typedef pr_siginfo64_t gdb_siginfo_t; | 267 typedef pr_siginfo64_t gdb_siginfo_t; |
264 #else | 268 #else |
265 typedef struct siginfo gdb_siginfo_t; | 269 typedef siginfo_t gdb_siginfo_t; |
266 #endif | 270 #endif |
267 | 271 |
268 /* On mips-irix, praddset and prdelset are defined in such a way that | 272 /* On mips-irix, praddset and prdelset are defined in such a way that |
269 they return a value, which causes GCC to emit a -Wunused error | 273 they return a value, which causes GCC to emit a -Wunused error |
270 because the returned value is not used. Prevent this warning | 274 because the returned value is not used. Prevent this warning |
271 by casting the return value to void. On sparc-solaris, this issue | 275 by casting the return value to void. On sparc-solaris, this issue |
272 does not exist because the definition of these macros already include | 276 does not exist because the definition of these macros already include |
273 that cast to void. */ | 277 that cast to void. */ |
274 #define gdb_praddset(sp, flag) ((void) praddset (sp, flag)) | 278 #define gdb_praddset(sp, flag) ((void) praddset (sp, flag)) |
275 #define gdb_prdelset(sp, flag) ((void) prdelset (sp, flag)) | 279 #define gdb_prdelset(sp, flag) ((void) prdelset (sp, flag)) |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1008 /* This "module" is the interface layer between the /proc system API | 1012 /* This "module" is the interface layer between the /proc system API |
1009 and the gdb target vector functions. This layer consists of access | 1013 and the gdb target vector functions. This layer consists of access |
1010 functions that encapsulate each of the basic operations that we | 1014 functions that encapsulate each of the basic operations that we |
1011 need to use from the /proc API. | 1015 need to use from the /proc API. |
1012 | 1016 |
1013 The main motivation for this layer is to hide the fact that there | 1017 The main motivation for this layer is to hide the fact that there |
1014 are two very different implementations of the /proc API. Rather | 1018 are two very different implementations of the /proc API. Rather |
1015 than have a bunch of #ifdefs all thru the gdb target vector | 1019 than have a bunch of #ifdefs all thru the gdb target vector |
1016 functions, we do our best to hide them all in here. */ | 1020 functions, we do our best to hide them all in here. */ |
1017 | 1021 |
1018 int proc_get_status (procinfo * pi); | 1022 static long proc_flags (procinfo * pi); |
1019 long proc_flags (procinfo * pi); | 1023 static int proc_why (procinfo * pi); |
1020 int proc_why (procinfo * pi); | 1024 static int proc_what (procinfo * pi); |
1021 int proc_what (procinfo * pi); | 1025 static int proc_set_current_signal (procinfo * pi, int signo); |
1022 int proc_set_run_on_last_close (procinfo * pi); | 1026 static int proc_get_current_thread (procinfo * pi); |
1023 int proc_unset_run_on_last_close (procinfo * pi); | 1027 static int proc_iterate_over_threads |
1024 int proc_set_inherit_on_fork (procinfo * pi); | 1028 (procinfo * pi, |
1025 int proc_unset_inherit_on_fork (procinfo * pi); | 1029 int (*func) (procinfo *, procinfo *, void *), |
1026 int proc_set_async (procinfo * pi); | 1030 void *ptr); |
1027 int proc_unset_async (procinfo * pi); | |
1028 int proc_stop_process (procinfo * pi); | |
1029 int proc_trace_signal (procinfo * pi, int signo); | |
1030 int proc_ignore_signal (procinfo * pi, int signo); | |
1031 int proc_clear_current_fault (procinfo * pi); | |
1032 int proc_set_current_signal (procinfo * pi, int signo); | |
1033 int proc_clear_current_signal (procinfo * pi); | |
1034 int proc_set_gregs (procinfo * pi); | |
1035 int proc_set_fpregs (procinfo * pi); | |
1036 int proc_wait_for_stop (procinfo * pi); | |
1037 int proc_run_process (procinfo * pi, int step, int signo); | |
1038 int proc_kill (procinfo * pi, int signo); | |
1039 int proc_parent_pid (procinfo * pi); | |
1040 int proc_get_nthreads (procinfo * pi); | |
1041 int proc_get_current_thread (procinfo * pi); | |
1042 int proc_set_held_signals (procinfo * pi, gdb_sigset_t * sighold); | |
1043 int proc_set_traced_sysexit (procinfo * pi, sysset_t * sysset); | |
1044 int proc_set_traced_sysentry (procinfo * pi, sysset_t * sysset); | |
1045 int proc_set_traced_faults (procinfo * pi, fltset_t * fltset); | |
1046 int proc_set_traced_signals (procinfo * pi, gdb_sigset_t * sigset); | |
1047 | 1031 |
1048 int proc_update_threads (procinfo * pi); | 1032 static void |
1049 int proc_iterate_over_threads (procinfo * pi, | |
1050 » » » int (*func) (procinfo *, procinfo *, void *), | |
1051 » » » void *ptr); | |
1052 | |
1053 gdb_gregset_t *proc_get_gregs (procinfo * pi); | |
1054 gdb_fpregset_t *proc_get_fpregs (procinfo * pi); | |
1055 sysset_t *proc_get_traced_sysexit (procinfo * pi, sysset_t * save); | |
1056 sysset_t *proc_get_traced_sysentry (procinfo * pi, sysset_t * save); | |
1057 fltset_t *proc_get_traced_faults (procinfo * pi, fltset_t * save); | |
1058 gdb_sigset_t *proc_get_traced_signals (procinfo * pi, gdb_sigset_t * save); | |
1059 gdb_sigset_t *proc_get_held_signals (procinfo * pi, gdb_sigset_t * save); | |
1060 gdb_sigset_t *proc_get_pending_signals (procinfo * pi, gdb_sigset_t * save); | |
1061 gdb_sigaction_t *proc_get_signal_actions (procinfo * pi, | |
1062 » » » » » gdb_sigaction_t *save); | |
1063 | |
1064 void proc_warn (procinfo * pi, char *func, int line); | |
1065 void proc_error (procinfo * pi, char *func, int line); | |
1066 | |
1067 void | |
1068 proc_warn (procinfo *pi, char *func, int line) | 1033 proc_warn (procinfo *pi, char *func, int line) |
1069 { | 1034 { |
1070 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname); | 1035 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname); |
1071 print_sys_errmsg (errmsg, errno); | 1036 print_sys_errmsg (errmsg, errno); |
1072 } | 1037 } |
1073 | 1038 |
1074 void | 1039 static void |
1075 proc_error (procinfo *pi, char *func, int line) | 1040 proc_error (procinfo *pi, char *func, int line) |
1076 { | 1041 { |
1077 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname); | 1042 sprintf (errmsg, "procfs: %s line %d, %s", func, line, pi->pathname); |
1078 perror_with_name (errmsg); | 1043 perror_with_name (errmsg); |
1079 } | 1044 } |
1080 | 1045 |
1081 /* Updates the status struct in the procinfo. There is a 'valid' | 1046 /* Updates the status struct in the procinfo. There is a 'valid' |
1082 flag, to let other functions know when this function needs to be | 1047 flag, to let other functions know when this function needs to be |
1083 called (so the status is only read when it is needed). The status | 1048 called (so the status is only read when it is needed). The status |
1084 file descriptor is also only opened when it is needed. Returns | 1049 file descriptor is also only opened when it is needed. Returns |
1085 non-zero for success, zero for failure. */ | 1050 non-zero for success, zero for failure. */ |
1086 | 1051 |
1087 int | 1052 static int |
1088 proc_get_status (procinfo *pi) | 1053 proc_get_status (procinfo *pi) |
1089 { | 1054 { |
1090 /* Status file descriptor is opened "lazily". */ | 1055 /* Status file descriptor is opened "lazily". */ |
1091 if (pi->status_fd == 0 && | 1056 if (pi->status_fd == 0 && |
1092 open_procinfo_files (pi, FD_STATUS) == 0) | 1057 open_procinfo_files (pi, FD_STATUS) == 0) |
1093 { | 1058 { |
1094 pi->status_valid = 0; | 1059 pi->status_valid = 0; |
1095 return 0; | 1060 return 0; |
1096 } | 1061 } |
1097 | 1062 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1171 #ifdef NEW_PROC_API | 1136 #ifdef NEW_PROC_API |
1172 /* In the read/write multiple-fd model, the status struct includes | 1137 /* In the read/write multiple-fd model, the status struct includes |
1173 the fp regs too, so mark them valid too. */ | 1138 the fp regs too, so mark them valid too. */ |
1174 pi->fpregs_valid = pi->status_valid; | 1139 pi->fpregs_valid = pi->status_valid; |
1175 #endif | 1140 #endif |
1176 return pi->status_valid; /* True if success, false if failure. */ | 1141 return pi->status_valid; /* True if success, false if failure. */ |
1177 } | 1142 } |
1178 | 1143 |
1179 /* Returns the process flags (pr_flags field). */ | 1144 /* Returns the process flags (pr_flags field). */ |
1180 | 1145 |
1181 long | 1146 static long |
1182 proc_flags (procinfo *pi) | 1147 proc_flags (procinfo *pi) |
1183 { | 1148 { |
1184 if (!pi->status_valid) | 1149 if (!pi->status_valid) |
1185 if (!proc_get_status (pi)) | 1150 if (!proc_get_status (pi)) |
1186 return 0; /* FIXME: not a good failure value (but what is?) */ | 1151 return 0; /* FIXME: not a good failure value (but what is?) */ |
1187 | 1152 |
1188 #ifdef NEW_PROC_API | 1153 #ifdef NEW_PROC_API |
1189 # ifdef UNIXWARE | 1154 # ifdef UNIXWARE |
1190 /* UnixWare 7.1 puts process status flags, e.g. PR_ASYNC, in | 1155 /* UnixWare 7.1 puts process status flags, e.g. PR_ASYNC, in |
1191 pstatus_t and LWP status flags, e.g. PR_STOPPED, in lwpstatus_t. | 1156 pstatus_t and LWP status flags, e.g. PR_STOPPED, in lwpstatus_t. |
1192 The two sets of flags don't overlap. */ | 1157 The two sets of flags don't overlap. */ |
1193 return pi->prstatus.pr_flags | pi->prstatus.pr_lwp.pr_flags; | 1158 return pi->prstatus.pr_flags | pi->prstatus.pr_lwp.pr_flags; |
1194 # else | 1159 # else |
1195 return pi->prstatus.pr_lwp.pr_flags; | 1160 return pi->prstatus.pr_lwp.pr_flags; |
1196 # endif | 1161 # endif |
1197 #else | 1162 #else |
1198 return pi->prstatus.pr_flags; | 1163 return pi->prstatus.pr_flags; |
1199 #endif | 1164 #endif |
1200 } | 1165 } |
1201 | 1166 |
1202 /* Returns the pr_why field (why the process stopped). */ | 1167 /* Returns the pr_why field (why the process stopped). */ |
1203 | 1168 |
1204 int | 1169 static int |
1205 proc_why (procinfo *pi) | 1170 proc_why (procinfo *pi) |
1206 { | 1171 { |
1207 if (!pi->status_valid) | 1172 if (!pi->status_valid) |
1208 if (!proc_get_status (pi)) | 1173 if (!proc_get_status (pi)) |
1209 return 0; /* FIXME: not a good failure value (but what is?) */ | 1174 return 0; /* FIXME: not a good failure value (but what is?) */ |
1210 | 1175 |
1211 #ifdef NEW_PROC_API | 1176 #ifdef NEW_PROC_API |
1212 return pi->prstatus.pr_lwp.pr_why; | 1177 return pi->prstatus.pr_lwp.pr_why; |
1213 #else | 1178 #else |
1214 return pi->prstatus.pr_why; | 1179 return pi->prstatus.pr_why; |
1215 #endif | 1180 #endif |
1216 } | 1181 } |
1217 | 1182 |
1218 /* Returns the pr_what field (details of why the process stopped). */ | 1183 /* Returns the pr_what field (details of why the process stopped). */ |
1219 | 1184 |
1220 int | 1185 static int |
1221 proc_what (procinfo *pi) | 1186 proc_what (procinfo *pi) |
1222 { | 1187 { |
1223 if (!pi->status_valid) | 1188 if (!pi->status_valid) |
1224 if (!proc_get_status (pi)) | 1189 if (!proc_get_status (pi)) |
1225 return 0; /* FIXME: not a good failure value (but what is?) */ | 1190 return 0; /* FIXME: not a good failure value (but what is?) */ |
1226 | 1191 |
1227 #ifdef NEW_PROC_API | 1192 #ifdef NEW_PROC_API |
1228 return pi->prstatus.pr_lwp.pr_what; | 1193 return pi->prstatus.pr_lwp.pr_what; |
1229 #else | 1194 #else |
1230 return pi->prstatus.pr_what; | 1195 return pi->prstatus.pr_what; |
(...skipping 22 matching lines...) Expand all Loading... |
1253 (gdb_byte *) &pi->prstatus.pr_info.si_addr); | 1218 (gdb_byte *) &pi->prstatus.pr_info.si_addr); |
1254 #endif | 1219 #endif |
1255 return 1; | 1220 return 1; |
1256 } | 1221 } |
1257 | 1222 |
1258 #ifndef PIOCSSPCACT /* The following is not supported on OSF. */ | 1223 #ifndef PIOCSSPCACT /* The following is not supported on OSF. */ |
1259 | 1224 |
1260 /* Returns the pr_nsysarg field (number of args to the current | 1225 /* Returns the pr_nsysarg field (number of args to the current |
1261 syscall). */ | 1226 syscall). */ |
1262 | 1227 |
1263 int | 1228 static int |
1264 proc_nsysarg (procinfo *pi) | 1229 proc_nsysarg (procinfo *pi) |
1265 { | 1230 { |
1266 if (!pi->status_valid) | 1231 if (!pi->status_valid) |
1267 if (!proc_get_status (pi)) | 1232 if (!proc_get_status (pi)) |
1268 return 0; | 1233 return 0; |
1269 | 1234 |
1270 #ifdef NEW_PROC_API | 1235 #ifdef NEW_PROC_API |
1271 return pi->prstatus.pr_lwp.pr_nsysarg; | 1236 return pi->prstatus.pr_lwp.pr_nsysarg; |
1272 #else | 1237 #else |
1273 return pi->prstatus.pr_nsysarg; | 1238 return pi->prstatus.pr_nsysarg; |
1274 #endif | 1239 #endif |
1275 } | 1240 } |
1276 | 1241 |
1277 /* Returns the pr_sysarg field (pointer to the arguments of current | 1242 /* Returns the pr_sysarg field (pointer to the arguments of current |
1278 syscall). */ | 1243 syscall). */ |
1279 | 1244 |
1280 long * | 1245 static long * |
1281 proc_sysargs (procinfo *pi) | 1246 proc_sysargs (procinfo *pi) |
1282 { | 1247 { |
1283 if (!pi->status_valid) | 1248 if (!pi->status_valid) |
1284 if (!proc_get_status (pi)) | 1249 if (!proc_get_status (pi)) |
1285 return NULL; | 1250 return NULL; |
1286 | 1251 |
1287 #ifdef NEW_PROC_API | 1252 #ifdef NEW_PROC_API |
1288 return (long *) &pi->prstatus.pr_lwp.pr_sysarg; | 1253 return (long *) &pi->prstatus.pr_lwp.pr_sysarg; |
1289 #else | 1254 #else |
1290 return (long *) &pi->prstatus.pr_sysarg; | 1255 return (long *) &pi->prstatus.pr_sysarg; |
1291 #endif | 1256 #endif |
1292 } | 1257 } |
1293 | |
1294 /* Returns the pr_syscall field (id of current syscall if we are in | |
1295 one). */ | |
1296 | |
1297 int | |
1298 proc_syscall (procinfo *pi) | |
1299 { | |
1300 if (!pi->status_valid) | |
1301 if (!proc_get_status (pi)) | |
1302 return 0; | |
1303 | |
1304 #ifdef NEW_PROC_API | |
1305 return pi->prstatus.pr_lwp.pr_syscall; | |
1306 #else | |
1307 return pi->prstatus.pr_syscall; | |
1308 #endif | |
1309 } | |
1310 #endif /* PIOCSSPCACT */ | 1258 #endif /* PIOCSSPCACT */ |
1311 | 1259 |
| 1260 #ifdef PROCFS_DONT_PIOCSSIG_CURSIG |
1312 /* Returns the pr_cursig field (current signal). */ | 1261 /* Returns the pr_cursig field (current signal). */ |
1313 | 1262 |
1314 long | 1263 static long |
1315 proc_cursig (struct procinfo *pi) | 1264 proc_cursig (struct procinfo *pi) |
1316 { | 1265 { |
1317 if (!pi->status_valid) | 1266 if (!pi->status_valid) |
1318 if (!proc_get_status (pi)) | 1267 if (!proc_get_status (pi)) |
1319 return 0; /* FIXME: not a good failure value (but what is?) */ | 1268 return 0; /* FIXME: not a good failure value (but what is?) */ |
1320 | 1269 |
1321 #ifdef NEW_PROC_API | 1270 #ifdef NEW_PROC_API |
1322 return pi->prstatus.pr_lwp.pr_cursig; | 1271 return pi->prstatus.pr_lwp.pr_cursig; |
1323 #else | 1272 #else |
1324 return pi->prstatus.pr_cursig; | 1273 return pi->prstatus.pr_cursig; |
1325 #endif | 1274 #endif |
1326 } | 1275 } |
| 1276 #endif /* PROCFS_DONT_PIOCSSIG_CURSIG */ |
1327 | 1277 |
1328 /* === I appologize for the messiness of this function. | 1278 /* === I appologize for the messiness of this function. |
1329 === This is an area where the different versions of | 1279 === This is an area where the different versions of |
1330 === /proc are more inconsistent than usual. | 1280 === /proc are more inconsistent than usual. |
1331 | 1281 |
1332 Set or reset any of the following process flags: | 1282 Set or reset any of the following process flags: |
1333 PR_FORK -- forked child will inherit trace flags | 1283 PR_FORK -- forked child will inherit trace flags |
1334 PR_RLC -- traced process runs when last /proc file closed. | 1284 PR_RLC -- traced process runs when last /proc file closed. |
1335 PR_KLC -- traced process is killed when last /proc file closed. | 1285 PR_KLC -- traced process is killed when last /proc file closed. |
1336 PR_ASYNC -- LWP's get to run/stop independently. | 1286 PR_ASYNC -- LWP's get to run/stop independently. |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1451 "<unknown flag>", | 1401 "<unknown flag>", |
1452 mode == FLAG_RESET ? "off" : "on"); | 1402 mode == FLAG_RESET ? "off" : "on"); |
1453 | 1403 |
1454 return win; | 1404 return win; |
1455 } | 1405 } |
1456 | 1406 |
1457 /* Set the run_on_last_close flag. Process with all threads will | 1407 /* Set the run_on_last_close flag. Process with all threads will |
1458 become runnable when debugger closes all /proc fds. Returns | 1408 become runnable when debugger closes all /proc fds. Returns |
1459 non-zero for success, zero for failure. */ | 1409 non-zero for success, zero for failure. */ |
1460 | 1410 |
1461 int | 1411 static int |
1462 proc_set_run_on_last_close (procinfo *pi) | 1412 proc_set_run_on_last_close (procinfo *pi) |
1463 { | 1413 { |
1464 return proc_modify_flag (pi, PR_RLC, FLAG_SET); | 1414 return proc_modify_flag (pi, PR_RLC, FLAG_SET); |
1465 } | 1415 } |
1466 | 1416 |
1467 /* Reset the run_on_last_close flag. The process will NOT become | 1417 /* Reset the run_on_last_close flag. The process will NOT become |
1468 runnable when debugger closes its file handles. Returns non-zero | 1418 runnable when debugger closes its file handles. Returns non-zero |
1469 for success, zero for failure. */ | 1419 for success, zero for failure. */ |
1470 | 1420 |
1471 int | 1421 static int |
1472 proc_unset_run_on_last_close (procinfo *pi) | 1422 proc_unset_run_on_last_close (procinfo *pi) |
1473 { | 1423 { |
1474 return proc_modify_flag (pi, PR_RLC, FLAG_RESET); | 1424 return proc_modify_flag (pi, PR_RLC, FLAG_RESET); |
1475 } | 1425 } |
1476 | 1426 |
1477 #ifdef PR_KLC | |
1478 /* Set the kill_on_last_close flag. Process with all threads will be | |
1479 killed when debugger closes all /proc fds (or debugger exits or | |
1480 dies). Returns non-zero for success, zero for failure. */ | |
1481 | |
1482 int | |
1483 proc_set_kill_on_last_close (procinfo *pi) | |
1484 { | |
1485 return proc_modify_flag (pi, PR_KLC, FLAG_SET); | |
1486 } | |
1487 | |
1488 /* Reset the kill_on_last_close flag. Process will NOT be killed when | |
1489 debugger closes its file handles (or exits or dies). Returns | |
1490 non-zero for success, zero for failure. */ | |
1491 | |
1492 int | |
1493 proc_unset_kill_on_last_close (procinfo *pi) | |
1494 { | |
1495 return proc_modify_flag (pi, PR_KLC, FLAG_RESET); | |
1496 } | |
1497 #endif /* PR_KLC */ | |
1498 | |
1499 /* Set inherit_on_fork flag. If the process forks a child while we | |
1500 are registered for events in the parent, then we will also recieve | |
1501 events from the child. Returns non-zero for success, zero for | |
1502 failure. */ | |
1503 | |
1504 int | |
1505 proc_set_inherit_on_fork (procinfo *pi) | |
1506 { | |
1507 return proc_modify_flag (pi, PR_FORK, FLAG_SET); | |
1508 } | |
1509 | |
1510 /* Reset inherit_on_fork flag. If the process forks a child while we | 1427 /* Reset inherit_on_fork flag. If the process forks a child while we |
1511 are registered for events in the parent, then we will NOT recieve | 1428 are registered for events in the parent, then we will NOT recieve |
1512 events from the child. Returns non-zero for success, zero for | 1429 events from the child. Returns non-zero for success, zero for |
1513 failure. */ | 1430 failure. */ |
1514 | 1431 |
1515 int | 1432 static int |
1516 proc_unset_inherit_on_fork (procinfo *pi) | 1433 proc_unset_inherit_on_fork (procinfo *pi) |
1517 { | 1434 { |
1518 return proc_modify_flag (pi, PR_FORK, FLAG_RESET); | 1435 return proc_modify_flag (pi, PR_FORK, FLAG_RESET); |
1519 } | 1436 } |
1520 | 1437 |
1521 #ifdef PR_ASYNC | 1438 #ifdef PR_ASYNC |
1522 /* Set PR_ASYNC flag. If one LWP stops because of a debug event | 1439 /* Set PR_ASYNC flag. If one LWP stops because of a debug event |
1523 (signal etc.), the remaining LWPs will continue to run. Returns | 1440 (signal etc.), the remaining LWPs will continue to run. Returns |
1524 non-zero for success, zero for failure. */ | 1441 non-zero for success, zero for failure. */ |
1525 | 1442 |
1526 int | 1443 static int |
1527 proc_set_async (procinfo *pi) | 1444 proc_set_async (procinfo *pi) |
1528 { | 1445 { |
1529 return proc_modify_flag (pi, PR_ASYNC, FLAG_SET); | 1446 return proc_modify_flag (pi, PR_ASYNC, FLAG_SET); |
1530 } | 1447 } |
1531 | 1448 |
1532 /* Reset PR_ASYNC flag. If one LWP stops because of a debug event | 1449 /* Reset PR_ASYNC flag. If one LWP stops because of a debug event |
1533 (signal etc.), then all other LWPs will stop as well. Returns | 1450 (signal etc.), then all other LWPs will stop as well. Returns |
1534 non-zero for success, zero for failure. */ | 1451 non-zero for success, zero for failure. */ |
1535 | 1452 |
1536 int | 1453 static int |
1537 proc_unset_async (procinfo *pi) | 1454 proc_unset_async (procinfo *pi) |
1538 { | 1455 { |
1539 return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET); | 1456 return proc_modify_flag (pi, PR_ASYNC, FLAG_RESET); |
1540 } | 1457 } |
1541 #endif /* PR_ASYNC */ | 1458 #endif /* PR_ASYNC */ |
1542 | 1459 |
1543 /* Request the process/LWP to stop. Does not wait. Returns non-zero | 1460 /* Request the process/LWP to stop. Does not wait. Returns non-zero |
1544 for success, zero for failure. */ | 1461 for success, zero for failure. */ |
1545 | 1462 |
1546 int | 1463 static int |
1547 proc_stop_process (procinfo *pi) | 1464 proc_stop_process (procinfo *pi) |
1548 { | 1465 { |
1549 int win; | 1466 int win; |
1550 | 1467 |
1551 /* We might conceivably apply this operation to an LWP, and the | 1468 /* We might conceivably apply this operation to an LWP, and the |
1552 LWP's ctl file descriptor might not be open. */ | 1469 LWP's ctl file descriptor might not be open. */ |
1553 | 1470 |
1554 if (pi->ctl_fd == 0 && | 1471 if (pi->ctl_fd == 0 && |
1555 open_procinfo_files (pi, FD_CTL) == 0) | 1472 open_procinfo_files (pi, FD_CTL) == 0) |
1556 return 0; | 1473 return 0; |
(...skipping 16 matching lines...) Expand all Loading... |
1573 } | 1490 } |
1574 #endif | 1491 #endif |
1575 } | 1492 } |
1576 | 1493 |
1577 return win; | 1494 return win; |
1578 } | 1495 } |
1579 | 1496 |
1580 /* Wait for the process or LWP to stop (block until it does). Returns | 1497 /* Wait for the process or LWP to stop (block until it does). Returns |
1581 non-zero for success, zero for failure. */ | 1498 non-zero for success, zero for failure. */ |
1582 | 1499 |
1583 int | 1500 static int |
1584 proc_wait_for_stop (procinfo *pi) | 1501 proc_wait_for_stop (procinfo *pi) |
1585 { | 1502 { |
1586 int win; | 1503 int win; |
1587 | 1504 |
1588 /* We should never have to apply this operation to any procinfo | 1505 /* We should never have to apply this operation to any procinfo |
1589 except the one for the main process. If that ever changes for | 1506 except the one for the main process. If that ever changes for |
1590 any reason, then take out the following clause and replace it | 1507 any reason, then take out the following clause and replace it |
1591 with one that makes sure the ctl_fd is open. */ | 1508 with one that makes sure the ctl_fd is open. */ |
1592 | 1509 |
1593 if (pi->tid != 0) | 1510 if (pi->tid != 0) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1629 - (ioctl): set held signal set | 1546 - (ioctl): set held signal set |
1630 - (ioctl): set traced fault set | 1547 - (ioctl): set traced fault set |
1631 - (ioctl): set start pc (vaddr) | 1548 - (ioctl): set start pc (vaddr) |
1632 | 1549 |
1633 Always clears the current fault. PI is the process or LWP to | 1550 Always clears the current fault. PI is the process or LWP to |
1634 operate on. If STEP is true, set the process or LWP to trap after | 1551 operate on. If STEP is true, set the process or LWP to trap after |
1635 one instruction. If SIGNO is zero, clear the current signal if | 1552 one instruction. If SIGNO is zero, clear the current signal if |
1636 any; if non-zero, set the current signal to this one. Returns | 1553 any; if non-zero, set the current signal to this one. Returns |
1637 non-zero for success, zero for failure. */ | 1554 non-zero for success, zero for failure. */ |
1638 | 1555 |
1639 int | 1556 static int |
1640 proc_run_process (procinfo *pi, int step, int signo) | 1557 proc_run_process (procinfo *pi, int step, int signo) |
1641 { | 1558 { |
1642 int win; | 1559 int win; |
1643 int runflags; | 1560 int runflags; |
1644 | 1561 |
1645 /* We will probably have to apply this operation to individual | 1562 /* We will probably have to apply this operation to individual |
1646 threads, so make sure the control file descriptor is open. */ | 1563 threads, so make sure the control file descriptor is open. */ |
1647 | 1564 |
1648 if (pi->ctl_fd == 0 && | 1565 if (pi->ctl_fd == 0 && |
1649 open_procinfo_files (pi, FD_CTL) == 0) | 1566 open_procinfo_files (pi, FD_CTL) == 0) |
(...skipping 26 matching lines...) Expand all Loading... |
1676 win = (ioctl (pi->ctl_fd, PIOCRUN, &prrun) >= 0); | 1593 win = (ioctl (pi->ctl_fd, PIOCRUN, &prrun) >= 0); |
1677 } | 1594 } |
1678 #endif | 1595 #endif |
1679 | 1596 |
1680 return win; | 1597 return win; |
1681 } | 1598 } |
1682 | 1599 |
1683 /* Register to trace signals in the process or LWP. Returns non-zero | 1600 /* Register to trace signals in the process or LWP. Returns non-zero |
1684 for success, zero for failure. */ | 1601 for success, zero for failure. */ |
1685 | 1602 |
1686 int | 1603 static int |
1687 proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset) | 1604 proc_set_traced_signals (procinfo *pi, gdb_sigset_t *sigset) |
1688 { | 1605 { |
1689 int win; | 1606 int win; |
1690 | 1607 |
1691 /* We should never have to apply this operation to any procinfo | 1608 /* We should never have to apply this operation to any procinfo |
1692 except the one for the main process. If that ever changes for | 1609 except the one for the main process. If that ever changes for |
1693 any reason, then take out the following clause and replace it | 1610 any reason, then take out the following clause and replace it |
1694 with one that makes sure the ctl_fd is open. */ | 1611 with one that makes sure the ctl_fd is open. */ |
1695 | 1612 |
1696 if (pi->tid != 0) | 1613 if (pi->tid != 0) |
(...skipping 19 matching lines...) Expand all Loading... |
1716 pi->status_valid = 0; | 1633 pi->status_valid = 0; |
1717 | 1634 |
1718 if (!win) | 1635 if (!win) |
1719 warning (_("procfs: set_traced_signals failed")); | 1636 warning (_("procfs: set_traced_signals failed")); |
1720 return win; | 1637 return win; |
1721 } | 1638 } |
1722 | 1639 |
1723 /* Register to trace hardware faults in the process or LWP. Returns | 1640 /* Register to trace hardware faults in the process or LWP. Returns |
1724 non-zero for success, zero for failure. */ | 1641 non-zero for success, zero for failure. */ |
1725 | 1642 |
1726 int | 1643 static int |
1727 proc_set_traced_faults (procinfo *pi, fltset_t *fltset) | 1644 proc_set_traced_faults (procinfo *pi, fltset_t *fltset) |
1728 { | 1645 { |
1729 int win; | 1646 int win; |
1730 | 1647 |
1731 /* We should never have to apply this operation to any procinfo | 1648 /* We should never have to apply this operation to any procinfo |
1732 except the one for the main process. If that ever changes for | 1649 except the one for the main process. If that ever changes for |
1733 any reason, then take out the following clause and replace it | 1650 any reason, then take out the following clause and replace it |
1734 with one that makes sure the ctl_fd is open. */ | 1651 with one that makes sure the ctl_fd is open. */ |
1735 | 1652 |
1736 if (pi->tid != 0) | 1653 if (pi->tid != 0) |
(...skipping 17 matching lines...) Expand all Loading... |
1754 #endif | 1671 #endif |
1755 /* The above operation renders the procinfo's cached pstatus obsolete. */ | 1672 /* The above operation renders the procinfo's cached pstatus obsolete. */ |
1756 pi->status_valid = 0; | 1673 pi->status_valid = 0; |
1757 | 1674 |
1758 return win; | 1675 return win; |
1759 } | 1676 } |
1760 | 1677 |
1761 /* Register to trace entry to system calls in the process or LWP. | 1678 /* Register to trace entry to system calls in the process or LWP. |
1762 Returns non-zero for success, zero for failure. */ | 1679 Returns non-zero for success, zero for failure. */ |
1763 | 1680 |
1764 int | 1681 static int |
1765 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset) | 1682 proc_set_traced_sysentry (procinfo *pi, sysset_t *sysset) |
1766 { | 1683 { |
1767 int win; | 1684 int win; |
1768 | 1685 |
1769 /* We should never have to apply this operation to any procinfo | 1686 /* We should never have to apply this operation to any procinfo |
1770 except the one for the main process. If that ever changes for | 1687 except the one for the main process. If that ever changes for |
1771 any reason, then take out the following clause and replace it | 1688 any reason, then take out the following clause and replace it |
1772 with one that makes sure the ctl_fd is open. */ | 1689 with one that makes sure the ctl_fd is open. */ |
1773 | 1690 |
1774 if (pi->tid != 0) | 1691 if (pi->tid != 0) |
(...skipping 24 matching lines...) Expand all Loading... |
1799 /* The above operation renders the procinfo's cached pstatus | 1716 /* The above operation renders the procinfo's cached pstatus |
1800 obsolete. */ | 1717 obsolete. */ |
1801 pi->status_valid = 0; | 1718 pi->status_valid = 0; |
1802 | 1719 |
1803 return win; | 1720 return win; |
1804 } | 1721 } |
1805 | 1722 |
1806 /* Register to trace exit from system calls in the process or LWP. | 1723 /* Register to trace exit from system calls in the process or LWP. |
1807 Returns non-zero for success, zero for failure. */ | 1724 Returns non-zero for success, zero for failure. */ |
1808 | 1725 |
1809 int | 1726 static int |
1810 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset) | 1727 proc_set_traced_sysexit (procinfo *pi, sysset_t *sysset) |
1811 { | 1728 { |
1812 int win; | 1729 int win; |
1813 | 1730 |
1814 /* We should never have to apply this operation to any procinfo | 1731 /* We should never have to apply this operation to any procinfo |
1815 except the one for the main process. If that ever changes for | 1732 except the one for the main process. If that ever changes for |
1816 any reason, then take out the following clause and replace it | 1733 any reason, then take out the following clause and replace it |
1817 with one that makes sure the ctl_fd is open. */ | 1734 with one that makes sure the ctl_fd is open. */ |
1818 | 1735 |
1819 if (pi->tid != 0) | 1736 if (pi->tid != 0) |
(...skipping 24 matching lines...) Expand all Loading... |
1844 /* The above operation renders the procinfo's cached pstatus | 1761 /* The above operation renders the procinfo's cached pstatus |
1845 obsolete. */ | 1762 obsolete. */ |
1846 pi->status_valid = 0; | 1763 pi->status_valid = 0; |
1847 | 1764 |
1848 return win; | 1765 return win; |
1849 } | 1766 } |
1850 | 1767 |
1851 /* Specify the set of blocked / held signals in the process or LWP. | 1768 /* Specify the set of blocked / held signals in the process or LWP. |
1852 Returns non-zero for success, zero for failure. */ | 1769 Returns non-zero for success, zero for failure. */ |
1853 | 1770 |
1854 int | 1771 static int |
1855 proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold) | 1772 proc_set_held_signals (procinfo *pi, gdb_sigset_t *sighold) |
1856 { | 1773 { |
1857 int win; | 1774 int win; |
1858 | 1775 |
1859 /* We should never have to apply this operation to any procinfo | 1776 /* We should never have to apply this operation to any procinfo |
1860 except the one for the main process. If that ever changes for | 1777 except the one for the main process. If that ever changes for |
1861 any reason, then take out the following clause and replace it | 1778 any reason, then take out the following clause and replace it |
1862 with one that makes sure the ctl_fd is open. */ | 1779 with one that makes sure the ctl_fd is open. */ |
1863 | 1780 |
1864 if (pi->tid != 0) | 1781 if (pi->tid != 0) |
(...skipping 14 matching lines...) Expand all Loading... |
1879 #else | 1796 #else |
1880 win = (ioctl (pi->ctl_fd, PIOCSHOLD, sighold) >= 0); | 1797 win = (ioctl (pi->ctl_fd, PIOCSHOLD, sighold) >= 0); |
1881 #endif | 1798 #endif |
1882 /* The above operation renders the procinfo's cached pstatus | 1799 /* The above operation renders the procinfo's cached pstatus |
1883 obsolete. */ | 1800 obsolete. */ |
1884 pi->status_valid = 0; | 1801 pi->status_valid = 0; |
1885 | 1802 |
1886 return win; | 1803 return win; |
1887 } | 1804 } |
1888 | 1805 |
1889 /* Returns the set of signals that are pending in the process or LWP. | |
1890 Will also copy the sigset if SAVE is non-zero. */ | |
1891 | |
1892 gdb_sigset_t * | |
1893 proc_get_pending_signals (procinfo *pi, gdb_sigset_t *save) | |
1894 { | |
1895 gdb_sigset_t *ret = NULL; | |
1896 | |
1897 /* We should never have to apply this operation to any procinfo | |
1898 except the one for the main process. If that ever changes for | |
1899 any reason, then take out the following clause and replace it | |
1900 with one that makes sure the ctl_fd is open. */ | |
1901 | |
1902 if (pi->tid != 0) | |
1903 pi = find_procinfo_or_die (pi->pid, 0); | |
1904 | |
1905 if (!pi->status_valid) | |
1906 if (!proc_get_status (pi)) | |
1907 return NULL; | |
1908 | |
1909 #ifdef NEW_PROC_API | |
1910 ret = &pi->prstatus.pr_lwp.pr_lwppend; | |
1911 #else | |
1912 ret = &pi->prstatus.pr_sigpend; | |
1913 #endif | |
1914 if (save && ret) | |
1915 memcpy (save, ret, sizeof (gdb_sigset_t)); | |
1916 | |
1917 return ret; | |
1918 } | |
1919 | |
1920 /* Returns the set of signal actions. Will also copy the sigactionset | |
1921 if SAVE is non-zero. */ | |
1922 | |
1923 gdb_sigaction_t * | |
1924 proc_get_signal_actions (procinfo *pi, gdb_sigaction_t *save) | |
1925 { | |
1926 gdb_sigaction_t *ret = NULL; | |
1927 | |
1928 /* We should never have to apply this operation to any procinfo | |
1929 except the one for the main process. If that ever changes for | |
1930 any reason, then take out the following clause and replace it | |
1931 with one that makes sure the ctl_fd is open. */ | |
1932 | |
1933 if (pi->tid != 0) | |
1934 pi = find_procinfo_or_die (pi->pid, 0); | |
1935 | |
1936 if (!pi->status_valid) | |
1937 if (!proc_get_status (pi)) | |
1938 return NULL; | |
1939 | |
1940 #ifdef NEW_PROC_API | |
1941 ret = &pi->prstatus.pr_lwp.pr_action; | |
1942 #else | |
1943 ret = &pi->prstatus.pr_action; | |
1944 #endif | |
1945 if (save && ret) | |
1946 memcpy (save, ret, sizeof (gdb_sigaction_t)); | |
1947 | |
1948 return ret; | |
1949 } | |
1950 | |
1951 /* Returns the set of signals that are held / blocked. Will also copy | 1806 /* Returns the set of signals that are held / blocked. Will also copy |
1952 the sigset if SAVE is non-zero. */ | 1807 the sigset if SAVE is non-zero. */ |
1953 | 1808 |
1954 gdb_sigset_t * | 1809 static gdb_sigset_t * |
1955 proc_get_held_signals (procinfo *pi, gdb_sigset_t *save) | 1810 proc_get_held_signals (procinfo *pi, gdb_sigset_t *save) |
1956 { | 1811 { |
1957 gdb_sigset_t *ret = NULL; | 1812 gdb_sigset_t *ret = NULL; |
1958 | 1813 |
1959 /* We should never have to apply this operation to any procinfo | 1814 /* We should never have to apply this operation to any procinfo |
1960 except the one for the main process. If that ever changes for | 1815 except the one for the main process. If that ever changes for |
1961 any reason, then take out the following clause and replace it | 1816 any reason, then take out the following clause and replace it |
1962 with one that makes sure the ctl_fd is open. */ | 1817 with one that makes sure the ctl_fd is open. */ |
1963 | 1818 |
1964 if (pi->tid != 0) | 1819 if (pi->tid != 0) |
(...skipping 19 matching lines...) Expand all Loading... |
1984 #endif /* NEW_PROC_API */ | 1839 #endif /* NEW_PROC_API */ |
1985 if (save && ret) | 1840 if (save && ret) |
1986 memcpy (save, ret, sizeof (gdb_sigset_t)); | 1841 memcpy (save, ret, sizeof (gdb_sigset_t)); |
1987 | 1842 |
1988 return ret; | 1843 return ret; |
1989 } | 1844 } |
1990 | 1845 |
1991 /* Returns the set of signals that are traced / debugged. Will also | 1846 /* Returns the set of signals that are traced / debugged. Will also |
1992 copy the sigset if SAVE is non-zero. */ | 1847 copy the sigset if SAVE is non-zero. */ |
1993 | 1848 |
1994 gdb_sigset_t * | 1849 static gdb_sigset_t * |
1995 proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save) | 1850 proc_get_traced_signals (procinfo *pi, gdb_sigset_t *save) |
1996 { | 1851 { |
1997 gdb_sigset_t *ret = NULL; | 1852 gdb_sigset_t *ret = NULL; |
1998 | 1853 |
1999 /* We should never have to apply this operation to any procinfo | 1854 /* We should never have to apply this operation to any procinfo |
2000 except the one for the main process. If that ever changes for | 1855 except the one for the main process. If that ever changes for |
2001 any reason, then take out the following clause and replace it | 1856 any reason, then take out the following clause and replace it |
2002 with one that makes sure the ctl_fd is open. */ | 1857 with one that makes sure the ctl_fd is open. */ |
2003 | 1858 |
2004 if (pi->tid != 0) | 1859 if (pi->tid != 0) |
(...skipping 12 matching lines...) Expand all Loading... |
2017 if (ioctl (pi->ctl_fd, PIOCGTRACE, &sigtrace) >= 0) | 1872 if (ioctl (pi->ctl_fd, PIOCGTRACE, &sigtrace) >= 0) |
2018 ret = &sigtrace; | 1873 ret = &sigtrace; |
2019 } | 1874 } |
2020 #endif | 1875 #endif |
2021 if (save && ret) | 1876 if (save && ret) |
2022 memcpy (save, ret, sizeof (gdb_sigset_t)); | 1877 memcpy (save, ret, sizeof (gdb_sigset_t)); |
2023 | 1878 |
2024 return ret; | 1879 return ret; |
2025 } | 1880 } |
2026 | 1881 |
2027 /* Add SIGNO to the set of signals that are traced. Returns non-zero | |
2028 for success, zero for failure. */ | |
2029 | |
2030 int | |
2031 proc_trace_signal (procinfo *pi, int signo) | |
2032 { | |
2033 gdb_sigset_t temp; | |
2034 | |
2035 /* We should never have to apply this operation to any procinfo | |
2036 except the one for the main process. If that ever changes for | |
2037 any reason, then take out the following clause and replace it | |
2038 with one that makes sure the ctl_fd is open. */ | |
2039 | |
2040 if (pi->tid != 0) | |
2041 pi = find_procinfo_or_die (pi->pid, 0); | |
2042 | |
2043 if (pi) | |
2044 { | |
2045 if (proc_get_traced_signals (pi, &temp)) | |
2046 { | |
2047 gdb_praddset (&temp, signo); | |
2048 return proc_set_traced_signals (pi, &temp); | |
2049 } | |
2050 } | |
2051 | |
2052 return 0; /* failure */ | |
2053 } | |
2054 | |
2055 /* Remove SIGNO from the set of signals that are traced. Returns | |
2056 non-zero for success, zero for failure. */ | |
2057 | |
2058 int | |
2059 proc_ignore_signal (procinfo *pi, int signo) | |
2060 { | |
2061 gdb_sigset_t temp; | |
2062 | |
2063 /* We should never have to apply this operation to any procinfo | |
2064 except the one for the main process. If that ever changes for | |
2065 any reason, then take out the following clause and replace it | |
2066 with one that makes sure the ctl_fd is open. */ | |
2067 | |
2068 if (pi->tid != 0) | |
2069 pi = find_procinfo_or_die (pi->pid, 0); | |
2070 | |
2071 if (pi) | |
2072 { | |
2073 if (proc_get_traced_signals (pi, &temp)) | |
2074 { | |
2075 gdb_prdelset (&temp, signo); | |
2076 return proc_set_traced_signals (pi, &temp); | |
2077 } | |
2078 } | |
2079 | |
2080 return 0; /* failure */ | |
2081 } | |
2082 | |
2083 /* Returns the set of hardware faults that are traced /debugged. Will | 1882 /* Returns the set of hardware faults that are traced /debugged. Will |
2084 also copy the faultset if SAVE is non-zero. */ | 1883 also copy the faultset if SAVE is non-zero. */ |
2085 | 1884 |
2086 fltset_t * | 1885 static fltset_t * |
2087 proc_get_traced_faults (procinfo *pi, fltset_t *save) | 1886 proc_get_traced_faults (procinfo *pi, fltset_t *save) |
2088 { | 1887 { |
2089 fltset_t *ret = NULL; | 1888 fltset_t *ret = NULL; |
2090 | 1889 |
2091 /* We should never have to apply this operation to any procinfo | 1890 /* We should never have to apply this operation to any procinfo |
2092 except the one for the main process. If that ever changes for | 1891 except the one for the main process. If that ever changes for |
2093 any reason, then take out the following clause and replace it | 1892 any reason, then take out the following clause and replace it |
2094 with one that makes sure the ctl_fd is open. */ | 1893 with one that makes sure the ctl_fd is open. */ |
2095 | 1894 |
2096 if (pi->tid != 0) | 1895 if (pi->tid != 0) |
(...skipping 15 matching lines...) Expand all Loading... |
2112 #endif | 1911 #endif |
2113 if (save && ret) | 1912 if (save && ret) |
2114 memcpy (save, ret, sizeof (fltset_t)); | 1913 memcpy (save, ret, sizeof (fltset_t)); |
2115 | 1914 |
2116 return ret; | 1915 return ret; |
2117 } | 1916 } |
2118 | 1917 |
2119 /* Returns the set of syscalls that are traced /debugged on entry. | 1918 /* Returns the set of syscalls that are traced /debugged on entry. |
2120 Will also copy the syscall set if SAVE is non-zero. */ | 1919 Will also copy the syscall set if SAVE is non-zero. */ |
2121 | 1920 |
2122 sysset_t * | 1921 static sysset_t * |
2123 proc_get_traced_sysentry (procinfo *pi, sysset_t *save) | 1922 proc_get_traced_sysentry (procinfo *pi, sysset_t *save) |
2124 { | 1923 { |
2125 sysset_t *ret = NULL; | 1924 sysset_t *ret = NULL; |
2126 | 1925 |
2127 /* We should never have to apply this operation to any procinfo | 1926 /* We should never have to apply this operation to any procinfo |
2128 except the one for the main process. If that ever changes for | 1927 except the one for the main process. If that ever changes for |
2129 any reason, then take out the following clause and replace it | 1928 any reason, then take out the following clause and replace it |
2130 with one that makes sure the ctl_fd is open. */ | 1929 with one that makes sure the ctl_fd is open. */ |
2131 | 1930 |
2132 if (pi->tid != 0) | 1931 if (pi->tid != 0) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2179 #endif /* NEW_PROC_API */ | 1978 #endif /* NEW_PROC_API */ |
2180 if (save && ret) | 1979 if (save && ret) |
2181 memcpy (save, ret, sysset_t_size (pi)); | 1980 memcpy (save, ret, sysset_t_size (pi)); |
2182 | 1981 |
2183 return ret; | 1982 return ret; |
2184 } | 1983 } |
2185 | 1984 |
2186 /* Returns the set of syscalls that are traced /debugged on exit. | 1985 /* Returns the set of syscalls that are traced /debugged on exit. |
2187 Will also copy the syscall set if SAVE is non-zero. */ | 1986 Will also copy the syscall set if SAVE is non-zero. */ |
2188 | 1987 |
2189 sysset_t * | 1988 static sysset_t * |
2190 proc_get_traced_sysexit (procinfo *pi, sysset_t *save) | 1989 proc_get_traced_sysexit (procinfo *pi, sysset_t *save) |
2191 { | 1990 { |
2192 sysset_t * ret = NULL; | 1991 sysset_t * ret = NULL; |
2193 | 1992 |
2194 /* We should never have to apply this operation to any procinfo | 1993 /* We should never have to apply this operation to any procinfo |
2195 except the one for the main process. If that ever changes for | 1994 except the one for the main process. If that ever changes for |
2196 any reason, then take out the following clause and replace it | 1995 any reason, then take out the following clause and replace it |
2197 with one that makes sure the ctl_fd is open. */ | 1996 with one that makes sure the ctl_fd is open. */ |
2198 | 1997 |
2199 if (pi->tid != 0) | 1998 if (pi->tid != 0) |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2247 if (save && ret) | 2046 if (save && ret) |
2248 memcpy (save, ret, sysset_t_size (pi)); | 2047 memcpy (save, ret, sysset_t_size (pi)); |
2249 | 2048 |
2250 return ret; | 2049 return ret; |
2251 } | 2050 } |
2252 | 2051 |
2253 /* The current fault (if any) is cleared; the associated signal will | 2052 /* The current fault (if any) is cleared; the associated signal will |
2254 not be sent to the process or LWP when it resumes. Returns | 2053 not be sent to the process or LWP when it resumes. Returns |
2255 non-zero for success, zero for failure. */ | 2054 non-zero for success, zero for failure. */ |
2256 | 2055 |
2257 int | 2056 static int |
2258 proc_clear_current_fault (procinfo *pi) | 2057 proc_clear_current_fault (procinfo *pi) |
2259 { | 2058 { |
2260 int win; | 2059 int win; |
2261 | 2060 |
2262 /* We should never have to apply this operation to any procinfo | 2061 /* We should never have to apply this operation to any procinfo |
2263 except the one for the main process. If that ever changes for | 2062 except the one for the main process. If that ever changes for |
2264 any reason, then take out the following clause and replace it | 2063 any reason, then take out the following clause and replace it |
2265 with one that makes sure the ctl_fd is open. */ | 2064 with one that makes sure the ctl_fd is open. */ |
2266 | 2065 |
2267 if (pi->tid != 0) | 2066 if (pi->tid != 0) |
(...skipping 13 matching lines...) Expand all Loading... |
2281 } | 2080 } |
2282 | 2081 |
2283 /* Set the "current signal" that will be delivered next to the | 2082 /* Set the "current signal" that will be delivered next to the |
2284 process. NOTE: semantics are different from those of KILL. This | 2083 process. NOTE: semantics are different from those of KILL. This |
2285 signal will be delivered to the process or LWP immediately when it | 2084 signal will be delivered to the process or LWP immediately when it |
2286 is resumed (even if the signal is held/blocked); it will NOT | 2085 is resumed (even if the signal is held/blocked); it will NOT |
2287 immediately cause another event of interest, and will NOT first | 2086 immediately cause another event of interest, and will NOT first |
2288 trap back to the debugger. Returns non-zero for success, zero for | 2087 trap back to the debugger. Returns non-zero for success, zero for |
2289 failure. */ | 2088 failure. */ |
2290 | 2089 |
2291 int | 2090 static int |
2292 proc_set_current_signal (procinfo *pi, int signo) | 2091 proc_set_current_signal (procinfo *pi, int signo) |
2293 { | 2092 { |
2294 int win; | 2093 int win; |
2295 struct { | 2094 struct { |
2296 procfs_ctl_t cmd; | 2095 procfs_ctl_t cmd; |
2297 /* Use char array to avoid alignment issues. */ | 2096 /* Use char array to avoid alignment issues. */ |
2298 char sinfo[sizeof (gdb_siginfo_t)]; | 2097 char sinfo[sizeof (gdb_siginfo_t)]; |
2299 } arg; | 2098 } arg; |
2300 gdb_siginfo_t mysinfo; | 2099 gdb_siginfo_t mysinfo; |
2301 ptid_t wait_ptid; | 2100 ptid_t wait_ptid; |
(...skipping 14 matching lines...) Expand all Loading... |
2316 bug. */ | 2115 bug. */ |
2317 if (signo > 0 && | 2116 if (signo > 0 && |
2318 signo == proc_cursig (pi)) | 2117 signo == proc_cursig (pi)) |
2319 return 1; /* I assume this is a success? */ | 2118 return 1; /* I assume this is a success? */ |
2320 #endif | 2119 #endif |
2321 | 2120 |
2322 /* The pointer is just a type alias. */ | 2121 /* The pointer is just a type alias. */ |
2323 get_last_target_status (&wait_ptid, &wait_status); | 2122 get_last_target_status (&wait_ptid, &wait_status); |
2324 if (ptid_equal (wait_ptid, inferior_ptid) | 2123 if (ptid_equal (wait_ptid, inferior_ptid) |
2325 && wait_status.kind == TARGET_WAITKIND_STOPPED | 2124 && wait_status.kind == TARGET_WAITKIND_STOPPED |
2326 && wait_status.value.sig == target_signal_from_host (signo) | 2125 && wait_status.value.sig == gdb_signal_from_host (signo) |
2327 && proc_get_status (pi) | 2126 && proc_get_status (pi) |
2328 #ifdef NEW_PROC_API | 2127 #ifdef NEW_PROC_API |
2329 && pi->prstatus.pr_lwp.pr_info.si_signo == signo | 2128 && pi->prstatus.pr_lwp.pr_info.si_signo == signo |
2330 #else | 2129 #else |
2331 && pi->prstatus.pr_info.si_signo == signo | 2130 && pi->prstatus.pr_info.si_signo == signo |
2332 #endif | 2131 #endif |
2333 ) | 2132 ) |
2334 /* Use the siginfo associated with the signal being | 2133 /* Use the siginfo associated with the signal being |
2335 redelivered. */ | 2134 redelivered. */ |
2336 #ifdef NEW_PROC_API | 2135 #ifdef NEW_PROC_API |
(...skipping 17 matching lines...) Expand all Loading... |
2354 win = (ioctl (pi->ctl_fd, PIOCSSIG, (void *) &arg.sinfo) >= 0); | 2153 win = (ioctl (pi->ctl_fd, PIOCSSIG, (void *) &arg.sinfo) >= 0); |
2355 #endif | 2154 #endif |
2356 | 2155 |
2357 return win; | 2156 return win; |
2358 } | 2157 } |
2359 | 2158 |
2360 /* The current signal (if any) is cleared, and is not sent to the | 2159 /* The current signal (if any) is cleared, and is not sent to the |
2361 process or LWP when it resumes. Returns non-zero for success, zero | 2160 process or LWP when it resumes. Returns non-zero for success, zero |
2362 for failure. */ | 2161 for failure. */ |
2363 | 2162 |
2364 int | 2163 static int |
2365 proc_clear_current_signal (procinfo *pi) | 2164 proc_clear_current_signal (procinfo *pi) |
2366 { | 2165 { |
2367 int win; | 2166 int win; |
2368 | 2167 |
2369 /* We should never have to apply this operation to any procinfo | 2168 /* We should never have to apply this operation to any procinfo |
2370 except the one for the main process. If that ever changes for | 2169 except the one for the main process. If that ever changes for |
2371 any reason, then take out the following clause and replace it | 2170 any reason, then take out the following clause and replace it |
2372 with one that makes sure the ctl_fd is open. */ | 2171 with one that makes sure the ctl_fd is open. */ |
2373 | 2172 |
2374 if (pi->tid != 0) | 2173 if (pi->tid != 0) |
(...skipping 22 matching lines...) Expand all Loading... |
2397 #else | 2196 #else |
2398 win = (ioctl (pi->ctl_fd, PIOCSSIG, 0) >= 0); | 2197 win = (ioctl (pi->ctl_fd, PIOCSSIG, 0) >= 0); |
2399 #endif | 2198 #endif |
2400 | 2199 |
2401 return win; | 2200 return win; |
2402 } | 2201 } |
2403 | 2202 |
2404 /* Return the general-purpose registers for the process or LWP | 2203 /* Return the general-purpose registers for the process or LWP |
2405 corresponding to PI. Upon failure, return NULL. */ | 2204 corresponding to PI. Upon failure, return NULL. */ |
2406 | 2205 |
2407 gdb_gregset_t * | 2206 static gdb_gregset_t * |
2408 proc_get_gregs (procinfo *pi) | 2207 proc_get_gregs (procinfo *pi) |
2409 { | 2208 { |
2410 if (!pi->status_valid || !pi->gregs_valid) | 2209 if (!pi->status_valid || !pi->gregs_valid) |
2411 if (!proc_get_status (pi)) | 2210 if (!proc_get_status (pi)) |
2412 return NULL; | 2211 return NULL; |
2413 | 2212 |
2414 /* OK, sorry about the ifdef's. There's three cases instead of two, | 2213 /* OK, sorry about the ifdef's. There's three cases instead of two, |
2415 because in this case Unixware and Solaris/RW differ. */ | 2214 because in this case Unixware and Solaris/RW differ. */ |
2416 | 2215 |
2417 #ifdef NEW_PROC_API | 2216 #ifdef NEW_PROC_API |
2418 # ifdef UNIXWARE /* FIXME: Should be autoconfigured. */ | 2217 # ifdef UNIXWARE /* FIXME: Should be autoconfigured. */ |
2419 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.gregs; | 2218 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.gregs; |
2420 # else | 2219 # else |
2421 return &pi->prstatus.pr_lwp.pr_reg; | 2220 return &pi->prstatus.pr_lwp.pr_reg; |
2422 # endif | 2221 # endif |
2423 #else | 2222 #else |
2424 return &pi->prstatus.pr_reg; | 2223 return &pi->prstatus.pr_reg; |
2425 #endif | 2224 #endif |
2426 } | 2225 } |
2427 | 2226 |
2428 /* Return the general-purpose registers for the process or LWP | 2227 /* Return the general-purpose registers for the process or LWP |
2429 corresponding to PI. Upon failure, return NULL. */ | 2228 corresponding to PI. Upon failure, return NULL. */ |
2430 | 2229 |
2431 gdb_fpregset_t * | 2230 static gdb_fpregset_t * |
2432 proc_get_fpregs (procinfo *pi) | 2231 proc_get_fpregs (procinfo *pi) |
2433 { | 2232 { |
2434 #ifdef NEW_PROC_API | 2233 #ifdef NEW_PROC_API |
2435 if (!pi->status_valid || !pi->fpregs_valid) | 2234 if (!pi->status_valid || !pi->fpregs_valid) |
2436 if (!proc_get_status (pi)) | 2235 if (!proc_get_status (pi)) |
2437 return NULL; | 2236 return NULL; |
2438 | 2237 |
2439 # ifdef UNIXWARE /* FIXME: Should be autoconfigured. */ | 2238 # ifdef UNIXWARE /* FIXME: Should be autoconfigured. */ |
2440 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.fpregs; | 2239 return &pi->prstatus.pr_lwp.pr_context.uc_mcontext.fpregs; |
2441 # else | 2240 # else |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2494 # endif | 2293 # endif |
2495 } | 2294 } |
2496 } | 2295 } |
2497 #endif /* NEW_PROC_API */ | 2296 #endif /* NEW_PROC_API */ |
2498 } | 2297 } |
2499 | 2298 |
2500 /* Write the general-purpose registers back to the process or LWP | 2299 /* Write the general-purpose registers back to the process or LWP |
2501 corresponding to PI. Return non-zero for success, zero for | 2300 corresponding to PI. Return non-zero for success, zero for |
2502 failure. */ | 2301 failure. */ |
2503 | 2302 |
2504 int | 2303 static int |
2505 proc_set_gregs (procinfo *pi) | 2304 proc_set_gregs (procinfo *pi) |
2506 { | 2305 { |
2507 gdb_gregset_t *gregs; | 2306 gdb_gregset_t *gregs; |
2508 int win; | 2307 int win; |
2509 | 2308 |
2510 gregs = proc_get_gregs (pi); | 2309 gregs = proc_get_gregs (pi); |
2511 if (gregs == NULL) | 2310 if (gregs == NULL) |
2512 return 0; /* proc_get_regs has already warned. */ | 2311 return 0; /* proc_get_regs has already warned. */ |
2513 | 2312 |
2514 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0) | 2313 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0) |
(...skipping 19 matching lines...) Expand all Loading... |
2534 | 2333 |
2535 /* Policy: writing the registers invalidates our cache. */ | 2334 /* Policy: writing the registers invalidates our cache. */ |
2536 pi->gregs_valid = 0; | 2335 pi->gregs_valid = 0; |
2537 return win; | 2336 return win; |
2538 } | 2337 } |
2539 | 2338 |
2540 /* Write the floating-pointer registers back to the process or LWP | 2339 /* Write the floating-pointer registers back to the process or LWP |
2541 corresponding to PI. Return non-zero for success, zero for | 2340 corresponding to PI. Return non-zero for success, zero for |
2542 failure. */ | 2341 failure. */ |
2543 | 2342 |
2544 int | 2343 static int |
2545 proc_set_fpregs (procinfo *pi) | 2344 proc_set_fpregs (procinfo *pi) |
2546 { | 2345 { |
2547 gdb_fpregset_t *fpregs; | 2346 gdb_fpregset_t *fpregs; |
2548 int win; | 2347 int win; |
2549 | 2348 |
2550 fpregs = proc_get_fpregs (pi); | 2349 fpregs = proc_get_fpregs (pi); |
2551 if (fpregs == NULL) | 2350 if (fpregs == NULL) |
2552 return 0; /* proc_get_fpregs has already warned. */ | 2351 return 0; /* proc_get_fpregs has already warned. */ |
2553 | 2352 |
2554 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0) | 2353 if (pi->ctl_fd == 0 && open_procinfo_files (pi, FD_CTL) == 0) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2592 } | 2391 } |
2593 | 2392 |
2594 /* Policy: writing the registers invalidates our cache. */ | 2393 /* Policy: writing the registers invalidates our cache. */ |
2595 pi->fpregs_valid = 0; | 2394 pi->fpregs_valid = 0; |
2596 return win; | 2395 return win; |
2597 } | 2396 } |
2598 | 2397 |
2599 /* Send a signal to the proc or lwp with the semantics of "kill()". | 2398 /* Send a signal to the proc or lwp with the semantics of "kill()". |
2600 Returns non-zero for success, zero for failure. */ | 2399 Returns non-zero for success, zero for failure. */ |
2601 | 2400 |
2602 int | 2401 static int |
2603 proc_kill (procinfo *pi, int signo) | 2402 proc_kill (procinfo *pi, int signo) |
2604 { | 2403 { |
2605 int win; | 2404 int win; |
2606 | 2405 |
2607 /* We might conceivably apply this operation to an LWP, and the | 2406 /* We might conceivably apply this operation to an LWP, and the |
2608 LWP's ctl file descriptor might not be open. */ | 2407 LWP's ctl file descriptor might not be open. */ |
2609 | 2408 |
2610 if (pi->ctl_fd == 0 && | 2409 if (pi->ctl_fd == 0 && |
2611 open_procinfo_files (pi, FD_CTL) == 0) | 2410 open_procinfo_files (pi, FD_CTL) == 0) |
2612 { | 2411 { |
(...skipping 13 matching lines...) Expand all Loading... |
2626 win = (ioctl (pi->ctl_fd, PIOCKILL, &signo) >= 0); | 2425 win = (ioctl (pi->ctl_fd, PIOCKILL, &signo) >= 0); |
2627 #endif | 2426 #endif |
2628 } | 2427 } |
2629 | 2428 |
2630 return win; | 2429 return win; |
2631 } | 2430 } |
2632 | 2431 |
2633 /* Find the pid of the process that started this one. Returns the | 2432 /* Find the pid of the process that started this one. Returns the |
2634 parent process pid, or zero. */ | 2433 parent process pid, or zero. */ |
2635 | 2434 |
2636 int | 2435 static int |
2637 proc_parent_pid (procinfo *pi) | 2436 proc_parent_pid (procinfo *pi) |
2638 { | 2437 { |
2639 /* We should never have to apply this operation to any procinfo | 2438 /* We should never have to apply this operation to any procinfo |
2640 except the one for the main process. If that ever changes for | 2439 except the one for the main process. If that ever changes for |
2641 any reason, then take out the following clause and replace it | 2440 any reason, then take out the following clause and replace it |
2642 with one that makes sure the ctl_fd is open. */ | 2441 with one that makes sure the ctl_fd is open. */ |
2643 | 2442 |
2644 if (pi->tid != 0) | 2443 if (pi->tid != 0) |
2645 pi = find_procinfo_or_die (pi->pid, 0); | 2444 pi = find_procinfo_or_die (pi->pid, 0); |
2646 | 2445 |
(...skipping 15 matching lines...) Expand all Loading... |
2662 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr; | 2461 struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr; |
2663 void *ptr; | 2462 void *ptr; |
2664 | 2463 |
2665 gdb_assert (sizeof (ptr) == TYPE_LENGTH (ptr_type)); | 2464 gdb_assert (sizeof (ptr) == TYPE_LENGTH (ptr_type)); |
2666 gdbarch_address_to_pointer (target_gdbarch, ptr_type, | 2465 gdbarch_address_to_pointer (target_gdbarch, ptr_type, |
2667 (gdb_byte *) &ptr, addr); | 2466 (gdb_byte *) &ptr, addr); |
2668 return ptr; | 2467 return ptr; |
2669 } | 2468 } |
2670 #endif | 2469 #endif |
2671 | 2470 |
2672 int | 2471 static int |
2673 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags) | 2472 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags) |
2674 { | 2473 { |
2675 #if !defined (PCWATCH) && !defined (PIOCSWATCH) | 2474 #if !defined (PCWATCH) && !defined (PIOCSWATCH) |
2676 /* If neither or these is defined, we can't support watchpoints. | 2475 /* If neither or these is defined, we can't support watchpoints. |
2677 This just avoids possibly failing to compile the below on such | 2476 This just avoids possibly failing to compile the below on such |
2678 systems. */ | 2477 systems. */ |
2679 return 0; | 2478 return 0; |
2680 #else | 2479 #else |
2681 /* Horrible hack! Detect Solaris 2.5, because this doesn't work on 2.5. */ | 2480 /* Horrible hack! Detect Solaris 2.5, because this doesn't work on 2.5. */ |
2682 #if defined (PIOCOPENLWP) || defined (UNIXWARE) /* Solaris 2.5: bail out. */ | 2481 #if defined (PIOCOPENLWP) || defined (UNIXWARE) /* Solaris 2.5: bail out. */ |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2832 | 2631 |
2833 /* =================== Thread "MODULE" =================== */ | 2632 /* =================== Thread "MODULE" =================== */ |
2834 | 2633 |
2835 /* NOTE: you'll see more ifdefs and duplication of functions here, | 2634 /* NOTE: you'll see more ifdefs and duplication of functions here, |
2836 since there is a different way to do threads on every OS. */ | 2635 since there is a different way to do threads on every OS. */ |
2837 | 2636 |
2838 /* Returns the number of threads for the process. */ | 2637 /* Returns the number of threads for the process. */ |
2839 | 2638 |
2840 #if defined (PIOCNTHR) && defined (PIOCTLIST) | 2639 #if defined (PIOCNTHR) && defined (PIOCTLIST) |
2841 /* OSF version */ | 2640 /* OSF version */ |
2842 int | 2641 static int |
2843 proc_get_nthreads (procinfo *pi) | 2642 proc_get_nthreads (procinfo *pi) |
2844 { | 2643 { |
2845 int nthreads = 0; | 2644 int nthreads = 0; |
2846 | 2645 |
2847 if (ioctl (pi->ctl_fd, PIOCNTHR, &nthreads) < 0) | 2646 if (ioctl (pi->ctl_fd, PIOCNTHR, &nthreads) < 0) |
2848 proc_warn (pi, "procfs: PIOCNTHR failed", __LINE__); | 2647 proc_warn (pi, "procfs: PIOCNTHR failed", __LINE__); |
2849 | 2648 |
2850 return nthreads; | 2649 return nthreads; |
2851 } | 2650 } |
2852 | 2651 |
2853 #else | 2652 #else |
2854 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */ | 2653 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */ |
2855 /* Solaris and Unixware version */ | 2654 /* Solaris and Unixware version */ |
2856 int | 2655 static int |
2857 proc_get_nthreads (procinfo *pi) | 2656 proc_get_nthreads (procinfo *pi) |
2858 { | 2657 { |
2859 if (!pi->status_valid) | 2658 if (!pi->status_valid) |
2860 if (!proc_get_status (pi)) | 2659 if (!proc_get_status (pi)) |
2861 return 0; | 2660 return 0; |
2862 | 2661 |
2863 /* NEW_PROC_API: only works for the process procinfo, because the | 2662 /* NEW_PROC_API: only works for the process procinfo, because the |
2864 LWP procinfos do not get prstatus filled in. */ | 2663 LWP procinfos do not get prstatus filled in. */ |
2865 #ifdef NEW_PROC_API | 2664 #ifdef NEW_PROC_API |
2866 if (pi->tid != 0) /* Find the parent process procinfo. */ | 2665 if (pi->tid != 0) /* Find the parent process procinfo. */ |
2867 pi = find_procinfo_or_die (pi->pid, 0); | 2666 pi = find_procinfo_or_die (pi->pid, 0); |
2868 #endif | 2667 #endif |
2869 return pi->prstatus.pr_nlwp; | 2668 return pi->prstatus.pr_nlwp; |
2870 } | 2669 } |
2871 | 2670 |
2872 #else | 2671 #else |
2873 /* Default version */ | 2672 /* Default version */ |
2874 int | 2673 static int |
2875 proc_get_nthreads (procinfo *pi) | 2674 proc_get_nthreads (procinfo *pi) |
2876 { | 2675 { |
2877 return 0; | 2676 return 0; |
2878 } | 2677 } |
2879 #endif | 2678 #endif |
2880 #endif | 2679 #endif |
2881 | 2680 |
2882 /* LWP version. | 2681 /* LWP version. |
2883 | 2682 |
2884 Return the ID of the thread that had an event of interest. | 2683 Return the ID of the thread that had an event of interest. |
2885 (ie. the one that hit a breakpoint or other traced event). All | 2684 (ie. the one that hit a breakpoint or other traced event). All |
2886 other things being equal, this should be the ID of a thread that is | 2685 other things being equal, this should be the ID of a thread that is |
2887 currently executing. */ | 2686 currently executing. */ |
2888 | 2687 |
2889 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */ | 2688 #if defined (SYS_lwpcreate) || defined (SYS_lwp_create) /* FIXME: multiple */ |
2890 /* Solaris and Unixware version */ | 2689 /* Solaris and Unixware version */ |
2891 int | 2690 static int |
2892 proc_get_current_thread (procinfo *pi) | 2691 proc_get_current_thread (procinfo *pi) |
2893 { | 2692 { |
2894 /* Note: this should be applied to the root procinfo for the | 2693 /* Note: this should be applied to the root procinfo for the |
2895 process, not to the procinfo for an LWP. If applied to the | 2694 process, not to the procinfo for an LWP. If applied to the |
2896 procinfo for an LWP, it will simply return that LWP's ID. In | 2695 procinfo for an LWP, it will simply return that LWP's ID. In |
2897 that case, find the parent process procinfo. */ | 2696 that case, find the parent process procinfo. */ |
2898 | 2697 |
2899 if (pi->tid != 0) | 2698 if (pi->tid != 0) |
2900 pi = find_procinfo_or_die (pi->pid, 0); | 2699 pi = find_procinfo_or_die (pi->pid, 0); |
2901 | 2700 |
2902 if (!pi->status_valid) | 2701 if (!pi->status_valid) |
2903 if (!proc_get_status (pi)) | 2702 if (!proc_get_status (pi)) |
2904 return 0; | 2703 return 0; |
2905 | 2704 |
2906 #ifdef NEW_PROC_API | 2705 #ifdef NEW_PROC_API |
2907 return pi->prstatus.pr_lwp.pr_lwpid; | 2706 return pi->prstatus.pr_lwp.pr_lwpid; |
2908 #else | 2707 #else |
2909 return pi->prstatus.pr_who; | 2708 return pi->prstatus.pr_who; |
2910 #endif | 2709 #endif |
2911 } | 2710 } |
2912 | 2711 |
2913 #else | 2712 #else |
2914 #if defined (PIOCNTHR) && defined (PIOCTLIST) | 2713 #if defined (PIOCNTHR) && defined (PIOCTLIST) |
2915 /* OSF version */ | 2714 /* OSF version */ |
2916 int | 2715 static int |
2917 proc_get_current_thread (procinfo *pi) | 2716 proc_get_current_thread (procinfo *pi) |
2918 { | 2717 { |
2919 #if 0 /* FIXME: not ready for prime time? */ | 2718 #if 0 /* FIXME: not ready for prime time? */ |
2920 return pi->prstatus.pr_tid; | 2719 return pi->prstatus.pr_tid; |
2921 #else | 2720 #else |
2922 return 0; | 2721 return 0; |
2923 #endif | 2722 #endif |
2924 } | 2723 } |
2925 | 2724 |
2926 #else | 2725 #else |
2927 /* Default version */ | 2726 /* Default version */ |
2928 int | 2727 static int |
2929 proc_get_current_thread (procinfo *pi) | 2728 proc_get_current_thread (procinfo *pi) |
2930 { | 2729 { |
2931 return 0; | 2730 return 0; |
2932 } | 2731 } |
2933 | 2732 |
2934 #endif | 2733 #endif |
2935 #endif | 2734 #endif |
2936 | 2735 |
2937 /* Discover the IDs of all the threads within the process, and create | 2736 /* Discover the IDs of all the threads within the process, and create |
2938 a procinfo for each of them (chained to the parent). This | 2737 a procinfo for each of them (chained to the parent). This |
2939 unfortunately requires a different method on every OS. Returns | 2738 unfortunately requires a different method on every OS. Returns |
2940 non-zero for success, zero for failure. */ | 2739 non-zero for success, zero for failure. */ |
2941 | 2740 |
2942 int | 2741 static int |
2943 proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore) | 2742 proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore) |
2944 { | 2743 { |
2945 if (thread && parent) /* sanity */ | 2744 if (thread && parent) /* sanity */ |
2946 { | 2745 { |
2947 thread->status_valid = 0; | 2746 thread->status_valid = 0; |
2948 if (!proc_get_status (thread)) | 2747 if (!proc_get_status (thread)) |
2949 destroy_one_procinfo (&parent->thread_list, thread); | 2748 destroy_one_procinfo (&parent->thread_list, thread); |
2950 } | 2749 } |
2951 return 0; /* keep iterating */ | 2750 return 0; /* keep iterating */ |
2952 } | 2751 } |
2953 | 2752 |
2954 #if defined (PIOCLSTATUS) | 2753 #if defined (PIOCLSTATUS) |
2955 /* Solaris 2.5 (ioctl) version */ | 2754 /* Solaris 2.5 (ioctl) version */ |
2956 int | 2755 static int |
2957 proc_update_threads (procinfo *pi) | 2756 proc_update_threads (procinfo *pi) |
2958 { | 2757 { |
2959 gdb_prstatus_t *prstatus; | 2758 gdb_prstatus_t *prstatus; |
2960 struct cleanup *old_chain = NULL; | 2759 struct cleanup *old_chain = NULL; |
2961 procinfo *thread; | 2760 procinfo *thread; |
2962 int nlwp, i; | 2761 int nlwp, i; |
2963 | 2762 |
2964 /* We should never have to apply this operation to any procinfo | 2763 /* We should never have to apply this operation to any procinfo |
2965 except the one for the main process. If that ever changes for | 2764 except the one for the main process. If that ever changes for |
2966 any reason, then take out the following clause and replace it | 2765 any reason, then take out the following clause and replace it |
(...skipping 28 matching lines...) Expand all Loading... |
2995 } | 2794 } |
2996 #else | 2795 #else |
2997 #ifdef NEW_PROC_API | 2796 #ifdef NEW_PROC_API |
2998 /* Unixware and Solaris 6 (and later) version. */ | 2797 /* Unixware and Solaris 6 (and later) version. */ |
2999 static void | 2798 static void |
3000 do_closedir_cleanup (void *dir) | 2799 do_closedir_cleanup (void *dir) |
3001 { | 2800 { |
3002 closedir (dir); | 2801 closedir (dir); |
3003 } | 2802 } |
3004 | 2803 |
3005 int | 2804 static int |
3006 proc_update_threads (procinfo *pi) | 2805 proc_update_threads (procinfo *pi) |
3007 { | 2806 { |
3008 char pathname[MAX_PROC_NAME_SIZE + 16]; | 2807 char pathname[MAX_PROC_NAME_SIZE + 16]; |
3009 struct dirent *direntry; | 2808 struct dirent *direntry; |
3010 struct cleanup *old_chain = NULL; | 2809 struct cleanup *old_chain = NULL; |
3011 procinfo *thread; | 2810 procinfo *thread; |
3012 DIR *dirp; | 2811 DIR *dirp; |
3013 int lwpid; | 2812 int lwpid; |
3014 | 2813 |
3015 /* We should never have to apply this operation to any procinfo | 2814 /* We should never have to apply this operation to any procinfo |
(...skipping 27 matching lines...) Expand all Loading... |
3043 if ((thread = create_procinfo (pi->pid, lwpid)) == NULL) | 2842 if ((thread = create_procinfo (pi->pid, lwpid)) == NULL) |
3044 proc_error (pi, "update_threads, create_procinfo", __LINE__); | 2843 proc_error (pi, "update_threads, create_procinfo", __LINE__); |
3045 } | 2844 } |
3046 pi->threads_valid = 1; | 2845 pi->threads_valid = 1; |
3047 do_cleanups (old_chain); | 2846 do_cleanups (old_chain); |
3048 return 1; | 2847 return 1; |
3049 } | 2848 } |
3050 #else | 2849 #else |
3051 #ifdef PIOCTLIST | 2850 #ifdef PIOCTLIST |
3052 /* OSF version */ | 2851 /* OSF version */ |
3053 int | 2852 static int |
3054 proc_update_threads (procinfo *pi) | 2853 proc_update_threads (procinfo *pi) |
3055 { | 2854 { |
3056 int nthreads, i; | 2855 int nthreads, i; |
3057 tid_t *threads; | 2856 tid_t *threads; |
3058 | 2857 |
3059 /* We should never have to apply this operation to any procinfo | 2858 /* We should never have to apply this operation to any procinfo |
3060 except the one for the main process. If that ever changes for | 2859 except the one for the main process. If that ever changes for |
3061 any reason, then take out the following clause and replace it | 2860 any reason, then take out the following clause and replace it |
3062 with one that makes sure the ctl_fd is open. */ | 2861 with one that makes sure the ctl_fd is open. */ |
3063 | 2862 |
(...skipping 15 matching lines...) Expand all Loading... |
3079 { | 2878 { |
3080 if (!find_procinfo (pi->pid, threads[i])) | 2879 if (!find_procinfo (pi->pid, threads[i])) |
3081 if (!create_procinfo (pi->pid, threads[i])) | 2880 if (!create_procinfo (pi->pid, threads[i])) |
3082 proc_error (pi, "update_threads, create_procinfo", __LINE__); | 2881 proc_error (pi, "update_threads, create_procinfo", __LINE__); |
3083 } | 2882 } |
3084 pi->threads_valid = 1; | 2883 pi->threads_valid = 1; |
3085 return 1; | 2884 return 1; |
3086 } | 2885 } |
3087 #else | 2886 #else |
3088 /* Default version */ | 2887 /* Default version */ |
3089 int | 2888 static int |
3090 proc_update_threads (procinfo *pi) | 2889 proc_update_threads (procinfo *pi) |
3091 { | 2890 { |
3092 return 0; | 2891 return 0; |
3093 } | 2892 } |
3094 #endif /* OSF PIOCTLIST */ | 2893 #endif /* OSF PIOCTLIST */ |
3095 #endif /* NEW_PROC_API */ | 2894 #endif /* NEW_PROC_API */ |
3096 #endif /* SOL 2.5 PIOCLSTATUS */ | 2895 #endif /* SOL 2.5 PIOCLSTATUS */ |
3097 | 2896 |
3098 /* Given a pointer to a function, call that function once for each lwp | 2897 /* Given a pointer to a function, call that function once for each lwp |
3099 in the procinfo list, until the function returns non-zero, in which | 2898 in the procinfo list, until the function returns non-zero, in which |
3100 event return the value returned by the function. | 2899 event return the value returned by the function. |
3101 | 2900 |
3102 Note: this function does NOT call update_threads. If you want to | 2901 Note: this function does NOT call update_threads. If you want to |
3103 discover new threads first, you must call that function explicitly. | 2902 discover new threads first, you must call that function explicitly. |
3104 This function just makes a quick pass over the currently-known | 2903 This function just makes a quick pass over the currently-known |
3105 procinfos. | 2904 procinfos. |
3106 | 2905 |
3107 PI is the parent process procinfo. FUNC is the per-thread | 2906 PI is the parent process procinfo. FUNC is the per-thread |
3108 function. PTR is an opaque parameter for function. Returns the | 2907 function. PTR is an opaque parameter for function. Returns the |
3109 first non-zero return value from the callee, or zero. */ | 2908 first non-zero return value from the callee, or zero. */ |
3110 | 2909 |
3111 int | 2910 static int |
3112 proc_iterate_over_threads (procinfo *pi, | 2911 proc_iterate_over_threads (procinfo *pi, |
3113 int (*func) (procinfo *, procinfo *, void *), | 2912 int (*func) (procinfo *, procinfo *, void *), |
3114 void *ptr) | 2913 void *ptr) |
3115 { | 2914 { |
3116 procinfo *thread, *next; | 2915 procinfo *thread, *next; |
3117 int retval = 0; | 2916 int retval = 0; |
3118 | 2917 |
3119 /* We should never have to apply this operation to any procinfo | 2918 /* We should never have to apply this operation to any procinfo |
3120 except the one for the main process. If that ever changes for | 2919 except the one for the main process. If that ever changes for |
3121 any reason, then take out the following clause and replace it | 2920 any reason, then take out the following clause and replace it |
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3980 if (status) | 3779 if (status) |
3981 { | 3780 { |
3982 /* How to exit gracefully, returning "unknown | 3781 /* How to exit gracefully, returning "unknown |
3983 event". */ | 3782 event". */ |
3984 status->kind = TARGET_WAITKIND_SPURIOUS; | 3783 status->kind = TARGET_WAITKIND_SPURIOUS; |
3985 return inferior_ptid; | 3784 return inferior_ptid; |
3986 } | 3785 } |
3987 else | 3786 else |
3988 { | 3787 { |
3989 /* How to keep going without returning to wfi: */ | 3788 /* How to keep going without returning to wfi: */ |
3990 » » » target_resume (ptid, 0, TARGET_SIGNAL_0); | 3789 » » » target_resume (ptid, 0, GDB_SIGNAL_0); |
3991 goto wait_again; | 3790 goto wait_again; |
3992 } | 3791 } |
3993 } | 3792 } |
3994 break; | 3793 break; |
3995 case PR_SYSEXIT: | 3794 case PR_SYSEXIT: |
3996 if (syscall_is_exec (pi, what)) | 3795 if (syscall_is_exec (pi, what)) |
3997 { | 3796 { |
3998 /* Hopefully this is our own "fork-child" execing | 3797 /* Hopefully this is our own "fork-child" execing |
3999 the real child. Hoax this event into a trap, and | 3798 the real child. Hoax this event into a trap, and |
4000 GDB will see the child about to execute its start | 3799 GDB will see the child about to execute its start |
4001 address. */ | 3800 address. */ |
4002 wstat = (SIGTRAP << 8) | 0177; | 3801 wstat = (SIGTRAP << 8) | 0177; |
4003 } | 3802 } |
4004 #ifdef SYS_syssgi | 3803 #ifdef SYS_syssgi |
4005 else if (what == SYS_syssgi) | 3804 else if (what == SYS_syssgi) |
4006 { | 3805 { |
4007 /* see if we can break on dbx_link(). If yes, then | 3806 /* see if we can break on dbx_link(). If yes, then |
4008 we no longer need the SYS_syssgi notifications. */ | 3807 we no longer need the SYS_syssgi notifications. */ |
4009 if (insert_dbx_link_breakpoint (pi)) | 3808 if (insert_dbx_link_breakpoint (pi)) |
4010 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT, | 3809 proc_trace_syscalls_1 (pi, SYS_syssgi, PR_SYSEXIT, |
4011 FLAG_RESET, 0); | 3810 FLAG_RESET, 0); |
4012 | 3811 |
4013 /* This is an internal event and should be transparent | 3812 /* This is an internal event and should be transparent |
4014 to wfi, so resume the execution and wait again. See | 3813 to wfi, so resume the execution and wait again. See |
4015 comment in procfs_init_inferior() for more details. */ | 3814 comment in procfs_init_inferior() for more details. */ |
4016 » » target_resume (ptid, 0, TARGET_SIGNAL_0); | 3815 » » target_resume (ptid, 0, GDB_SIGNAL_0); |
4017 goto wait_again; | 3816 goto wait_again; |
4018 } | 3817 } |
4019 #endif | 3818 #endif |
4020 else if (syscall_is_lwp_create (pi, what)) | 3819 else if (syscall_is_lwp_create (pi, what)) |
4021 { | 3820 { |
4022 /* This syscall is somewhat like fork/exec. We | 3821 /* This syscall is somewhat like fork/exec. We |
4023 will get the event twice: once for the parent | 3822 will get the event twice: once for the parent |
4024 LWP, and once for the child. We should already | 3823 LWP, and once for the child. We should already |
4025 know about the parent LWP, but the child will | 3824 know about the parent LWP, but the child will |
4026 be new to us. So, whenever we get this event, | 3825 be new to us. So, whenever we get this event, |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4376 | 4175 |
4377 If STEP is true, then arrange for the child to stop again after | 4176 If STEP is true, then arrange for the child to stop again after |
4378 executing a single instruction. If SIGNO is zero, then cancel any | 4177 executing a single instruction. If SIGNO is zero, then cancel any |
4379 pending signal; if non-zero, then arrange for the indicated signal | 4178 pending signal; if non-zero, then arrange for the indicated signal |
4380 to be delivered to the child when it runs. If PID is -1, then | 4179 to be delivered to the child when it runs. If PID is -1, then |
4381 allow any child thread to run; if non-zero, then allow only the | 4180 allow any child thread to run; if non-zero, then allow only the |
4382 indicated thread to run. (not implemented yet). */ | 4181 indicated thread to run. (not implemented yet). */ |
4383 | 4182 |
4384 static void | 4183 static void |
4385 procfs_resume (struct target_ops *ops, | 4184 procfs_resume (struct target_ops *ops, |
4386 » ptid_t ptid, int step, enum target_signal signo) | 4185 » ptid_t ptid, int step, enum gdb_signal signo) |
4387 { | 4186 { |
4388 procinfo *pi, *thread; | 4187 procinfo *pi, *thread; |
4389 int native_signo; | 4188 int native_signo; |
4390 | 4189 |
4391 /* 2.1: | 4190 /* 2.1: |
4392 prrun.prflags |= PRSVADDR; | 4191 prrun.prflags |= PRSVADDR; |
4393 prrun.pr_vaddr = $PC; set resume address | 4192 prrun.pr_vaddr = $PC; set resume address |
4394 prrun.prflags |= PRSTRACE; trace signals in pr_trace (all) | 4193 prrun.prflags |= PRSTRACE; trace signals in pr_trace (all) |
4395 prrun.prflags |= PRSFAULT; trace faults in pr_fault (all but PAGE) | 4194 prrun.prflags |= PRSFAULT; trace faults in pr_fault (all but PAGE) |
4396 prrun.prflags |= PRCFAULT; clear current fault. | 4195 prrun.prflags |= PRCFAULT; clear current fault. |
4397 | 4196 |
4398 PRSTRACE and PRSFAULT can be done by other means | 4197 PRSTRACE and PRSFAULT can be done by other means |
4399 (proc_trace_signals, proc_trace_faults) | 4198 (proc_trace_signals, proc_trace_faults) |
4400 PRSVADDR is unnecessary. | 4199 PRSVADDR is unnecessary. |
4401 PRCFAULT may be replaced by a PIOCCFAULT call (proc_clear_current_fault) | 4200 PRCFAULT may be replaced by a PIOCCFAULT call (proc_clear_current_fault) |
4402 This basically leaves PRSTEP and PRCSIG. | 4201 This basically leaves PRSTEP and PRCSIG. |
4403 PRCSIG is like PIOCSSIG (proc_clear_current_signal). | 4202 PRCSIG is like PIOCSSIG (proc_clear_current_signal). |
4404 So basically PR_STEP is the sole argument that must be passed | 4203 So basically PR_STEP is the sole argument that must be passed |
4405 to proc_run_process (for use in the prrun struct by ioctl). */ | 4204 to proc_run_process (for use in the prrun struct by ioctl). */ |
4406 | 4205 |
4407 /* Find procinfo for main process. */ | 4206 /* Find procinfo for main process. */ |
4408 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); | 4207 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); |
4409 | 4208 |
4410 /* First cut: ignore pid argument. */ | 4209 /* First cut: ignore pid argument. */ |
4411 errno = 0; | 4210 errno = 0; |
4412 | 4211 |
4413 /* Convert signal to host numbering. */ | 4212 /* Convert signal to host numbering. */ |
4414 if (signo == 0 || | 4213 if (signo == 0 || |
4415 (signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop)) | 4214 (signo == GDB_SIGNAL_STOP && pi->ignore_next_sigstop)) |
4416 native_signo = 0; | 4215 native_signo = 0; |
4417 else | 4216 else |
4418 native_signo = target_signal_to_host (signo); | 4217 native_signo = gdb_signal_to_host (signo); |
4419 | 4218 |
4420 pi->ignore_next_sigstop = 0; | 4219 pi->ignore_next_sigstop = 0; |
4421 | 4220 |
4422 /* Running the process voids all cached registers and status. */ | 4221 /* Running the process voids all cached registers and status. */ |
4423 /* Void the threads' caches first. */ | 4222 /* Void the threads' caches first. */ |
4424 proc_iterate_over_threads (pi, invalidate_cache, NULL); | 4223 proc_iterate_over_threads (pi, invalidate_cache, NULL); |
4425 /* Void the process procinfo's caches. */ | 4224 /* Void the process procinfo's caches. */ |
4426 invalidate_cache (NULL, pi, NULL); | 4225 invalidate_cache (NULL, pi, NULL); |
4427 | 4226 |
4428 if (PIDGET (ptid) != -1) | 4227 if (PIDGET (ptid) != -1) |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4467 procfs_pass_signals (int numsigs, unsigned char *pass_signals) | 4266 procfs_pass_signals (int numsigs, unsigned char *pass_signals) |
4468 { | 4267 { |
4469 gdb_sigset_t signals; | 4268 gdb_sigset_t signals; |
4470 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); | 4269 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); |
4471 int signo; | 4270 int signo; |
4472 | 4271 |
4473 prfillset (&signals); | 4272 prfillset (&signals); |
4474 | 4273 |
4475 for (signo = 0; signo < NSIG; signo++) | 4274 for (signo = 0; signo < NSIG; signo++) |
4476 { | 4275 { |
4477 int target_signo = target_signal_from_host (signo); | 4276 int target_signo = gdb_signal_from_host (signo); |
4478 if (target_signo < numsigs && pass_signals[target_signo]) | 4277 if (target_signo < numsigs && pass_signals[target_signo]) |
4479 gdb_prdelset (&signals, signo); | 4278 gdb_prdelset (&signals, signo); |
4480 } | 4279 } |
4481 | 4280 |
4482 if (!proc_set_traced_signals (pi, &signals)) | 4281 if (!proc_set_traced_signals (pi, &signals)) |
4483 proc_error (pi, "pass_signals", __LINE__); | 4282 proc_error (pi, "pass_signals", __LINE__); |
4484 } | 4283 } |
4485 | 4284 |
4486 /* Print status information about the child process. */ | 4285 /* Print status information about the child process. */ |
4487 | 4286 |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4951 | 4750 |
4952 if (!in_thread_list (gdb_threadid) || is_exited (gdb_threadid)) | 4751 if (!in_thread_list (gdb_threadid) || is_exited (gdb_threadid)) |
4953 add_thread (gdb_threadid); | 4752 add_thread (gdb_threadid); |
4954 | 4753 |
4955 return 0; | 4754 return 0; |
4956 } | 4755 } |
4957 | 4756 |
4958 /* Query all the threads that the target knows about, and give them | 4757 /* Query all the threads that the target knows about, and give them |
4959 back to GDB to add to its list. */ | 4758 back to GDB to add to its list. */ |
4960 | 4759 |
4961 void | 4760 static void |
4962 procfs_find_new_threads (struct target_ops *ops) | 4761 procfs_find_new_threads (struct target_ops *ops) |
4963 { | 4762 { |
4964 procinfo *pi; | 4763 procinfo *pi; |
4965 | 4764 |
4966 /* Find procinfo for main process. */ | 4765 /* Find procinfo for main process. */ |
4967 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); | 4766 pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); |
4968 proc_update_threads (pi); | 4767 proc_update_threads (pi); |
4969 proc_iterate_over_threads (pi, procfs_notice_thread, NULL); | 4768 proc_iterate_over_threads (pi, procfs_notice_thread, NULL); |
4970 } | 4769 } |
4971 | 4770 |
(...skipping 21 matching lines...) Expand all Loading... |
4993 return 0; | 4792 return 0; |
4994 } | 4793 } |
4995 /* I couldn't have got its status if it weren't alive, so it's | 4794 /* I couldn't have got its status if it weren't alive, so it's |
4996 alive. */ | 4795 alive. */ |
4997 return 1; | 4796 return 1; |
4998 } | 4797 } |
4999 | 4798 |
5000 /* Convert PTID to a string. Returns the string in a static | 4799 /* Convert PTID to a string. Returns the string in a static |
5001 buffer. */ | 4800 buffer. */ |
5002 | 4801 |
5003 char * | 4802 static char * |
5004 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid) | 4803 procfs_pid_to_str (struct target_ops *ops, ptid_t ptid) |
5005 { | 4804 { |
5006 static char buf[80]; | 4805 static char buf[80]; |
5007 | 4806 |
5008 if (TIDGET (ptid) == 0) | 4807 if (TIDGET (ptid) == 0) |
5009 sprintf (buf, "process %d", PIDGET (ptid)); | 4808 sprintf (buf, "process %d", PIDGET (ptid)); |
5010 else | 4809 else |
5011 sprintf (buf, "LWP %ld", TIDGET (ptid)); | 4810 sprintf (buf, "LWP %ld", TIDGET (ptid)); |
5012 | 4811 |
5013 return buf; | 4812 return buf; |
5014 } | 4813 } |
5015 | 4814 |
5016 /* Insert a watchpoint. */ | 4815 /* Insert a watchpoint. */ |
5017 | 4816 |
5018 int | 4817 static int |
5019 procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag, | 4818 procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag, |
5020 int after) | 4819 int after) |
5021 { | 4820 { |
5022 #ifndef UNIXWARE | 4821 #ifndef UNIXWARE |
5023 #ifndef AIX5 | 4822 #ifndef AIX5 |
5024 int pflags = 0; | 4823 int pflags = 0; |
5025 procinfo *pi; | 4824 procinfo *pi; |
5026 | 4825 |
5027 pi = find_procinfo_or_die (PIDGET (ptid) == -1 ? | 4826 pi = find_procinfo_or_die (PIDGET (ptid) == -1 ? |
5028 PIDGET (inferior_ptid) : PIDGET (ptid), 0); | 4827 PIDGET (inferior_ptid) : PIDGET (ptid), 0); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5383 " Offset", | 5182 " Offset", |
5384 "Flags"); | 5183 "Flags"); |
5385 | 5184 |
5386 iterate_over_mappings (pi, NULL, NULL, info_mappings_callback); | 5185 iterate_over_mappings (pi, NULL, NULL, info_mappings_callback); |
5387 printf_filtered ("\n"); | 5186 printf_filtered ("\n"); |
5388 } | 5187 } |
5389 | 5188 |
5390 /* Implement the "info proc" command. */ | 5189 /* Implement the "info proc" command. */ |
5391 | 5190 |
5392 static void | 5191 static void |
5393 info_proc_cmd (char *args, int from_tty) | 5192 procfs_info_proc (struct target_ops *ops, char *args, |
| 5193 » » enum info_proc_what what) |
5394 { | 5194 { |
5395 struct cleanup *old_chain; | 5195 struct cleanup *old_chain; |
5396 procinfo *process = NULL; | 5196 procinfo *process = NULL; |
5397 procinfo *thread = NULL; | 5197 procinfo *thread = NULL; |
5398 char **argv = NULL; | 5198 char **argv = NULL; |
5399 char *tmp = NULL; | 5199 char *tmp = NULL; |
5400 int pid = 0; | 5200 int pid = 0; |
5401 int tid = 0; | 5201 int tid = 0; |
5402 int mappings = 0; | 5202 int mappings = 0; |
5403 | 5203 |
| 5204 switch (what) |
| 5205 { |
| 5206 case IP_MINIMAL: |
| 5207 break; |
| 5208 |
| 5209 case IP_MAPPINGS: |
| 5210 case IP_ALL: |
| 5211 mappings = 1; |
| 5212 break; |
| 5213 |
| 5214 default: |
| 5215 error (_("Not supported on this target.")); |
| 5216 } |
| 5217 |
5404 old_chain = make_cleanup (null_cleanup, 0); | 5218 old_chain = make_cleanup (null_cleanup, 0); |
5405 if (args) | 5219 if (args) |
5406 { | 5220 { |
5407 argv = gdb_buildargv (args); | 5221 argv = gdb_buildargv (args); |
5408 make_cleanup_freeargv (argv); | 5222 make_cleanup_freeargv (argv); |
5409 } | 5223 } |
5410 while (argv != NULL && *argv != NULL) | 5224 while (argv != NULL && *argv != NULL) |
5411 { | 5225 { |
5412 if (isdigit (argv[0][0])) | 5226 if (isdigit (argv[0][0])) |
5413 { | 5227 { |
5414 pid = strtoul (argv[0], &tmp, 10); | 5228 pid = strtoul (argv[0], &tmp, 10); |
5415 if (*tmp == '/') | 5229 if (*tmp == '/') |
5416 tid = strtoul (++tmp, NULL, 10); | 5230 tid = strtoul (++tmp, NULL, 10); |
5417 } | 5231 } |
5418 else if (argv[0][0] == '/') | 5232 else if (argv[0][0] == '/') |
5419 { | 5233 { |
5420 tid = strtoul (argv[0] + 1, NULL, 10); | 5234 tid = strtoul (argv[0] + 1, NULL, 10); |
5421 } | 5235 } |
5422 else if (strncmp (argv[0], "mappings", strlen (argv[0])) == 0) | |
5423 { | |
5424 mappings = 1; | |
5425 } | |
5426 else | |
5427 { | |
5428 /* [...] */ | |
5429 } | |
5430 argv++; | 5236 argv++; |
5431 } | 5237 } |
5432 if (pid == 0) | 5238 if (pid == 0) |
5433 pid = PIDGET (inferior_ptid); | 5239 pid = PIDGET (inferior_ptid); |
5434 if (pid == 0) | 5240 if (pid == 0) |
5435 error (_("No current process: you must name one.")); | 5241 error (_("No current process: you must name one.")); |
5436 else | 5242 else |
5437 { | 5243 { |
5438 /* Have pid, will travel. | 5244 /* Have pid, will travel. |
5439 First see if it's a process we're already debugging. */ | 5245 First see if it's a process we're already debugging. */ |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5555 proc_trace_syscalls (args, from_tty, PR_SYSENTRY, FLAG_RESET); | 5361 proc_trace_syscalls (args, from_tty, PR_SYSENTRY, FLAG_RESET); |
5556 } | 5362 } |
5557 | 5363 |
5558 static void | 5364 static void |
5559 proc_untrace_sysexit_cmd (char *args, int from_tty) | 5365 proc_untrace_sysexit_cmd (char *args, int from_tty) |
5560 { | 5366 { |
5561 proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_RESET); | 5367 proc_trace_syscalls (args, from_tty, PR_SYSEXIT, FLAG_RESET); |
5562 } | 5368 } |
5563 | 5369 |
5564 | 5370 |
| 5371 /* Provide a prototype to silence -Wmissing-prototypes. */ |
| 5372 extern void _initialize_procfs (void); |
| 5373 |
5565 void | 5374 void |
5566 _initialize_procfs (void) | 5375 _initialize_procfs (void) |
5567 { | 5376 { |
5568 observer_attach_inferior_created (procfs_inferior_created); | 5377 observer_attach_inferior_created (procfs_inferior_created); |
5569 | 5378 |
5570 add_info ("proc", info_proc_cmd, _("\ | |
5571 Show /proc process information about any running process.\n\ | |
5572 Specify process id, or use the program being debugged by default.\n\ | |
5573 Specify keyword 'mappings' for detailed info on memory mappings.")); | |
5574 add_com ("proc-trace-entry", no_class, proc_trace_sysentry_cmd, | 5379 add_com ("proc-trace-entry", no_class, proc_trace_sysentry_cmd, |
5575 _("Give a trace of entries into the syscall.")); | 5380 _("Give a trace of entries into the syscall.")); |
5576 add_com ("proc-trace-exit", no_class, proc_trace_sysexit_cmd, | 5381 add_com ("proc-trace-exit", no_class, proc_trace_sysexit_cmd, |
5577 _("Give a trace of exits from the syscall.")); | 5382 _("Give a trace of exits from the syscall.")); |
5578 add_com ("proc-untrace-entry", no_class, proc_untrace_sysentry_cmd, | 5383 add_com ("proc-untrace-entry", no_class, proc_untrace_sysentry_cmd, |
5579 _("Cancel a trace of entries into the syscall.")); | 5384 _("Cancel a trace of entries into the syscall.")); |
5580 add_com ("proc-untrace-exit", no_class, proc_untrace_sysexit_cmd, | 5385 add_com ("proc-untrace-exit", no_class, proc_untrace_sysexit_cmd, |
5581 _("Cancel a trace of exits from the syscall.")); | 5386 _("Cancel a trace of exits from the syscall.")); |
5582 } | 5387 } |
5583 | 5388 |
(...skipping 15 matching lines...) Expand all Loading... |
5599 return pid_to_ptid (procinfo_list ? procinfo_list->pid : -1); | 5404 return pid_to_ptid (procinfo_list ? procinfo_list->pid : -1); |
5600 } | 5405 } |
5601 | 5406 |
5602 /* =================== GCORE .NOTE "MODULE" =================== */ | 5407 /* =================== GCORE .NOTE "MODULE" =================== */ |
5603 #if defined (UNIXWARE) || defined (PIOCOPENLWP) || defined (PCAGENT) | 5408 #if defined (UNIXWARE) || defined (PIOCOPENLWP) || defined (PCAGENT) |
5604 /* gcore only implemented on solaris and unixware (so far) */ | 5409 /* gcore only implemented on solaris and unixware (so far) */ |
5605 | 5410 |
5606 static char * | 5411 static char * |
5607 procfs_do_thread_registers (bfd *obfd, ptid_t ptid, | 5412 procfs_do_thread_registers (bfd *obfd, ptid_t ptid, |
5608 char *note_data, int *note_size, | 5413 char *note_data, int *note_size, |
5609 » » » enum target_signal stop_signal) | 5414 » » » enum gdb_signal stop_signal) |
5610 { | 5415 { |
5611 struct regcache *regcache = get_thread_regcache (ptid); | 5416 struct regcache *regcache = get_thread_regcache (ptid); |
5612 gdb_gregset_t gregs; | 5417 gdb_gregset_t gregs; |
5613 gdb_fpregset_t fpregs; | 5418 gdb_fpregset_t fpregs; |
5614 unsigned long merged_pid; | 5419 unsigned long merged_pid; |
5615 struct cleanup *old_chain; | 5420 struct cleanup *old_chain; |
5616 | 5421 |
5617 merged_pid = TIDGET (ptid) << 16 | PIDGET (ptid); | 5422 merged_pid = TIDGET (ptid) << 16 | PIDGET (ptid); |
5618 | 5423 |
5619 /* This part is the old method for fetching registers. | 5424 /* This part is the old method for fetching registers. |
(...skipping 30 matching lines...) Expand all Loading... |
5650 | 5455 |
5651 do_cleanups (old_chain); | 5456 do_cleanups (old_chain); |
5652 | 5457 |
5653 return note_data; | 5458 return note_data; |
5654 } | 5459 } |
5655 | 5460 |
5656 struct procfs_corefile_thread_data { | 5461 struct procfs_corefile_thread_data { |
5657 bfd *obfd; | 5462 bfd *obfd; |
5658 char *note_data; | 5463 char *note_data; |
5659 int *note_size; | 5464 int *note_size; |
5660 enum target_signal stop_signal; | 5465 enum gdb_signal stop_signal; |
5661 }; | 5466 }; |
5662 | 5467 |
5663 static int | 5468 static int |
5664 procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data) | 5469 procfs_corefile_thread_callback (procinfo *pi, procinfo *thread, void *data) |
5665 { | 5470 { |
5666 struct procfs_corefile_thread_data *args = data; | 5471 struct procfs_corefile_thread_data *args = data; |
5667 | 5472 |
5668 if (pi != NULL) | 5473 if (pi != NULL) |
5669 { | 5474 { |
5670 ptid_t ptid = MERGEPID (pi->pid, thread->tid); | 5475 ptid_t ptid = MERGEPID (pi->pid, thread->tid); |
5671 | 5476 |
5672 args->note_data = procfs_do_thread_registers (args->obfd, ptid, | 5477 args->note_data = procfs_do_thread_registers (args->obfd, ptid, |
5673 args->note_data, | 5478 args->note_data, |
5674 args->note_size, | 5479 args->note_size, |
5675 args->stop_signal); | 5480 args->stop_signal); |
5676 } | 5481 } |
5677 return 0; | 5482 return 0; |
5678 } | 5483 } |
5679 | 5484 |
5680 static int | 5485 static int |
5681 find_signalled_thread (struct thread_info *info, void *data) | 5486 find_signalled_thread (struct thread_info *info, void *data) |
5682 { | 5487 { |
5683 if (info->suspend.stop_signal != TARGET_SIGNAL_0 | 5488 if (info->suspend.stop_signal != GDB_SIGNAL_0 |
5684 && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid)) | 5489 && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid)) |
5685 return 1; | 5490 return 1; |
5686 | 5491 |
5687 return 0; | 5492 return 0; |
5688 } | 5493 } |
5689 | 5494 |
5690 static enum target_signal | 5495 static enum gdb_signal |
5691 find_stop_signal (void) | 5496 find_stop_signal (void) |
5692 { | 5497 { |
5693 struct thread_info *info = | 5498 struct thread_info *info = |
5694 iterate_over_threads (find_signalled_thread, NULL); | 5499 iterate_over_threads (find_signalled_thread, NULL); |
5695 | 5500 |
5696 if (info) | 5501 if (info) |
5697 return info->suspend.stop_signal; | 5502 return info->suspend.stop_signal; |
5698 else | 5503 else |
5699 return TARGET_SIGNAL_0; | 5504 return GDB_SIGNAL_0; |
5700 } | 5505 } |
5701 | 5506 |
5702 static char * | 5507 static char * |
5703 procfs_make_note_section (bfd *obfd, int *note_size) | 5508 procfs_make_note_section (bfd *obfd, int *note_size) |
5704 { | 5509 { |
5705 struct cleanup *old_chain; | 5510 struct cleanup *old_chain; |
5706 gdb_gregset_t gregs; | 5511 gdb_gregset_t gregs; |
5707 gdb_fpregset_t fpregs; | 5512 gdb_fpregset_t fpregs; |
5708 char fname[16] = {'\0'}; | 5513 char fname[16] = {'\0'}; |
5709 char psargs[80] = {'\0'}; | 5514 char psargs[80] = {'\0'}; |
5710 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); | 5515 procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0); |
5711 char *note_data = NULL; | 5516 char *note_data = NULL; |
5712 char *inf_args; | 5517 char *inf_args; |
5713 struct procfs_corefile_thread_data thread_args; | 5518 struct procfs_corefile_thread_data thread_args; |
5714 gdb_byte *auxv; | 5519 gdb_byte *auxv; |
5715 int auxv_len; | 5520 int auxv_len; |
5716 enum target_signal stop_signal; | 5521 enum gdb_signal stop_signal; |
5717 | 5522 |
5718 if (get_exec_file (0)) | 5523 if (get_exec_file (0)) |
5719 { | 5524 { |
5720 strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname)); | 5525 strncpy (fname, lbasename (get_exec_file (0)), sizeof (fname)); |
5721 strncpy (psargs, get_exec_file (0), | 5526 fname[sizeof (fname) - 1] = 0; |
5722 » sizeof (psargs)); | 5527 strncpy (psargs, get_exec_file (0), sizeof (psargs)); |
| 5528 psargs[sizeof (psargs) - 1] = 0; |
5723 | 5529 |
5724 inf_args = get_inferior_args (); | 5530 inf_args = get_inferior_args (); |
5725 if (inf_args && *inf_args && | 5531 if (inf_args && *inf_args && |
5726 strlen (inf_args) < ((int) sizeof (psargs) - (int) strlen (psargs))) | 5532 strlen (inf_args) < ((int) sizeof (psargs) - (int) strlen (psargs))) |
5727 { | 5533 { |
5728 strncat (psargs, " ", | 5534 strncat (psargs, " ", |
5729 sizeof (psargs) - strlen (psargs)); | 5535 sizeof (psargs) - strlen (psargs)); |
5730 strncat (psargs, inf_args, | 5536 strncat (psargs, inf_args, |
5731 sizeof (psargs) - strlen (psargs)); | 5537 sizeof (psargs) - strlen (psargs)); |
5732 } | 5538 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5772 } | 5578 } |
5773 #else /* !(Solaris or Unixware) */ | 5579 #else /* !(Solaris or Unixware) */ |
5774 static char * | 5580 static char * |
5775 procfs_make_note_section (bfd *obfd, int *note_size) | 5581 procfs_make_note_section (bfd *obfd, int *note_size) |
5776 { | 5582 { |
5777 error (_("gcore not implemented for this host.")); | 5583 error (_("gcore not implemented for this host.")); |
5778 return NULL; /* lint */ | 5584 return NULL; /* lint */ |
5779 } | 5585 } |
5780 #endif /* Solaris or Unixware */ | 5586 #endif /* Solaris or Unixware */ |
5781 /* =================== END GCORE .NOTE "MODULE" =================== */ | 5587 /* =================== END GCORE .NOTE "MODULE" =================== */ |
OLD | NEW |