1 /* Convex host-dependent code for GDB.
2 Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
4 This file is part of GDB.
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
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
32 #include <sys/param.h>
35 #include <sys/ioctl.h>
36 #include <sys/pcntl.h>
37 #include <sys/thread.h>
43 #include <convex/vmparam.h>
44 #include <convex/filehdr.h>
45 #include <convex/opthdr.h>
46 #include <convex/scnhdr.h>
47 #include <convex/core.h>
49 /* Per-thread data, read from the inferior at each stop and written
50 back at each resume. */
52 /* Number of active threads.
53 Tables are valid for thread numbers less than this. */
59 /* Thread state. The remaining data is valid only if this is PI_TALIVE. */
61 static int thread_state[MAXTHREADS];
63 /* Stop pc, signal, signal subcode */
65 static int thread_pc[MAXTHREADS];
66 static int thread_signal[MAXTHREADS];
67 static int thread_sigcode[MAXTHREADS];
70 If thread is selected, the regs are in registers[] instead. */
72 static char thread_regs[MAXTHREADS][REGISTER_BYTES];
74 /* 1 if the top frame on the thread's stack was a context frame,
75 meaning that the kernel is up to something and we should not
76 touch the thread at all except to resume it. */
78 static char thread_is_in_kernel[MAXTHREADS];
80 /* The currently selected thread's number. */
82 static int inferior_thread;
84 /* Inferior process's file handle and a process control block
85 to feed args to ioctl with. */
87 static int inferior_fd;
88 static struct pcntl ps;
90 /* SOFF file headers for exec or core file. */
92 static FILEHDR filehdr;
96 /* Address maps constructed from section headers of exec and core files.
97 Defines process address -> file address translation. */
101 long mem_addr; /* process start address */
102 long mem_end; /* process end+1 address */
103 long file_addr; /* file start address */
104 long thread; /* -1 shared; 0,1,... thread-local */
105 long type; /* S_TEXT S_DATA S_BSS S_TBSS etc */
106 long which; /* used to sort map for info files */
109 static int n_exec, n_core;
110 static struct pmap exec_map[100];
111 static struct pmap core_map[100];
113 /* Offsets in the core file of core_context and core_tcontext blocks. */
115 static int context_offset;
116 static int tcontext_offset[MAXTHREADS];
118 /* Core file control blocks. */
120 static struct core_context_v70 c;
121 static struct core_tcontext_v70 tc;
122 static struct user u;
127 /* Vector and communication registers from core dump or from inferior.
128 These are read on demand, ie, not normally valid. */
130 static struct vecst vector_registers;
131 static struct creg_ctx comm_registers;
133 /* Flag, set on a vanilla CONT command and cleared when the inferior
136 static int all_continue;
138 /* Flag, set when the inferior is continued by a vanilla CONT command,
139 cleared if it is continued for any other purpose. */
141 static int thread_switch_ok;
143 /* Stack of signals recieved from threads but not yet delivered to gdb. */
154 static struct threadpid signal_stack_bot[100];
155 static struct threadpid *signal_stack = signal_stack_bot;
157 /* How to detect empty stack -- bottom frame is all zero. */
159 #define signal_stack_is_empty() (signal_stack->pid == 0)
161 /* Mode controlled by SET PIPE command, controls the psw SEQ bit
162 which forces each instruction to complete before the next one starts. */
164 static int sequential = 0;
166 /* Mode controlled by the SET PARALLEL command. Values are:
167 0 concurrency limit 1 thread, dynamic scheduling
168 1 no concurrency limit, dynamic scheduling
169 2 no concurrency limit, fixed scheduling */
171 static int parallel = 1;
173 /* Mode controlled by SET BASE command, output radix for unformatted
174 integer typeout, as in argument lists, aggregates, and so on.
175 Zero means guess whether it's an address (hex) or not (decimal). */
177 static int output_radix = 0;
179 /* Signal subcode at last thread stop. */
181 static int stop_sigcode;
183 /* Hack, see wait() below. */
185 static int exec_trap_timer;
189 static struct type *vector_type ();
190 static long *read_vector_register ();
191 static long *read_vector_register_1 ();
192 static void write_vector_register ();
193 static ULONGEST read_comm_register ();
194 static void write_comm_register ();
195 static void convex_cont_command ();
196 static void thread_continue ();
197 static void select_thread ();
198 static void scan_stack ();
199 static void set_fixed_scheduling ();
200 static char *subsig_name ();
201 static void psw_info ();
206 /* Execute ptrace. Convex V7 replaced ptrace with pattach.
207 Allow ptrace (0) as a no-op. */
210 call_ptrace (request, pid, procaddr, buf)
212 PTRACE_ARG3_TYPE procaddr;
220 /* Replacement for system execle routine.
221 Convert it to an equivalent exect, which pattach insists on. */
226 char ***envp = (char ***) &argv;
229 signal (SIGTRAP, sig_noop);
230 exect (name, &argv, *envp);
233 /* Stupid handler for stupid trace trap that otherwise causes
234 startup to stupidly hang. */
239 /* Read registers from inferior into registers[] array.
240 For convex, they are already there, read in when the inferior stops. */
243 fetch_inferior_registers (regno)
248 /* Store our register values back into the inferior.
249 For Convex, do this only once, right before resuming inferior. */
252 store_inferior_registers (regno)
257 /* Copy LEN bytes from inferior's memory starting at MEMADDR
258 to debugger memory starting at MYADDR.
259 On failure (cannot read from inferior, usually because address is out
260 of bounds) returns the value of errno. */
263 read_inferior_memory (memaddr, myaddr, len)
271 /* little-known undocumented max request size */
272 int i = (len < 12288) ? len : 12288;
274 lseek (inferior_fd, memaddr, 0);
275 read (inferior_fd, myaddr, i);
282 memset (myaddr, '\0', len);
286 /* Copy LEN bytes of data from debugger memory at MYADDR
287 to inferior's memory at MEMADDR.
288 Returns errno on failure (cannot write the inferior) */
291 write_inferior_memory (memaddr, myaddr, len)
297 lseek (inferior_fd, memaddr, 0);
298 write (inferior_fd, myaddr, len);
302 /* Here from create_inferior when the inferior process has been created
303 and started up. We must do a pattach to grab it for debugging.
305 Also, intercept the CONT command by altering its dispatch address. */
306 /* FIXME: This used to be called from a macro CREATE_INFERIOR_HOOK.
307 But now init_trace_fun is in the same place. So re-write this to
308 use the init_trace_fun (making convex a debugging target). */
310 create_inferior_hook (pid)
313 static char cont[] = "cont";
314 static char cont1[] = "c";
316 char *linep1 = cont1;
317 char **line = &linep;
318 char **line1 = &linep1;
319 struct cmd_list_element *c;
321 c = lookup_cmd (line, cmdlist, "", 0);
322 c->function = convex_cont_command;
323 c = lookup_cmd (line1, cmdlist, "", 0);
324 c->function = convex_cont_command;
326 inferior_fd = pattach (pid, O_EXCL);
328 perror_with_name ("pattach");
330 set_fixed_scheduling (pid, parallel == 2);
333 /* Attach process PID for debugging. */
338 int fd = pattach (pid, O_EXCL);
340 perror_with_name ("pattach");
342 /* wait for strange kernel reverberations to go away */
352 /* Stop debugging the process whose number is PID
353 and continue it with signal number SIGNAL.
354 SIGNAL = 0 means just continue it. */
360 signal_stack = signal_stack_bot;
361 thread_continue (-1, 0, signal);
362 ioctl (inferior_fd, PIXDETACH, &ps);
368 /* Kill off the inferior process. */
372 if (inferior_pid == 0)
374 ioctl (inferior_fd, PIXTERMINATE, 0);
376 target_mourn_inferior ();
379 /* Read vector register REG, and return a pointer to the value. */
382 read_vector_register (reg)
385 if (have_inferior_p ())
388 ps.pi_buffer = (char *) &vector_registers;
389 ps.pi_nbytes = sizeof vector_registers;
391 ps.pi_thread = inferior_thread;
392 ioctl (inferior_fd, PIXRDVREGS, &ps);
394 memset (&vector_registers, '\0', sizeof vector_registers);
396 else if (corechan >= 0)
398 lseek (corechan, tcontext_offset[inferior_thread], 0);
399 if (myread (corechan, &tc, sizeof tc) < 0)
400 perror_with_name (corefile);
401 lseek (corechan, tc.core_thread_p, 0);
402 if (myread (corechan, &th, sizeof th) < 0)
403 perror_with_name (corefile);
404 lseek (corechan, tc.core_vregs_p, 0);
405 if (myread (corechan, &vector_registers, 16*128) < 0)
406 perror_with_name (corefile);
407 vector_registers.vm[0] = th.t_vect_ctx.vc_vm[0];
408 vector_registers.vm[1] = th.t_vect_ctx.vc_vm[1];
409 vector_registers.vls = th.t_vect_ctx.vc_vls;
412 return read_vector_register_1 (reg);
415 /* Return a pointer to vector register REG, which must already have been
416 fetched from the inferior or core file. */
419 read_vector_register_1 (reg)
425 return (long *) vector_registers.vm;
427 return (long *) &vector_registers.vls;
429 return 1 + (long *) &vector_registers.vls;
431 return (long *) &vector_registers.vr[reg];
435 /* Write vector register REG, element ELEMENT, new value VAL.
436 NB: must use read-modify-write on the entire vector state,
437 since pattach does not do offsetted writes correctly. */
440 write_vector_register (reg, element, val)
444 if (have_inferior_p ())
447 ps.pi_thread = inferior_thread;
449 ps.pi_buffer = (char *) &vector_registers;
450 ps.pi_nbytes = sizeof vector_registers;
452 ioctl (inferior_fd, PIXRDVREGS, &ps);
457 vector_registers.vls =
458 (vector_registers.vls & 0xffffffff00000000LL)
459 + (unsigned long) val;
463 vector_registers.vls =
464 (val << 32) + (unsigned long) vector_registers.vls;
468 vector_registers.vr[reg].el[element] = val;
472 ioctl (inferior_fd, PIXWRVREGS, &ps);
475 perror_with_name ("writing vector register");
479 /* Return the contents of communication register NUM. */
482 read_comm_register (num)
485 if (have_inferior_p ())
487 ps.pi_buffer = (char *) &comm_registers;
488 ps.pi_nbytes = sizeof comm_registers;
490 ps.pi_thread = inferior_thread;
491 ioctl (inferior_fd, PIXRDCREGS, &ps);
493 return comm_registers.crreg.r4[num];
496 /* Store a new value VAL into communication register NUM.
497 NB: Must use read-modify-write on the whole comm register set
498 since pattach does not do offsetted writes correctly. */
501 write_comm_register (num, val)
505 if (have_inferior_p ())
507 ps.pi_buffer = (char *) &comm_registers;
508 ps.pi_nbytes = sizeof comm_registers;
510 ps.pi_thread = inferior_thread;
511 ioctl (inferior_fd, PIXRDCREGS, &ps);
512 comm_registers.crreg.r4[num] = val;
513 ioctl (inferior_fd, PIXWRCREGS, &ps);
517 /* Resume execution of the inferior process.
518 If STEP is nonzero, single-step it.
519 If SIGNAL is nonzero, give it that signal. */
522 resume (step, signal)
528 thread_continue (inferior_thread, step, signal);
530 thread_continue (-1, 0, 0);
533 /* Maybe resume some threads.
534 THREAD is which thread to resume, or -1 to resume them all.
535 STEP and SIGNAL are as in resume.
537 Global variable ALL_CONTINUE is set when we are here to do a
538 `cont' command; otherwise we may be doing `finish' or a call or
539 something else that will not tolerate an automatic thread switch.
541 If there are stopped threads waiting to deliver signals, and
542 ALL_CONTINUE, do not actually resume anything. gdb will do a wait
543 and see one of the stopped threads in the queue. */
546 thread_continue (thread, step, signal)
547 int thread, step, signal;
551 /* If we are to continue all threads, but not for the CONTINUE command,
552 pay no attention and continue only the selected thread. */
554 if (thread < 0 && ! all_continue)
555 thread = inferior_thread;
557 /* If we are not stepping, we have now executed the continue part
558 of a CONTINUE command. */
563 /* Allow wait() to switch threads if this is an all-out continue. */
565 thread_switch_ok = thread < 0;
567 /* If there are threads queued up, don't resume. */
569 if (thread_switch_ok && ! signal_stack_is_empty ())
574 for (n = 0; n < n_threads; n++)
575 if (thread_state[n] == PI_TALIVE)
579 if ((thread < 0 || n == thread) && ! thread_is_in_kernel[n])
581 /* Blam the trace bits in the stack's saved psws to match
582 the desired step mode. This is required so that
583 single-stepping a return doesn't restore a psw with a
584 clear trace bit and fly away, and conversely,
585 proceeding through a return in a routine that was
586 stepped into doesn't cause a phantom break by restoring
587 a psw with the trace bit set. */
588 scan_stack (PSW_T_BIT, step);
589 scan_stack (PSW_S_BIT, sequential);
592 ps.pi_buffer = registers;
593 ps.pi_nbytes = REGISTER_BYTES;
596 if (! thread_is_in_kernel[n])
597 if (ioctl (inferior_fd, PIXWRREGS, &ps))
598 perror_with_name ("PIXWRREGS");
600 if (thread < 0 || n == thread)
603 ps.pi_signo = signal;
604 if (ioctl (inferior_fd, step ? PIXSTEP : PIXCONTINUE, &ps) < 0)
605 perror_with_name ("PIXCONTINUE");
609 if (ioctl (inferior_fd, PIXRUN, &ps) < 0)
610 perror_with_name ("PIXRUN");
613 /* Replacement for system wait routine.
615 The system wait returns with one or more threads stopped by
616 signals. Put stopped threads on a stack and return them one by
617 one, so that it appears that wait returns one thread at a time.
619 Global variable THREAD_SWITCH_OK is set when gdb can tolerate wait
620 returning a new thread. If it is false, then only one thread is
621 running; we will do a real wait, the thread will do something, and
622 we will return that. */
631 return wait3 (0, 0, 0);
633 /* Do a real wait if we were told to, or if there are no queued threads. */
635 if (! thread_switch_ok || signal_stack_is_empty ())
639 pid = wait3 (w, 0, 0);
641 if (!WIFSTOPPED (*w) || pid != inferior_pid)
644 /* The inferior has done something and stopped. Read in all the
645 threads' registers, and queue up any signals that happened. */
647 if (ioctl (inferior_fd, PIXGETTHCOUNT, &ps) < 0)
648 perror_with_name ("PIXGETTHCOUNT");
650 n_threads = ps.pi_othdcnt;
651 for (thread = 0; thread < n_threads; thread++)
653 ps.pi_thread = thread;
654 if (ioctl (inferior_fd, PIXGETSUBCODE, &ps) < 0)
655 perror_with_name ("PIXGETSUBCODE");
656 thread_state[thread] = ps.pi_otstate;
658 if (ps.pi_otstate == PI_TALIVE)
660 select_thread (thread);
661 ps.pi_buffer = registers;
662 ps.pi_nbytes = REGISTER_BYTES;
664 ps.pi_thread = thread;
665 if (ioctl (inferior_fd, PIXRDREGS, &ps) < 0)
666 perror_with_name ("PIXRDREGS");
668 registers_fetched ();
670 thread_pc[thread] = read_pc ();
671 thread_signal[thread] = ps.pi_osigno;
672 thread_sigcode[thread] = ps.pi_osigcode;
674 /* If the thread's stack has a context frame
675 on top, something fucked is going on. I do not
676 know what, but do I know this: the only thing you
677 can do with such a thread is continue it. */
679 thread_is_in_kernel[thread] =
680 ((read_register (PS_REGNUM) >> 25) & 3) == 0;
682 /* Signals push an extended frame and then fault
683 with a ridiculous pc. Pop the frame. */
685 if (thread_pc[thread] > STACK_END_ADDR)
688 if (is_break_pc (thread_pc[thread]))
689 thread_pc[thread] = read_pc () - 2;
691 thread_pc[thread] = read_pc ();
692 write_register (PC_REGNUM, thread_pc[thread]);
695 if (ps.pi_osigno || ps.pi_osigcode)
698 signal_stack->pid = pid;
699 signal_stack->thread = thread;
700 signal_stack->signo = thread_signal[thread];
701 signal_stack->subsig = thread_sigcode[thread];
702 signal_stack->pc = thread_pc[thread];
705 /* The following hackery is caused by a unix 7.1 feature:
706 the inferior's fixed scheduling mode is cleared when
707 it execs the shell (since the shell is not a parallel
708 program). So, note the 5.4 trap we get when
709 the shell does its exec, then catch the 5.0 trap
710 that occurs when the debuggee starts, and set fixed
711 scheduling mode properly. */
713 if (ps.pi_osigno == 5 && ps.pi_osigcode == 4)
718 if (ps.pi_osigno == 5 && exec_trap_timer == 0)
719 set_fixed_scheduling (pid, parallel == 2);
723 if (signal_stack_is_empty ())
724 error ("no active threads?!");
727 /* Select the thread that stopped, and return *w saying why. */
729 select_thread (signal_stack->thread);
731 FIXME: need to convert from host sig.
732 stop_signal = signal_stack->signo;
733 stop_sigcode = signal_stack->subsig;
735 WSETSTOP (*w, signal_stack->signo);
736 w->w_thread = signal_stack->thread;
737 return (signal_stack--)->pid;
740 /* Select thread THREAD -- its registers, stack, per-thread memory.
741 This is the only routine that may assign to inferior_thread
745 select_thread (thread)
748 if (thread == inferior_thread)
751 memcpy (thread_regs[inferior_thread], registers, REGISTER_BYTES);
752 ps.pi_thread = inferior_thread = thread;
753 if (have_inferior_p ())
754 ioctl (inferior_fd, PISETRWTID, &ps);
755 memcpy (registers, thread_regs[thread], REGISTER_BYTES);
758 /* Routine to set or clear a psw bit in the psw and also all psws
759 saved on the stack. Quits when we get to a frame in which the
760 saved psw is correct. */
763 scan_stack (bit, val)
766 long ps = read_register (PS_REGNUM);
768 if (val ? !(ps & bit) : (ps & bit))
771 write_register (PS_REGNUM, ps);
773 fp = read_register (FP_REGNUM);
774 while (fp & 0x80000000)
776 ps = read_memory_integer (fp + 4, 4);
777 if (val ? (ps & bit) : !(ps & bit))
780 write_memory (fp + 4, &ps, 4);
781 fp = read_memory_integer (fp + 8, 4);
786 /* Set fixed scheduling (alliant mode) of process PID to ARG (0 or 1). */
789 set_fixed_scheduling (pid, arg)
792 struct pattributes pattr;
793 getpattr (pid, &pattr);
794 pattr.pattr_pfixed = arg;
795 setpattr (pid, &pattr);
799 core_file_command (filename, from_tty)
805 /* Discard all vestiges of any previous core file
806 and mark data and stack spaces as empty. */
818 stack_start = STACK_END_ADDR;
819 stack_end = STACK_END_ADDR;
822 /* Now, if a new core file was specified, open it and digest it. */
826 filename = tilde_expand (filename);
827 make_cleanup (free, filename);
829 if (have_inferior_p ())
830 error ("To look at a core file, you must kill the program with \"kill\".");
831 corechan = open (filename, O_RDONLY, 0);
833 perror_with_name (filename);
835 if (myread (corechan, &filehdr, sizeof filehdr) < 0)
836 perror_with_name (filename);
838 if (!IS_CORE_SOFF_MAGIC (filehdr.h_magic))
839 error ("%s: not a core file.\n", filename);
841 if (myread (corechan, &opthdr, filehdr.h_opthdr) < 0)
842 perror_with_name (filename);
844 /* Read through the section headers.
845 For text, data, etc, record an entry in the core file map.
846 For context and tcontext, record the file address of
847 the context blocks. */
849 lseek (corechan, (long) filehdr.h_scnptr, 0);
852 for (n = 0; n < filehdr.h_nscns; n++)
854 if (myread (corechan, &scnhdr, sizeof scnhdr) < 0)
855 perror_with_name (filename);
856 if ((scnhdr.s_flags & S_TYPMASK) >= S_TEXT
857 && (scnhdr.s_flags & S_TYPMASK) <= S_COMON)
859 core_map[n_core].mem_addr = scnhdr.s_vaddr;
860 core_map[n_core].mem_end = scnhdr.s_vaddr + scnhdr.s_size;
861 core_map[n_core].file_addr = scnhdr.s_scnptr;
862 core_map[n_core].type = scnhdr.s_flags & S_TYPMASK;
863 if (core_map[n_core].type != S_TBSS
864 && core_map[n_core].type != S_TDATA
865 && core_map[n_core].type != S_TTEXT)
866 core_map[n_core].thread = -1;
868 || core_map[n_core-1].mem_addr != scnhdr.s_vaddr)
869 core_map[n_core].thread = 0;
871 core_map[n_core].thread = core_map[n_core-1].thread + 1;
874 else if ((scnhdr.s_flags & S_TYPMASK) == S_CONTEXT)
875 context_offset = scnhdr.s_scnptr;
876 else if ((scnhdr.s_flags & S_TYPMASK) == S_TCONTEXT)
877 tcontext_offset[n_threads++] = scnhdr.s_scnptr;
880 /* Read the context block, struct user, struct proc,
881 and the comm regs. */
883 lseek (corechan, context_offset, 0);
884 if (myread (corechan, &c, sizeof c) < 0)
885 perror_with_name (filename);
886 lseek (corechan, c.core_user_p, 0);
887 if (myread (corechan, &u, sizeof u) < 0)
888 perror_with_name (filename);
889 lseek (corechan, c.core_proc_p, 0);
890 if (myread (corechan, &pr, sizeof pr) < 0)
891 perror_with_name (filename);
892 comm_registers = pr.p_creg;
894 /* Core file apparently is really there. Make it really exist
895 for xfer_core_file so we can do read_memory on it. */
897 if (filename[0] == '/')
898 corefile = savestring (filename, strlen (filename));
900 corefile = concat (current_directory, "/", filename, NULL);
902 printf_filtered ("Program %s ", u.u_comm);
904 /* Read the thread registers and fill in the thread_xxx[] data. */
906 for (n = 0; n < n_threads; n++)
910 lseek (corechan, tcontext_offset[n], 0);
911 if (myread (corechan, &tc, sizeof tc) < 0)
912 perror_with_name (corefile);
913 lseek (corechan, tc.core_thread_p, 0);
914 if (myread (corechan, &th, sizeof th) < 0)
915 perror_with_name (corefile);
917 lseek (corechan, tc.core_syscall_context_p, 0);
918 if (myread (corechan, registers, REGISTER_BYTES) < 0)
919 perror_with_name (corefile);
921 thread_signal[n] = th.t_cursig;
922 thread_sigcode[n] = th.t_code;
923 thread_state[n] = th.t_state;
924 thread_pc[n] = read_pc ();
926 if (thread_pc[n] > STACK_END_ADDR)
929 if (is_break_pc (thread_pc[n]))
930 thread_pc[n] = read_pc () - 2;
932 thread_pc[n] = read_pc ();
933 write_register (PC_REGNUM, thread_pc[n]);
936 printf_filtered ("thread %d received signal %d, %s\n",
938 safe_strsignal (thread_signal[n]));
941 /* Select an interesting thread -- also-rans died with SIGKILL,
942 so find one that didn't. */
944 for (n = 0; n < n_threads; n++)
945 if (thread_signal[n] != 0 && thread_signal[n] != SIGKILL)
948 stop_signal = thread_signal[n];
949 stop_sigcode = thread_sigcode[n];
953 core_aouthdr.a_magic = 0;
955 flush_cached_frames ();
956 select_frame (get_current_frame (), 0);
959 print_stack_frame (selected_frame, selected_frame_level, -1);
962 printf_filtered ("No core file now.\n");