import gdb-2000-01-24 snapshot

This commit is contained in:
Jason Molenda 2000-01-25 02:40:50 +00:00
parent b5f303f092
commit 0fda6bd286
18 changed files with 3419 additions and 87 deletions

View File

@ -1,3 +1,63 @@
2000-01-24 Kevin Buettner <kevinb@redhat.com>
* utils.c (get_field, put_field): Fix buffer underruns and
overruns. Also, handle case where total_len is not evenly
divisible by 8.
(getfield): Make sure zeroing of unwanted bits occurs even
when bit field to extract does not straddle two or more
bytes.
2000-01-23 Christopher Faylor <cgf@cygnus.com>
* defs.h: Add gdb_thread_select declaration.
2000-01-23 Kevin Buettner <kevinb@redhat.com>
* linux-thread.c (_initialize_linuxthreads): Make sure that
linuxthreads_block_mask does not block SIGCHLD.
2000-01-20 Fernando Nasser <fnasser@totem.to.cygnus.com>
* rdi-share/devsw.c (openLogFile): On cygwin, set the log mode to
text so that new lines work properly.
2000-01-18 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* proc-utils.h: New file. Export functions from proc-*.c.
* proc_api.c: Rename to:
* proc-api.c: New file. Add include of proc-utils.h.
* proc_events.c: Rename to:
* proc-events.c: New file.
* proc_flags.c: Rename to:
* proc-flags.c: New file.
* proc_why.c: Rename to:
* proc-why.c: New file. Add include of proc-utils.h.
* procfs.c: Add includes of gdbthread.h, sys/wait.h, signal.h,
ctype.h, proc-utils.h.
(find_procinfo_or_die): Add braces to avoid ambiguous else clause.
(open_procinfo_files): Conditionalize local variable tmp, to avoid
compiler warnings.
(proc_iterate_over_mappings): Conditionalize local vars mapfd and
pathname.
(procfs_wait): Adjust format in some printf_filetered calls to
avoid compiler warnings.
(make_signal_thread_runnable): Ifdef 0. The calls to this function
are also ifdef'd 0 .
(procfs_resume): Add parentheses around '&&' operation.
(procfs_set_exec_trap): Remove unused variable.
(info_proc_cmd): Add braces to avoid ambiguous else clause.
* Makefile.in (procfs.o, proc-api.o, proc-events.o, proc-flags.o,
proc-why.o): Update dependencies.
* config/sparc/sun4sol2.mh (NATDEPFILES): Change proc_*.o files to
proc-*.o.
2000-01-17 Jason Molenda (jsm@bugshack.cygnus.com)
* configure.in (NEW_PROC_API): Fix Unixware-matching regexp.
@ -32,6 +92,11 @@ Sun Jan 16 17:58:00 2000 David Taylor <taylor@texas.cygnus.com>
* v850-tdep.c (v850_target_architecture_hook): Setup correct
machine id for disassembly.
2000-01-13 Jim Blandy <jimb@cygnus.com>
* i386-linux-nat.c (fill_gregset): Pass the correct arguments to
convert_to_regset, when regno indicates a specific register.
Thu Jan 13 23:34:17 EST 2000 Nicholas Duffek <nsd@cygnus.com>
* uw-thread.c: Document libthread.so debugging interface. Minor

View File

@ -229,7 +229,7 @@ CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE) \
ADD_FILES = $(REGEX) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
ADD_DEPS = $(REGEX1) $(XM_ADD_FILES) $(TM_ADD_FILES) $(NAT_ADD_FILES)
VERSION = 20000117
VERSION = 20000124
DIST=gdb
LINT=/usr/5bin/lint
@ -1412,16 +1412,16 @@ printcmd.o: printcmd.c $(breakpoint_h) $(defs_h) $(expression_h) \
# FIXME: Procfs.o gets -Wformat errors because things like pid_t don't
# match output format strings.
procfs.o: procfs.c $(command_h) $(defs_h) $(gdbcore_h) $(inferior_h) \
target.h gdb_string.h
target.h gdb_string.h gdbthread.h proc-utils.h
$(CC) -c $(INTERNAL_WARN_CFLAGS) $(NO_WERROR_CFLAGS) $<
proc_api.o: proc_api.c $(defs_h) $(gdbcmd_h)
proc-api.o: proc-api.c $(defs_h) $(gdbcmd_h) proc-utils.h
proc_events.o: proc_events.c $(defs_h)
proc-events.o: proc-events.c $(defs_h)
proc_flags.o: proc_flags.c $(defs_h)
proc-flags.o: proc-flags.c $(defs_h)
proc_why.o: proc_why.c $(defs_h)
proc-why.o: proc-why.c $(defs_h) proc-utils.h
sol-thread.o: sol-thread.c $(defs_h) gdbthread.h target.h $(inferior_h) \
$(gdbcmd_h)

View File

@ -6,7 +6,7 @@ XM_CLIBS= -lsocket -lnsl
NAT_FILE= nm-sun4sol2.h
NATDEPFILES= corelow.o core-sol2.o solib.o fork-child.o procfs.o \
proc_api.o proc_events.o proc_flags.o proc_why.o
proc-api.o proc-events.o proc-flags.o proc-why.o
# If you are compiling with Sun's compiler, add the -xs option to CC
# (e.g. `make CC="cc -xs"').

View File

@ -65,6 +65,7 @@ d30v-*-*) gdb_target=d30v ;;
h8300-*-*) gdb_target=h8300 ;;
h8500-*-*) gdb_target=h8500 ;;
fr30-*-elf*) gdb_target=fr30 ;;

View File

@ -1345,5 +1345,6 @@ enum gdb_rc gdb_breakpoint_query (/* struct {ui,gdb}_out *output, */ int bnum);
enum gdb_rc gdb_breakpoint (char *address, char *condition,
int hardwareflag, int tempflag,
int thread, int ignore_count);
enum gdb_rc gdb_thread_select (/* output object */ char *tidstr);
#endif /* #ifndef DEFS_H */

View File

@ -1800,4 +1800,6 @@ _initialize_linuxthreads ()
sigprocmask(SIG_BLOCK,
&linuxthreads_wait_mask,
&linuxthreads_block_mask);
/* Make sure that linuxthreads_block_mask is not blocking SIGCHLD */
sigdelset (&linuxthreads_block_mask, SIGCHLD);
}

808
gdb/proc-api.c Normal file
View File

