mirror of
https://frontier.innolan.net/github/amiga-ixemul.git
synced 2026-09-13 22:02:02 +00:00
79 lines
3.1 KiB
C
79 lines
3.1 KiB
C
/*
|
|
* This file is part of ixemul.library for the Amiga.
|
|
* Copyright (C) 1991, 1992 Markus M. Wild
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#ifndef _SYS_TRACECNTL_H
|
|
#define _SYS_TRACECNTL_H
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/syscall.h>
|
|
#include <exec/ports.h>
|
|
|
|
struct trace_packet {
|
|
struct Message tp_message;
|
|
struct MsgPort *tp_tracer_port; /* set this up before INSTALL !! */
|
|
int tp_flags; /* currently ignored, *must* be 0 !! */
|
|
pid_t tp_pid; /* pid, or 0 to trace all but self */
|
|
enum _syscall_ tp_syscall; /* sc, or 0 to trace all */
|
|
/* these are the arguments filled in on a trace message */
|
|
int tp_is_entry; /* true when entry, false when exit */
|
|
int *tp_argv; /* arguments of the function.
|
|
argv[0] is always the syscall,
|
|
argv[1] is the result if !tp_is_entry,
|
|
now follows the return address in
|
|
the program that did this call, then
|
|
the following elements are the
|
|
arguments to the function */
|
|
int *tp_errno; /* the address of the process errno */
|
|
/* here you can specify actions to be performed when you reply to this msg */
|
|
int tp_action; /* available values see below */
|
|
};
|
|
|
|
#define TRACE_ACTION_JSR 1 /* jsr into the syscall, and trace
|
|
result (with tp_is_entry == 0) */
|
|
#define TRACE_ACTION_JMP 0 /* jmp into the syscall, no result trace */
|
|
#define TRACE_ACTION_RTS -1 /* causes the syscall to return with
|
|
the value in argv[0] without actually
|
|
performing the call */
|
|
#define TRACE_ACTION_ABORT 2 /* causes the process to call abort() */
|
|
|
|
|
|
/* these are the commands available in tracecntl (): */
|
|
enum trace_cmd {
|
|
/* install a trace handling packet. for INSTALL_TRACE_HANDLER you
|
|
have to initialize :
|
|
tp_tracer_port here's where the packet is sent
|
|
tp_pid get notice for this pid (0 for all)
|
|
tp_syscall get notice for this syscall (0 for all)
|
|
*/
|
|
TRACE_INSTALL_HANDLER,
|
|
|
|
/* remove the installed packet. Don't (!) do this if the handler
|
|
is expecting a reply from you. */
|
|
TRACE_REMOVE_HANDLER,
|
|
|
|
/* to be extended ;-)) */
|
|
};
|
|
|
|
/* results:
|
|
0: handler installed
|
|
-1: handler not installed, library configured without tracecntl support */
|
|
int tracecntl (enum trace_cmd, struct trace_packet *);
|
|
|
|
#endif /* _SYS_TRACECNTL */
|