|
|
1.1 root 1: /* Interface to bare machine for GDB running as kernel debugger.
2: Copyright (C) 1986 Free Software Foundation, Inc.
3:
4: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
5: WARRANTY. No author or distributor accepts responsibility to anyone
6: for the consequences of using it or for whether it serves any
7: particular purpose or works at all, unless he says so in writing.
8: Refer to the GDB General Public License for full details.
9:
10: Everyone is granted permission to copy, modify and redistribute GDB,
11: but only under the conditions described in the GDB General Public
12: License. A copy of this license is supposed to have been given to you
13: along with GDB so you can know your rights and responsibilities. It
14: should be in a file named COPYING. Among other things, the copyright
15: notice and this notice must be preserved on all copies.
16:
17: In other words, go ahead and share GDB, but don't try to stop
18: anyone else from sharing it farther. Help stamp out software hoarding!
19: */
20:
21: #include <stdio.h>
22: #include <sys/ioctl.h>
23: #include <signal.h>
24: #include <errno.h>
25: #include <sys/types.h>
26: #include <sys/stat.h>
27:
28: #if defined (SIGTSTP) && defined (SIGIO)
29: #include <sys/time.h>
30: #include <sys/resource.h>
31: #endif /* SIGTSTP and SIGIO defined (must be 4.2) */
32:
33: #include "defs.h"
34: #include "initialize.h"
35: #include "param.h"
36: #include "symtab.h"
37: #include "frame.h"
38: #include "inferior.h"
39: #include "wait.h"
40:
41: START_FILE
42:
43: /* Random system calls, mostly no-ops to prevent link problems */
44:
45: ioctl (desc, code, arg)
46: {}
47:
48: int (* signal ()) ()
49: {}
50:
51: kill ()
52: {}
53:
54: getpid ()
55: {
56: return 0;
57: }
58:
59: sigsetmask ()
60: {}
61:
62: chdir ()
63: {}
64:
65: char *
66: getwd (buf)
67: char *buf;
68: {
69: buf[0] = '/';
70: buf[1] = 0;
71: return buf;
72: }
73:
74: /* Used to check for existence of .gdbinit. Say no. */
75:
76: access ()
77: {
78: return -1;
79: }
80:
81: exit ()
82: {
83: error ("Fatal error; restarting.");
84: }
85:
86: /* Reading "files". The contents of some files are written into kdb's
87: data area before it is run. These files are used to contain the
88: symbol table for kdb to load, and the source files (in case the
89: kdb user wants to print them). The symbols are stored in a file
90: named "kdb-symbols" in a.out format (except that all the text and
91: data have been stripped to save room).
92:
93: The files are stored in the following format:
94: int number of bytes of data for this file, including these four.
95: char[] name of the file, ending with a null.
96: padding to multiple of 4 boundary.
97: char[] file contents. The length can be deduced from what was
98: specified before. There is no terminating null here.
99:
100: If the int at the front is zero, it means there are no more files.
101:
102: Opening a file in kdb returns a nonzero value to indicate success,
103: but the value does not matter. Only one file can be open, and only
104: for reading. All the primitives for input from the file know
105: which file is open and ignore what is specified for the descriptor
106: or for the stdio stream.
107:
108: Input with fgetc can be done either on the file that is open
109: or on stdin (which reads from the terminal through tty_input () */
110:
111: /* Address of data for the files stored in format described above. */
112: char *files_start;
113:
114: /* The file stream currently open: */
115:
116: char *sourcebeg; /* beginning of contents */
117: int sourcesize; /* size of contents */
118: char *sourceptr; /* current read pointer */
119: int sourceleft; /* number of bytes to eof */
120:
121: /* "descriptor" for the file now open.
122: Incremented at each close.
123: If specified descriptor does not match this,
124: it means the program is trying to use a closed descriptor.
125: We report an error for that. */
126:
127: int sourcedesc;
128:
129: open (filename, modes)
130: char *filename;
131: int modes;
132: {
133: register char *next;
134: extern int errno;
135:
136: if (modes)
137: {
138: errno = EROFS;
139: return -1;
140: }
141:
142: if (sourceptr)
143: {
144: errno = EMFILE;
145: return -1;
146: }
147:
148: for (next - files_start; * (int *) next;
149: next += * (int *) next)
150: {
151: if (!strcmp (next + 4, filename))
152: {
153: sourcebeg = next + 4 + strlen (next + 4) + 1;
154: sourcebeg = (char *) (((int) sourcebeg + 3) & (-4));
155: sourceptr = sourcebeg;
156: sourcesize = next + * (int *) next - sourceptr;
157: sourceleft = sourcesize;
158: return sourcedesc;
159: }
160: }
161: return 0;
162: }
163:
164: close (desc)
165: int desc;
166: {
167: sourceptr = 0;
168: sourcedesc++;
169: /* Don't let sourcedesc get big enough to be confused with stdin. */
170: if (sourcedesc == 100)
171: sourcedesc = 5;
172: }
173:
174: FILE *
175: fopen (filename, modes)
176: char *filename;
177: char *modes;
178: {
179: return (FILE *) open (filename, *modes == 'w');
180: }
181:
182: FILE *
183: fdopen (desc)
184: int desc;
185: {
186: return (FILE *) desc;
187: }
188:
189: fclose (desc)
190: int desc;
191: {
192: close (desc);
193: }
194:
195: fstat (desc, statbuf)
196: struct stat *statbuf;
197: {
198: extern int errno;
199:
200: if (desc != sourcedesc)
201: {
202: errno = EBADF;
203: return -1;
204: }
205: statbuf->st_size = sourcesize;
206: }
207:
208: myread (desc, destptr, size, filename)
209: int desc;
210: char *destptr;
211: int size;
212: char *filename;
213: {
214: int len = min (sourceleft, size);
215: extern int errno;
216:
217: if (desc != sourcedesc)
218: {
219: errno = EBADF;
220: return -1;
221: }
222:
223: bcopy (sourceptr, destptr, len);
224: sourceleft -= len;
225: return len;
226: }
227:
228: int
229: fread (bufp, numelts, eltsize, stream)
230: {
231: register int elts = min (numelts, sourceleft / eltsize);
232: register int len = elts * eltsize;
233: extern int errno;
234:
235: if (stream != sourcedesc)
236: {
237: errno = EBADF;
238: return -1;
239: }
240:
241: bcopy (sourceptr, bufp, len);
242: sourceleft -= len;
243: return elts;
244: }
245:
246: int
247: fgetc (desc)
248: int desc;
249: {
250: extern int errno;
251:
252: if (desc == (int) stdin)
253: return tty_input ();
254:
255: if (desc != sourcedesc)
256: {
257: errno = EBADF;
258: return -1;
259: }
260:
261: if (sourceleft-- <= 0)
262: return EOF;
263: return *sourceptr++;
264: }
265:
266: lseek (desc, pos)
267: int desc;
268: int pos;
269: {
270: extern int errno;
271:
272: if (desc != sourcedesc)
273: {
274: errno = EBADF;
275: return -1;
276: }
277:
278: if (pos < 0 || pos > sourcesize)
279: {
280: errno = EINVAL;
281: return -1;
282: }
283:
284: sourceptr = sourcebeg + pos;
285: sourceleft = sourcesize - pos;
286: }
287:
288: /* Output in kdb can go only to the terminal, so the stream
289: specified may be ignored. */
290:
291: printf (a1, a2, a3, a4, a5, a6, a7, a8, a9)
292: {
293: char buffer[1024];
294: sprintf (buffer, a1, a2, a3, a4, a5, a6, a7, a8, a9);
295: display_string (buffer);
296: }
297:
298: fprintf (ign, a1, a2, a3, a4, a5, a6, a7, a8, a9)
299: {
300: char buffer[1024];
301: sprintf (buffer, a1, a2, a3, a4, a5, a6, a7, a8, a9);
302: display_string (buffer);
303: }
304:
305: fwrite (buf, numelts, size, stream)
306: register char *buf;
307: int numelts, size;
308: {
309: register int i = numelts * size;
310: while (i-- > 0)
311: fputc (*buf++, stream);
312: }
313:
314: fputc (c, ign)
315: {
316: char buf[2];
317: buf[0] = c;
318: buf[1] = 0;
319: display_string (buf);
320: }
321:
322: /* sprintf refers to this, but loading this from the
323: library would cause fflush to be loaded from it too.
324: In fact there should be no need to call this (I hope). */
325:
326: _flsbuf ()
327: {
328: error ("_flsbuf was actually called.");
329: }
330:
331: fflush (ign)
332: {
333: }
334:
335: /* Entries into core and inflow, needed only to make things link ok. */
336:
337: exec_file_command ()
338: {}
339:
340: core_file_command ()
341: {}
342:
343: char *
344: get_exec_file ()
345: {
346: /* Makes one printout look reasonable; value does not matter otherwise. */
347: return "run";
348: }
349:
350: have_core_file_p ()
351: {
352: return 0;
353: }
354:
355: kill_command ()
356: {
357: inferior_pid = 0;
358: }
359:
360: terminal_inferior ()
361: {}
362:
363: terminal_ours ()
364: {}
365:
366: terminal_init_inferior ()
367: {}
368:
369: write_inferior_register ()
370: {}
371:
372: read_inferior_register ()
373: {}
374:
375: read_memory (memaddr, myaddr, len)
376: CORE_ADDR memaddr;
377: char *myaddr;
378: int len;
379: {
380: bcopy (memaddr, myaddr, len);
381: }
382:
383: /* Always return 0 indicating success. */
384:
385: write_memory (memaddr, myaddr, len)
386: CORE_ADDR memaddr;
387: char *myaddr;
388: int len;
389: {
390: bcopy (myaddr, memaddr, len);
391: return 0;
392: }
393:
394: static REGISTER_TYPE saved_regs[NUM_REGS];
395:
396: REGISTER_TYPE
397: read_register (regno)
398: int regno;
399: {
400: if (regno < 0 || regno >= NUM_REGS)
401: error ("Register number %d out of range.", regno);
402: return saved_regs[regno];
403: }
404:
405: void
406: write_register (regno, value)
407: int regno;
408: REGISTER_TYPE value;
409: {
410: if (regno < 0 || regno >= NUM_REGS)
411: error ("Register number %d out of range.", regno);
412: saved_regs[regno] = value;
413: }
414:
415: /* System calls needed in relation to running the "inferior". */
416:
417: vfork ()
418: {
419: /* Just appear to "succeed". Say the inferior's pid is 1. */
420: return 1;
421: }
422:
423: /* These are called by code that normally runs in the inferior
424: that has just been forked. That code never runs, when standalone,
425: and these definitions are so it will link without errors. */
426:
427: ptrace ()
428: {}
429:
430: setpgrp ()
431: {}
432:
433: execle ()
434: {}
435:
436: _exit ()
437: {}
438:
439: /* Malloc calls these. */
440:
441: malloc_warning (str)
442: char *str;
443: {
444: printf ("\n%s.\n\n", str);
445: }
446:
447: char *next_free;
448: char *memory_limit;
449:
450: char *
451: sbrk (amount)
452: int amount;
453: {
454: if (next_free + amount > memory_limit)
455: return (char *) -1;
456: next_free += amount;
457: return next_free - amount;
458: }
459:
460: /* Various ways malloc might ask where end of memory is. */
461:
462: char *
463: ulimit ()
464: {
465: return memory_limit;
466: }
467:
468: int
469: vlimit ()
470: {
471: return memory_limit - next_free;
472: }
473:
474: getrlimit (addr)
475: struct rlimit *addr;
476: {
477: addr->rlim_cur = memory_limit - next_free;
478: }
479:
480: /* Context switching to and from program being debugged. */
481:
482: /* GDB calls here to run the user program.
483: The frame pointer for this function is saved in
484: gdb_stack by save_frame_pointer; then we restore
485: all of the user program's registers, including PC and PS. */
486:
487: static int fault_code;
488: static REGISTER_TYPE gdb_stack;
489:
490: resume ()
491: {
492: REGISTER_TYPE restore[NUM_REGS];
493:
494: PUSH_FRAME_PTR;
495: save_frame_pointer ();
496:
497: bcopy (saved_regs, restore, sizeof restore);
498: POP_REGISTERS;
499: /* Control does not drop through here! */
500: }
501:
502: save_frame_pointer (val)
503: CORE_ADDR val;
504: {
505: gdb_stack = val;
506: }
507:
508: /* Fault handlers call here, running in the user program stack.
509: They must first push a fault code,
510: old PC, old PS, and any other info about the fault.
511: The exact format is machine-dependent and is known only
512: in the definition of PUSH_REGISTERS. */
513:
514: fault ()
515: {
516: /* Transfer all registers and fault code to the stack
517: in canonical order: registers in order of GDB register number,
518: followed by fault code. */
519: PUSH_REGISTERS;
520:
521: /* Transfer them to saved_regs and fault_code. */
522: save_registers ();
523:
524: restore_gdb ();
525: /* Control does not reach here */
526: }
527:
528: restore_gdb ()
529: {
530: CORE_ADDR new_fp = gdb_stack;
531: /* Switch to GDB's stack */
532: POP_FRAME_PTR;
533: /* Return from the function `resume'. */
534: }
535:
536: /* Assuming register contents and fault code have been pushed on the stack as
537: arguments to this function, copy them into the standard place
538: for the program's registers while GDB is running. */
539:
540: save_registers (firstreg)
541: int firstreg;
542: {
543: bcopy (&firstreg, saved_regs, sizeof saved_regs);
544: fault_code = (&firstreg)[NUM_REGS];
545: }
546:
547: /* Store into the structure such as `wait' would return
548: the information on why the program faulted,
549: converted into a machine-independent signal number. */
550:
551: static int fault_table[] = FAULT_TABLE;
552:
553: int
554: wait (w)
555: WAITTYPE *w;
556: {
557: WSETSTOP (*w, fault_table[fault_code / FAULT_CODE_UNITS]);
558: return inferior_pid;
559: }
560:
561: /* Allocate a big space in which files for kdb to read will be stored.
562: Whatever is left is where malloc can allocate storage.
563:
564: Initialize it, so that there will be space in the executable file
565: for it. Then the files can be put into kdb by writing them into
566: kdb's executable file. */
567:
568: /* The default size is as much space as we expect to be available
569: for kdb to use! */
570:
571: #ifndef HEAP_SIZE
572: #define HEAP_SIZE 400000
573: #endif
574:
575: char heap[HEAP_SIZE] = {0};
576:
577: #ifndef STACK_SIZE
578: #define STACK_SIZE 100000
579: #endif
580:
581: int kdb_stack_beg[STACK_SIZE / sizeof (int)];
582: int kdb_stack_end;
583:
584: static
585: initialize ()
586: {
587: register char *next;
588:
589: /* Find start of data on files. */
590:
591: files_start = heap;
592:
593: /* Find the end of the data on files. */
594:
595: for (next - files_start; * (int *) next;
596: next += * (int *) next)
597: {}
598:
599: /* That is where free storage starts for sbrk to give out. */
600: next_free = next;
601:
602: memory_limit = heap + sizeof heap;
603: }
604:
605: END_FILE
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.