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

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

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 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/server.c ('k') | gdb/gdbserver/target.h » ('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 SPUs, for the remote server for GDB. 1 /* Low level interface to SPUs, for the remote server for GDB.
2 Copyright (C) 2006-2012 Free Software Foundation, Inc. 2 Copyright (C) 2006-2013 Free Software Foundation, Inc.
3 3
4 Contributed by Ulrich Weigand <uweigand@de.ibm.com>. 4 Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
5 5
6 This file is part of GDB. 6 This file is part of GDB.
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or 10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version. 11 (at your option) any later version.
12 12
13 This program is distributed in the hope that it will be useful, 13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 GNU General Public License for more details.
17 17
18 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 20
21 #include "server.h" 21 #include "server.h"
22 22
23 #include <sys/wait.h> 23 #include "gdb_wait.h"
24 #include <stdio.h> 24 #include <stdio.h>
25 #include <sys/ptrace.h> 25 #include <sys/ptrace.h>
26 #include <fcntl.h> 26 #include <fcntl.h>
27 #include <string.h> 27 #include <string.h>
28 #include <stdlib.h> 28 #include <stdlib.h>
29 #include <unistd.h> 29 #include <unistd.h>
30 #include <errno.h> 30 #include <errno.h>
31 #include <sys/syscall.h> 31 #include <sys/syscall.h>
32 #include "filestuff.h"
33 #include "hostio.h"
32 34
33 /* Some older glibc versions do not define this. */ 35 /* Some older glibc versions do not define this. */
34 #ifndef __WNOTHREAD 36 #ifndef __WNOTHREAD
35 #define __WNOTHREAD 0x20000000 /* Don't wait on children of other 37 #define __WNOTHREAD 0x20000000 /* Don't wait on children of other
36 threads in this group */ 38 threads in this group */
37 #endif 39 #endif
38 40
39 #define PTRACE_TYPE_RET long 41 #define PTRACE_TYPE_RET long
40 #define PTRACE_TYPE_ARG3 long 42 #define PTRACE_TYPE_ARG3 long
41 43
42 /* Number of registers. */ 44 /* Number of registers. */
43 #define SPU_NUM_REGS 130 45 #define SPU_NUM_REGS 130
44 #define SPU_NUM_CORE_REGS 128 46 #define SPU_NUM_CORE_REGS 128
45 47
46 /* Special registers. */ 48 /* Special registers. */
47 #define SPU_ID_REGNUM 128 49 #define SPU_ID_REGNUM 128
48 #define SPU_PC_REGNUM 129 50 #define SPU_PC_REGNUM 129
49 51
50 /* PPU side system calls. */ 52 /* PPU side system calls. */
51 #define INSTR_SC 0x44000002 53 #define INSTR_SC 0x44000002
52 #define NR_spu_run 0x0116 54 #define NR_spu_run 0x0116
53 55
54 /* Get current thread ID (Linux task ID). */
55 #define current_ptid ((struct inferior_list_entry *)current_inferior)->id
56
57 /* These are used in remote-utils.c. */ 56 /* These are used in remote-utils.c. */
58 int using_threads = 0; 57 int using_threads = 0;
59 58
60 /* Defined in auto-generated file reg-spu.c. */ 59 /* Defined in auto-generated file reg-spu.c. */
61 void init_registers_spu (void); 60 void init_registers_spu (void);
62 61 extern const struct target_desc *tdesc_spu;
63 62
64 /* Fetch PPU register REGNO. */ 63 /* Fetch PPU register REGNO. */
65 static CORE_ADDR 64 static CORE_ADDR
66 fetch_ppc_register (int regno) 65 fetch_ppc_register (int regno)
67 { 66 {
68 PTRACE_TYPE_RET res; 67 PTRACE_TYPE_RET res;
69 68
70 int tid = ptid_get_lwp (current_ptid); 69 int tid = ptid_get_lwp (current_ptid);
71 70
72 #ifndef __powerpc64__ 71 #ifndef __powerpc64__
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 } 261 }
263 262
264 263
265 /* Start an inferior process and returns its pid. 264 /* Start an inferior process and returns its pid.
266 ALLARGS is a vector of program-name and args. */ 265 ALLARGS is a vector of program-name and args. */
267 static int 266 static int
268 spu_create_inferior (char *program, char **allargs) 267 spu_create_inferior (char *program, char **allargs)
269 { 268 {
270 int pid; 269 int pid;
271 ptid_t ptid; 270 ptid_t ptid;
271 struct process_info *proc;
272 272
273 pid = fork (); 273 pid = fork ();
274 if (pid < 0) 274 if (pid < 0)
275 perror_with_name ("fork"); 275 perror_with_name ("fork");
276 276
277 if (pid == 0) 277 if (pid == 0)
278 { 278 {
279 close_most_fds ();
279 ptrace (PTRACE_TRACEME, 0, 0, 0); 280 ptrace (PTRACE_TRACEME, 0, 0, 0);
280 281
281 setpgid (0, 0); 282 setpgid (0, 0);
282 283
283 execv (program, allargs); 284 execv (program, allargs);
284 if (errno == ENOENT) 285 if (errno == ENOENT)
285 execvp (program, allargs); 286 execvp (program, allargs);
286 287
287 fprintf (stderr, "Cannot exec %s: %s.\n", program, 288 fprintf (stderr, "Cannot exec %s: %s.\n", program,
288 strerror (errno)); 289 strerror (errno));
289 fflush (stderr); 290 fflush (stderr);
290 _exit (0177); 291 _exit (0177);
291 } 292 }
292 293
293 add_process (pid, 0); 294 proc = add_process (pid, 0);
295 proc->tdesc = tdesc_spu;
294 296
295 ptid = ptid_build (pid, pid, 0); 297 ptid = ptid_build (pid, pid, 0);
296 add_thread (ptid, NULL); 298 add_thread (ptid, NULL);
297 return pid; 299 return pid;
298 } 300 }
299 301
300 /* Attach to an inferior process. */ 302 /* Attach to an inferior process. */
301 int 303 int
302 spu_attach (unsigned long pid) 304 spu_attach (unsigned long pid)
303 { 305 {
304 ptid_t ptid; 306 ptid_t ptid;
307 struct process_info *proc;
305 308
306 if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0) 309 if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0)
307 { 310 {
308 fprintf (stderr, "Cannot attach to process %ld: %s (%d)\n", pid, 311 fprintf (stderr, "Cannot attach to process %ld: %s (%d)\n", pid,
309 strerror (errno), errno); 312 strerror (errno), errno);
310 fflush (stderr); 313 fflush (stderr);
311 _exit (0177); 314 _exit (0177);
312 } 315 }
313 316
314 add_process (pid, 1); 317 proc = add_process (pid, 1);
318 proc->tdesc = tdesc_spu;
315 ptid = ptid_build (pid, pid, 0); 319 ptid = ptid_build (pid, pid, 0);
316 add_thread (ptid, NULL); 320 add_thread (ptid, NULL);
317 return 0; 321 return 0;
318 } 322 }
319 323
320 /* Kill the inferior process. */ 324 /* Kill the inferior process. */
321 static int 325 static int
322 spu_kill (int pid) 326 spu_kill (int pid)
323 { 327 {
324 int status, ret; 328 int status, ret;
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 671
668 void 672 void
669 initialize_low (void) 673 initialize_low (void)
670 { 674 {
671 static const unsigned char breakpoint[] = { 0x00, 0x00, 0x3f, 0xff }; 675 static const unsigned char breakpoint[] = { 0x00, 0x00, 0x3f, 0xff };
672 676
673 set_target_ops (&spu_target_ops); 677 set_target_ops (&spu_target_ops);
674 set_breakpoint_data (breakpoint, sizeof breakpoint); 678 set_breakpoint_data (breakpoint, sizeof breakpoint);
675 init_registers_spu (); 679 init_registers_spu ();
676 } 680 }
OLDNEW
« no previous file with comments | « gdb/gdbserver/server.c ('k') | gdb/gdbserver/target.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698