+
+#define get_process(inf) ((struct process_info *)(inf))
+#define get_thread_process(thr) (get_process (inferior_target_data (thr)))
+#define get_process_thread(proc) ((struct thread_info *) \
+ find_inferior_id (&all_threads, \
+ get_process (proc)->lwpid))
+
+struct process_info
+{
+ struct inferior_list_entry head;
+ unsigned long lwpid;
+
+ /* If this flag is set, the next SIGSTOP will be ignored (the
+ process will be immediately resumed). This means that either we
+ sent the SIGSTOP to it ourselves and got some other pending event
+ (so the SIGSTOP is still pending), or that we stopped the
+ inferior implicitly via PTRACE_ATTACH and have not waited for it
+ yet. */
+ int stop_expected;
+
+ /* If this flag is set, the process is known to be stopped right now (stop
+ event already received in a wait()). */
+ int stopped;
+
+ /* When stopped is set, the last wait status recorded for this process. */
+ int last_status;
+
+ /* If this flag is set, STATUS_PENDING is a waitstatus that has not yet
+ been reported. */
+ int status_pending_p;
+ int status_pending;
+
+ /* If this flag is set, the pending status is a (GDB-placed) breakpoint. */
+ int pending_is_breakpoint;
+ CORE_ADDR pending_stop_pc;
+
+ /* If this is non-zero, it is a breakpoint to be reinserted at our next
+ stop (SIGTRAP stops only). */
+ CORE_ADDR bp_reinsert;
+
+ /* If this flag is set, the last continue operation on this process
+ was a single-step. */
+ int stepping;
+
+ /* If this is non-zero, it points to a chain of signals which need to
+ be delivered to this process. */
+ struct pending_signals *pending_signals;
+
+ /* A link used when resuming. It is initialized from the resume request,
+ and then processed and cleared in linux_resume_one_process. */
+
+ struct thread_resume *resume;
+
+ int thread_known;
+ unsigned long tid;
+#ifdef HAVE_THREAD_DB_H
+ /* The thread handle, used for e.g. TLS access. Only valid if
+ THREAD_KNOWN is set. */
+ td_thrhandle_t th;
+#endif
+};
+
+extern struct inferior_list all_processes;
+
+void linux_attach_lwp (unsigned long pid);
+
+int thread_db_init (int use_events);
+int thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset,
+ CORE_ADDR load_module, CORE_ADDR *address);