@ -0,0 +1,808 @@
/* Machine independent support for SVR4 /proc (process file system) for GDB.
Copyright 1999 Free Software Foundation, Inc.
Written by Michael Snyder at Cygnus Solutions.
Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*
* Pretty-print trace of api calls to the /proc api
* (ioctl or read/write calls).
*
*/
#include "defs.h"
#include "gdbcmd.h"
#if defined (NEW_PROC_API)
#define _STRUCTURED_PROC 1
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/procfs.h>
#include <sys/proc.h> /* for struct proc */
#include <sys/user.h> /* for struct user */
#include <fcntl.h> /* for O_RDWR etc. */
#include <sys/wait.h>
#include "proc-utils.h"
/* Much of the information used in the /proc interface, particularly for
printing status information, is kept as tables of structures of the
following form. These tables can be used to map numeric values to
their symbolic names and to a string that describes their specific use. */
struct trans {
long value; /* The numeric value */
char *name; /* The equivalent symbolic value */
char *desc; /* Short description of value */
};
static int procfs_trace = 1;
/*static int info_verbose = 1;*/ /* kludge */
static FILE *procfs_file = NULL;
static char *procfs_filename = "procfs_trace";
static void
set_procfs_trace_cmd (args, from_tty, c)
char *args;
int from_tty;
struct cmd_list_element *c;
{
#if 0 /* not sure what I might actually need to do here, if anything */
if (procfs_file)
fflush (procfs_file);
#endif
}
static void
set_procfs_file_cmd (args, from_tty, c)
char *args;
int from_tty;
struct cmd_list_element *c;
{
/* Just changed the filename for procfs tracing.
If a file was already open, close it. */
if (procfs_file)
fclose (procfs_file);
procfs_file = NULL;
}
#ifndef NEW_PROC_API
static struct trans ioctl_table[] = {
#ifdef PIOCACINFO /* irix */
{ PIOCACINFO, "PIOCACINFO", "get process account info" },
#endif
{ PIOCACTION, "PIOCACTION", "get signal action structs" },
#ifdef PIOCARGUMENTS /* osf */
{ PIOCARGUMENTS, "PIOCARGUMENTS", "command line args" },
#endif
#ifdef PIOCAUXV /* solaris aux vectors */
{ PIOCAUXV, "PIOCAUXV", "get aux vector" },
{ PIOCNAUXV, "PIOCNAUXV", "get number of aux vector entries" },
#endif /* AUXV */
{ PIOCCFAULT, "PIOCCFAULT", "clear current fault" },
{ PIOCCRED, "PIOCCRED", "get process credentials" },
#ifdef PIOCENEVCTRS /* irix event counters */
{ PIOCENEVCTRS, "PIOCENEVCTRS", "acquire and start event counters" },
{ PIOCGETEVCTRL, "PIOCGETEVCTRL", "get control info of event counters" },
{ PIOCGETEVCTRS, "PIOCGETEVCTRS", "dump event counters" },
{ PIOCGETPREVCTRS, "PIOCGETPREVCTRS", "dump event counters & prusage info" },
{ PIOCRELEVCTRS, "PIOCRELEVCTRS", "release/stop event counters" },
{ PIOCSETEVCTRL, "PIOCSETEVCTRL", "set control info of event counters" },
{ PIOCGETPTIMER, "PIOCGETPTIMER", "get process timers" },
#endif /* irix event counters */
{ PIOCGENTRY, "PIOCGENTRY", "get traced syscall entry set" },
{ PIOCGETPR, "PIOCGETPR", "read struct proc" },
{ PIOCGETU, "PIOCGETU", "read user area" },
#if defined (PIOCGETUTK) && (defined(KERNEL) || defined(SHOW_UTT)) /* osf */
{ PIOCGETUTK, "PIOCGETUTK", "get the utask struct" },
#endif
{ PIOCGEXIT, "PIOCGEXIT", "get traced syscall exit set" },
{ PIOCGFAULT, "PIOCGFAULT", "get traced fault set" },
#ifdef PIOCGFPCR /* osf */
{ PIOCGFPCR, "PIOCGFPCR", "get FP control register" },
{ PIOCSFPCR, "PIOCSFPCR", "set FP conrtol register" },
#endif
{ PIOCGFPREG, "PIOCGFPREG", "get floating point registers" },
{ PIOCGHOLD, "PIOCGHOLD", "get held signal set" },
{ PIOCGREG, "PIOCGREG", "get general registers" },
{ PIOCGROUPS, "PIOCGROUPS", "get supplementary groups" },
#ifdef PIOCGSPCACT /* osf */
{ PIOCGSPCACT, "PIOCGSPCACT", "get special action" },
{ PIOCSSPCACT, "PIOCSSPCACT", "set special action" },
#endif
{ PIOCGTRACE, "PIOCGTRACE", "get traced signal set" },
#ifdef PIOCGWATCH /* irix watchpoints */
{ PIOCGWATCH, "PIOCGWATCH", "get watchpoint" },
{ PIOCSWATCH, "PIOCSWATCH", "set watchpoint" },
{ PIOCNWATCH, "PIOCNWATCH", "get number of watchpoints" },
#endif /* irix watchpoints */
#ifdef PIOCGWIN /* solaris sparc */
{ PIOCGWIN, "PIOCGWIN", "get gwindows_t" },
#endif
#ifdef PIOCGXREG /* solaris sparc extra regs */
{ PIOCGXREGSIZE, "PIOCXREGSIZE", "get extra register state size" },
{ PIOCGXREG, "PIOCGXREG", "get extra register state" },
{ PIOCSXREG, "PIOCSXREG", "set extra register state" },
#endif /* XREG */
{ PIOCKILL, "PIOCKILL", "send signal" },
#ifdef PIOCLDT /* solaris i386 */
{ PIOCLDT, "PIOCLDT", "get LDT" },
{ PIOCNLDT, "PIOCNLDT", "get number of LDT entries" },
#endif
#ifdef PIOCLSTATUS /* solaris and unixware */
{ PIOCLSTATUS, "PIOCLSTATUS", "get status of all lwps" },
{ PIOCLUSAGE, "PIOCLUSAGE", "get resource usage of all lwps" },
{ PIOCOPENLWP, "PIOCOPENLWP", "get lwp file descriptor" },
{ PIOCLWPIDS, "PIOCLWPIDS", "get lwp identifiers" },
#endif /* LWP */
{ PIOCMAP, "PIOCMAP", "get memory map information" },
{ PIOCMAXSIG, "PIOCMAXSIG", "get max signal number" },
{ PIOCNICE, "PIOCNICE", "set nice priority" },
{ PIOCNMAP, "PIOCNMAP", "get number of memory mappings" },
{ PIOCOPENM, "PIOCOPENM", "open mapped object for reading" },
#ifdef PIOCOPENMOBS /* osf */
{ PIOCOPENMOBS, "PIOCOPENMOBS", "open mapped object" },
#endif
#ifdef PIOCOPENPD /* solaris */
{ PIOCOPENPD, "PIOCOPENPD", "get page data file descriptor" },
#endif
{ PIOCPSINFO, "PIOCPSINFO", "get ps(1) information" },
{ PIOCRESET, "PIOCRESET", "reset process flags" },
{ PIOCRFORK, "PIOCRFORK", "reset inherit-on-fork flag" },
{ PIOCRRLC, "PIOCRRLC", "reset run-on-last-close flag" },
{ PIOCRUN, "PIOCRUN", "make process runnable" },
#ifdef PIOCSAVECCNTRS /* irix */
{ PIOCSAVECCNTRS, "PIOCSAVECCNTRS", "parent gets child cntrs" },
#endif
{ PIOCSENTRY, "PIOCSENTRY", "set traced syscall entry set" },
{ PIOCSET, "PIOCSET", "set process flags" },
{ PIOCSEXIT, "PIOCSEXIT", "set traced syscall exit set" },
{ PIOCSFAULT, "PIOCSFAULT", "set traced fault set" },
{ PIOCSFORK, "PIOCSFORK", "set inherit-on-fork flag" },
{ PIOCSFPREG, "PIOCSFPREG", "set floating point registers" },
{ PIOCSHOLD, "PIOCSHOLD", "set held signal set" },
{ PIOCSREG, "PIOCSREG", "set general registers" },
{ PIOCSRLC, "PIOCSRLC", "set run-on-last-close flag" },
{ PIOCSSIG, "PIOCSSIG", "set current signal" },
{ PIOCSTATUS, "PIOCSTATUS", "get process status" },
{ PIOCSTOP, "PIOCSTOP", "post stop request" },
{ PIOCSTRACE, "PIOCSTRACE", "set traced signal set" },
{ PIOCUNKILL, "PIOCUNKILL", "delete a signal" },
#ifdef PIOCUSAGE /* solaris */
{ PIOCUSAGE, "PIOCUSAGE", "get resource usage" },
#endif
{ PIOCWSTOP, "PIOCWSTOP", "wait for process to stop" },
#ifdef PIOCNTHR /* osf threads */
{ PIOCNTHR, "PIOCNTHR", "get thread count" },
{ PIOCRTINH, "PIOCRTINH", "reset inherit-on-thread-creation" },
{ PIOCSTINH, "PIOCSTINH", "set inherit-on-thread-creation" },
{ PIOCTLIST, "PIOCTLIST", "get thread ids" },
{ PIOCXPTH, "PIOCXPTH", "translate port to thread handle" },
{ PIOCTRUN, "PIOCTRUN", "make thread runnable" },
{ PIOCTSTATUS, "PIOCTSTATUS", "get thread status" },
{ PIOCTSTOP, "PIOCTSTOP", "stop a thread" },
/* ... TGTRACE TSTRACE TSSIG TKILL TUNKILL TCFAULT TGFAULT TSFAULT
TGFPREG TSFPREG TGREG TSREG TACTION TTERM TABRUN TGENTRY TSENTRY
TGEXIT TSEXIT TSHOLD ... thread functions */
#endif /* osf threads */
{ -1, NULL, NULL }
};
int
ioctl_with_trace (fd, opcode, ptr, file, line)
int fd;
long opcode;
void *ptr;
char *file;
int line;
{
int i, ret, arg1;
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
for (i = 0; ioctl_table[i].name != NULL; i++)
if (ioctl_table[i].value == opcode)
break;
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
switch (opcode) {
case PIOCSET:
arg1 = ptr ? *(long *) ptr : 0;
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCSET, %s) %s\n",
arg1 == PR_FORK ? "PR_FORK" :
arg1 == PR_RLC ? "PR_RLC" :
#ifdef PR_ASYNC
arg1 == PR_ASYNC ? "PR_ASYNC" :
#endif
"<unknown flag>",
info_verbose ? ioctl_table[i].desc : "");
break;
case PIOCRESET:
arg1 = ptr ? *(long *) ptr : 0;
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCRESET, %s) %s\n",
arg1 == PR_FORK ? "PR_FORK" :
arg1 == PR_RLC ? "PR_RLC" :
#ifdef PR_ASYNC
arg1 == PR_ASYNC ? "PR_ASYNC" :
#endif
"<unknown flag>",
info_verbose ? ioctl_table[i].desc : "");
break;
case PIOCSTRACE:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCSTRACE) ");
proc_prettyfprint_signalset (procfs_file ? procfs_file : stdout,
(sigset_t *) ptr, 0);
break;
case PIOCSFAULT:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (%s) ",
opcode == PIOCSFAULT ? "PIOCSFAULT" : "PIOCGFAULT");
proc_prettyfprint_faultset (procfs_file ? procfs_file : stdout,
(fltset_t *) ptr, 0);
break;
case PIOCSENTRY:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (%s) ",
opcode == PIOCSENTRY ? "PIOCSENTRY" : "PIOCGENTRY");
proc_prettyfprint_syscalls (procfs_file ? procfs_file : stdout,
(sysset_t *) ptr, 0);
break;
case PIOCSEXIT:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (%s) ",
opcode == PIOCSEXIT ? "PIOCSEXIT" : "PIOCGEXIT");
proc_prettyfprint_syscalls (procfs_file ? procfs_file : stdout,
(sysset_t *) ptr, 0);
break;
case PIOCSHOLD:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (%s) ",
opcode == PIOCSHOLD ? "PIOCSHOLD" : "PIOCGHOLD");
proc_prettyfprint_signalset (procfs_file ? procfs_file : stdout,
(sigset_t *) ptr, 0);
break;
case PIOCSSIG:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCSSIG) ");
proc_prettyfprint_signal (procfs_file ? procfs_file : stdout,
ptr ? ((siginfo_t *) ptr)->si_signo : 0,
0);
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
case PIOCRUN:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCRUN) ");
arg1 = ptr ? *(long *) ptr : 0;
if (arg1 & PRCSIG)
fprintf (procfs_file ? procfs_file : stdout, "clearSig ");
if (arg1 & PRCFAULT)
fprintf (procfs_file ? procfs_file : stdout, "clearFlt ");
if (arg1 & PRSTRACE)
fprintf (procfs_file ? procfs_file : stdout, "setTrace ");
if (arg1 & PRSHOLD)
fprintf (procfs_file ? procfs_file : stdout, "setHold ");
if (arg1 & PRSFAULT)
fprintf (procfs_file ? procfs_file : stdout, "setFlt ");
if (arg1 & PRSVADDR)
fprintf (procfs_file ? procfs_file : stdout, "setVaddr ");
if (arg1 & PRSTEP)
fprintf (procfs_file ? procfs_file : stdout, "step ");
if (arg1 & PRSABORT)
fprintf (procfs_file ? procfs_file : stdout, "syscallAbort ");
if (arg1 & PRSTOP)
fprintf (procfs_file ? procfs_file : stdout, "stopReq ");
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
case PIOCKILL:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCKILL) ");
proc_prettyfprint_signal (procfs_file ? procfs_file : stdout,
ptr ? *(long *) ptr : 0, 0);
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
#ifdef PIOCSSPCACT
case PIOCSSPCACT:
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (PIOCSSPCACT) ");
arg1 = ptr ? *(long *) ptr : 0;
if (arg1 & PRFS_STOPFORK)
fprintf (procfs_file ? procfs_file : stdout, "stopFork ");
if (arg1 & PRFS_STOPEXEC)
fprintf (procfs_file ? procfs_file : stdout, "stopExec ");
if (arg1 & PRFS_STOPTERM)
fprintf (procfs_file ? procfs_file : stdout, "stopTerm ");
if (arg1 & PRFS_STOPTCR)
fprintf (procfs_file ? procfs_file : stdout, "stopThreadCreate ");
if (arg1 & PRFS_STOPTTERM)
fprintf (procfs_file ? procfs_file : stdout, "stopThreadTerm ");
if (arg1 & PRFS_KOLC)
fprintf (procfs_file ? procfs_file : stdout, "killOnLastClose ");
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
#endif /* PIOCSSPCACT */
default:
if (ioctl_table[i].name)
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (%s) %s\n",
ioctl_table[i].name,
info_verbose ? ioctl_table[i].desc : "");
else
fprintf (procfs_file ? procfs_file : stdout,
"ioctl (<unknown %ld (0x%lx)) \n", opcode, opcode);
break;
}
if (procfs_file)
fflush (procfs_file);
}
ret = ioctl (fd, opcode, ptr);
if (procfs_trace && ret < 0)
{
fprintf (procfs_file ? procfs_file : stdout,
"[ioctl (%s) FAILED!]\n",
ioctl_table[i].name != NULL ?
ioctl_table[i].name : "<unknown>");
if (procfs_file)
fflush (procfs_file);
}
return ret;
}
#else /* NEW_PROC_API */
static struct trans rw_table[] = {
#ifdef PCAGENT /* solaris */
{ PCAGENT, "PCAGENT", "create agent lwp with regs from argument" },
#endif
{ PCCFAULT, "PCCFAULT", "clear current fault" },
#ifdef PCCSIG /* solaris */
{ PCCSIG, "PCCSIG", "clear current signal" },
#endif
{ PCDSTOP, "PCDSTOP", "post stop request" },
{ PCKILL, "PCKILL", "post a signal" },
{ PCNICE, "PCNICE", "set nice priority" },
#ifdef PCREAD /* solaris */
{ PCREAD, "PCREAD", "read from the address space" },
{ PCWRITE, "PCWRITE", "write to the address space" },
#endif
#ifdef PCRESET /* unixware */
{ PCRESET, "PCRESET", "unset modes" },
#endif
{ PCRUN, "PCRUN", "make process/lwp runnable" },
#ifdef PCSASRS /* solaris 2.7 only */
{ PCSASRS, "PCSASRS", "set ancillary state registers" },
#endif
#ifdef PCSCRED /* solaris */
{ PCSCRED, "PCSCRED", "set process credentials" },
#endif
{ PCSENTRY, "PCSENTRY", "set traced syscall entry set" },
{ PCSET, "PCSET", "set modes" },
{ PCSEXIT, "PCSEXIT", "set traced syscall exit set" },
{ PCSFAULT, "PCSFAULT", "set traced fault set" },
{ PCSFPREG, "PCSFPREG", "set floating point registers" },
{ PCSHOLD, "PCSHOLD", "set signal mask" },
{ PCSREG, "PCSREG", "set general registers" },
{ PCSSIG, "PCSSIG", "set current signal" },
{ PCSTOP, "PCSTOP", "post stop request and wait" },
{ PCSTRACE, "PCSTRACE", "set traced signal set" },
#ifdef PCSVADDR /* solaris */
{ PCSVADDR, "PCSVADDR", "set pc virtual address" },
#endif
#ifdef PCSXREG /* solaris sparc only */
{ PCSXREG, "PCSXREG", "set extra registers" },
#endif
#ifdef PCTWSTOP /* solaris */
{ PCTWSTOP, "PCTWSTOP", "wait for stop, with timeout arg" },
#endif
{ PCUNKILL, "PCUNKILL", "delete a pending signal" },
#ifdef PCUNSET /* solaris */
{ PCUNSET, "PCUNSET", "unset modes" },
#endif
#ifdef PCWATCH /* solaris */
{ PCWATCH, "PCWATCH", "set/unset watched memory area" },
#endif
{ PCWSTOP, "PCWSTOP", "wait for process/lwp to stop, no timeout" },
{ 0, NULL, NULL }
};
static off_t lseek_offset;
int
write_with_trace (fd, arg, len, file, line)
int fd;
long *arg;
size_t len;
char *file;
int line;
{
int i;
long opcode = arg[0];
int ret;
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
for (i = 0; rw_table[i].name != NULL; i++)
if (rw_table[i].value == opcode)
break;
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
switch (opcode) {
case PCSET:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSET, %s) %s\n",
arg[1] == PR_FORK ? "PR_FORK" :
arg[1] == PR_RLC ? "PR_RLC" :
#ifdef PR_ASYNC
arg[1] == PR_ASYNC ? "PR_ASYNC" :
#endif
"<unknown flag>",
info_verbose ? rw_table[i].desc : "");
break;
#ifdef PCUNSET
case PCUNSET:
#endif
#ifdef PCRESET
case PCRESET:
#endif
fprintf (procfs_file ? procfs_file : stdout,
"write (PCRESET, %s) %s\n",
arg[1] == PR_FORK ? "PR_FORK" :
arg[1] == PR_RLC ? "PR_RLC" :
#ifdef PR_ASYNC
arg[1] == PR_ASYNC ? "PR_ASYNC" :
#endif
"<unknown flag>",
info_verbose ? rw_table[i].desc : "");
break;
case PCSTRACE:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSTRACE) ");
proc_prettyfprint_signalset (procfs_file ? procfs_file : stdout,
(sigset_t *) &arg[1], 0);
break;
case PCSFAULT:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSFAULT) ");
proc_prettyfprint_faultset (procfs_file ? procfs_file : stdout,
(fltset_t *) &arg[1], 0);
break;
case PCSENTRY:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSENTRY) ");
proc_prettyfprint_syscalls (procfs_file ? procfs_file : stdout,
(sysset_t *) &arg[1], 0);
break;
case PCSEXIT:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSEXIT) ");
proc_prettyfprint_syscalls (procfs_file ? procfs_file : stdout,
(sysset_t *) &arg[1], 0);
break;
case PCSHOLD:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSHOLD) ");
proc_prettyfprint_signalset (procfs_file ? procfs_file : stdout,
(sigset_t *) &arg[1], 0);
break;
case PCSSIG:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCSSIG) ");
proc_prettyfprint_signal (procfs_file ? procfs_file : stdout,
arg[1] ? ((siginfo_t *) &arg[1])->si_signo
: 0,
0);
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
case PCRUN:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCRUN) ");
if (arg[1] & PRCSIG)
fprintf (procfs_file ? procfs_file : stdout, "clearSig ");
if (arg[1] & PRCFAULT)
fprintf (procfs_file ? procfs_file : stdout, "clearFlt ");
if (arg[1] & PRSTEP)
fprintf (procfs_file ? procfs_file : stdout, "step ");
if (arg[1] & PRSABORT)
fprintf (procfs_file ? procfs_file : stdout, "syscallAbort ");
if (arg[1] & PRSTOP)
fprintf (procfs_file ? procfs_file : stdout, "stopReq ");
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
case PCKILL:
fprintf (procfs_file ? procfs_file : stdout,
"write (PCKILL) ");
proc_prettyfprint_signal (procfs_file ? procfs_file : stdout,
arg[1], 0);
fprintf (procfs_file ? procfs_file : stdout, "\n");
break;
default:
{
static unsigned char break_insn[] = BREAKPOINT;
if (len == sizeof (break_insn) &&
memcmp (arg, &break_insn, len) == 0)
fprintf (procfs_file ? procfs_file : stdout,
"write (<breakpoint at 0x%08x>) \n", lseek_offset);
else if (rw_table[i].name)
fprintf (procfs_file ? procfs_file : stdout,
"write (%s) %s\n",
rw_table[i].name,
info_verbose ? rw_table[i].desc : "");
else
{
if (lseek_offset != -1)
fprintf (procfs_file ? procfs_file : stdout,
"write (<unknown>, %d bytes at 0x%08x) \n",
len, lseek_offset);
else
fprintf (procfs_file ? procfs_file : stdout,
"write (<unknown>, %d bytes) \n", len);
}
break;
}
}
if (procfs_file)
fflush (procfs_file);
}
ret = write (fd, arg, len);
if (procfs_trace && ret != len)
{
fprintf (procfs_file ? procfs_file : stdout,
"[write (%s) FAILED!\n",
rw_table[i].name != NULL ?
rw_table[i].name : "<unknown>");
if (procfs_file)
fflush (procfs_file);
}
lseek_offset = -1;
return ret;
}
off_t
lseek_with_trace (fd, offset, whence, file, line)
int fd;
off_t offset;
int whence;
char *file;
int line;
{
off_t ret;
#if 0 /* don't need output, just need address */
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
fprintf (procfs_file ? procfs_file : stdout,
"lseek (0x%08x, %s) \n", offset,
whence == SEEK_SET ? "SEEK_SET" :
whence == SEEK_CUR ? "SEEK_CUR" :
whence == SEEK_END ? "SEEK_END" :
"<unknown whence>");
if (procfs_file)
fflush (procfs_file);
}
#endif
ret = lseek (fd, offset, whence);
lseek_offset = ret;
if (procfs_trace && ret == -1)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
fprintf (procfs_file ? procfs_file : stdout,
"[lseek (0x%08x) FAILED!\n", offset);
if (procfs_file)
fflush (procfs_file);
}
return ret;
}
#endif /* NEW_PROC_API */
int
open_with_trace (filename, mode, file, line)
char *filename;
int mode;
char *file;
int line;
{
int ret = open (filename, mode);
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
fprintf (procfs_file ? procfs_file : stdout,
"%d = open (%s, ", ret, filename);
if (mode == O_RDONLY)
fprintf (procfs_file ? procfs_file : stdout, "O_RDONLY) %d\n", line);
else if (mode == O_WRONLY)
fprintf (procfs_file ? procfs_file : stdout, "O_WRONLY) %d\n", line);
else if (mode == O_RDWR)
fprintf (procfs_file ? procfs_file : stdout, "O_RDWR) %d\n", line);
if (procfs_file)
fflush (procfs_file);
}
return ret;
}
int
close_with_trace (fd, file, line)
int fd;
char *file;
int line;
{
int ret = close (fd);
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
fprintf (procfs_file ? procfs_file : stdout,
"%d = close (%d)\n", ret, fd);
if (procfs_file)
fflush (procfs_file);
}
return ret;
}
int
wait_with_trace (wstat, file, line)
int *wstat;
char *file;
int line;
{
int ret, lstat = 0;
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
fprintf (procfs_file ? procfs_file : stdout,
"wait (line %d) ", line);
if (procfs_file)
fflush (procfs_file);
}
ret = wait (&lstat);
if (procfs_trace)
{
fprintf (procfs_file ? procfs_file : stdout,
"returned pid %d, status 0x%x\n", ret, lstat);
if (procfs_file)
fflush (procfs_file);
}
if (wstat)
*wstat = lstat;
return ret;
}
void
procfs_note (msg, file, line)
char *msg;
char *file;
int line;
{
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
if (info_verbose)
fprintf (procfs_file ? procfs_file : stdout,
"%s:%d -- ", file, line);
fprintf (procfs_file ? procfs_file : stdout, msg);
if (procfs_file)
fflush (procfs_file);
}
}
void
proc_prettyfprint_status (flags, why, what, thread)
long flags;
int why;
int what;
int thread;
{
if (procfs_trace)
{
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
if (thread)
fprintf (procfs_file ? procfs_file : stdout,
"Thread %d: ", thread);
proc_prettyfprint_flags (procfs_file ? procfs_file : stdout,
flags, 0);
if (flags & (PR_STOPPED | PR_ISTOP))
proc_prettyfprint_why (procfs_file ? procfs_file : stdout,
why, what, 0);
if (procfs_file)
fflush (procfs_file);
}
}
void
_initialize_proc_api ()
{
struct cmd_list_element *c;
c = add_set_cmd ("procfs-trace", no_class,
var_boolean, (char *) &procfs_trace,
"Set tracing for /proc ioctl calls.\n", &setlist);
add_show_from_set (c, &showlist);
c->function.sfunc = set_procfs_trace_cmd;
c = add_set_cmd ("procfs-file", no_class, var_filename,
(char *) &procfs_filename,
"Set filename for /proc tracefile.\n", &setlist);
add_show_from_set (c, &showlist);
c->function.sfunc = set_procfs_file_cmd;
#ifdef TRACE_PROCFS
if (procfs_file == NULL && procfs_filename != NULL)
procfs_file = fopen (procfs_filename, "a");
#endif
}

