Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: gdb/gdbserver/linux-low.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/gdbserver/linux-low.h ('k') | gdb/gdbserver/linux-m32r-low.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Low level interface to ptrace, for the remote server for GDB. 1 /* Low level interface to ptrace, for the remote server for GDB.
2 Copyright (C) 1995-1996, 1998-2012 Free Software Foundation, Inc. 2 Copyright (C) 1995-1996, 1998-2012 Free Software Foundation, Inc.
3 3
4 This file is part of GDB. 4 This file is part of GDB.
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or 8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 18
19 #include "server.h" 19 #include "server.h"
20 #include "linux-low.h" 20 #include "linux-low.h"
21 #include "linux-osdata.h" 21 #include "linux-osdata.h"
22 #include "agent.h"
22 23
23 #include <sys/wait.h> 24 #include <sys/wait.h>
24 #include <stdio.h> 25 #include <stdio.h>
25 #include <sys/param.h> 26 #include <sys/param.h>
26 #include <sys/ptrace.h> 27 #include <sys/ptrace.h>
27 #include "linux-ptrace.h" 28 #include "linux-ptrace.h"
28 #include "linux-procfs.h" 29 #include "linux-procfs.h"
29 #include <signal.h> 30 #include <signal.h>
30 #include <sys/ioctl.h> 31 #include <sys/ioctl.h>
31 #include <fcntl.h> 32 #include <fcntl.h>
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 #endif 71 #endif
71 72
72 /* This is the kernel's hard limit. Not to be confused with 73 /* This is the kernel's hard limit. Not to be confused with
73 SIGRTMIN. */ 74 SIGRTMIN. */
74 #ifndef __SIGRTMIN 75 #ifndef __SIGRTMIN
75 #define __SIGRTMIN 32 76 #define __SIGRTMIN 32
76 #endif 77 #endif
77 78
78 #ifdef __UCLIBC__ 79 #ifdef __UCLIBC__
79 #if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__)) 80 #if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
81 /* PTRACE_TEXT_ADDR and friends. */
82 #include <asm/ptrace.h>
80 #define HAS_NOMMU 83 #define HAS_NOMMU
81 #endif 84 #endif
82 #endif 85 #endif
83 86
87 #ifndef HAVE_ELF32_AUXV_T
88 /* Copied from glibc's elf.h. */
89 typedef struct
90 {
91 uint32_t a_type; /* Entry type */
92 union
93 {
94 uint32_t a_val; /* Integer value */
95 /* We use to have pointer elements added here. We cannot do that,
96 though, since it does not work when using 32-bit definitions
97 on 64-bit platforms and vice versa. */
98 } a_un;
99 } Elf32_auxv_t;
100 #endif
101
102 #ifndef HAVE_ELF64_AUXV_T
103 /* Copied from glibc's elf.h. */
104 typedef struct
105 {
106 uint64_t a_type; /* Entry type */
107 union
108 {
109 uint64_t a_val; /* Integer value */
110 /* We use to have pointer elements added here. We cannot do that,
111 though, since it does not work when using 32-bit definitions
112 on 64-bit platforms and vice versa. */
113 } a_un;
114 } Elf64_auxv_t;
115 #endif
116
84 /* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol 117 /* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol
85 representation of the thread ID. 118 representation of the thread ID.
86 119
87 ``all_lwps'' is keyed by the process ID - which on Linux is (presently) 120 ``all_lwps'' is keyed by the process ID - which on Linux is (presently)
88 the same as the LWP ID. 121 the same as the LWP ID.
89 122
90 ``all_processes'' is keyed by the "overall process ID", which 123 ``all_processes'' is keyed by the "overall process ID", which
91 GNU/Linux calls tgid, "thread group ID". */ 124 GNU/Linux calls tgid, "thread group ID". */
92 125
93 struct inferior_list all_lwps; 126 struct inferior_list all_lwps;
94 127
95 /* A list of all unknown processes which receive stop signals. Some other 128 /* A list of all unknown processes which receive stop signals. Some
96 process will presumably claim each of these as forked children 129 other process will presumably claim each of these as forked
97 momentarily. */ 130 children momentarily. */
98 131
99 struct inferior_list stopped_pids; 132 struct simple_pid_list
133 {
134 /* The process ID. */
135 int pid;
100 136
101 /* FIXME this is a bit of a hack, and could be removed. */ 137 /* The status as reported by waitpid. */
102 int stopping_threads; 138 int status;
139
140 /* Next in chain. */
141 struct simple_pid_list *next;
142 };
143 struct simple_pid_list *stopped_pids;
144
145 /* Trivial list manipulation functions to keep track of a list of new
146 stopped processes. */
147
148 static void
149 add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
150 {
151 struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
152
153 new_pid->pid = pid;
154 new_pid->status = status;
155 new_pid->next = *listp;
156 *listp = new_pid;
157 }
158
159 static int
160 pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
161 {
162 struct simple_pid_list **p;
163
164 for (p = listp; *p != NULL; p = &(*p)->next)
165 if ((*p)->pid == pid)
166 {
167 » struct simple_pid_list *next = (*p)->next;
168
169 » *statusp = (*p)->status;
170 » xfree (*p);
171 » *p = next;
172 » return 1;
173 }
174 return 0;
175 }
176
177 enum stopping_threads_kind
178 {
179 /* Not stopping threads presently. */
180 NOT_STOPPING_THREADS,
181
182 /* Stopping threads. */
183 STOPPING_THREADS,
184
185 /* Stopping and suspending threads. */
186 STOPPING_AND_SUSPENDING_THREADS
187 };
188
189 /* This is set while stop_all_lwps is in effect. */
190 enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS;
103 191
104 /* FIXME make into a target method? */ 192 /* FIXME make into a target method? */
105 int using_threads = 1; 193 int using_threads = 1;
106 194
107 /* True if we're presently stabilizing threads (moving them out of 195 /* True if we're presently stabilizing threads (moving them out of
108 jump pads). */ 196 jump pads). */
109 static int stabilizing_threads; 197 static int stabilizing_threads;
110 198
111 /* This flag is true iff we've just created or attached to our first 199 /* This flag is true iff we've just created or attached to our first
112 inferior but it has not stopped yet. As soon as it does, we need 200 inferior but it has not stopped yet. As soon as it does, we need
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 return the_low_target.install_fast_tracepoint_jump_pad != NULL; 248 return the_low_target.install_fast_tracepoint_jump_pad != NULL;
161 } 249 }
162 250
163 struct pending_signals 251 struct pending_signals
164 { 252 {
165 int signal; 253 int signal;
166 siginfo_t info; 254 siginfo_t info;
167 struct pending_signals *prev; 255 struct pending_signals *prev;
168 }; 256 };
169 257
170 #define PTRACE_ARG3_TYPE void *
171 #define PTRACE_ARG4_TYPE void *
172 #define PTRACE_XFER_TYPE long
173
174 #ifdef HAVE_LINUX_REGSETS 258 #ifdef HAVE_LINUX_REGSETS
175 static char *disabled_regsets; 259 static char *disabled_regsets;
176 static int num_regsets; 260 static int num_regsets;
177 #endif 261 #endif
178 262
179 /* The read/write ends of the pipe registered as waitable file in the 263 /* The read/write ends of the pipe registered as waitable file in the
180 event loop. */ 264 event loop. */
181 static int linux_event_pipe[2] = { -1, -1 }; 265 static int linux_event_pipe[2] = { -1, -1 };
182 266
183 /* True if we're currently in async mode. */ 267 /* True if we're currently in async mode. */
184 #define target_is_async_p() (linux_event_pipe[0] != -1) 268 #define target_is_async_p() (linux_event_pipe[0] != -1)
185 269
186 static void send_sigstop (struct lwp_info *lwp); 270 static void send_sigstop (struct lwp_info *lwp);
187 static void wait_for_sigstop (struct inferior_list_entry *entry); 271 static void wait_for_sigstop (struct inferior_list_entry *entry);
188 272
189 /* Accepts an integer PID; Returns a string representing a file that
190 can be opened to get info for the child process.
191 Space for the result is malloc'd, caller must free. */
192
193 char *
194 linux_child_pid_to_exec_file (int pid)
195 {
196 char *name1, *name2;
197
198 name1 = xmalloc (MAXPATHLEN);
199 name2 = xmalloc (MAXPATHLEN);
200 memset (name2, 0, MAXPATHLEN);
201
202 sprintf (name1, "/proc/%d/exe", pid);
203 if (readlink (name1, name2, MAXPATHLEN) > 0)
204 {
205 free (name1);
206 return name2;
207 }
208 else
209 {
210 free (name2);
211 return name1;
212 }
213 }
214
215 /* Return non-zero if HEADER is a 64-bit ELF file. */ 273 /* Return non-zero if HEADER is a 64-bit ELF file. */
216 274
217 static int 275 static int
218 elf_64_header_p (const Elf64_Ehdr *header) 276 elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine)
219 { 277 {
220 return (header->e_ident[EI_MAG0] == ELFMAG0 278 if (header->e_ident[EI_MAG0] == ELFMAG0
221 && header->e_ident[EI_MAG1] == ELFMAG1 279 && header->e_ident[EI_MAG1] == ELFMAG1
222 && header->e_ident[EI_MAG2] == ELFMAG2 280 && header->e_ident[EI_MAG2] == ELFMAG2
223 && header->e_ident[EI_MAG3] == ELFMAG3 281 && header->e_ident[EI_MAG3] == ELFMAG3)
224 && header->e_ident[EI_CLASS] == ELFCLASS64); 282 {
283 *machine = header->e_machine;
284 return header->e_ident[EI_CLASS] == ELFCLASS64;
285
286 }
287 *machine = EM_NONE;
288 return -1;
225 } 289 }
226 290
227 /* Return non-zero if FILE is a 64-bit ELF file, 291 /* Return non-zero if FILE is a 64-bit ELF file,
228 zero if the file is not a 64-bit ELF file, 292 zero if the file is not a 64-bit ELF file,
229 and -1 if the file is not accessible or doesn't exist. */ 293 and -1 if the file is not accessible or doesn't exist. */
230 294
231 int 295 static int
232 elf_64_file_p (const char *file) 296 elf_64_file_p (const char *file, unsigned int *machine)
233 { 297 {
234 Elf64_Ehdr header; 298 Elf64_Ehdr header;
235 int fd; 299 int fd;
236 300
237 fd = open (file, O_RDONLY); 301 fd = open (file, O_RDONLY);
238 if (fd < 0) 302 if (fd < 0)
239 return -1; 303 return -1;
240 304
241 if (read (fd, &header, sizeof (header)) != sizeof (header)) 305 if (read (fd, &header, sizeof (header)) != sizeof (header))
242 { 306 {
243 close (fd); 307 close (fd);
244 return 0; 308 return 0;
245 } 309 }
246 close (fd); 310 close (fd);
247 311
248 return elf_64_header_p (&header); 312 return elf_64_header_p (&header, machine);
313 }
314
315 /* Accepts an integer PID; Returns true if the executable PID is
316 running is a 64-bit ELF file.. */
317
318 int
319 linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
320 {
321 char file[MAXPATHLEN];
322
323 sprintf (file, "/proc/%d/exe", pid);
324 return elf_64_file_p (file, machine);
249 } 325 }
250 326
251 static void 327 static void
252 delete_lwp (struct lwp_info *lwp) 328 delete_lwp (struct lwp_info *lwp)
253 { 329 {
254 remove_thread (get_lwp_thread (lwp)); 330 remove_thread (get_lwp_thread (lwp));
255 remove_inferior (&all_lwps, &lwp->head); 331 remove_inferior (&all_lwps, &lwp->head);
256 free (lwp->arch_private); 332 free (lwp->arch_private);
257 free (lwp); 333 free (lwp);
258 } 334 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 static void 436 static void
361 handle_extended_wait (struct lwp_info *event_child, int wstat) 437 handle_extended_wait (struct lwp_info *event_child, int wstat)
362 { 438 {
363 int event = wstat >> 16; 439 int event = wstat >> 16;
364 struct lwp_info *new_lwp; 440 struct lwp_info *new_lwp;
365 441
366 if (event == PTRACE_EVENT_CLONE) 442 if (event == PTRACE_EVENT_CLONE)
367 { 443 {
368 ptid_t ptid; 444 ptid_t ptid;
369 unsigned long new_pid; 445 unsigned long new_pid;
370 int ret, status = W_STOPCODE (SIGSTOP); 446 int ret, status;
371 447
372 ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_child), 0, &new_pid); 448 ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_child), 0, &new_pid);
373 449
374 /* If we haven't already seen the new PID stop, wait for it now. */ 450 /* If we haven't already seen the new PID stop, wait for it now. */
375 if (! pull_pid_from_list (&stopped_pids, new_pid)) 451 if (!pull_pid_from_list (&stopped_pids, new_pid, &status))
376 { 452 {
377 /* The new child has a pending SIGSTOP. We can't affect it until it 453 /* The new child has a pending SIGSTOP. We can't affect it until it
378 hits the SIGSTOP, but we're already attached. */ 454 hits the SIGSTOP, but we're already attached. */
379 455
380 ret = my_waitpid (new_pid, &status, __WALL); 456 ret = my_waitpid (new_pid, &status, __WALL);
381 457
382 if (ret == -1) 458 if (ret == -1)
383 perror_with_name ("waiting for new child"); 459 perror_with_name ("waiting for new child");
384 else if (ret != new_pid) 460 else if (ret != new_pid)
385 warning ("wait returned unexpected PID %d", ret); 461 warning ("wait returned unexpected PID %d", ret);
386 else if (!WIFSTOPPED (status)) 462 else if (!WIFSTOPPED (status))
387 warning ("wait returned unexpected status 0x%x", status); 463 warning ("wait returned unexpected status 0x%x", status);
388 } 464 }
389 465
390 linux_enable_event_reporting (new_pid); 466 linux_enable_event_reporting (new_pid);
391 467
392 ptid = ptid_build (pid_of (event_child), new_pid, 0); 468 ptid = ptid_build (pid_of (event_child), new_pid, 0);
393 new_lwp = (struct lwp_info *) add_lwp (ptid); 469 new_lwp = (struct lwp_info *) add_lwp (ptid);
394 add_thread (ptid, new_lwp); 470 add_thread (ptid, new_lwp);
395 471
396 /* Either we're going to immediately resume the new thread 472 /* Either we're going to immediately resume the new thread
397 or leave it stopped. linux_resume_one_lwp is a nop if it 473 or leave it stopped. linux_resume_one_lwp is a nop if it
398 thinks the thread is currently running, so set this first 474 thinks the thread is currently running, so set this first
399 before calling linux_resume_one_lwp. */ 475 before calling linux_resume_one_lwp. */
400 new_lwp->stopped = 1; 476 new_lwp->stopped = 1;
401 477
478 /* If we're suspending all threads, leave this one suspended
479 too. */
480 if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS)
481 new_lwp->suspended = 1;
482
402 /* Normally we will get the pending SIGSTOP. But in some cases 483 /* Normally we will get the pending SIGSTOP. But in some cases
403 we might get another signal delivered to the group first. 484 we might get another signal delivered to the group first.
404 If we do get another signal, be sure not to lose it. */ 485 If we do get another signal, be sure not to lose it. */
405 if (WSTOPSIG (status) == SIGSTOP) 486 if (WSTOPSIG (status) == SIGSTOP)
406 { 487 {
407 » if (stopping_threads) 488 » if (stopping_threads != NOT_STOPPING_THREADS)
408 new_lwp->stop_pc = get_stop_pc (new_lwp); 489 new_lwp->stop_pc = get_stop_pc (new_lwp);
409 else 490 else
410 linux_resume_one_lwp (new_lwp, 0, 0, NULL); 491 linux_resume_one_lwp (new_lwp, 0, 0, NULL);
411 } 492 }
412 else 493 else
413 { 494 {
414 new_lwp->stop_expected = 1; 495 new_lwp->stop_expected = 1;
415 496
416 » if (stopping_threads) 497 » if (stopping_threads != NOT_STOPPING_THREADS)
417 { 498 {
418 new_lwp->stop_pc = get_stop_pc (new_lwp); 499 new_lwp->stop_pc = get_stop_pc (new_lwp);
419 new_lwp->status_pending_p = 1; 500 new_lwp->status_pending_p = 1;
420 new_lwp->status_pending = status; 501 new_lwp->status_pending = status;
421 } 502 }
422 else 503 else
423 /* Pass the signal on. This is what GDB does - except 504 /* Pass the signal on. This is what GDB does - except
424 shouldn't we really report it instead? */ 505 shouldn't we really report it instead? */
425 linux_resume_one_lwp (new_lwp, 0, WSTOPSIG (status), NULL); 506 linux_resume_one_lwp (new_lwp, 0, WSTOPSIG (status), NULL);
426 } 507 }
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 if (pid == 0) 642 if (pid == 0)
562 { 643 {
563 ptrace (PTRACE_TRACEME, 0, 0, 0); 644 ptrace (PTRACE_TRACEME, 0, 0, 0);
564 645
565 #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */ 646 #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */
566 signal (__SIGRTMIN + 1, SIG_DFL); 647 signal (__SIGRTMIN + 1, SIG_DFL);
567 #endif 648 #endif
568 649
569 setpgid (0, 0); 650 setpgid (0, 0);
570 651
652 /* If gdbserver is connected to gdb via stdio, redirect the inferior's
653 stdout to stderr so that inferior i/o doesn't corrupt the connection.
654 Also, redirect stdin to /dev/null. */
655 if (remote_connection_is_stdio ())
656 {
657 close (0);
658 open ("/dev/null", O_RDONLY);
659 dup2 (2, 1);
660 if (write (2, "stdin/stdout redirected\n",
661 sizeof ("stdin/stdout redirected\n") - 1) < 0)
662 /* Errors ignored. */;
663 }
664
571 execv (program, allargs); 665 execv (program, allargs);
572 if (errno == ENOENT) 666 if (errno == ENOENT)
573 execvp (program, allargs); 667 execvp (program, allargs);
574 668
575 fprintf (stderr, "Cannot exec %s: %s.\n", program, 669 fprintf (stderr, "Cannot exec %s: %s.\n", program,
576 strerror (errno)); 670 strerror (errno));
577 fflush (stderr); 671 fflush (stderr);
578 _exit (0177); 672 _exit (0177);
579 } 673 }
580 674
(...skipping 21 matching lines...) Expand all
602 /* Attach to an inferior process. */ 696 /* Attach to an inferior process. */
603 697
604 static void 698 static void
605 linux_attach_lwp_1 (unsigned long lwpid, int initial) 699 linux_attach_lwp_1 (unsigned long lwpid, int initial)
606 { 700 {
607 ptid_t ptid; 701 ptid_t ptid;
608 struct lwp_info *new_lwp; 702 struct lwp_info *new_lwp;
609 703
610 if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) != 0) 704 if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) != 0)
611 { 705 {
706 struct buffer buffer;
707
612 if (!initial) 708 if (!initial)
613 { 709 {
614 /* If we fail to attach to an LWP, just warn. */ 710 /* If we fail to attach to an LWP, just warn. */
615 fprintf (stderr, "Cannot attach to lwp %ld: %s (%d)\n", lwpid, 711 fprintf (stderr, "Cannot attach to lwp %ld: %s (%d)\n", lwpid,
616 strerror (errno), errno); 712 strerror (errno), errno);
617 fflush (stderr); 713 fflush (stderr);
618 return; 714 return;
619 } 715 }
620 else 716
621 » /* If we fail to attach to a process, report an error. */ 717 /* If we fail to attach to a process, report an error. */
622 » error ("Cannot attach to lwp %ld: %s (%d)\n", lwpid, 718 buffer_init (&buffer);
623 » strerror (errno), errno); 719 linux_ptrace_attach_warnings (lwpid, &buffer);
720 buffer_grow_str0 (&buffer, "");
721 error ("%sCannot attach to lwp %ld: %s (%d)", buffer_finish (&buffer),
722 » lwpid, strerror (errno), errno);
624 } 723 }
625 724
626 if (initial) 725 if (initial)
627 /* If lwp is the tgid, we handle adding existing threads later. 726 /* If lwp is the tgid, we handle adding existing threads later.
628 Otherwise we just add lwp without bothering about any other 727 Otherwise we just add lwp without bothering about any other
629 threads. */ 728 threads. */
630 ptid = ptid_build (lwpid, lwpid, 0); 729 ptid = ptid_build (lwpid, lwpid, 0);
631 else 730 else
632 { 731 {
633 /* Note that extracting the pid from the current inferior is 732 /* Note that extracting the pid from the current inferior is
634 safe, since we're always called in the context of the same 733 safe, since we're always called in the context of the same
635 process as this new thread. */ 734 process as this new thread. */
636 int pid = pid_of (get_thread_lwp (current_inferior)); 735 int pid = pid_of (get_thread_lwp (current_inferior));
637 ptid = ptid_build (pid, lwpid, 0); 736 ptid = ptid_build (pid, lwpid, 0);
638 } 737 }
639 738
640 new_lwp = (struct lwp_info *) add_lwp (ptid); 739 new_lwp = (struct lwp_info *) add_lwp (ptid);
641 add_thread (ptid, new_lwp); 740 add_thread (ptid, new_lwp);
642 741
643 /* We need to wait for SIGSTOP before being able to make the next 742 /* We need to wait for SIGSTOP before being able to make the next
644 ptrace call on this LWP. */ 743 ptrace call on this LWP. */
645 new_lwp->must_set_ptrace_flags = 1; 744 new_lwp->must_set_ptrace_flags = 1;
646 745
746 if (linux_proc_pid_is_stopped (lwpid))
747 {
748 if (debug_threads)
749 fprintf (stderr,
750 "Attached to a stopped process\n");
751
752 /* The process is definitely stopped. It is in a job control
753 stop, unless the kernel predates the TASK_STOPPED /
754 TASK_TRACED distinction, in which case it might be in a
755 ptrace stop. Make sure it is in a ptrace stop; from there we
756 can kill it, signal it, et cetera.
757
758 First make sure there is a pending SIGSTOP. Since we are
759 already attached, the process can not transition from stopped
760 to running without a PTRACE_CONT; so we know this signal will
761 go into the queue. The SIGSTOP generated by PTRACE_ATTACH is
762 probably already in the queue (unless this kernel is old
763 enough to use TASK_STOPPED for ptrace stops); but since
764 SIGSTOP is not an RT signal, it can only be queued once. */
765 kill_lwp (lwpid, SIGSTOP);
766
767 /* Finally, resume the stopped process. This will deliver the
768 SIGSTOP (or a higher priority signal, just like normal
769 PTRACE_ATTACH), which we'll catch later on. */
770 ptrace (PTRACE_CONT, lwpid, 0, 0);
771 }
772
647 /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH 773 /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
648 brings it to a halt. 774 brings it to a halt.
649 775
650 There are several cases to consider here: 776 There are several cases to consider here:
651 777
652 1) gdbserver has already attached to the process and is being notified 778 1) gdbserver has already attached to the process and is being notified
653 of a new thread that is being created. 779 of a new thread that is being created.
654 In this case we should ignore that SIGSTOP and resume the 780 In this case we should ignore that SIGSTOP and resume the
655 process. This is handled below by setting stop_expected = 1, 781 process. This is handled below by setting stop_expected = 1,
656 and the fact that add_thread sets last_resume_kind == 782 and the fact that add_thread sets last_resume_kind ==
(...skipping 27 matching lines...) Expand all
684 810
685 void 811 void
686 linux_attach_lwp (unsigned long lwpid) 812 linux_attach_lwp (unsigned long lwpid)
687 { 813 {
688 linux_attach_lwp_1 (lwpid, 0); 814 linux_attach_lwp_1 (lwpid, 0);
689 } 815 }
690 816
691 /* Attach to PID. If PID is the tgid, attach to it and all 817 /* Attach to PID. If PID is the tgid, attach to it and all
692 of its threads. */ 818 of its threads. */
693 819
694 int 820 static int
695 linux_attach (unsigned long pid) 821 linux_attach (unsigned long pid)
696 { 822 {
697 /* Attach to PID. We will check for other threads 823 /* Attach to PID. We will check for other threads
698 soon. */ 824 soon. */
699 linux_attach_lwp_1 (pid, 1); 825 linux_attach_lwp_1 (pid, 1);
700 linux_add_process (pid, 1); 826 linux_add_process (pid, 1);
701 827
702 if (!non_stop) 828 if (!non_stop)
703 { 829 {
704 struct thread_info *thread; 830 struct thread_info *thread;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 last_thread_of_process_p (struct thread_info *thread) 921 last_thread_of_process_p (struct thread_info *thread)
796 { 922 {
797 ptid_t ptid = ((struct inferior_list_entry *)thread)->id; 923 ptid_t ptid = ((struct inferior_list_entry *)thread)->id;
798 int pid = ptid_get_pid (ptid); 924 int pid = ptid_get_pid (ptid);
799 struct counter counter = { pid , 0 }; 925 struct counter counter = { pid , 0 };
800 926
801 return (find_inferior (&all_threads, 927 return (find_inferior (&all_threads,
802 second_thread_of_pid_p, &counter) == NULL); 928 second_thread_of_pid_p, &counter) == NULL);
803 } 929 }
804 930
805 /* Kill the inferior lwp. */ 931 /* Kill LWP. */
932
933 static void
934 linux_kill_one_lwp (struct lwp_info *lwp)
935 {
936 int pid = lwpid_of (lwp);
937
938 /* PTRACE_KILL is unreliable. After stepping into a signal handler,
939 there is no signal context, and ptrace(PTRACE_KILL) (or
940 ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like
941 ptrace(CONT, pid, 0,0) and just resumes the tracee. A better
942 alternative is to kill with SIGKILL. We only need one SIGKILL
943 per process, not one for each thread. But since we still support
944 linuxthreads, and we also support debugging programs using raw
945 clone without CLONE_THREAD, we send one for each thread. For
946 years, we used PTRACE_KILL only, so we're being a bit paranoid
947 about some old kernels where PTRACE_KILL might work better
948 (dubious if there are any such, but that's why it's paranoia), so
949 we try SIGKILL first, PTRACE_KILL second, and so we're fine
950 everywhere. */
951
952 errno = 0;
953 kill (pid, SIGKILL);
954 if (debug_threads)
955 fprintf (stderr,
956 » "LKL: kill (SIGKILL) %s, 0, 0 (%s)\n",
957 » target_pid_to_str (ptid_of (lwp)),
958 » errno ? strerror (errno) : "OK");
959
960 errno = 0;
961 ptrace (PTRACE_KILL, pid, 0, 0);
962 if (debug_threads)
963 fprintf (stderr,
964 » "LKL: PTRACE_KILL %s, 0, 0 (%s)\n",
965 » target_pid_to_str (ptid_of (lwp)),
966 » errno ? strerror (errno) : "OK");
967 }
968
969 /* Callback for `find_inferior'. Kills an lwp of a given process,
970 except the leader. */
806 971
807 static int 972 static int
808 linux_kill_one_lwp (struct inferior_list_entry *entry, void *args) 973 kill_one_lwp_callback (struct inferior_list_entry *entry, void *args)
809 { 974 {
810 struct thread_info *thread = (struct thread_info *) entry; 975 struct thread_info *thread = (struct thread_info *) entry;
811 struct lwp_info *lwp = get_thread_lwp (thread); 976 struct lwp_info *lwp = get_thread_lwp (thread);
812 int wstat; 977 int wstat;
813 int pid = * (int *) args; 978 int pid = * (int *) args;
814 979
815 if (ptid_get_pid (entry->id) != pid) 980 if (ptid_get_pid (entry->id) != pid)
816 return 0; 981 return 0;
817 982
818 /* We avoid killing the first thread here, because of a Linux kernel (at 983 /* We avoid killing the first thread here, because of a Linux kernel (at
819 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before 984 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
820 the children get a chance to be reaped, it will remain a zombie 985 the children get a chance to be reaped, it will remain a zombie
821 forever. */ 986 forever. */
822 987
823 if (lwpid_of (lwp) == pid) 988 if (lwpid_of (lwp) == pid)
824 { 989 {
825 if (debug_threads) 990 if (debug_threads)
826 fprintf (stderr, "lkop: is last of process %s\n", 991 fprintf (stderr, "lkop: is last of process %s\n",
827 target_pid_to_str (entry->id)); 992 target_pid_to_str (entry->id));
828 return 0; 993 return 0;
829 } 994 }
830 995
831 do 996 do
832 { 997 {
833 ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0); 998 linux_kill_one_lwp (lwp);
834 999
835 /* Make sure it died. The loop is most likely unnecessary. */ 1000 /* Make sure it died. The loop is most likely unnecessary. */
836 pid = linux_wait_for_event (lwp->head.id, &wstat, __WALL); 1001 pid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
837 } while (pid > 0 && WIFSTOPPED (wstat)); 1002 } while (pid > 0 && WIFSTOPPED (wstat));
838 1003
839 return 0; 1004 return 0;
840 } 1005 }
841 1006
842 static int 1007 static int
843 linux_kill (int pid) 1008 linux_kill (int pid)
844 { 1009 {
845 struct process_info *process; 1010 struct process_info *process;
846 struct lwp_info *lwp; 1011 struct lwp_info *lwp;
847 int wstat; 1012 int wstat;
848 int lwpid; 1013 int lwpid;
849 1014
850 process = find_process_pid (pid); 1015 process = find_process_pid (pid);
851 if (process == NULL) 1016 if (process == NULL)
852 return -1; 1017 return -1;
853 1018
854 /* If we're killing a running inferior, make sure it is stopped 1019 /* If we're killing a running inferior, make sure it is stopped
855 first, as PTRACE_KILL will not work otherwise. */ 1020 first, as PTRACE_KILL will not work otherwise. */
856 stop_all_lwps (0, NULL); 1021 stop_all_lwps (0, NULL);
857 1022
858 find_inferior (&all_threads, linux_kill_one_lwp, &pid); 1023 find_inferior (&all_threads, kill_one_lwp_callback , &pid);
859 1024
860 /* See the comment in linux_kill_one_lwp. We did not kill the first 1025 /* See the comment in linux_kill_one_lwp. We did not kill the first
861 thread in the list, so do so now. */ 1026 thread in the list, so do so now. */
862 lwp = find_lwp_pid (pid_to_ptid (pid)); 1027 lwp = find_lwp_pid (pid_to_ptid (pid));
863 1028
864 if (lwp == NULL) 1029 if (lwp == NULL)
865 { 1030 {
866 if (debug_threads) 1031 if (debug_threads)
867 fprintf (stderr, "lk_1: cannot find lwp %ld, for pid: %d\n", 1032 fprintf (stderr, "lk_1: cannot find lwp %ld, for pid: %d\n",
868 lwpid_of (lwp), pid); 1033 lwpid_of (lwp), pid);
869 } 1034 }
870 else 1035 else
871 { 1036 {
872 if (debug_threads) 1037 if (debug_threads)
873 fprintf (stderr, "lk_1: killing lwp %ld, for pid: %d\n", 1038 fprintf (stderr, "lk_1: killing lwp %ld, for pid: %d\n",
874 lwpid_of (lwp), pid); 1039 lwpid_of (lwp), pid);
875 1040
876 do 1041 do
877 { 1042 {
878 » ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0); 1043 » linux_kill_one_lwp (lwp);
879 1044
880 /* Make sure it died. The loop is most likely unnecessary. */ 1045 /* Make sure it died. The loop is most likely unnecessary. */
881 lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL); 1046 lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
882 } while (lwpid > 0 && WIFSTOPPED (wstat)); 1047 } while (lwpid > 0 && WIFSTOPPED (wstat));
883 } 1048 }
884 1049
885 the_target->mourn (process); 1050 the_target->mourn (process);
886 1051
887 /* Since we presently can only stop all lwps of all processes, we 1052 /* Since we presently can only stop all lwps of all processes, we
888 need to unstop lwps of other processes. */ 1053 need to unstop lwps of other processes. */
889 unstop_all_lwps (0, NULL); 1054 unstop_all_lwps (0, NULL);
890 return 0; 1055 return 0;
891 } 1056 }
892 1057
1058 /* Get pending signal of THREAD, for detaching purposes. This is the
1059 signal the thread last stopped for, which we need to deliver to the
1060 thread when detaching, otherwise, it'd be suppressed/lost. */
1061
1062 static int
1063 get_detach_signal (struct thread_info *thread)
1064 {
1065 enum gdb_signal signo = GDB_SIGNAL_0;
1066 int status;
1067 struct lwp_info *lp = get_thread_lwp (thread);
1068
1069 if (lp->status_pending_p)
1070 status = lp->status_pending;
1071 else
1072 {
1073 /* If the thread had been suspended by gdbserver, and it stopped
1074 cleanly, then it'll have stopped with SIGSTOP. But we don't
1075 want to deliver that SIGSTOP. */
1076 if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
1077 || thread->last_status.value.sig == GDB_SIGNAL_0)
1078 return 0;
1079
1080 /* Otherwise, we may need to deliver the signal we
1081 intercepted. */
1082 status = lp->last_status;
1083 }
1084
1085 if (!WIFSTOPPED (status))
1086 {
1087 if (debug_threads)
1088 fprintf (stderr,
1089 "GPS: lwp %s hasn't stopped: no pending signal\n",
1090 target_pid_to_str (ptid_of (lp)));
1091 return 0;
1092 }
1093
1094 /* Extended wait statuses aren't real SIGTRAPs. */
1095 if (WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1096 {
1097 if (debug_threads)
1098 fprintf (stderr,
1099 "GPS: lwp %s had stopped with extended "
1100 "status: no pending signal\n",
1101 target_pid_to_str (ptid_of (lp)));
1102 return 0;
1103 }
1104
1105 signo = gdb_signal_from_host (WSTOPSIG (status));
1106
1107 if (program_signals_p && !program_signals[signo])
1108 {
1109 if (debug_threads)
1110 fprintf (stderr,
1111 "GPS: lwp %s had signal %s, but it is in nopass state\n",
1112 target_pid_to_str (ptid_of (lp)),
1113 gdb_signal_to_string (signo));
1114 return 0;
1115 }
1116 else if (!program_signals_p
1117 /* If we have no way to know which signals GDB does not
1118 want to have passed to the program, assume
1119 SIGTRAP/SIGINT, which is GDB's default. */
1120 && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
1121 {
1122 if (debug_threads)
1123 fprintf (stderr,
1124 "GPS: lwp %s had signal %s, "
1125 "but we don't know if we should pass it. Default to not.\n",
1126 target_pid_to_str (ptid_of (lp)),
1127 gdb_signal_to_string (signo));
1128 return 0;
1129 }
1130 else
1131 {
1132 if (debug_threads)
1133 fprintf (stderr,
1134 "GPS: lwp %s has pending signal %s: delivering it.\n",
1135 target_pid_to_str (ptid_of (lp)),
1136 gdb_signal_to_string (signo));
1137
1138 return WSTOPSIG (status);
1139 }
1140 }
1141
893 static int 1142 static int
894 linux_detach_one_lwp (struct inferior_list_entry *entry, void *args) 1143 linux_detach_one_lwp (struct inferior_list_entry *entry, void *args)
895 { 1144 {
896 struct thread_info *thread = (struct thread_info *) entry; 1145 struct thread_info *thread = (struct thread_info *) entry;
897 struct lwp_info *lwp = get_thread_lwp (thread); 1146 struct lwp_info *lwp = get_thread_lwp (thread);
898 int pid = * (int *) args; 1147 int pid = * (int *) args;
1148 int sig;
899 1149
900 if (ptid_get_pid (entry->id) != pid) 1150 if (ptid_get_pid (entry->id) != pid)
901 return 0; 1151 return 0;
902 1152
903 /* If this process is stopped but is expecting a SIGSTOP, then make 1153 /* If there is a pending SIGSTOP, get rid of it. */
904 sure we take care of that now. This isn't absolutely guaranteed
905 to collect the SIGSTOP, but is fairly likely to. */
906 if (lwp->stop_expected) 1154 if (lwp->stop_expected)
907 { 1155 {
908 int wstat; 1156 if (debug_threads)
909 /* Clear stop_expected, so that the SIGSTOP will be reported. */ 1157 » fprintf (stderr,
1158 » » "Sending SIGCONT to %s\n",
1159 » » target_pid_to_str (ptid_of (lwp)));
1160
1161 kill_lwp (lwpid_of (lwp), SIGCONT);
910 lwp->stop_expected = 0; 1162 lwp->stop_expected = 0;
911 linux_resume_one_lwp (lwp, 0, 0, NULL);
912 linux_wait_for_event (lwp->head.id, &wstat, __WALL);
913 } 1163 }
914 1164
915 /* Flush any pending changes to the process's registers. */ 1165 /* Flush any pending changes to the process's registers. */
916 regcache_invalidate_one ((struct inferior_list_entry *) 1166 regcache_invalidate_one ((struct inferior_list_entry *)
917 get_lwp_thread (lwp)); 1167 get_lwp_thread (lwp));
918 1168
1169 /* Pass on any pending signal for this thread. */
1170 sig = get_detach_signal (thread);
1171
919 /* Finally, let it resume. */ 1172 /* Finally, let it resume. */
920 ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, 0); 1173 if (the_low_target.prepare_to_resume != NULL)
1174 the_low_target.prepare_to_resume (lwp);
1175 if (ptrace (PTRACE_DETACH, lwpid_of (lwp), 0,
1176 » (PTRACE_ARG4_TYPE) (long) sig) < 0)
1177 error (_("Can't detach %s: %s"),
1178 » target_pid_to_str (ptid_of (lwp)),
1179 » strerror (errno));
921 1180
922 delete_lwp (lwp); 1181 delete_lwp (lwp);
923 return 0; 1182 return 0;
924 } 1183 }
925 1184
926 static int 1185 static int
927 linux_detach (int pid) 1186 linux_detach (int pid)
928 { 1187 {
929 struct process_info *process; 1188 struct process_info *process;
930 1189
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1096 fprintf (stderr, "Got an event from %d (%x)\n", ret, *wstatp); 1355 fprintf (stderr, "Got an event from %d (%x)\n", ret, *wstatp);
1097 1356
1098 child = find_lwp_pid (pid_to_ptid (ret)); 1357 child = find_lwp_pid (pid_to_ptid (ret));
1099 1358
1100 /* If we didn't find a process, one of two things presumably happened: 1359 /* If we didn't find a process, one of two things presumably happened:
1101 - A process we started and then detached from has exited. Ignore it. 1360 - A process we started and then detached from has exited. Ignore it.
1102 - A process we are controlling has forked and the new child's stop 1361 - A process we are controlling has forked and the new child's stop
1103 was reported to us by the kernel. Save its PID. */ 1362 was reported to us by the kernel. Save its PID. */
1104 if (child == NULL && WIFSTOPPED (*wstatp)) 1363 if (child == NULL && WIFSTOPPED (*wstatp))
1105 { 1364 {
1106 add_pid_to_list (&stopped_pids, ret); 1365 add_to_pid_list (&stopped_pids, ret, *wstatp);
1107 goto retry; 1366 goto retry;
1108 } 1367 }
1109 else if (child == NULL) 1368 else if (child == NULL)
1110 goto retry; 1369 goto retry;
1111 1370
1112 child->stopped = 1; 1371 child->stopped = 1;
1113 1372
1114 child->last_status = *wstatp; 1373 child->last_status = *wstatp;
1115 1374
1116 /* Architecture-specific setup after inferior is running. 1375 /* Architecture-specific setup after inferior is running.
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat) 1532 maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat)
1274 { 1533 {
1275 struct thread_info *saved_inferior; 1534 struct thread_info *saved_inferior;
1276 1535
1277 saved_inferior = current_inferior; 1536 saved_inferior = current_inferior;
1278 current_inferior = get_lwp_thread (lwp); 1537 current_inferior = get_lwp_thread (lwp);
1279 1538
1280 if ((wstat == NULL 1539 if ((wstat == NULL
1281 || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP)) 1540 || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP))
1282 && supports_fast_tracepoints () 1541 && supports_fast_tracepoints ()
1283 && in_process_agent_loaded ()) 1542 && agent_loaded_p ())
1284 { 1543 {
1285 struct fast_tpoint_collect_status status; 1544 struct fast_tpoint_collect_status status;
1286 int r; 1545 int r;
1287 1546
1288 if (debug_threads) 1547 if (debug_threads)
1289 fprintf (stderr, "\ 1548 fprintf (stderr, "\
1290 Checking whether LWP %ld needs to move out of the jump pad.\n", 1549 Checking whether LWP %ld needs to move out of the jump pad.\n",
1291 lwpid_of (lwp)); 1550 lwpid_of (lwp));
1292 1551
1293 r = linux_fast_tracepoint_collecting (lwp, &status); 1552 r = linux_fast_tracepoint_collecting (lwp, &status);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 being stepped. */ 1806 being stepped. */
1548 ptid_t step_over_bkpt; 1807 ptid_t step_over_bkpt;
1549 1808
1550 /* Wait for an event from child PID. If PID is -1, wait for any 1809 /* Wait for an event from child PID. If PID is -1, wait for any
1551 child. Store the stop status through the status pointer WSTAT. 1810 child. Store the stop status through the status pointer WSTAT.
1552 OPTIONS is passed to the waitpid call. Return 0 if no child stop 1811 OPTIONS is passed to the waitpid call. Return 0 if no child stop
1553 event was found and OPTIONS contains WNOHANG. Return the PID of 1812 event was found and OPTIONS contains WNOHANG. Return the PID of
1554 the stopped child otherwise. */ 1813 the stopped child otherwise. */
1555 1814
1556 static int 1815 static int
1557 linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options) 1816 linux_wait_for_event (ptid_t ptid, int *wstat, int options)
1558 { 1817 {
1559 struct lwp_info *event_child, *requested_child; 1818 struct lwp_info *event_child, *requested_child;
1819 ptid_t wait_ptid;
1560 1820
1561 event_child = NULL; 1821 event_child = NULL;
1562 requested_child = NULL; 1822 requested_child = NULL;
1563 1823
1564 /* Check for a lwp with a pending status. */ 1824 /* Check for a lwp with a pending status. */
1565 1825
1566 if (ptid_equal (ptid, minus_one_ptid) 1826 if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
1567 || ptid_equal (pid_to_ptid (ptid_get_pid (ptid)), ptid))
1568 { 1827 {
1569 event_child = (struct lwp_info *) 1828 event_child = (struct lwp_info *)
1570 find_inferior (&all_lwps, status_pending_p_callback, &ptid); 1829 find_inferior (&all_lwps, status_pending_p_callback, &ptid);
1571 if (debug_threads && event_child) 1830 if (debug_threads && event_child)
1572 fprintf (stderr, "Got a pending child %ld\n", lwpid_of (event_child)); 1831 fprintf (stderr, "Got a pending child %ld\n", lwpid_of (event_child));
1573 } 1832 }
1574 else 1833 else
1575 { 1834 {
1576 requested_child = find_lwp_pid (ptid); 1835 requested_child = find_lwp_pid (ptid);
1577 1836
1578 if (!stopping_threads 1837 if (stopping_threads == NOT_STOPPING_THREADS
1579 && requested_child->status_pending_p 1838 && requested_child->status_pending_p
1580 && requested_child->collecting_fast_tracepoint) 1839 && requested_child->collecting_fast_tracepoint)
1581 { 1840 {
1582 enqueue_one_deferred_signal (requested_child, 1841 enqueue_one_deferred_signal (requested_child,
1583 &requested_child->status_pending); 1842 &requested_child->status_pending);
1584 requested_child->status_pending_p = 0; 1843 requested_child->status_pending_p = 0;
1585 requested_child->status_pending = 0; 1844 requested_child->status_pending = 0;
1586 linux_resume_one_lwp (requested_child, 0, 0, NULL); 1845 linux_resume_one_lwp (requested_child, 0, 0, NULL);
1587 } 1846 }
1588 1847
(...skipping 10 matching lines...) Expand all
1599 if (debug_threads) 1858 if (debug_threads)
1600 fprintf (stderr, "Got an event from pending child %ld (%04x)\n", 1859 fprintf (stderr, "Got an event from pending child %ld (%04x)\n",
1601 lwpid_of (event_child), event_child->status_pending); 1860 lwpid_of (event_child), event_child->status_pending);
1602 *wstat = event_child->status_pending; 1861 *wstat = event_child->status_pending;
1603 event_child->status_pending_p = 0; 1862 event_child->status_pending_p = 0;
1604 event_child->status_pending = 0; 1863 event_child->status_pending = 0;
1605 current_inferior = get_lwp_thread (event_child); 1864 current_inferior = get_lwp_thread (event_child);
1606 return lwpid_of (event_child); 1865 return lwpid_of (event_child);
1607 } 1866 }
1608 1867
1868 if (ptid_is_pid (ptid))
1869 {
1870 /* A request to wait for a specific tgid. This is not possible
1871 with waitpid, so instead, we wait for any child, and leave
1872 children we're not interested in right now with a pending
1873 status to report later. */
1874 wait_ptid = minus_one_ptid;
1875 }
1876 else
1877 wait_ptid = ptid;
1878
1609 /* We only enter this loop if no process has a pending wait status. Thus 1879 /* We only enter this loop if no process has a pending wait status. Thus
1610 any action taken in response to a wait status inside this loop is 1880 any action taken in response to a wait status inside this loop is
1611 responding as soon as we detect the status, not after any pending 1881 responding as soon as we detect the status, not after any pending
1612 events. */ 1882 events. */
1613 while (1) 1883 while (1)
1614 { 1884 {
1615 event_child = linux_wait_for_lwp (ptid, wstat, options); 1885 event_child = linux_wait_for_lwp (wait_ptid, wstat, options);
1616 1886
1617 if ((options & WNOHANG) && event_child == NULL) 1887 if ((options & WNOHANG) && event_child == NULL)
1618 { 1888 {
1619 if (debug_threads) 1889 if (debug_threads)
1620 fprintf (stderr, "WNOHANG set, no event found\n"); 1890 fprintf (stderr, "WNOHANG set, no event found\n");
1621 return 0; 1891 return 0;
1622 } 1892 }
1623 1893
1624 if (event_child == NULL) 1894 if (event_child == NULL)
1625 error ("event from unknown child"); 1895 error ("event from unknown child");
1626 1896
1897 if (ptid_is_pid (ptid)
1898 && ptid_get_pid (ptid) != ptid_get_pid (ptid_of (event_child)))
1899 {
1900 if (! WIFSTOPPED (*wstat))
1901 mark_lwp_dead (event_child, *wstat);
1902 else
1903 {
1904 event_child->status_pending_p = 1;
1905 event_child->status_pending = *wstat;
1906 }
1907 continue;
1908 }
1909
1627 current_inferior = get_lwp_thread (event_child); 1910 current_inferior = get_lwp_thread (event_child);
1628 1911
1629 /* Check for thread exit. */ 1912 /* Check for thread exit. */
1630 if (! WIFSTOPPED (*wstat)) 1913 if (! WIFSTOPPED (*wstat))
1631 { 1914 {
1632 if (debug_threads) 1915 if (debug_threads)
1633 fprintf (stderr, "LWP %ld exiting\n", lwpid_of (event_child)); 1916 fprintf (stderr, "LWP %ld exiting\n", lwpid_of (event_child));
1634 1917
1635 /* If the last thread is exiting, just return. */ 1918 /* If the last thread is exiting, just return. */
1636 if (last_thread_of_process_p (current_inferior)) 1919 if (last_thread_of_process_p (current_inferior))
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 && WSTOPSIG (*wstat) == SIGSTOP 1975 && WSTOPSIG (*wstat) == SIGSTOP
1693 && event_child->stop_expected) 1976 && event_child->stop_expected)
1694 { 1977 {
1695 int should_stop; 1978 int should_stop;
1696 1979
1697 if (debug_threads) 1980 if (debug_threads)
1698 fprintf (stderr, "Expected stop.\n"); 1981 fprintf (stderr, "Expected stop.\n");
1699 event_child->stop_expected = 0; 1982 event_child->stop_expected = 0;
1700 1983
1701 should_stop = (current_inferior->last_resume_kind == resume_stop 1984 should_stop = (current_inferior->last_resume_kind == resume_stop
1702 » » » || stopping_threads); 1985 » » » || stopping_threads != NOT_STOPPING_THREADS);
1703 1986
1704 if (!should_stop) 1987 if (!should_stop)
1705 { 1988 {
1706 linux_resume_one_lwp (event_child, 1989 linux_resume_one_lwp (event_child,
1707 event_child->stepping, 0, NULL); 1990 event_child->stepping, 0, NULL);
1708 continue; 1991 continue;
1709 } 1992 }
1710 } 1993 }
1711 1994
1712 return lwpid_of (event_child); 1995 return lwpid_of (event_child);
1713 } 1996 }
1714 1997
1715 /* NOTREACHED */ 1998 /* NOTREACHED */
1716 return 0; 1999 return 0;
1717 } 2000 }
1718 2001
1719 static int
1720 linux_wait_for_event (ptid_t ptid, int *wstat, int options)
1721 {
1722 ptid_t wait_ptid;
1723
1724 if (ptid_is_pid (ptid))
1725 {
1726 /* A request to wait for a specific tgid. This is not possible
1727 with waitpid, so instead, we wait for any child, and leave
1728 children we're not interested in right now with a pending
1729 status to report later. */
1730 wait_ptid = minus_one_ptid;
1731 }
1732 else
1733 wait_ptid = ptid;
1734
1735 while (1)
1736 {
1737 int event_pid;
1738
1739 event_pid = linux_wait_for_event_1 (wait_ptid, wstat, options);
1740
1741 if (event_pid > 0
1742 && ptid_is_pid (ptid) && ptid_get_pid (ptid) != event_pid)
1743 {
1744 struct lwp_info *event_child
1745 = find_lwp_pid (pid_to_ptid (event_pid));
1746
1747 if (! WIFSTOPPED (*wstat))
1748 mark_lwp_dead (event_child, *wstat);
1749 else
1750 {
1751 event_child->status_pending_p = 1;
1752 event_child->status_pending = *wstat;
1753 }
1754 }
1755 else
1756 return event_pid;
1757 }
1758 }
1759
1760
1761 /* Count the LWP's that have had events. */ 2002 /* Count the LWP's that have had events. */
1762 2003
1763 static int 2004 static int
1764 count_events_callback (struct inferior_list_entry *entry, void *data) 2005 count_events_callback (struct inferior_list_entry *entry, void *data)
1765 { 2006 {
1766 struct lwp_info *lp = (struct lwp_info *) entry; 2007 struct lwp_info *lp = (struct lwp_info *) entry;
1767 struct thread_info *thread = get_lwp_thread (lp); 2008 struct thread_info *thread = get_lwp_thread (lp);
1768 int *count = data; 2009 int *count = data;
1769 2010
1770 gdb_assert (count != NULL); 2011 gdb_assert (count != NULL);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
2014 over internal breakpoints and such. */ 2255 over internal breakpoints and such. */
2015 linux_wait_1 (minus_one_ptid, &ourstatus, 0); 2256 linux_wait_1 (minus_one_ptid, &ourstatus, 0);
2016 2257
2017 if (ourstatus.kind == TARGET_WAITKIND_STOPPED) 2258 if (ourstatus.kind == TARGET_WAITKIND_STOPPED)
2018 { 2259 {
2019 lwp = get_thread_lwp (current_inferior); 2260 lwp = get_thread_lwp (current_inferior);
2020 2261
2021 /* Lock it. */ 2262 /* Lock it. */
2022 lwp->suspended++; 2263 lwp->suspended++;
2023 2264
2024 » if (ourstatus.value.sig != TARGET_SIGNAL_0 2265 » if (ourstatus.value.sig != GDB_SIGNAL_0
2025 || current_inferior->last_resume_kind == resume_stop) 2266 || current_inferior->last_resume_kind == resume_stop)
2026 { 2267 {
2027 » wstat = W_STOPCODE (target_signal_to_host (ourstatus.value.sig)); 2268 » wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig));
2028 enqueue_one_deferred_signal (lwp, &wstat); 2269 enqueue_one_deferred_signal (lwp, &wstat);
2029 } 2270 }
2030 } 2271 }
2031 } 2272 }
2032 2273
2033 find_inferior (&all_lwps, unsuspend_one_lwp, NULL); 2274 find_inferior (&all_lwps, unsuspend_one_lwp, NULL);
2034 2275
2035 stabilizing_threads = 0; 2276 stabilizing_threads = 0;
2036 2277
2037 current_inferior = save_inferior; 2278 current_inferior = save_inferior;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
2138 ourstatus->value.integer = WEXITSTATUS (w); 2379 ourstatus->value.integer = WEXITSTATUS (w);
2139 2380
2140 if (debug_threads) 2381 if (debug_threads)
2141 fprintf (stderr, 2382 fprintf (stderr,
2142 "\nChild exited with retcode = %x \n", 2383 "\nChild exited with retcode = %x \n",
2143 WEXITSTATUS (w)); 2384 WEXITSTATUS (w));
2144 } 2385 }
2145 else 2386 else
2146 { 2387 {
2147 ourstatus->kind = TARGET_WAITKIND_SIGNALLED; 2388 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
2148 » ourstatus->value.sig = target_signal_from_host (WTERMSIG (w)); 2389 » ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
2149 2390
2150 if (debug_threads) 2391 if (debug_threads)
2151 fprintf (stderr, 2392 fprintf (stderr,
2152 "\nChild terminated with signal = %x \n", 2393 "\nChild terminated with signal = %x \n",
2153 WTERMSIG (w)); 2394 WTERMSIG (w));
2154 2395
2155 } 2396 }
2156 2397
2157 return ptid_of (event_child); 2398 return ptid_of (event_child);
2158 } 2399 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 /* We have all the data we need. Either report the event to GDB, or 2463 /* We have all the data we need. Either report the event to GDB, or
2223 resume threads and keep waiting for more. */ 2464 resume threads and keep waiting for more. */
2224 2465
2225 /* If we're collecting a fast tracepoint, finish the collection and 2466 /* If we're collecting a fast tracepoint, finish the collection and
2226 move out of the jump pad before delivering a signal. See 2467 move out of the jump pad before delivering a signal. See
2227 linux_stabilize_threads. */ 2468 linux_stabilize_threads. */
2228 2469
2229 if (WIFSTOPPED (w) 2470 if (WIFSTOPPED (w)
2230 && WSTOPSIG (w) != SIGTRAP 2471 && WSTOPSIG (w) != SIGTRAP
2231 && supports_fast_tracepoints () 2472 && supports_fast_tracepoints ()
2232 && in_process_agent_loaded ()) 2473 && agent_loaded_p ())
2233 { 2474 {
2234 if (debug_threads) 2475 if (debug_threads)
2235 fprintf (stderr, 2476 fprintf (stderr,
2236 "Got signal %d for LWP %ld. Check if we need " 2477 "Got signal %d for LWP %ld. Check if we need "
2237 "to defer or adjust it.\n", 2478 "to defer or adjust it.\n",
2238 WSTOPSIG (w), lwpid_of (event_child)); 2479 WSTOPSIG (w), lwpid_of (event_child));
2239 2480
2240 /* Allow debugging the jump pad itself. */ 2481 /* Allow debugging the jump pad itself. */
2241 if (current_inferior->last_resume_kind != resume_step 2482 if (current_inferior->last_resume_kind != resume_step
2242 && maybe_move_out_of_jump_pad (event_child, &w)) 2483 && maybe_move_out_of_jump_pad (event_child, &w))
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2310 fprintf (stderr, "dequeued one signal.\n"); 2551 fprintf (stderr, "dequeued one signal.\n");
2311 } 2552 }
2312 else 2553 else
2313 { 2554 {
2314 if (debug_threads) 2555 if (debug_threads)
2315 fprintf (stderr, "no deferred signals.\n"); 2556 fprintf (stderr, "no deferred signals.\n");
2316 2557
2317 if (stabilizing_threads) 2558 if (stabilizing_threads)
2318 { 2559 {
2319 ourstatus->kind = TARGET_WAITKIND_STOPPED; 2560 ourstatus->kind = TARGET_WAITKIND_STOPPED;
2320 » » ourstatus->value.sig = TARGET_SIGNAL_0; 2561 » » ourstatus->value.sig = GDB_SIGNAL_0;
2321 return ptid_of (event_child); 2562 return ptid_of (event_child);
2322 } 2563 }
2323 } 2564 }
2324 } 2565 }
2325 } 2566 }
2326 2567
2327 /* Check whether GDB would be interested in this event. */ 2568 /* Check whether GDB would be interested in this event. */
2328 2569
2329 /* If GDB is not interested in this signal, don't stop other 2570 /* If GDB is not interested in this signal, don't stop other
2330 threads, and don't report it to GDB. Just resume the inferior 2571 threads, and don't report it to GDB. Just resume the inferior
2331 right away. We do this for threading-related signals as well as 2572 right away. We do this for threading-related signals as well as
2332 any that GDB specifically requested we ignore. But never ignore 2573 any that GDB specifically requested we ignore. But never ignore
2333 SIGSTOP if we sent it ourselves, and do not ignore signals when 2574 SIGSTOP if we sent it ourselves, and do not ignore signals when
2334 stepping - they may require special handling to skip the signal 2575 stepping - they may require special handling to skip the signal
2335 handler. */ 2576 handler. */
2336 /* FIXME drow/2002-06-09: Get signal numbers from the inferior's 2577 /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
2337 thread library? */ 2578 thread library? */
2338 if (WIFSTOPPED (w) 2579 if (WIFSTOPPED (w)
2339 && current_inferior->last_resume_kind != resume_step 2580 && current_inferior->last_resume_kind != resume_step
2340 && ( 2581 && (
2341 #if defined (USE_THREAD_DB) && !defined (__ANDROID__) 2582 #if defined (USE_THREAD_DB) && !defined (__ANDROID__)
2342 (current_process ()->private->thread_db != NULL 2583 (current_process ()->private->thread_db != NULL
2343 && (WSTOPSIG (w) == __SIGRTMIN 2584 && (WSTOPSIG (w) == __SIGRTMIN
2344 || WSTOPSIG (w) == __SIGRTMIN + 1)) 2585 || WSTOPSIG (w) == __SIGRTMIN + 1))
2345 || 2586 ||
2346 #endif 2587 #endif
2347 » (pass_signals[target_signal_from_host (WSTOPSIG (w))] 2588 » (pass_signals[gdb_signal_from_host (WSTOPSIG (w))]
2348 && !(WSTOPSIG (w) == SIGSTOP 2589 && !(WSTOPSIG (w) == SIGSTOP
2349 && current_inferior->last_resume_kind == resume_stop)))) 2590 && current_inferior->last_resume_kind == resume_stop))))
2350 { 2591 {
2351 siginfo_t info, *info_p; 2592 siginfo_t info, *info_p;
2352 2593
2353 if (debug_threads) 2594 if (debug_threads)
2354 fprintf (stderr, "Ignored signal %d for LWP %ld.\n", 2595 fprintf (stderr, "Ignored signal %d for LWP %ld.\n",
2355 WSTOPSIG (w), lwpid_of (event_child)); 2596 WSTOPSIG (w), lwpid_of (event_child));
2356 2597
2357 if (ptrace (PTRACE_GETSIGINFO, lwpid_of (event_child), 0, &info) == 0) 2598 if (ptrace (PTRACE_GETSIGINFO, lwpid_of (event_child), 0, &info) == 0)
(...skipping 11 matching lines...) Expand all
2369 SIGTRAP we can't explain could be a GDB breakpoint --- we may or 2610 SIGTRAP we can't explain could be a GDB breakpoint --- we may or
2370 not support Z0 breakpoints. If we do, we're be able to handle 2611 not support Z0 breakpoints. If we do, we're be able to handle
2371 GDB breakpoints on top of internal breakpoints, by handling the 2612 GDB breakpoints on top of internal breakpoints, by handling the
2372 internal breakpoint and still reporting the event to GDB. If we 2613 internal breakpoint and still reporting the event to GDB. If we
2373 don't, we're out of luck, GDB won't see the breakpoint hit. */ 2614 don't, we're out of luck, GDB won't see the breakpoint hit. */
2374 report_to_gdb = (!maybe_internal_trap 2615 report_to_gdb = (!maybe_internal_trap
2375 || current_inferior->last_resume_kind == resume_step 2616 || current_inferior->last_resume_kind == resume_step
2376 || event_child->stopped_by_watchpoint 2617 || event_child->stopped_by_watchpoint
2377 || (!step_over_finished 2618 || (!step_over_finished
2378 && !bp_explains_trap && !trace_event) 2619 && !bp_explains_trap && !trace_event)
2379 » » || gdb_breakpoint_here (event_child->stop_pc)); 2620 » » || (gdb_breakpoint_here (event_child->stop_pc)
2621 » » && gdb_condition_true_at_breakpoint (event_child->stop_pc )
2622 » » && gdb_no_commands_at_breakpoint (event_child->stop_pc))) ;
2623
2624 run_breakpoint_commands (event_child->stop_pc);
2380 2625
2381 /* We found no reason GDB would want us to stop. We either hit one 2626 /* We found no reason GDB would want us to stop. We either hit one
2382 of our own breakpoints, or finished an internal step GDB 2627 of our own breakpoints, or finished an internal step GDB
2383 shouldn't know about. */ 2628 shouldn't know about. */
2384 if (!report_to_gdb) 2629 if (!report_to_gdb)
2385 { 2630 {
2386 if (debug_threads) 2631 if (debug_threads)
2387 { 2632 {
2388 if (bp_explains_trap) 2633 if (bp_explains_trap)
2389 fprintf (stderr, "Hit a gdbserver breakpoint.\n"); 2634 fprintf (stderr, "Hit a gdbserver breakpoint.\n");
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2452 event_child->status_pending_p = 0; 2697 event_child->status_pending_p = 0;
2453 w = event_child->status_pending; 2698 w = event_child->status_pending;
2454 } 2699 }
2455 2700
2456 /* Now that we've selected our final event LWP, cancel any 2701 /* Now that we've selected our final event LWP, cancel any
2457 breakpoints in other LWPs that have hit a GDB breakpoint. 2702 breakpoints in other LWPs that have hit a GDB breakpoint.
2458 See the comment in cancel_breakpoints_callback to find out 2703 See the comment in cancel_breakpoints_callback to find out
2459 why. */ 2704 why. */
2460 find_inferior (&all_lwps, cancel_breakpoints_callback, event_child); 2705 find_inferior (&all_lwps, cancel_breakpoints_callback, event_child);
2461 2706
2707 /* If we were going a step-over, all other threads but the stepping one
2708 had been paused in start_step_over, with their suspend counts
2709 incremented. We don't want to do a full unstop/unpause, because we're
2710 in all-stop mode (so we want threads stopped), but we still need to
2711 unsuspend the other threads, to decrement their `suspended' count
2712 back. */
2713 if (step_over_finished)
2714 unsuspend_all_lwps (event_child);
2715
2462 /* Stabilize threads (move out of jump pads). */ 2716 /* Stabilize threads (move out of jump pads). */
2463 stabilize_threads (); 2717 stabilize_threads ();
2464 } 2718 }
2465 else 2719 else
2466 { 2720 {
2467 /* If we just finished a step-over, then all threads had been 2721 /* If we just finished a step-over, then all threads had been
2468 momentarily paused. In all-stop, that's fine, we want 2722 momentarily paused. In all-stop, that's fine, we want
2469 threads stopped by now anyway. In non-stop, we need to 2723 threads stopped by now anyway. In non-stop, we need to
2470 re-resume threads that GDB wanted to be running. */ 2724 re-resume threads that GDB wanted to be running. */
2471 if (step_over_finished) 2725 if (step_over_finished)
2472 unstop_all_lwps (1, event_child); 2726 unstop_all_lwps (1, event_child);
2473 } 2727 }
2474 2728
2475 ourstatus->kind = TARGET_WAITKIND_STOPPED; 2729 ourstatus->kind = TARGET_WAITKIND_STOPPED;
2476 2730
2477 if (current_inferior->last_resume_kind == resume_stop 2731 if (current_inferior->last_resume_kind == resume_stop
2478 && WSTOPSIG (w) == SIGSTOP) 2732 && WSTOPSIG (w) == SIGSTOP)
2479 { 2733 {
2480 /* A thread that has been requested to stop by GDB with vCont;t, 2734 /* A thread that has been requested to stop by GDB with vCont;t,
2481 and it stopped cleanly, so report as SIG0. The use of 2735 and it stopped cleanly, so report as SIG0. The use of
2482 SIGSTOP is an implementation detail. */ 2736 SIGSTOP is an implementation detail. */
2483 ourstatus->value.sig = TARGET_SIGNAL_0; 2737 ourstatus->value.sig = GDB_SIGNAL_0;
2484 } 2738 }
2485 else if (current_inferior->last_resume_kind == resume_stop 2739 else if (current_inferior->last_resume_kind == resume_stop
2486 && WSTOPSIG (w) != SIGSTOP) 2740 && WSTOPSIG (w) != SIGSTOP)
2487 { 2741 {
2488 /* A thread that has been requested to stop by GDB with vCont;t, 2742 /* A thread that has been requested to stop by GDB with vCont;t,
2489 but, it stopped for other reasons. */ 2743 but, it stopped for other reasons. */
2490 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w)); 2744 ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
2491 } 2745 }
2492 else 2746 else
2493 { 2747 {
2494 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w)); 2748 ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
2495 } 2749 }
2496 2750
2497 gdb_assert (ptid_equal (step_over_bkpt, null_ptid)); 2751 gdb_assert (ptid_equal (step_over_bkpt, null_ptid));
2498 2752
2499 if (debug_threads) 2753 if (debug_threads)
2500 fprintf (stderr, "linux_wait ret = %s, %d, %d\n", 2754 fprintf (stderr, "linux_wait ret = %s, %d, %d\n",
2501 target_pid_to_str (ptid_of (event_child)), 2755 target_pid_to_str (ptid_of (event_child)),
2502 ourstatus->kind, 2756 ourstatus->kind,
2503 ourstatus->value.sig); 2757 ourstatus->value.sig);
2504 2758
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
2766 stuck_in_jump_pad_callback (struct inferior_list_entry *entry, void *data) 3020 stuck_in_jump_pad_callback (struct inferior_list_entry *entry, void *data)
2767 { 3021 {
2768 struct lwp_info *lwp = (struct lwp_info *) entry; 3022 struct lwp_info *lwp = (struct lwp_info *) entry;
2769 struct thread_info *thread = get_lwp_thread (lwp); 3023 struct thread_info *thread = get_lwp_thread (lwp);
2770 3024
2771 gdb_assert (lwp->suspended == 0); 3025 gdb_assert (lwp->suspended == 0);
2772 gdb_assert (lwp->stopped); 3026 gdb_assert (lwp->stopped);
2773 3027
2774 /* Allow debugging the jump pad, gdb_collect, etc.. */ 3028 /* Allow debugging the jump pad, gdb_collect, etc.. */
2775 return (supports_fast_tracepoints () 3029 return (supports_fast_tracepoints ()
2776 » && in_process_agent_loaded () 3030 » && agent_loaded_p ()
2777 && (gdb_breakpoint_here (lwp->stop_pc) 3031 && (gdb_breakpoint_here (lwp->stop_pc)
2778 || lwp->stopped_by_watchpoint 3032 || lwp->stopped_by_watchpoint
2779 || thread->last_resume_kind == resume_step) 3033 || thread->last_resume_kind == resume_step)
2780 && linux_fast_tracepoint_collecting (lwp, NULL)); 3034 && linux_fast_tracepoint_collecting (lwp, NULL));
2781 } 3035 }
2782 3036
2783 static void 3037 static void
2784 move_out_of_jump_pad_callback (struct inferior_list_entry *entry) 3038 move_out_of_jump_pad_callback (struct inferior_list_entry *entry)
2785 { 3039 {
2786 struct lwp_info *lwp = (struct lwp_info *) entry; 3040 struct lwp_info *lwp = (struct lwp_info *) entry;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2833 return 1; 3087 return 1;
2834 } 3088 }
2835 3089
2836 /* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL. 3090 /* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL.
2837 If SUSPEND, then also increase the suspend count of every LWP, 3091 If SUSPEND, then also increase the suspend count of every LWP,
2838 except EXCEPT. */ 3092 except EXCEPT. */
2839 3093
2840 static void 3094 static void
2841 stop_all_lwps (int suspend, struct lwp_info *except) 3095 stop_all_lwps (int suspend, struct lwp_info *except)
2842 { 3096 {
2843 stopping_threads = 1; 3097 /* Should not be called recursively. */
3098 gdb_assert (stopping_threads == NOT_STOPPING_THREADS);
3099
3100 stopping_threads = (suspend
3101 » » ? STOPPING_AND_SUSPENDING_THREADS
3102 » » : STOPPING_THREADS);
2844 3103
2845 if (suspend) 3104 if (suspend)
2846 find_inferior (&all_lwps, suspend_and_send_sigstop_callback, except); 3105 find_inferior (&all_lwps, suspend_and_send_sigstop_callback, except);
2847 else 3106 else
2848 find_inferior (&all_lwps, send_sigstop_callback, except); 3107 find_inferior (&all_lwps, send_sigstop_callback, except);
2849 for_each_inferior (&all_lwps, wait_for_sigstop); 3108 for_each_inferior (&all_lwps, wait_for_sigstop);
2850 stopping_threads = 0; 3109 stopping_threads = NOT_STOPPING_THREADS;
2851 } 3110 }
2852 3111
2853 /* Resume execution of the inferior process. 3112 /* Resume execution of the inferior process.
2854 If STEP is nonzero, single-step it. 3113 If STEP is nonzero, single-step it.
2855 If SIGNAL is nonzero, give it that signal. */ 3114 If SIGNAL is nonzero, give it that signal. */
2856 3115
2857 static void 3116 static void
2858 linux_resume_one_lwp (struct lwp_info *lwp, 3117 linux_resume_one_lwp (struct lwp_info *lwp,
2859 int step, int signal, siginfo_t *info) 3118 int step, int signal, siginfo_t *info)
2860 { 3119 {
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
3076 3335
3077 thread = (struct thread_info *) entry; 3336 thread = (struct thread_info *) entry;
3078 lwp = get_thread_lwp (thread); 3337 lwp = get_thread_lwp (thread);
3079 r = arg; 3338 r = arg;
3080 3339
3081 for (ndx = 0; ndx < r->n; ndx++) 3340 for (ndx = 0; ndx < r->n; ndx++)
3082 { 3341 {
3083 ptid_t ptid = r->resume[ndx].thread; 3342 ptid_t ptid = r->resume[ndx].thread;
3084 if (ptid_equal (ptid, minus_one_ptid) 3343 if (ptid_equal (ptid, minus_one_ptid)
3085 || ptid_equal (ptid, entry->id) 3344 || ptid_equal (ptid, entry->id)
3086 » || (ptid_is_pid (ptid) 3345 » /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads
3087 » && (ptid_get_pid (ptid) == pid_of (lwp))) 3346 » of PID'. */
3088 » || (ptid_get_lwp (ptid) == -1 3347 » || (ptid_get_pid (ptid) == pid_of (lwp)
3089 » && (ptid_get_pid (ptid) == pid_of (lwp)))) 3348 » && (ptid_is_pid (ptid)
3349 » » || ptid_get_lwp (ptid) == -1)))
3090 { 3350 {
3091 if (r->resume[ndx].kind == resume_stop 3351 if (r->resume[ndx].kind == resume_stop
3092 && thread->last_resume_kind == resume_stop) 3352 && thread->last_resume_kind == resume_stop)
3093 { 3353 {
3094 if (debug_threads) 3354 if (debug_threads)
3095 fprintf (stderr, "already %s LWP %ld at GDB's request\n", 3355 fprintf (stderr, "already %s LWP %ld at GDB's request\n",
3096 thread->last_status.kind == TARGET_WAITKIND_STOPPED 3356 thread->last_status.kind == TARGET_WAITKIND_STOPPED
3097 ? "stopped" 3357 ? "stopped"
3098 : "stopping", 3358 : "stopping",
3099 lwpid_of (lwp)); 3359 lwpid_of (lwp));
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
3232 return 0; 3492 return 0;
3233 } 3493 }
3234 3494
3235 saved_inferior = current_inferior; 3495 saved_inferior = current_inferior;
3236 current_inferior = thread; 3496 current_inferior = thread;
3237 3497
3238 /* We can only step over breakpoints we know about. */ 3498 /* We can only step over breakpoints we know about. */
3239 if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc)) 3499 if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
3240 { 3500 {
3241 /* Don't step over a breakpoint that GDB expects to hit 3501 /* Don't step over a breakpoint that GDB expects to hit
3242 » though. */ 3502 » though. If the condition is being evaluated on the target's side
3243 if (gdb_breakpoint_here (pc)) 3503 » and it evaluate to false, step over this breakpoint as well. */
3504 if (gdb_breakpoint_here (pc)
3505 » && gdb_condition_true_at_breakpoint (pc)
3506 » && gdb_no_commands_at_breakpoint (pc))
3244 { 3507 {
3245 if (debug_threads) 3508 if (debug_threads)
3246 fprintf (stderr, 3509 fprintf (stderr,
3247 "Need step over [LWP %ld]? yes, but found" 3510 "Need step over [LWP %ld]? yes, but found"
3248 " GDB breakpoint at 0x%s; skipping step over\n", 3511 " GDB breakpoint at 0x%s; skipping step over\n",
3249 lwpid_of (lwp), paddress (pc)); 3512 lwpid_of (lwp), paddress (pc));
3250 3513
3251 current_inferior = saved_inferior; 3514 current_inferior = saved_inferior;
3252 return 0; 3515 return 0;
3253 } 3516 }
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
3713 fprintf (stderr, 3976 fprintf (stderr,
3714 "unstopping all lwps\n"); 3977 "unstopping all lwps\n");
3715 } 3978 }
3716 3979
3717 if (unsuspend) 3980 if (unsuspend)
3718 find_inferior (&all_lwps, unsuspend_and_proceed_one_lwp, except); 3981 find_inferior (&all_lwps, unsuspend_and_proceed_one_lwp, except);
3719 else 3982 else
3720 find_inferior (&all_lwps, proceed_one_lwp, except); 3983 find_inferior (&all_lwps, proceed_one_lwp, except);
3721 } 3984 }
3722 3985
3723 #ifdef HAVE_LINUX_USRREGS
3724
3725 int
3726 register_addr (int regnum)
3727 {
3728 int addr;
3729
3730 if (regnum < 0 || regnum >= the_low_target.num_regs)
3731 error ("Invalid register number %d.", regnum);
3732
3733 addr = the_low_target.regmap[regnum];
3734
3735 return addr;
3736 }
3737
3738 /* Fetch one register. */
3739 static void
3740 fetch_register (struct regcache *regcache, int regno)
3741 {
3742 CORE_ADDR regaddr;
3743 int i, size;
3744 char *buf;
3745 int pid;
3746
3747 if (regno >= the_low_target.num_regs)
3748 return;
3749 if ((*the_low_target.cannot_fetch_register) (regno))
3750 return;
3751
3752 regaddr = register_addr (regno);
3753 if (regaddr == -1)
3754 return;
3755
3756 size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
3757 & -sizeof (PTRACE_XFER_TYPE));
3758 buf = alloca (size);
3759
3760 pid = lwpid_of (get_thread_lwp (current_inferior));
3761 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
3762 {
3763 errno = 0;
3764 *(PTRACE_XFER_TYPE *) (buf + i) =
3765 ptrace (PTRACE_PEEKUSER, pid,
3766 /* Coerce to a uintptr_t first to avoid potential gcc warning
3767 of coercing an 8 byte integer to a 4 byte pointer. */
3768 (PTRACE_ARG3_TYPE) (uintptr_t) regaddr, 0);
3769 regaddr += sizeof (PTRACE_XFER_TYPE);
3770 if (errno != 0)
3771 error ("reading register %d: %s", regno, strerror (errno));
3772 }
3773
3774 if (the_low_target.supply_ptrace_register)
3775 the_low_target.supply_ptrace_register (regcache, regno, buf);
3776 else
3777 supply_register (regcache, regno, buf);
3778 }
3779
3780 /* Store one register. */
3781 static void
3782 store_register (struct regcache *regcache, int regno)
3783 {
3784 CORE_ADDR regaddr;
3785 int i, size;
3786 char *buf;
3787 int pid;
3788
3789 if (regno >= the_low_target.num_regs)
3790 return;
3791 if ((*the_low_target.cannot_store_register) (regno))
3792 return;
3793
3794 regaddr = register_addr (regno);
3795 if (regaddr == -1)
3796 return;
3797
3798 size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
3799 & -sizeof (PTRACE_XFER_TYPE));
3800 buf = alloca (size);
3801 memset (buf, 0, size);
3802
3803 if (the_low_target.collect_ptrace_register)
3804 the_low_target.collect_ptrace_register (regcache, regno, buf);
3805 else
3806 collect_register (regcache, regno, buf);
3807
3808 pid = lwpid_of (get_thread_lwp (current_inferior));
3809 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
3810 {
3811 errno = 0;
3812 ptrace (PTRACE_POKEUSER, pid,
3813 /* Coerce to a uintptr_t first to avoid potential gcc warning
3814 about coercing an 8 byte integer to a 4 byte pointer. */
3815 (PTRACE_ARG3_TYPE) (uintptr_t) regaddr,
3816 (PTRACE_ARG4_TYPE) *(PTRACE_XFER_TYPE *) (buf + i));
3817 if (errno != 0)
3818 {
3819 /* At this point, ESRCH should mean the process is
3820 already gone, in which case we simply ignore attempts
3821 to change its registers. See also the related
3822 comment in linux_resume_one_lwp. */
3823 if (errno == ESRCH)
3824 return;
3825
3826 if ((*the_low_target.cannot_store_register) (regno) == 0)
3827 error ("writing register %d: %s", regno, strerror (errno));
3828 }
3829 regaddr += sizeof (PTRACE_XFER_TYPE);
3830 }
3831 }
3832
3833 /* Fetch all registers, or just one, from the child process. */
3834 static void
3835 usr_fetch_inferior_registers (struct regcache *regcache, int regno)
3836 {
3837 if (regno == -1)
3838 for (regno = 0; regno < the_low_target.num_regs; regno++)
3839 fetch_register (regcache, regno);
3840 else
3841 fetch_register (regcache, regno);
3842 }
3843
3844 /* Store our register values back into the inferior.
3845 If REGNO is -1, do this for all registers.
3846 Otherwise, REGNO specifies which register (so we can save time). */
3847 static void
3848 usr_store_inferior_registers (struct regcache *regcache, int regno)
3849 {
3850 if (regno == -1)
3851 for (regno = 0; regno < the_low_target.num_regs; regno++)
3852 store_register (regcache, regno);
3853 else
3854 store_register (regcache, regno);
3855 }
3856 #endif /* HAVE_LINUX_USRREGS */
3857
3858
3859 3986
3860 #ifdef HAVE_LINUX_REGSETS 3987 #ifdef HAVE_LINUX_REGSETS
3861 3988
3989 #define use_linux_regsets 1
3990
3862 static int 3991 static int
3863 regsets_fetch_inferior_registers (struct regcache *regcache) 3992 regsets_fetch_inferior_registers (struct regcache *regcache)
3864 { 3993 {
3865 struct regset_info *regset; 3994 struct regset_info *regset;
3866 int saw_general_regs = 0; 3995 int saw_general_regs = 0;
3867 int pid; 3996 int pid;
3868 struct iovec iov; 3997 struct iovec iov;
3869 3998
3870 regset = target_regsets; 3999 regset = target_regsets;
3871 4000
(...skipping 15 matching lines...) Expand all
3887 if (nt_type) 4016 if (nt_type)
3888 { 4017 {
3889 iov.iov_base = buf; 4018 iov.iov_base = buf;
3890 iov.iov_len = regset->size; 4019 iov.iov_len = regset->size;
3891 data = (void *) &iov; 4020 data = (void *) &iov;
3892 } 4021 }
3893 else 4022 else
3894 data = buf; 4023 data = buf;
3895 4024
3896 #ifndef __sparc__ 4025 #ifndef __sparc__
3897 res = ptrace (regset->get_request, pid, nt_type, data); 4026 res = ptrace (regset->get_request, pid,
4027 » » (PTRACE_ARG3_TYPE) (long) nt_type, data);
3898 #else 4028 #else
3899 res = ptrace (regset->get_request, pid, data, nt_type); 4029 res = ptrace (regset->get_request, pid, data, nt_type);
3900 #endif 4030 #endif
3901 if (res < 0) 4031 if (res < 0)
3902 { 4032 {
3903 if (errno == EIO) 4033 if (errno == EIO)
3904 { 4034 {
3905 /* If we get EIO on a regset, do not try it again for 4035 /* If we get EIO on a regset, do not try it again for
3906 this process. */ 4036 this process. */
3907 disabled_regsets[regset - target_regsets] = 1; 4037 disabled_regsets[regset - target_regsets] = 1;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3960 if (nt_type) 4090 if (nt_type)
3961 { 4091 {
3962 iov.iov_base = buf; 4092 iov.iov_base = buf;
3963 iov.iov_len = regset->size; 4093 iov.iov_len = regset->size;
3964 data = (void *) &iov; 4094 data = (void *) &iov;
3965 } 4095 }
3966 else 4096 else
3967 data = buf; 4097 data = buf;
3968 4098
3969 #ifndef __sparc__ 4099 #ifndef __sparc__
3970 res = ptrace (regset->get_request, pid, nt_type, data); 4100 res = ptrace (regset->get_request, pid,
4101 » » (PTRACE_ARG3_TYPE) (long) nt_type, data);
3971 #else 4102 #else
3972 res = ptrace (regset->get_request, pid, &iov, data); 4103 res = ptrace (regset->get_request, pid, data, nt_type);
3973 #endif 4104 #endif
3974 4105
3975 if (res == 0) 4106 if (res == 0)
3976 { 4107 {
3977 /* Then overlay our cached registers on that. */ 4108 /* Then overlay our cached registers on that. */
3978 regset->fill_function (regcache, buf); 4109 regset->fill_function (regcache, buf);
3979 4110
3980 /* Only now do we write the register set. */ 4111 /* Only now do we write the register set. */
3981 #ifndef __sparc__ 4112 #ifndef __sparc__
3982 » res = ptrace (regset->set_request, pid, nt_type, data); 4113 » res = ptrace (regset->set_request, pid,
4114 » » » (PTRACE_ARG3_TYPE) (long) nt_type, data);
3983 #else 4115 #else
3984 res = ptrace (regset->set_request, pid, data, nt_type); 4116 res = ptrace (regset->set_request, pid, data, nt_type);
3985 #endif 4117 #endif
3986 } 4118 }
3987 4119
3988 if (res < 0) 4120 if (res < 0)
3989 { 4121 {
3990 if (errno == EIO) 4122 if (errno == EIO)
3991 { 4123 {
3992 /* If we get EIO on a regset, do not try it again for 4124 /* If we get EIO on a regset, do not try it again for
(...skipping 18 matching lines...) Expand all
4011 } 4143 }
4012 else if (regset->type == GENERAL_REGS) 4144 else if (regset->type == GENERAL_REGS)
4013 saw_general_regs = 1; 4145 saw_general_regs = 1;
4014 regset ++; 4146 regset ++;
4015 free (buf); 4147 free (buf);
4016 } 4148 }
4017 if (saw_general_regs) 4149 if (saw_general_regs)
4018 return 0; 4150 return 0;
4019 else 4151 else
4020 return 1; 4152 return 1;
4021 return 0; 4153 }
4022 } 4154
4023 4155 #else /* !HAVE_LINUX_REGSETS */
4024 #endif /* HAVE_LINUX_REGSETS */ 4156
4157 #define use_linux_regsets 0
4158 #define regsets_fetch_inferior_registers(regcache) 1
4159 #define regsets_store_inferior_registers(regcache) 1
4160
4161 #endif
4162
4163 /* Return 1 if register REGNO is supported by one of the regset ptrace
4164 calls or 0 if it has to be transferred individually. */
4165
4166 static int
4167 linux_register_in_regsets (int regno)
4168 {
4169 unsigned char mask = 1 << (regno % 8);
4170 size_t index = regno / 8;
4171
4172 return (use_linux_regsets
4173 » && (the_low_target.regset_bitmap == NULL
4174 » || (the_low_target.regset_bitmap[index] & mask) != 0));
4175 }
4176
4177 #ifdef HAVE_LINUX_USRREGS
4178
4179 int
4180 register_addr (int regnum)
4181 {
4182 int addr;
4183
4184 if (regnum < 0 || regnum >= the_low_target.num_regs)
4185 error ("Invalid register number %d.", regnum);
4186
4187 addr = the_low_target.regmap[regnum];
4188
4189 return addr;
4190 }
4191
4192 /* Fetch one register. */
4193 static void
4194 fetch_register (struct regcache *regcache, int regno)
4195 {
4196 CORE_ADDR regaddr;
4197 int i, size;
4198 char *buf;
4199 int pid;
4200
4201 if (regno >= the_low_target.num_regs)
4202 return;
4203 if ((*the_low_target.cannot_fetch_register) (regno))
4204 return;
4205
4206 regaddr = register_addr (regno);
4207 if (regaddr == -1)
4208 return;
4209
4210 size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
4211 » & -sizeof (PTRACE_XFER_TYPE));
4212 buf = alloca (size);
4213
4214 pid = lwpid_of (get_thread_lwp (current_inferior));
4215 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
4216 {
4217 errno = 0;
4218 *(PTRACE_XFER_TYPE *) (buf + i) =
4219 » ptrace (PTRACE_PEEKUSER, pid,
4220 » » /* Coerce to a uintptr_t first to avoid potential gcc warning
4221 » » of coercing an 8 byte integer to a 4 byte pointer. */
4222 » » (PTRACE_ARG3_TYPE) (uintptr_t) regaddr, 0);
4223 regaddr += sizeof (PTRACE_XFER_TYPE);
4224 if (errno != 0)
4225 » error ("reading register %d: %s", regno, strerror (errno));
4226 }
4227
4228 if (the_low_target.supply_ptrace_register)
4229 the_low_target.supply_ptrace_register (regcache, regno, buf);
4230 else
4231 supply_register (regcache, regno, buf);
4232 }
4233
4234 /* Store one register. */
4235 static void
4236 store_register (struct regcache *regcache, int regno)
4237 {
4238 CORE_ADDR regaddr;
4239 int i, size;
4240 char *buf;
4241 int pid;
4242
4243 if (regno >= the_low_target.num_regs)
4244 return;
4245 if ((*the_low_target.cannot_store_register) (regno))
4246 return;
4247
4248 regaddr = register_addr (regno);
4249 if (regaddr == -1)
4250 return;
4251
4252 size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
4253 » & -sizeof (PTRACE_XFER_TYPE));
4254 buf = alloca (size);
4255 memset (buf, 0, size);
4256
4257 if (the_low_target.collect_ptrace_register)
4258 the_low_target.collect_ptrace_register (regcache, regno, buf);
4259 else
4260 collect_register (regcache, regno, buf);
4261
4262 pid = lwpid_of (get_thread_lwp (current_inferior));
4263 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
4264 {
4265 errno = 0;
4266 ptrace (PTRACE_POKEUSER, pid,
4267 » /* Coerce to a uintptr_t first to avoid potential gcc warning
4268 » about coercing an 8 byte integer to a 4 byte pointer. */
4269 » (PTRACE_ARG3_TYPE) (uintptr_t) regaddr,
4270 » (PTRACE_ARG4_TYPE) *(PTRACE_XFER_TYPE *) (buf + i));
4271 if (errno != 0)
4272 » {
4273 » /* At this point, ESRCH should mean the process is
4274 » already gone, in which case we simply ignore attempts
4275 » to change its registers. See also the related
4276 » comment in linux_resume_one_lwp. */
4277 » if (errno == ESRCH)
4278 » return;
4279
4280 » if ((*the_low_target.cannot_store_register) (regno) == 0)
4281 » error ("writing register %d: %s", regno, strerror (errno));
4282 » }
4283 regaddr += sizeof (PTRACE_XFER_TYPE);
4284 }
4285 }
4286
4287 /* Fetch all registers, or just one, from the child process.
4288 If REGNO is -1, do this for all registers, skipping any that are
4289 assumed to have been retrieved by regsets_fetch_inferior_registers,
4290 unless ALL is non-zero.
4291 Otherwise, REGNO specifies which register (so we can save time). */
4292 static void
4293 usr_fetch_inferior_registers (struct regcache *regcache, int regno, int all)
4294 {
4295 if (regno == -1)
4296 {
4297 for (regno = 0; regno < the_low_target.num_regs; regno++)
4298 » if (all || !linux_register_in_regsets (regno))
4299 » fetch_register (regcache, regno);
4300 }
4301 else
4302 fetch_register (regcache, regno);
4303 }
4304
4305 /* Store our register values back into the inferior.
4306 If REGNO is -1, do this for all registers, skipping any that are
4307 assumed to have been saved by regsets_store_inferior_registers,
4308 unless ALL is non-zero.
4309 Otherwise, REGNO specifies which register (so we can save time). */
4310 static void
4311 usr_store_inferior_registers (struct regcache *regcache, int regno, int all)
4312 {
4313 if (regno == -1)
4314 {
4315 for (regno = 0; regno < the_low_target.num_regs; regno++)
4316 » if (all || !linux_register_in_regsets (regno))
4317 » store_register (regcache, regno);
4318 }
4319 else
4320 store_register (regcache, regno);
4321 }
4322
4323 #else /* !HAVE_LINUX_USRREGS */
4324
4325 #define usr_fetch_inferior_registers(regcache, regno, all) do {} while (0)
4326 #define usr_store_inferior_registers(regcache, regno, all) do {} while (0)
4327
4328 #endif
4025 4329
4026 4330
4027 void 4331 void
4028 linux_fetch_registers (struct regcache *regcache, int regno) 4332 linux_fetch_registers (struct regcache *regcache, int regno)
4029 { 4333 {
4030 #ifdef HAVE_LINUX_REGSETS 4334 int use_regsets;
4031 if (regsets_fetch_inferior_registers (regcache) == 0) 4335 int all = 0;
4032 return; 4336
4033 #endif 4337 if (regno == -1)
4034 #ifdef HAVE_LINUX_USRREGS 4338 {
4035 usr_fetch_inferior_registers (regcache, regno); 4339 if (the_low_target.fetch_register != NULL)
4036 #endif 4340 » for (regno = 0; regno < the_low_target.num_regs; regno++)
4341 » (*the_low_target.fetch_register) (regcache, regno);
4342
4343 all = regsets_fetch_inferior_registers (regcache);
4344 usr_fetch_inferior_registers (regcache, -1, all);
4345 }
4346 else
4347 {
4348 if (the_low_target.fetch_register != NULL
4349 » && (*the_low_target.fetch_register) (regcache, regno))
4350 » return;
4351
4352 use_regsets = linux_register_in_regsets (regno);
4353 if (use_regsets)
4354 » all = regsets_fetch_inferior_registers (regcache);
4355 if (!use_regsets || all)
4356 » usr_fetch_inferior_registers (regcache, regno, 1);
4357 }
4037 } 4358 }
4038 4359
4039 void 4360 void
4040 linux_store_registers (struct regcache *regcache, int regno) 4361 linux_store_registers (struct regcache *regcache, int regno)
4041 { 4362 {
4042 #ifdef HAVE_LINUX_REGSETS 4363 int use_regsets;
4043 if (regsets_store_inferior_registers (regcache) == 0) 4364 int all = 0;
4044 return; 4365
4045 #endif 4366 if (regno == -1)
4046 #ifdef HAVE_LINUX_USRREGS 4367 {
4047 usr_store_inferior_registers (regcache, regno); 4368 all = regsets_store_inferior_registers (regcache);
4048 #endif 4369 usr_store_inferior_registers (regcache, regno, all);
4049 } 4370 }
4050 4371 else
4051 4372 {
4373 use_regsets = linux_register_in_regsets (regno);
4374 if (use_regsets)
4375 » all = regsets_store_inferior_registers (regcache);
4376 if (!use_regsets || all)
4377 » usr_store_inferior_registers (regcache, regno, 1);
4378 }
4379 }
4380
4381
4052 /* Copy LEN bytes from inferior's memory starting at MEMADDR 4382 /* Copy LEN bytes from inferior's memory starting at MEMADDR
4053 to debugger memory starting at MYADDR. */ 4383 to debugger memory starting at MYADDR. */
4054 4384
4055 static int 4385 static int
4056 linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len) 4386 linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
4057 { 4387 {
4388 int pid = lwpid_of (get_thread_lwp (current_inferior));
4389 register PTRACE_XFER_TYPE *buffer;
4390 register CORE_ADDR addr;
4391 register int count;
4392 char filename[64];
4058 register int i; 4393 register int i;
4059 /* Round starting address down to longword boundary. */ 4394 int ret;
4060 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
4061 /* Round ending address up; get number of longwords that makes. */
4062 register int count
4063 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
4064 / sizeof (PTRACE_XFER_TYPE);
4065 /* Allocate buffer of that many longwords. */
4066 register PTRACE_XFER_TYPE *buffer
4067 = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
4068 int fd; 4395 int fd;
4069 char filename[64];
4070 int pid = lwpid_of (get_thread_lwp (current_inferior));
4071 4396
4072 /* Try using /proc. Don't bother for one word. */ 4397 /* Try using /proc. Don't bother for one word. */
4073 if (len >= 3 * sizeof (long)) 4398 if (len >= 3 * sizeof (long))
4074 { 4399 {
4400 int bytes;
4401
4075 /* We could keep this file open and cache it - possibly one per 4402 /* We could keep this file open and cache it - possibly one per
4076 thread. That requires some juggling, but is even faster. */ 4403 thread. That requires some juggling, but is even faster. */
4077 sprintf (filename, "/proc/%d/mem", pid); 4404 sprintf (filename, "/proc/%d/mem", pid);
4078 fd = open (filename, O_RDONLY | O_LARGEFILE); 4405 fd = open (filename, O_RDONLY | O_LARGEFILE);
4079 if (fd == -1) 4406 if (fd == -1)
4080 goto no_proc; 4407 goto no_proc;
4081 4408
4082 /* If pread64 is available, use it. It's faster if the kernel 4409 /* If pread64 is available, use it. It's faster if the kernel
4083 supports it (only one syscall), and it's 64-bit safe even on 4410 supports it (only one syscall), and it's 64-bit safe even on
4084 32-bit platforms (for instance, SPARC debugging a SPARC64 4411 32-bit platforms (for instance, SPARC debugging a SPARC64
4085 application). */ 4412 application). */
4086 #ifdef HAVE_PREAD64 4413 #ifdef HAVE_PREAD64
4087 if (pread64 (fd, myaddr, len, memaddr) != len) 4414 bytes = pread64 (fd, myaddr, len, memaddr);
4088 #else 4415 #else
4089 if (lseek (fd, memaddr, SEEK_SET) == -1 || read (fd, myaddr, len) != len) 4416 bytes = -1;
4417 if (lseek (fd, memaddr, SEEK_SET) != -1)
4418 » bytes = read (fd, myaddr, len);
4090 #endif 4419 #endif
4091 {
4092 close (fd);
4093 goto no_proc;
4094 }
4095 4420
4096 close (fd); 4421 close (fd);
4097 return 0; 4422 if (bytes == len)
4423 » return 0;
4424
4425 /* Some data was read, we'll try to get the rest with ptrace. */
4426 if (bytes > 0)
4427 » {
4428 » memaddr += bytes;
4429 » myaddr += bytes;
4430 » len -= bytes;
4431 » }
4098 } 4432 }
4099 4433
4100 no_proc: 4434 no_proc:
4435 /* Round starting address down to longword boundary. */
4436 addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
4437 /* Round ending address up; get number of longwords that makes. */
4438 count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
4439 / sizeof (PTRACE_XFER_TYPE));
4440 /* Allocate buffer of that many longwords. */
4441 buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
4442
4101 /* Read all the longwords */ 4443 /* Read all the longwords */
4444 errno = 0;
4102 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) 4445 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
4103 { 4446 {
4104 errno = 0;
4105 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning 4447 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
4106 about coercing an 8 byte integer to a 4 byte pointer. */ 4448 about coercing an 8 byte integer to a 4 byte pointer. */
4107 buffer[i] = ptrace (PTRACE_PEEKTEXT, pid, 4449 buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
4108 (PTRACE_ARG3_TYPE) (uintptr_t) addr, 0); 4450 (PTRACE_ARG3_TYPE) (uintptr_t) addr, 0);
4109 if (errno) 4451 if (errno)
4110 » return errno; 4452 » break;
4453 }
4454 ret = errno;
4455
4456 /* Copy appropriate bytes out of the buffer. */
4457 if (i > 0)
4458 {
4459 i *= sizeof (PTRACE_XFER_TYPE);
4460 i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
4461 memcpy (myaddr,
4462 » (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
4463 » i < len ? i : len);
4111 } 4464 }
4112 4465
4113 /* Copy appropriate bytes out of the buffer. */ 4466 return ret;
4114 memcpy (myaddr,
4115 » (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
4116 » len);
4117
4118 return 0;
4119 } 4467 }
4120 4468
4121 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's 4469 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
4122 memory at MEMADDR. On failure (cannot write to the inferior) 4470 memory at MEMADDR. On failure (cannot write to the inferior)
4123 returns the value of errno. */ 4471 returns the value of errno. */
4124 4472
4125 static int 4473 static int
4126 linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len) 4474 linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
4127 { 4475 {
4128 register int i; 4476 register int i;
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
4451 4799
4452 static CORE_ADDR 4800 static CORE_ADDR
4453 linux_stopped_data_address (void) 4801 linux_stopped_data_address (void)
4454 { 4802 {
4455 struct lwp_info *lwp = get_thread_lwp (current_inferior); 4803 struct lwp_info *lwp = get_thread_lwp (current_inferior);
4456 4804
4457 return lwp->stopped_data_address; 4805 return lwp->stopped_data_address;
4458 } 4806 }
4459 4807
4460 #if defined(__UCLIBC__) && defined(HAS_NOMMU) 4808 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
4809 #if ! (defined(PT_TEXT_ADDR) \
4810 || defined(PT_DATA_ADDR) \
4811 || defined(PT_TEXT_END_ADDR))
4461 #if defined(__mcoldfire__) 4812 #if defined(__mcoldfire__)
4462 /* These should really be defined in the kernel's ptrace.h header. */ 4813 /* These should really be defined in the kernel's ptrace.h header. */
4463 #define PT_TEXT_ADDR 49*4 4814 #define PT_TEXT_ADDR 49*4
4464 #define PT_DATA_ADDR 50*4 4815 #define PT_DATA_ADDR 50*4
4465 #define PT_TEXT_END_ADDR 51*4 4816 #define PT_TEXT_END_ADDR 51*4
4466 #elif defined(BFIN) 4817 #elif defined(BFIN)
4467 #define PT_TEXT_ADDR 220 4818 #define PT_TEXT_ADDR 220
4468 #define PT_TEXT_END_ADDR 224 4819 #define PT_TEXT_END_ADDR 224
4469 #define PT_DATA_ADDR 228 4820 #define PT_DATA_ADDR 228
4470 #elif defined(__TMS320C6X__) 4821 #elif defined(__TMS320C6X__)
4471 #define PT_TEXT_ADDR (0x10000*4) 4822 #define PT_TEXT_ADDR (0x10000*4)
4472 #define PT_DATA_ADDR (0x10004*4) 4823 #define PT_DATA_ADDR (0x10004*4)
4473 #define PT_TEXT_END_ADDR (0x10008*4) 4824 #define PT_TEXT_END_ADDR (0x10008*4)
4474 #endif 4825 #endif
4826 #endif
4475 4827
4476 /* Under uClinux, programs are loaded at non-zero offsets, which we need 4828 /* Under uClinux, programs are loaded at non-zero offsets, which we need
4477 to tell gdb about. */ 4829 to tell gdb about. */
4478 4830
4479 static int 4831 static int
4480 linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p) 4832 linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
4481 { 4833 {
4482 #if defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) && defined(PT_TEXT_END_ADDR) 4834 #if defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) && defined(PT_TEXT_END_ADDR)
4483 unsigned long text, text_end, data; 4835 unsigned long text, text_end, data;
4484 int pid = lwpid_of (get_thread_lwp (current_inferior)); 4836 int pid = lwpid_of (get_thread_lwp (current_inferior));
(...skipping 30 matching lines...) Expand all
4515 unsigned char *readbuf, unsigned const char *writebuf, 4867 unsigned char *readbuf, unsigned const char *writebuf,
4516 CORE_ADDR offset, int len) 4868 CORE_ADDR offset, int len)
4517 { 4869 {
4518 return linux_common_xfer_osdata (annex, readbuf, offset, len); 4870 return linux_common_xfer_osdata (annex, readbuf, offset, len);
4519 } 4871 }
4520 4872
4521 /* Convert a native/host siginfo object, into/from the siginfo in the 4873 /* Convert a native/host siginfo object, into/from the siginfo in the
4522 layout of the inferiors' architecture. */ 4874 layout of the inferiors' architecture. */
4523 4875
4524 static void 4876 static void
4525 siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction) 4877 siginfo_fixup (siginfo_t *siginfo, void *inf_siginfo, int direction)
4526 { 4878 {
4527 int done = 0; 4879 int done = 0;
4528 4880
4529 if (the_low_target.siginfo_fixup != NULL) 4881 if (the_low_target.siginfo_fixup != NULL)
4530 done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction); 4882 done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
4531 4883
4532 /* If there was no callback, or the callback didn't do anything, 4884 /* If there was no callback, or the callback didn't do anything,
4533 then just do a straight memcpy. */ 4885 then just do a straight memcpy. */
4534 if (!done) 4886 if (!done)
4535 { 4887 {
4536 if (direction == 1) 4888 if (direction == 1)
4537 » memcpy (siginfo, inf_siginfo, sizeof (struct siginfo)); 4889 » memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
4538 else 4890 else
4539 » memcpy (inf_siginfo, siginfo, sizeof (struct siginfo)); 4891 » memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
4540 } 4892 }
4541 } 4893 }
4542 4894
4543 static int 4895 static int
4544 linux_xfer_siginfo (const char *annex, unsigned char *readbuf, 4896 linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
4545 unsigned const char *writebuf, CORE_ADDR offset, int len) 4897 unsigned const char *writebuf, CORE_ADDR offset, int len)
4546 { 4898 {
4547 int pid; 4899 int pid;
4548 struct siginfo siginfo; 4900 siginfo_t siginfo;
4549 char inf_siginfo[sizeof (struct siginfo)]; 4901 char inf_siginfo[sizeof (siginfo_t)];
4550 4902
4551 if (current_inferior == NULL) 4903 if (current_inferior == NULL)
4552 return -1; 4904 return -1;
4553 4905
4554 pid = lwpid_of (get_thread_lwp (current_inferior)); 4906 pid = lwpid_of (get_thread_lwp (current_inferior));
4555 4907
4556 if (debug_threads) 4908 if (debug_threads)
4557 fprintf (stderr, "%s siginfo for lwp %d.\n", 4909 fprintf (stderr, "%s siginfo for lwp %d.\n",
4558 readbuf != NULL ? "Reading" : "Writing", 4910 readbuf != NULL ? "Reading" : "Writing",
4559 pid); 4911 pid);
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
4687 static int 5039 static int
4688 linux_supports_disable_randomization (void) 5040 linux_supports_disable_randomization (void)
4689 { 5041 {
4690 #ifdef HAVE_PERSONALITY 5042 #ifdef HAVE_PERSONALITY
4691 return 1; 5043 return 1;
4692 #else 5044 #else
4693 return 0; 5045 return 0;
4694 #endif 5046 #endif
4695 } 5047 }
4696 5048
5049 static int
5050 linux_supports_agent (void)
5051 {
5052 return 1;
5053 }
5054
4697 /* Enumerate spufs IDs for process PID. */ 5055 /* Enumerate spufs IDs for process PID. */
4698 static int 5056 static int
4699 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len) 5057 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
4700 { 5058 {
4701 int pos = 0; 5059 int pos = 0;
4702 int written = 0; 5060 int written = 0;
4703 char path[128]; 5061 char path[128];
4704 DIR *dir; 5062 DIR *dir;
4705 struct dirent *entry; 5063 struct dirent *entry;
4706 5064
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
5076 else 5434 else
5077 { 5435 {
5078 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size); 5436 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
5079 5437
5080 if (p->p_type == PT_PHDR) 5438 if (p->p_type == PT_PHDR)
5081 relocation = phdr_memaddr - p->p_vaddr; 5439 relocation = phdr_memaddr - p->p_vaddr;
5082 } 5440 }
5083 5441
5084 if (relocation == -1) 5442 if (relocation == -1)
5085 { 5443 {
5086 warning ("Unexpected missing PT_PHDR"); 5444 /* PT_PHDR is optional, but necessary for PIE in general. Fortunately
5445 » any real world executables, including PIE executables, have always
5446 » PT_PHDR present. PT_PHDR is not present in some shared libraries or
5447 » in fpc (Free Pascal 2.4) binaries but neither of those have a need for
5448 » or present DT_DEBUG anyway (fpc binaries are statically linked).
5449
5450 » Therefore if there exists DT_DEBUG there is always also PT_PHDR.
5451
5452 » GDB could find RELOCATION also from AT_ENTRY - e_entry. */
5453
5087 return 0; 5454 return 0;
5088 } 5455 }
5089 5456
5090 for (i = 0; i < num_phdr; i++) 5457 for (i = 0; i < num_phdr; i++)
5091 { 5458 {
5092 if (is_elf64) 5459 if (is_elf64)
5093 { 5460 {
5094 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size); 5461 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
5095 5462
5096 if (p->p_type == PT_DYNAMIC) 5463 if (p->p_type == PT_DYNAMIC)
5097 return p->p_vaddr + relocation; 5464 return p->p_vaddr + relocation;
5098 } 5465 }
5099 else 5466 else
5100 { 5467 {
5101 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size); 5468 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
5102 5469
5103 if (p->p_type == PT_DYNAMIC) 5470 if (p->p_type == PT_DYNAMIC)
5104 return p->p_vaddr + relocation; 5471 return p->p_vaddr + relocation;
5105 } 5472 }
5106 } 5473 }
5107 5474
5108 return 0; 5475 return 0;
5109 } 5476 }
5110 5477
5111 /* Return &_r_debug in the inferior, or -1 if not present. Return value 5478 /* Return &_r_debug in the inferior, or -1 if not present. Return value
5112 can be 0 if the inferior does not yet have the library list initialized. */ 5479 can be 0 if the inferior does not yet have the library list initialized.
5480 We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of
5481 DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */
5113 5482
5114 static CORE_ADDR 5483 static CORE_ADDR
5115 get_r_debug (const int pid, const int is_elf64) 5484 get_r_debug (const int pid, const int is_elf64)
5116 { 5485 {
5117 CORE_ADDR dynamic_memaddr; 5486 CORE_ADDR dynamic_memaddr;
5118 const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn); 5487 const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
5119 unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */ 5488 unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */
5489 CORE_ADDR map = -1;
5120 5490
5121 dynamic_memaddr = get_dynamic (pid, is_elf64); 5491 dynamic_memaddr = get_dynamic (pid, is_elf64);
5122 if (dynamic_memaddr == 0) 5492 if (dynamic_memaddr == 0)
5123 return (CORE_ADDR) -1; 5493 return map;
5124 5494
5125 while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0) 5495 while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
5126 { 5496 {
5127 if (is_elf64) 5497 if (is_elf64)
5128 { 5498 {
5129 Elf64_Dyn *const dyn = (Elf64_Dyn *) buf; 5499 Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
5500 #ifdef DT_MIPS_RLD_MAP
5501 union
5502 {
5503 Elf64_Xword map;
5504 unsigned char buf[sizeof (Elf64_Xword)];
5505 }
5506 rld_map;
5130 5507
5131 » if (dyn->d_tag == DT_DEBUG) 5508 » if (dyn->d_tag == DT_MIPS_RLD_MAP)
5132 » return dyn->d_un.d_val; 5509 » {
5510 » if (linux_read_memory (dyn->d_un.d_val,
5511 » » » » rld_map.buf, sizeof (rld_map.buf)) == 0)
5512 » » return rld_map.map;
5513 » else
5514 » » break;
5515 » }
5516 #endif» /* DT_MIPS_RLD_MAP */
5517
5518 » if (dyn->d_tag == DT_DEBUG && map == -1)
5519 » map = dyn->d_un.d_val;
5133 5520
5134 if (dyn->d_tag == DT_NULL) 5521 if (dyn->d_tag == DT_NULL)
5135 break; 5522 break;
5136 } 5523 }
5137 else 5524 else
5138 { 5525 {
5139 Elf32_Dyn *const dyn = (Elf32_Dyn *) buf; 5526 Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
5527 #ifdef DT_MIPS_RLD_MAP
5528 union
5529 {
5530 Elf32_Word map;
5531 unsigned char buf[sizeof (Elf32_Word)];
5532 }
5533 rld_map;
5140 5534
5141 » if (dyn->d_tag == DT_DEBUG) 5535 » if (dyn->d_tag == DT_MIPS_RLD_MAP)
5142 » return dyn->d_un.d_val; 5536 » {
5537 » if (linux_read_memory (dyn->d_un.d_val,
5538 » » » » rld_map.buf, sizeof (rld_map.buf)) == 0)
5539 » » return rld_map.map;
5540 » else
5541 » » break;
5542 » }
5543 #endif» /* DT_MIPS_RLD_MAP */
5544
5545 » if (dyn->d_tag == DT_DEBUG && map == -1)
5546 » map = dyn->d_un.d_val;
5143 5547
5144 if (dyn->d_tag == DT_NULL) 5548 if (dyn->d_tag == DT_NULL)
5145 break; 5549 break;
5146 } 5550 }
5147 5551
5148 dynamic_memaddr += dyn_size; 5552 dynamic_memaddr += dyn_size;
5149 } 5553 }
5150 5554
5151 return (CORE_ADDR) -1; 5555 return map;
5152 } 5556 }
5153 5557
5154 /* Read one pointer from MEMADDR in the inferior. */ 5558 /* Read one pointer from MEMADDR in the inferior. */
5155 5559
5156 static int 5560 static int
5157 read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size) 5561 read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
5158 { 5562 {
5159 *ptr = 0; 5563 int ret;
5160 return linux_read_memory (memaddr, (unsigned char *) ptr, ptr_size); 5564
5565 /* Go through a union so this works on either big or little endian
5566 hosts, when the inferior's pointer size is smaller than the size
5567 of CORE_ADDR. It is assumed the inferior's endianness is the
5568 same of the superior's. */
5569 union
5570 {
5571 CORE_ADDR core_addr;
5572 unsigned int ui;
5573 unsigned char uc;
5574 } addr;
5575
5576 ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
5577 if (ret == 0)
5578 {
5579 if (ptr_size == sizeof (CORE_ADDR))
5580 » *ptr = addr.core_addr;
5581 else if (ptr_size == sizeof (unsigned int))
5582 » *ptr = addr.ui;
5583 else
5584 » gdb_assert_not_reached ("unhandled pointer size");
5585 }
5586 return ret;
5161 } 5587 }
5162 5588
5163 struct link_map_offsets 5589 struct link_map_offsets
5164 { 5590 {
5165 /* Offset and size of r_debug.r_version. */ 5591 /* Offset and size of r_debug.r_version. */
5166 int r_version_offset; 5592 int r_version_offset;
5167 5593
5168 /* Offset and size of r_debug.r_map. */ 5594 /* Offset and size of r_debug.r_map. */
5169 int r_map_offset; 5595 int r_map_offset;
5170 5596
5171 /* Offset to l_addr field in struct link_map. */ 5597 /* Offset to l_addr field in struct link_map. */
5172 int l_addr_offset; 5598 int l_addr_offset;
5173 5599
5174 /* Offset to l_name field in struct link_map. */ 5600 /* Offset to l_name field in struct link_map. */
5175 int l_name_offset; 5601 int l_name_offset;
5176 5602
5177 /* Offset to l_ld field in struct link_map. */ 5603 /* Offset to l_ld field in struct link_map. */
5178 int l_ld_offset; 5604 int l_ld_offset;
5179 5605
5180 /* Offset to l_next field in struct link_map. */ 5606 /* Offset to l_next field in struct link_map. */
5181 int l_next_offset; 5607 int l_next_offset;
5182 5608
5183 /* Offset to l_prev field in struct link_map. */ 5609 /* Offset to l_prev field in struct link_map. */
5184 int l_prev_offset; 5610 int l_prev_offset;
5185 }; 5611 };
5186 5612
5187 /* Construct qXfer:libraries:read reply. */ 5613 /* Construct qXfer:libraries-svr4:read reply. */
5188 5614
5189 static int 5615 static int
5190 linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf, 5616 linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
5191 unsigned const char *writebuf, 5617 unsigned const char *writebuf,
5192 CORE_ADDR offset, int len) 5618 CORE_ADDR offset, int len)
5193 { 5619 {
5194 char *document; 5620 char *document;
5195 unsigned document_len; 5621 unsigned document_len;
5196 struct process_info_private *const priv = current_process ()->private; 5622 struct process_info_private *const priv = current_process ()->private;
5197 char filename[PATH_MAX]; 5623 char filename[PATH_MAX];
(...skipping 14 matching lines...) Expand all
5212 { 5638 {
5213 0, /* r_version offset. */ 5639 0, /* r_version offset. */
5214 8, /* r_debug.r_map offset. */ 5640 8, /* r_debug.r_map offset. */
5215 0, /* l_addr offset in link_map. */ 5641 0, /* l_addr offset in link_map. */
5216 8, /* l_name offset in link_map. */ 5642 8, /* l_name offset in link_map. */
5217 16, /* l_ld offset in link_map. */ 5643 16, /* l_ld offset in link_map. */
5218 24, /* l_next offset in link_map. */ 5644 24, /* l_next offset in link_map. */
5219 32 /* l_prev offset in link_map. */ 5645 32 /* l_prev offset in link_map. */
5220 }; 5646 };
5221 const struct link_map_offsets *lmo; 5647 const struct link_map_offsets *lmo;
5648 unsigned int machine;
5222 5649
5223 if (writebuf != NULL) 5650 if (writebuf != NULL)
5224 return -2; 5651 return -2;
5225 if (readbuf == NULL) 5652 if (readbuf == NULL)
5226 return -1; 5653 return -1;
5227 5654
5228 pid = lwpid_of (get_thread_lwp (current_inferior)); 5655 pid = lwpid_of (get_thread_lwp (current_inferior));
5229 xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid); 5656 xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
5230 is_elf64 = elf_64_file_p (filename); 5657 is_elf64 = elf_64_file_p (filename, &machine);
5231 lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets; 5658 lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
5232 5659
5233 if (priv->r_debug == 0) 5660 if (priv->r_debug == 0)
5234 priv->r_debug = get_r_debug (pid, is_elf64); 5661 priv->r_debug = get_r_debug (pid, is_elf64);
5235 5662
5236 if (priv->r_debug == (CORE_ADDR) -1 || priv->r_debug == 0) 5663 /* We failed to find DT_DEBUG. Such situation will not change for this
5664 inferior - do not retry it. Report it to GDB as E01, see for the reasons
5665 at the GDB solib-svr4.c side. */
5666 if (priv->r_debug == (CORE_ADDR) -1)
5667 return -1;
5668
5669 if (priv->r_debug == 0)
5237 { 5670 {
5238 document = xstrdup ("<library-list-svr4 version=\"1.0\"/>\n"); 5671 document = xstrdup ("<library-list-svr4 version=\"1.0\"/>\n");
5239 } 5672 }
5240 else 5673 else
5241 { 5674 {
5242 int allocated = 1024; 5675 int allocated = 1024;
5243 char *p; 5676 char *p;
5244 const int ptr_size = is_elf64 ? 8 : 4; 5677 const int ptr_size = is_elf64 ? 8 : 4;
5245 CORE_ADDR lm_addr, lm_prev, l_name, l_addr, l_ld, l_next, l_prev; 5678 CORE_ADDR lm_addr, lm_prev, l_name, l_addr, l_ld, l_next, l_prev;
5246 int r_version, header_done = 0; 5679 int r_version, header_done = 0;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
5329 p = p + strlen (p); 5762 p = p + strlen (p);
5330 } 5763 }
5331 5764
5332 if (l_next == 0) 5765 if (l_next == 0)
5333 break; 5766 break;
5334 5767
5335 lm_prev = lm_addr; 5768 lm_prev = lm_addr;
5336 lm_addr = l_next; 5769 lm_addr = l_next;
5337 } 5770 }
5338 done: 5771 done:
5339 strcpy (p, "</library-list-svr4>"); 5772 if (!header_done)
5773 » {
5774 » /* Empty list; terminate `<library-list-svr4'. */
5775 » strcpy (p, "/>");
5776 » }
5777 else
5778 » strcpy (p, "</library-list-svr4>");
5340 } 5779 }
5341 5780
5342 document_len = strlen (document); 5781 document_len = strlen (document);
5343 if (offset < document_len) 5782 if (offset < document_len)
5344 document_len -= offset; 5783 document_len -= offset;
5345 else 5784 else
5346 document_len = 0; 5785 document_len = 0;
5347 if (len > document_len) 5786 if (len > document_len)
5348 len = document_len; 5787 len = document_len;
5349 5788
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
5409 NULL, 5848 NULL,
5410 linux_pause_all, 5849 linux_pause_all,
5411 linux_unpause_all, 5850 linux_unpause_all,
5412 linux_cancel_breakpoints, 5851 linux_cancel_breakpoints,
5413 linux_stabilize_threads, 5852 linux_stabilize_threads,
5414 linux_install_fast_tracepoint_jump_pad, 5853 linux_install_fast_tracepoint_jump_pad,
5415 linux_emit_ops, 5854 linux_emit_ops,
5416 linux_supports_disable_randomization, 5855 linux_supports_disable_randomization,
5417 linux_get_min_fast_tracepoint_insn_len, 5856 linux_get_min_fast_tracepoint_insn_len,
5418 linux_qxfer_libraries_svr4, 5857 linux_qxfer_libraries_svr4,
5858 linux_supports_agent,
5419 }; 5859 };
5420 5860
5421 static void 5861 static void
5422 linux_init_signals () 5862 linux_init_signals ()
5423 { 5863 {
5424 /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads 5864 /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads
5425 to find what the cancel signal actually is. */ 5865 to find what the cancel signal actually is. */
5426 #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */ 5866 #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */
5427 signal (__SIGRTMIN+1, SIG_IGN); 5867 signal (__SIGRTMIN+1, SIG_IGN);
5428 #endif 5868 #endif
5429 } 5869 }
5430 5870
5431 void 5871 void
5432 initialize_low (void) 5872 initialize_low (void)
5433 { 5873 {
5434 struct sigaction sigchld_action; 5874 struct sigaction sigchld_action;
5435 memset (&sigchld_action, 0, sizeof (sigchld_action)); 5875 memset (&sigchld_action, 0, sizeof (sigchld_action));
5436 set_target_ops (&linux_target_ops); 5876 set_target_ops (&linux_target_ops);
5437 set_breakpoint_data (the_low_target.breakpoint, 5877 set_breakpoint_data (the_low_target.breakpoint,
5438 the_low_target.breakpoint_len); 5878 the_low_target.breakpoint_len);
5439 linux_init_signals (); 5879 linux_init_signals ();
5440 linux_test_for_tracefork (); 5880 linux_test_for_tracefork ();
5881 linux_ptrace_init_warnings ();
5441 #ifdef HAVE_LINUX_REGSETS 5882 #ifdef HAVE_LINUX_REGSETS
5442 for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++) 5883 for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++)
5443 ; 5884 ;
5444 disabled_regsets = xmalloc (num_regsets); 5885 disabled_regsets = xmalloc (num_regsets);
5445 #endif 5886 #endif
5446 5887
5447 sigchld_action.sa_handler = sigchld_handler; 5888 sigchld_action.sa_handler = sigchld_handler;
5448 sigemptyset (&sigchld_action.sa_mask); 5889 sigemptyset (&sigchld_action.sa_mask);
5449 sigchld_action.sa_flags = SA_RESTART; 5890 sigchld_action.sa_flags = SA_RESTART;
5450 sigaction (SIGCHLD, &sigchld_action, NULL); 5891 sigaction (SIGCHLD, &sigchld_action, NULL);
5451 } 5892 }
OLDNEW
« no previous file with comments | « gdb/gdbserver/linux-low.h ('k') | gdb/gdbserver/linux-m32r-low.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698