mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
import gdb-2000-01-24 snapshot
This commit is contained in:
parent
b5f303f092
commit
0fda6bd286
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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"').
|
||||
|
@ -65,6 +65,7 @@ d30v-*-*) gdb_target=d30v ;;
|
||||
h8300-*-*) gdb_target=h8300 ;;
|
||||
h8500-*-*) gdb_target=h8500 ;;
|
||||
|
||||
|
||||
fr30-*-elf*) gdb_target=fr30 ;;
|
||||
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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
808
gdb/proc-api.c
Normal 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
1806
gdb/proc-events.c
Normal file
File diff suppressed because it is too large
Load Diff
296
gdb/proc-flags.c
Normal file
296
gdb/proc-flags.c
Normal 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
52
gdb/proc-utils.h
Normal 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
181
gdb/proc-why.c
Normal 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);
|
||||
}
|
53
gdb/procfs.c
53
gdb/procfs.c
@ -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]))
|
||||
|
@ -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)));
|
||||
|
70
gdb/utils.c
70
gdb/utils.c
@ -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;
|
||||
|
@ -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
81
sim/configure
vendored
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user