1806
gdb/proc-events.c Normal file

File diff suppressed because it is too large Load Diff

296
gdb/proc-flags.c Normal file
View File

@ -0,0 +1,296 @@
/* Machine independent support for SVR4 /proc (process file system) for GDB.
Copyright 1999 Free Software Foundation, Inc.
Written by Michael Snyder at Cygnus Solutions.
Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*
* Pretty-print the prstatus flags.
*
* Arguments: unsigned long flags, int verbose
*
*/
#include "defs.h"
#if defined (NEW_PROC_API)
#define _STRUCTURED_PROC 1
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/procfs.h>
/* Much of the information used in the /proc interface, particularly for
printing status information, is kept as tables of structures of the
following form. These tables can be used to map numeric values to
their symbolic names and to a string that describes their specific use. */
struct trans {
int value; /* The numeric value */
char *name; /* The equivalent symbolic value */
char *desc; /* Short description of value */
};
/* Translate bits in the pr_flags member of the prstatus structure,
into the names and desc information. */
static struct trans pr_flag_table[] =
{
#if defined (PR_STOPPED)
/* Sol2.5: lwp is stopped
* Sol2.6: lwp is stopped
* Sol2.7: lwp is stopped
* IRIX6: process is stopped
* OSF: task/thread is stopped
* UW: LWP is stopped
*/
{ PR_STOPPED, "PR_STOPPED", "Process (LWP) is stopped" },
#endif
#if defined (PR_ISTOP)
/* Sol2.5: lwp is stopped on an event of interest
* Sol2.6: lwp is stopped on an event of interest
* Sol2.7: lwp is stopped on an event of interest
* IRIX6: process is stopped on event of interest
* OSF: task/thread stopped on event of interest
* UW: LWP stopped on an event of interest
*/
{ PR_ISTOP, "PR_ISTOP", "Stopped on an event of interest" },
#endif
#if defined (PR_DSTOP)
/* Sol2.5: lwp has a stop directive in effect
* Sol2.6: lwp has a stop directive in effect
* Sol2.7: lwp has a stop directive in effect
* IRIX6: process has stop directive in effect
* OSF: task/thread has stop directive in effect
* UW: A stop directive is in effect
*/
{ PR_DSTOP, "PR_DSTOP", "A stop directive is in effect" },
#endif
#if defined (PR_STEP)
/* Sol2.5: lwp has a single-step directive in effect
* Sol2.6: lwp has a single-step directive in effect
* Sol2.7: lwp has a single-step directive in effect
* IRIX6: process has single step pending
*/
{ PR_STEP, "PR_STEP", "A single step directive is in effect" },
#endif
#if defined (PR_ASLEEP)
/* Sol2.5: lwp is sleeping in a system call
* Sol2.6: lwp is sleeping in a system call
* Sol2.7: lwp is sleeping in a system call
* IRIX6: process is in an interruptible sleep
* OSF: task/thread is asleep within a system call
* UW: LWP is sleep()ing in a system call
*/
{ PR_ASLEEP, "PR_ASLEEP", "Sleeping in an (interruptible) system call" },
#endif
#if defined (PR_PCINVAL)
/* Sol2.5: contents of pr_instr undefined
* Sol2.6: contents of pr_instr undefined
* Sol2.7: contents of pr_instr undefined
* IRIX6: current pc is invalid
* OSF: program counter contains invalid address
* UW: %pc refers to an invalid virtual address
*/
{ PR_PCINVAL, "PR_PCINVAL", "PC (pr_instr) is invalid" },
#endif
#if defined (PR_ASLWP)
/* Sol2.5: this lwp is the aslwp
* Sol2.6: this lwp is the aslwp
* Sol2.7: this lwp is the aslwp
*/
{ PR_ASLWP, "PR_ASLWP", "This is the asynchronous signal LWP" },
#endif
#if defined (PR_AGENT)
/* Sol2.6: this lwp is the /proc agent lwp
* Sol2.7: this lwp is the /proc agent lwp
*/
{ PR_AGENT, "PR_AGENT", "This is the /proc agent LWP" },
#endif
#if defined (PR_ISSYS)
/* Sol2.5: system process
* Sol2.6: this is a system process
* Sol2.7: this is a system process
* IRIX6: process is a system process
* OSF: task/thread is a system task/thread
* UW: System process
*/
{ PR_ISSYS, "PR_ISSYS", "Is a system process/thread" },
#endif
#if defined (PR_VFORKP)
/* Sol2.6: process is the parent of a vfork()d child
* Sol2.7: process is the parent of a vfork()d child
*/
{ PR_VFORKP, "PR_VFORKP", "Process is the parent of a vforked child" },
#endif
#ifdef PR_ORPHAN
/* Sol2.6: process's process group is orphaned
* Sol2.7: process's process group is orphaned
*/
{ PR_ORPHAN, "PR_ORPHAN", "Process's process group is orphaned" },
#endif
#if defined (PR_FORK)
/* Sol2.5: inherit-on-fork is in effect
* Sol2.6: inherit-on-fork is in effect
* Sol2.7: inherit-on-fork is in effect
* IRIX6: process has inherit-on-fork flag set
* OSF: task/thread has inherit-on-fork flag set
* UW: inherit-on-fork is in effect
*/
{ PR_FORK, "PR_FORK", "Inherit-on-fork is in effect" },
#endif
#if defined (PR_RLC)
/* Sol2.5: run-on-last-close is in effect
* Sol2.6: run-on-last-close is in effect
* Sol2.7: run-on-last-close is in effect
* IRIX6: process has run-on-last-close flag set
* OSF: task/thread has run-on-last-close flag set
* UW: Run-on-last-close is in effect
*/
{ PR_RLC, "PR_RLC", "Run-on-last-close is in effect" },
#endif
#if defined (PR_KLC)
/* Sol2.5: kill-on-last-close is in effect
* Sol2.6: kill-on-last-close is in effect
* Sol2.7: kill-on-last-close is in effect
* IRIX6: process has kill-on-last-close flag set
* OSF: kill-on-last-close, superceeds RLC
* UW: kill-on-last-close is in effect
*/
{ PR_KLC, "PR_KLC", "Kill-on-last-close is in effect" },
#endif
#if defined (PR_ASYNC)
/* Sol2.5: asynchronous-stop is in effect
* Sol2.6: asynchronous-stop is in effect
* Sol2.7: asynchronous-stop is in effect
* OSF: asynchronous stop mode is in effect
* UW: asynchronous stop mode is in effect
*/
{ PR_ASYNC, "PR_ASYNC", "Asynchronous stop is in effect" },
#endif
#if defined (PR_MSACCT)
/* Sol2.5: micro-state usage accounting is in effect
* Sol2.6: micro-state usage accounting is in effect
* Sol2.7: micro-state usage accounting is in effect
*/
{ PR_MSACCT, "PR_MSACCT", "Microstate accounting enabled" },
#endif
#if defined (PR_BPTADJ)
/* Sol2.5: breakpoint trap pc adjustment is in effect
* Sol2.6: breakpoint trap pc adjustment is in effect
* Sol2.7: breakpoint trap pc adjustment is in effect
*/
{ PR_BPTADJ, "PR_BPTADJ", "Breakpoint PC adjustment in effect" },
#endif
#if defined (PR_PTRACE)
/* Note: different meanings on Solaris and Irix 6
* Sol2.5: obsolete, never set in SunOS5.0
* Sol2.6: ptrace-compatibility mode is in effect
* Sol2.7: ptrace-compatibility mode is in effect
* IRIX6: process is traced with ptrace() too
* OSF: task/thread is being traced by ptrace
* UW: Process is being controlled by ptrace(2)
*/
{ PR_PTRACE, "PR_PTRACE", "Process is being controlled by ptrace" },
#endif
#if defined (PR_PCOMPAT)
/* Note: PCOMPAT on Sol2.5 means same thing as PTRACE on Sol2.6
* Sol2.5 (only): ptrace-compatibility mode is in effect
*/
{ PR_PCOMPAT, "PR_PCOMPAT", "Ptrace compatibility mode in effect" },
#endif
#ifdef PR_MSFORK
/* Sol2.6: micro-state accounting inherited on fork
* Sol2.7: micro-state accounting inherited on fork
*/
{ PR_MSFORK, "PR_PCOMPAT", "Micro-state accounting inherited on fork" },
#endif
#ifdef PR_ISKTHREAD
/* Irix6: process is a kernel thread */
{ PR_ISKTHREAD, "PR_KTHREAD", "Process is a kernel thread" },
#endif
#ifdef PR_ABORT
/* OSF (only): abort the current stop condition */
{ PR_ABORT, "PR_ABORT", "Abort the current stop condition" },
#endif
#ifdef PR_TRACING
/* OSF: task is traced */
{ PR_TRACING, "PR_TRACING", "Task is traced" },
#endif
#ifdef PR_STOPFORK
/* OSF: stop child on fork */
{ PR_STOPFORK, "PR_STOPFORK", "Stop child on fork" },
#endif
#ifdef PR_STOPEXEC
/* OSF: stop on exec */
{ PR_STOPEXEC, "PR_STOPEXEC", "Stop on exec" },
#endif
#ifdef PR_STOPTERM
/* OSF: stop on task exit */
{ PR_STOPTERM, "PR_STOPTERM", "Stop on task exit" },
#endif
#ifdef PR_STOPTCR
/* OSF: stop on thread creation */
{ PR_STOPTCR, "PR_STOPTCR", "Stop on thread creation" },
#endif
#ifdef PR_STOPTTERM
/* OSF: stop on thread exit */
{ PR_STOPTTERM, "PR_STOPTTERM", "Stop on thread exit" },
#endif
#ifdef PR_USCHED
/* OSF: user level scheduling is in effect */
{ PR_USCHED, "PR_USCHED", "User level scheduling is in effect" },
#endif
};
void
proc_prettyfprint_flags (file, flags, verbose)
FILE *file;
unsigned long flags;
int verbose;
{
int i;
for (i = 0; i < sizeof (pr_flag_table) / sizeof (pr_flag_table[0]); i++)
if (flags & pr_flag_table[i].value)
{
fprintf (file, "%s ", pr_flag_table[i].name);
if (verbose)
fprintf (file, "%s\n", pr_flag_table[i].desc);
}
if (!verbose)
fprintf (file, "\n");
}
void
proc_prettyprint_flags (flags, verbose)
unsigned long flags;
int verbose;
{
proc_prettyfprint_flags (stdout, flags, verbose);
}

