/* Interface to bare machine for GDB running as kernel debugger.
- Copyright (C) 1986, 1989, 1991 Free Software Foundation, Inc.
+ Copyright 1986, 1989, 1991, 1992, 1993, 1995, 1996, 2000, 2001
+ Free Software Foundation, Inc.
-This file is part of GDB.
+ This file is part of GDB.
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include <stdio.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <sys/types.h>
-#include <sys/stat.h>
+#include "gdb_stat.h"
#if defined (SIGTSTP) && defined (SIGIO)
#include <sys/time.h>
#endif /* SIGTSTP and SIGIO defined (must be 4.2) */
#include "defs.h"
-#include "signals.h"
+#include <signal.h>
#include "symtab.h"
#include "frame.h"
#include "inferior.h"
-#include "wait.h"
-
+#include "gdb_wait.h"
\f
+
/* Random system calls, mostly no-ops to prevent link problems */
-ioctl (desc, code, arg)
-{}
+ioctl (int desc, int code, int arg)
+{
+}
-int (* signal ()) ()
-{}
+int (*signal ()) ()
+{
+}
-kill ()
-{}
+kill (void)
+{
+}
-getpid ()
+getpid (void)
{
return 0;
}
-sigsetmask ()
-{}
+sigsetmask (void)
+{
+}
-chdir ()
-{}
+chdir (void)
+{
+}
char *
-getcwd (buf, len)
- char *buf;
- unsigned int len;
+getcwd (char *buf, unsigned int len)
{
buf[0] = '/';
buf[1] = 0;
/* Used to check for existence of .gdbinit. Say no. */
-access ()
+access (void)
{
return -1;
}
-exit ()
+exit (void)
{
error ("Fatal error; restarting.");
}
char[] name of the file, ending with a null.
padding to multiple of 4 boundary.
char[] file contents. The length can be deduced from what was
- specified before. There is no terminating null here.
+ specified before. There is no terminating null here.
If the int at the front is zero, it means there are no more files.
int sourcedesc;
-open (filename, modes)
- char *filename;
- int modes;
+open (char *filename, int modes)
{
register char *next;
return -1;
}
- for (next - files_start; * (int *) next;
- next += * (int *) next)
+ for (next = files_start; *(int *) next; next += *(int *) next)
{
if (!strcmp (next + 4, filename))
{
sourcebeg = next + 4 + strlen (next + 4) + 1;
sourcebeg = (char *) (((int) sourcebeg + 3) & (-4));
sourceptr = sourcebeg;
- sourcesize = next + * (int *) next - sourceptr;
+ sourcesize = next + *(int *) next - sourceptr;
sourceleft = sourcesize;
return sourcedesc;
}
return 0;
}
-close (desc)
- int desc;
+close (int desc)
{
sourceptr = 0;
sourcedesc++;
}
FILE *
-fopen (filename, modes)
- char *filename;
- char *modes;
+fopen (char *filename, char *modes)
{
return (FILE *) open (filename, *modes == 'w');
}
FILE *
-fdopen (desc)
- int desc;
+fdopen (int desc)
{
return (FILE *) desc;
}
-fclose (desc)
- int desc;
+fclose (int desc)
{
close (desc);
}
-fstat (desc, statbuf)
- struct stat *statbuf;
+fstat (int desc, struct stat *statbuf)
{
if (desc != sourcedesc)
{
statbuf->st_size = sourcesize;
}
-myread (desc, destptr, size, filename)
- int desc;
- char *destptr;
- int size;
- char *filename;
+myread (int desc, char *destptr, int size, char *filename)
{
int len = min (sourceleft, size);
return -1;
}
- bcopy (sourceptr, destptr, len);
+ memcpy (destptr, sourceptr, len);
sourceleft -= len;
return len;
}
int
-fread (bufp, numelts, eltsize, stream)
+fread (int bufp, int numelts, int eltsize, int stream)
{
register int elts = min (numelts, sourceleft / eltsize);
register int len = elts * eltsize;
return -1;
}
- bcopy (sourceptr, bufp, len);
+ memcpy (bufp, sourceptr, len);
sourceleft -= len;
return elts;
}
int
-fgetc (desc)
- int desc;
+fgetc (int desc)
{
if (desc == (int) stdin)
return *sourceptr++;
}
-lseek (desc, pos)
- int desc;
- int pos;
+lseek (int desc, int pos)
{
if (desc != sourcedesc)
/* Output in kdb can go only to the terminal, so the stream
specified may be ignored. */
-printf (a1, a2, a3, a4, a5, a6, a7, a8, a9)
+printf (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
char buffer[1024];
sprintf (buffer, a1, a2, a3, a4, a5, a6, a7, a8, a9);
display_string (buffer);
}
-fprintf (ign, a1, a2, a3, a4, a5, a6, a7, a8, a9)
+fprintf (int ign, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
+ int a8, int a9)
{
char buffer[1024];
sprintf (buffer, a1, a2, a3, a4, a5, a6, a7, a8, a9);
display_string (buffer);
}
-fwrite (buf, numelts, size, stream)
- register char *buf;
- int numelts, size;
+fwrite (register char *buf, int numelts, int size, int stream)
{
register int i = numelts * size;
while (i-- > 0)
fputc (*buf++, stream);
}
-fputc (c, ign)
+fputc (int c, int ign)
{
char buf[2];
buf[0] = c;
library would cause fflush to be loaded from it too.
In fact there should be no need to call this (I hope). */
-_flsbuf ()
+_flsbuf (void)
{
error ("_flsbuf was actually called.");
}
-fflush (ign)
+fflush (int ign)
{
}
\f
/* Entries into core and inflow, needed only to make things link ok. */
-exec_file_command ()
-{}
+exec_file_command (void)
+{
+}
-core_file_command ()
-{}
+core_file_command (void)
+{
+}
char *
-get_exec_file (err)
- int err;
+get_exec_file (int err)
{
/* Makes one printout look reasonable; value does not matter otherwise. */
return "run";
}
-have_core_file_p ()
+/* Nonzero if there is a core file. */
+
+have_core_file_p (void)
{
return 0;
}
-kill_command ()
+kill_command (void)
{
inferior_pid = 0;
}
-terminal_inferior ()
-{}
+terminal_inferior (void)
+{
+}
-terminal_ours ()
-{}
+terminal_ours (void)
+{
+}
-terminal_init_inferior ()
-{}
+terminal_init_inferior (void)
+{
+}
-write_inferior_register ()
-{}
+write_inferior_register (void)
+{
+}
-read_inferior_register ()
-{}
+read_inferior_register (void)
+{
+}
-read_memory (memaddr, myaddr, len)
- CORE_ADDR memaddr;
- char *myaddr;
- int len;
+read_memory (CORE_ADDR memaddr, char *myaddr, int len)
{
- bcopy (memaddr, myaddr, len);
+ memcpy (myaddr, memaddr, len);
}
/* Always return 0 indicating success. */
-write_memory (memaddr, myaddr, len)
- CORE_ADDR memaddr;
- char *myaddr;
- int len;
+write_memory (CORE_ADDR memaddr, char *myaddr, int len)
{
- bcopy (myaddr, memaddr, len);
+ memcpy (memaddr, myaddr, len);
return 0;
}
static REGISTER_TYPE saved_regs[NUM_REGS];
REGISTER_TYPE
-read_register (regno)
- int regno;
+read_register (int regno)
{
if (regno < 0 || regno >= NUM_REGS)
error ("Register number %d out of range.", regno);
}
void
-write_register (regno, value)
- int regno;
- REGISTER_TYPE value;
+write_register (int regno, REGISTER_TYPE value)
{
if (regno < 0 || regno >= NUM_REGS)
error ("Register number %d out of range.", regno);
\f
/* System calls needed in relation to running the "inferior". */
-vfork ()
+vfork (void)
{
/* Just appear to "succeed". Say the inferior's pid is 1. */
return 1;
that has just been forked. That code never runs, when standalone,
and these definitions are so it will link without errors. */
-ptrace ()
-{}
+ptrace (void)
+{
+}
-setpgrp ()
-{}
+setpgrp (void)
+{
+}
-execle ()
-{}
+execle (void)
+{
+}
-_exit ()
-{}
+_exit (void)
+{
+}
\f
/* Malloc calls these. */
-malloc_warning (str)
- char *str;
+malloc_warning (char *str)
{
printf ("\n%s.\n\n", str);
}
char *memory_limit;
char *
-sbrk (amount)
- int amount;
+sbrk (int amount)
{
if (next_free + amount > memory_limit)
return (char *) -1;
/* Various ways malloc might ask where end of memory is. */
char *
-ulimit ()
+ulimit (void)
{
return memory_limit;
}
int
-vlimit ()
+vlimit (void)
{
return memory_limit - next_free;
}
-getrlimit (addr)
- struct rlimit *addr;
+getrlimit (struct rlimit *addr)
{
addr->rlim_cur = memory_limit - next_free;
}
static int fault_code;
static REGISTER_TYPE gdb_stack;
-resume ()
+resume (void)
{
REGISTER_TYPE restore[NUM_REGS];
PUSH_FRAME_PTR;
save_frame_pointer ();
- bcopy (saved_regs, restore, sizeof restore);
+ memcpy (restore, saved_regs, sizeof restore);
POP_REGISTERS;
/* Control does not drop through here! */
}
-save_frame_pointer (val)
- CORE_ADDR val;
+save_frame_pointer (CORE_ADDR val)
{
gdb_stack = val;
}
The exact format is machine-dependent and is known only
in the definition of PUSH_REGISTERS. */
-fault ()
+fault (void)
{
/* Transfer all registers and fault code to the stack
in canonical order: registers in order of GDB register number,
/* Control does not reach here */
}
-restore_gdb ()
+restore_gdb (void)
{
CORE_ADDR new_fp = gdb_stack;
/* Switch to GDB's stack */
arguments to this function, copy them into the standard place
for the program's registers while GDB is running. */
-save_registers (firstreg)
- int firstreg;
+save_registers (int firstreg)
{
- bcopy (&firstreg, saved_regs, sizeof saved_regs);
+ memcpy (saved_regs, &firstreg, sizeof saved_regs);
fault_code = (&firstreg)[NUM_REGS];
}
static int fault_table[] = FAULT_TABLE;
int
-wait (w)
- WAITTYPE *w;
+wait (WAITTYPE *w)
{
WSETSTOP (*w, fault_table[fault_code / FAULT_CODE_UNITS]);
return inferior_pid;
#define HEAP_SIZE 400000
#endif
-char heap[HEAP_SIZE] = {0};
+char heap[HEAP_SIZE] =
+{0};
#ifndef STACK_SIZE
#define STACK_SIZE 100000
int kdb_stack_beg[STACK_SIZE / sizeof (int)];
int kdb_stack_end;
-_initialize_standalone ()
+_initialize_standalone (void)
{
register char *next;
/* Find the end of the data on files. */
- for (next - files_start; * (int *) next;
- next += * (int *) next)
- {}
+ for (next = files_start; *(int *) next; next += *(int *) next)
+ {
+ }
/* That is where free storage starts for sbrk to give out. */
next_free = next;
memory_limit = heap + sizeof heap;
}
-