52
gdb/proc-utils.h Normal file
View File

@ -0,0 +1,52 @@
/* Machine independent support for SVR4 /proc (process file system) for GDB.
Copyright 1999 Free Software Foundation, Inc.
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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
extern void
proc_prettyprint_why (unsigned long why, unsigned long what, int verbose);
extern void proc_prettyprint_syscalls (sysset_t *sysset, int verbose);
extern void proc_prettyprint_syscall (int num, int verbose);
extern void proc_prettyprint_flags (unsigned long flags, int verbose);
extern void
proc_prettyfprint_signalset (FILE *file, sigset_t *sigset, int verbose);
extern void
proc_prettyfprint_faultset (FILE *file, fltset_t *fltset, int verbose);
extern void
proc_prettyfprint_syscall (FILE *file, int num, int verbose);
extern void
proc_prettyfprint_signal (FILE *file, int signo, int verbose);
extern void
proc_prettyfprint_flags (FILE *file, unsigned long flags, int verbose);
extern void
proc_prettyfprint_why (FILE *file, unsigned long why, unsigned long what, int verbose);
extern void
proc_prettyfprint_fault (FILE *file, int faultno, int verbose);
extern void
proc_prettyfprint_syscalls (FILE *file, sysset_t *sysset, int verbose);

181
gdb/proc-why.c Normal file
View File

@ -0,0 +1,181 @@
/* Machine independent support for SVR4 /proc (process file system) for GDB.
Copyright 1999 Free Software Foundation, Inc.
Written by Michael Snyder at Cygnus Solutions.
Based on work by Fred Fish, Stu Grossman, Geoff Noer, and others.
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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*
* Pretty-print the pr_why value.
*
* Arguments: unsigned long flags, int verbose
*
*/
#include "defs.h"
#if defined(NEW_PROC_API)
#define _STRUCTURED_PROC 1
#endif
#include <stdio.h>
#include <sys/types.h>
#include <sys/procfs.h>
#include "proc-utils.h"
/* Much of the information used in the /proc interface, particularly for
printing status information, is kept as tables of structures of the
following form. These tables can be used to map numeric values to
their symbolic names and to a string that describes their specific use. */
struct trans {
int value; /* The numeric value */
char *name; /* The equivalent symbolic value */
char *desc; /* Short description of value */
};
/* Translate values in the pr_why field of the prstatus struct. */
static struct trans pr_why_table[] =
{
#if defined (PR_REQUESTED)
/* All platforms */
{ PR_REQUESTED, "PR_REQUESTED",
"Directed to stop by debugger via P(IO)CSTOP or P(IO)CWSTOP" },
#endif
#if defined (PR_SIGNALLED)
/* All platforms */
{ PR_SIGNALLED, "PR_SIGNALLED", "Receipt of a traced signal" },
#endif
#if defined (PR_SYSENTRY)
/* All platforms */
{ PR_SYSENTRY, "PR_SYSENTRY", "Entry to a traced system call" },
#endif
#if defined (PR_SYSEXIT)
/* All platforms */
{ PR_SYSEXIT, "PR_SYSEXIT", "Exit from a traced system call" },
#endif
#if defined (PR_JOBCONTROL)
/* All platforms */
{ PR_JOBCONTROL, "PR_JOBCONTROL", "Default job control stop signal action" },
#endif
#if defined (PR_FAULTED)
/* All platforms */
{ PR_FAULTED, "PR_FAULTED", "Incurred a traced hardware fault" },
#endif
#if defined (PR_SUSPENDED)
/* Solaris and UnixWare */
{ PR_SUSPENDED, "PR_SUSPENDED", "Process suspended" },
#endif
#if defined (PR_CHECKPOINT)
/* Solaris only */
{ PR_CHECKPOINT, "PR_CHECKPOINT", "Process stopped at checkpoint" },
#endif
#if defined (PR_FORKSTOP)
/* OSF only */
{ PR_FORKSTOP, "PR_FORKSTOP", "Process stopped at end of fork call" },
#endif
#if defined (PR_TCRSTOP)
/* OSF only */
{ PR_TCRSTOP, "PR_TCRSTOP", "Process stopped on thread creation" },
#endif
#if defined (PR_TTSTOP)
/* OSF only */
{ PR_TTSTOP, "PR_TTSTOP", "Process stopped on thread termination" },
#endif
#if defined (PR_DEAD)
/* OSF only */
{ PR_DEAD, "PR_DEAD", "Process stopped in exit system call" },
#endif
};
void
proc_prettyfprint_why (file, why, what, verbose)
FILE *file;
unsigned long why;
unsigned long what;
int verbose;
{
int i;
if (why == 0)
return;
for (i = 0; i < sizeof (pr_why_table) / sizeof (pr_why_table[0]); i++)
if (why == pr_why_table[i].value)
{
fprintf (file, "%s ", pr_why_table[i].name);
if (verbose)
fprintf (file, ": %s ", pr_why_table[i].desc);
switch (why) {
#ifdef PR_REQUESTED
case PR_REQUESTED:
break; /* Nothing more to print. */
#endif
#ifdef PR_SIGNALLED
case PR_SIGNALLED:
proc_prettyfprint_signal (file, what, verbose);
break;
#endif
#ifdef PR_FAULTED
case PR_FAULTED:
proc_prettyfprint_fault (file, what, verbose);
break;
#endif
#ifdef PR_SYSENTRY
case PR_SYSENTRY:
fprintf (file, "Entry to ");
proc_prettyfprint_syscall (file, what, verbose);
break;
#endif
#ifdef PR_SYSEXIT
case PR_SYSEXIT:
fprintf (file, "Exit from ");
proc_prettyfprint_syscall (file, what, verbose);
break;
#endif
#ifdef PR_JOBCONTROL
case PR_JOBCONTROL:
proc_prettyfprint_signal (file, what, verbose);
break;
#endif
#ifdef PR_DEAD
case PR_DEAD:
fprintf (file, "Exit status: %d\n", what);
break;
#endif
default:
fprintf (file, "Unknown why %ld, what %ld\n", why, what);
break;
}
fprintf (file, "\n");
return;
}
fprintf (file, "Unknown pr_why.\n");
}
void
proc_prettyprint_why (why, what, verbose)
unsigned long why;
unsigned long what;
int verbose;
{
proc_prettyfprint_why (stdout, why, what, verbose);
}

View File

@ -24,6 +24,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "target.h"
#include "gdbcore.h"
#include "gdbcmd.h"
#include "gdbthread.h"
#if defined (NEW_PROC_API)
#define _STRUCTURED_PROC 1 /* Should be done by configure script. */
@ -33,6 +34,11 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <sys/fault.h>
#include <sys/syscall.h>
#include <sys/errno.h>
#include <sys/wait.h>
#include <signal.h>
#include <ctype.h>
#include "proc-utils.h"
/*
* PROCFS.C
@ -403,11 +409,13 @@ find_procinfo_or_die (pid, tid)
procinfo *pi = find_procinfo (pid, tid);
if (pi == NULL)
if (tid)
error ("procfs: couldn't find pid %d (kernel thread %d) in procinfo list.",
pid, tid);
else
error ("procfs: couldn't find pid %d in procinfo list.", pid);
{
if (tid)
error ("procfs: couldn't find pid %d (kernel thread %d) in procinfo list.",
pid, tid);
else
error ("procfs: couldn't find pid %d in procinfo list.", pid);
}
return pi;
}
@ -431,7 +439,9 @@ open_procinfo_files (pi, which)
procinfo *pi;
int which;
{
#ifdef NEW_PROC_API
char tmp[MAX_PROC_NAME_SIZE];
#endif
int fd;
/*
@ -2627,11 +2637,14 @@ proc_iterate_over_mappings (func)
struct prmap *map;
procinfo *pi;
#ifndef NEW_PROC_API /* avoid compiler warning */
int nmaps = 0, i;
int nmaps = 0;
int i;
#else
int map_fd;
char pathname[MAX_PROC_NAME_SIZE];
#endif
int funcstat = 0;
int fd, map_fd;
char pathname[MAX_PROC_NAME_SIZE];
int fd;
pi = find_procinfo_or_die (PIDGET (inferior_pid), 0);
@ -3762,9 +3775,9 @@ wait_again:
if ((nsysargs = proc_nsysarg (pi)) > 0 &&
(sysargs = proc_sysargs (pi)) != NULL)
{
printf_filtered ("%d syscall arguments:\n", nsysargs);
printf_filtered ("%ld syscall arguments:\n", nsysargs);
for (i = 0; i < nsysargs; i++)
printf_filtered ("#%d: 0x%08x\n",
printf_filtered ("#%ld: 0x%08x\n",
i, sysargs[i]);
}
@ -3876,9 +3889,9 @@ wait_again:
if ((nsysargs = proc_nsysarg (pi)) > 0 &&
(sysargs = proc_sysargs (pi)) != NULL)
{
printf_filtered ("%d syscall arguments:\n", nsysargs);
printf_filtered ("%ld syscall arguments:\n", nsysargs);
for (i = 0; i < nsysargs; i++)
printf_filtered ("#%d: 0x%08x\n",
printf_filtered ("#%ld: 0x%08x\n",
i, sysargs[i]);
}
}
@ -4141,6 +4154,7 @@ invalidate_cache (parent, pi, ptr)
return 0;
}
#if 0
/*
* Function: make_signal_thread_runnable
*
@ -4165,6 +4179,7 @@ make_signal_thread_runnable (process, pi, ptr)
#endif
return 0;
}
#endif
/*
* Function: target_resume
@ -4216,7 +4231,7 @@ procfs_resume (pid, step, signo)
/* Convert signal to host numbering. */
if (signo == 0 ||
signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop)
(signo == TARGET_SIGNAL_STOP && pi->ignore_next_sigstop))
native_signo = 0;
else
native_signo = target_signal_to_host (signo);
@ -4603,7 +4618,6 @@ procfs_set_exec_trap ()
procinfo *pi;
sysset_t exitset;
sysset_t entryset;
if ((pi = create_procinfo (getpid (), 0)) == NULL)
perror_with_name ("procfs: create_procinfo failed in child.");
@ -5027,11 +5041,12 @@ info_proc_cmd (args, from_tty)
old_chain = make_cleanup (null_cleanup, 0);
if (args)
if ((argv = buildargv (args)) == NULL)
nomem (0);
else
make_cleanup ((make_cleanup_func) freeargv, argv);
{
if ((argv = buildargv (args)) == NULL)
nomem (0);
else
make_cleanup ((make_cleanup_func) freeargv, argv);
}
while (argv != NULL && *argv != NULL)
{
if (isdigit (argv[0][0]))

View File

@ -15,6 +15,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include "adp.h"
#include "sys.h"
@ -48,9 +49,14 @@ static void openLogFile ()
perror ("fopen");
}
else
/* The following line is equivalent to: */
/* setlinebuf (angelDebugLogFile); */
setvbuf(angelDebugLogFile, (char *)NULL, _IOLBF, 0);
{
/* The following line is equivalent to: */
/* setlinebuf (angelDebugLogFile); */
setvbuf(angelDebugLogFile, (char *)NULL, _IOLBF, 0);
#if defined(__CYGWIN32__) || defined(__CYGWIN__)
setmode(fileno(angelDebugLogFile), O_TEXT);
#endif
}
time (&t);
fprintf (angelDebugLogFile,"ADP log file opened at %s\n",asctime(localtime(&t)));

View File

@ -3203,12 +3203,31 @@ get_field (data, order, total_len, start, len)
int cur_bitshift;
/* Start at the least significant part of the field. */
cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little || order == floatformat_littlebyte_bigword)
cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
cur_bitshift =
((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
result = *(data + cur_byte) >> (-cur_bitshift);
{
/* We start counting from the other end (i.e, from the high bytes
rather than the low bytes). As such, we need to be concerned
with what happens if bit 0 doesn't start on a byte boundary.
I.e, we need to properly handle the case where total_len is
not evenly divisible by 8. So we compute ``excess'' which
represents the number of bits from the end of our starting
byte needed to get to bit 0. */
int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT);
cur_byte = (total_len / FLOATFORMAT_CHAR_BIT)
- ((start + len + excess) / FLOATFORMAT_CHAR_BIT);
cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT)
- FLOATFORMAT_CHAR_BIT;
}
else
{
cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
cur_bitshift =
((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
}
if (cur_bitshift > -FLOATFORMAT_CHAR_BIT)
result = *(data + cur_byte) >> (-cur_bitshift);
else
result = 0;
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little || order == floatformat_littlebyte_bigword)
++cur_byte;
@ -3218,20 +3237,16 @@ get_field (data, order, total_len, start, len)
/* Move towards the most significant part of the field. */
while (cur_bitshift < len)
{
if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
/* This is the last byte; zero out the bits which are not part of
this field. */
result |=
(*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1))
<< cur_bitshift;
else
result |= *(data + cur_byte) << cur_bitshift;
result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little || order == floatformat_littlebyte_bigword)
++cur_byte;
else
--cur_byte;
}
if (len < sizeof(result) * FLOATFORMAT_CHAR_BIT)
/* Mask out bits which are not part of the field */
result &= ((1UL << len) - 1);
return result;
}
@ -3368,15 +3383,28 @@ put_field (data, order, total_len, start, len, stuff_to_put)
int cur_bitshift;
/* Start at the least significant part of the field. */
cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little || order == floatformat_littlebyte_bigword)
cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
cur_bitshift =
((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
*(data + cur_byte) &=
~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
*(data + cur_byte) |=
(stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
{
int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT);
cur_byte = (total_len / FLOATFORMAT_CHAR_BIT)
- ((start + len + excess) / FLOATFORMAT_CHAR_BIT);
cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT)
- FLOATFORMAT_CHAR_BIT;
}
else
{
cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
cur_bitshift =
((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
}
if (cur_bitshift > -FLOATFORMAT_CHAR_BIT)
{
*(data + cur_byte) &=
~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1)
<< (-cur_bitshift));
*(data + cur_byte) |=
(stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
}
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little || order == floatformat_littlebyte_bigword)
++cur_byte;

View File

@ -74,6 +74,7 @@ extern QI ROLQI (QI, int);
#define NEGQI(x) (- (x))
#define NOTQI(x) (! (QI) (x))
#define INVQI(x) (~ (x))
#define ABSQI(x) ((x) < 0 ? -(x) : (x))
#define EQQI(x, y) ((QI) (x) == (QI) (y))
#define NEQI(x, y) ((QI) (x) != (QI) (y))
#define LTQI(x, y) ((QI) (x) < (QI) (y))
@ -103,6 +104,7 @@ extern HI ROLHI (HI, int);
#define NEGHI(x) (- (x))
#define NOTHI(x) (! (HI) (x))
#define INVHI(x) (~ (x))
#define ABSHI(x) ((x) < 0 ? -(x) : (x))
#define EQHI(x, y) ((HI) (x) == (HI) (y))
#define NEHI(x, y) ((HI) (x) != (HI) (y))
#define LTHI(x, y) ((HI) (x) < (HI) (y))
@ -132,6 +134,7 @@ extern SI ROLSI (SI, int);
#define NEGSI(x) (- (x))
#define NOTSI(x) (! (SI) (x))
#define INVSI(x) (~ (x))
#define ABSSI(x) ((x) < 0 ? -(x) : (x))
#define EQSI(x, y) ((SI) (x) == (SI) (y))
#define NESI(x, y) ((SI) (x) != (SI) (y))
#define LTSI(x, y) ((SI) (x) < (SI) (y))
@ -191,6 +194,7 @@ extern DI ROLDI (DI, int);
#define NEGDI(x) (- (x))
#define NOTDI(x) (! (DI) (x))
#define INVDI(x) (~ (x))
#define ABSDI(x) ((x) < 0 ? -(x) : (x))
#define EQDI(x, y) ((DI) (x) == (DI) (y))
#define NEDI(x, y) ((DI) (x) != (DI) (y))
#define LTDI(x, y) ((DI) (x) < (DI) (y))
@ -219,6 +223,7 @@ extern DI EXTQIDI (QI);
#define EXTQIDI(x) ((DI) (QI) (x))
#endif
#define EXTHISI(x) ((SI) (HI) (x))
#define EXTSISI(x) ((SI) (SI) (x))
#if defined (DI_FN_SUPPORT)
extern DI EXTHIDI (HI);
#else
@ -246,6 +251,8 @@ extern DI ZEXTQIDI (QI);
#define ZEXTQIDI(x) ((DI) (UQI) (x))
#endif
#define ZEXTHISI(x) ((SI) (UHI) (x))
#define ZEXTHIHI(x) ((HI) (UHI) (x))
#define ZEXTSISI(x) ((SI) (USI) (x))
#if defined (DI_FN_SUPPORT)
extern DI ZEXTHIDI (HI);
#else
@ -453,6 +460,53 @@ SUBOFSI (SI a, SI b, BI c)
return res;
}
SEMOPS_INLINE HI
ADDCHI (HI a, HI b, BI c)
{
HI res = ADDHI (a, ADDHI (b, c));
return res;
}
SEMOPS_INLINE BI
ADDCFHI (HI a, HI b, BI c)
{
HI tmp = ADDHI (a, ADDHI (b, c));
BI res = ((UHI) tmp < (UHI) a) || (c && tmp == a);
return res;
}
SEMOPS_INLINE BI
ADDOFHI (HI a, HI b, BI c)
{
HI tmp = ADDHI (a, ADDHI (b, c));
BI res = (((a < 0) == (b < 0))
&& ((a < 0) != (tmp < 0)));
return res;
}
SEMOPS_INLINE HI
SUBCHI (HI a, HI b, BI c)
{
HI res = SUBHI (a, ADDHI (b, c));
return res;
}
SEMOPS_INLINE BI
SUBCFHI (HI a, HI b, BI c)
{
BI res = ((UHI) a < (UHI) b) || (c && a == b);
return res;
}
SEMOPS_INLINE BI
SUBOFHI (HI a, HI b, BI c)
{
HI tmp = SUBHI (a, ADDHI (b, c));
BI res = (((a < 0) != (b < 0))
&& ((a < 0) != (tmp < 0)));
return res;
}
#else
SI ADDCSI (SI, SI, BI);
@ -461,6 +515,12 @@ UBI ADDOFSI (SI, SI, BI);
SI SUBCSI (SI, SI, BI);
UBI SUBCFSI (SI, SI, BI);
UBI SUBOFSI (SI, SI, BI);
HI ADDCHI (HI, HI, BI);
UBI ADDCFHI (HI, HI, BI);
UBI ADDOFHI (HI, HI, BI);
HI SUBCHI (HI, HI, BI);
UBI SUBCFHI (HI, HI, BI);
UBI SUBOFHI (HI, HI, BI);
#endif

81
sim/configure vendored
View File

@ -30,6 +30,7 @@ program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
sitefile=
srcdir=
target=NONE
verbose=
@ -144,6 +145,7 @@ Configuration:
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--site-file=FILE use FILE as the site file
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
@ -314,6 +316,11 @@ EOF
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
-site-file | --site-file | --site-fil | --site-fi | --site-f)
ac_prev=sitefile ;;
-site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
sitefile="$ac_optarg" ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
@ -479,12 +486,16 @@ fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
if test -z "$sitefile"; then
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
else
CONFIG_SITE="$sitefile"
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
@ -527,7 +538,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:531: checking for $ac_word" >&5
echo "configure:542: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -557,7 +568,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:561: checking for $ac_word" >&5
echo "configure:572: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -608,7 +619,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:612: checking for $ac_word" >&5
echo "configure:623: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -640,7 +651,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:644: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
echo "configure:655: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -651,12 +662,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
#line 655 "configure"
#line 666 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@ -682,12 +693,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:686: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "configure:697: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:691: checking whether we are using GNU C" >&5
echo "configure:702: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -696,7 +707,7 @@ else
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:711: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@ -715,7 +726,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:719: checking whether ${CC-cc} accepts -g" >&5
echo "configure:730: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -777,7 +788,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:781: checking for a BSD compatible install" >&5
echo "configure:792: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@ -836,7 +847,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:840: checking host system type" >&5
echo "configure:851: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@ -857,7 +868,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:861: checking build system type" >&5
echo "configure:872: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@ -883,7 +894,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
set dummy ${ac_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:887: checking for $ac_word" >&5
echo "configure:898: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -915,7 +926,7 @@ fi
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:919: checking for $ac_word" >&5
echo "configure:930: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -947,7 +958,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:951: checking for $ac_word" >&5
echo "configure:962: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1027,7 +1038,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:1031: checking host system type" >&5
echo "configure:1042: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@ -1048,7 +1059,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
echo "configure:1052: checking target system type" >&5
echo "configure:1063: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@ -1066,7 +1077,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:1070: checking build system type" >&5
echo "configure:1081: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@ -1110,7 +1121,7 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1114: checking for $ac_word" >&5
echo "configure:1125: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1140,7 +1151,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1144: checking for $ac_word" >&5
echo "configure:1155: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1191,7 +1202,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1195: checking for $ac_word" >&5
echo "configure:1206: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1223,7 +1234,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1227: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
echo "configure:1238: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -1234,12 +1245,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
#line 1238 "configure"
#line 1249 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:1243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@ -1265,12 +1276,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1269: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "configure:1280: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:1274: checking whether we are using GNU C" >&5
echo "configure:1285: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1279,7 +1290,7 @@ else
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1283: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1294: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@ -1298,7 +1309,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:1302: checking whether ${CC-cc} accepts -g" >&5
echo "configure:1313: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1336,7 +1347,7 @@ AR=${AR-ar}
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:1340: checking for $ac_word" >&5
echo "configure:1351: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else

View File

@ -1,4 +1,4 @@
/* Simulator for Motorolla's MCore processor
/* Simulator for Motorola's MCore processor
Copyright (C) 1999 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.

View File

@ -1,4 +1,4 @@
/* System includes and definitions used by the Motorolla MCore simulator.
/* System includes and definitions used by the Motorola MCore simulator.
Copyright (C) 1999 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.