ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/sigsegv.h
Revision: 1.6
Committed: 2003-09-29T07:02:58Z (21 years, 2 months ago) by gbeauche
Content type: text/plain
Branch: MAIN
Changes since 1.5: +8 -7 lines
Log Message:
New SIGSEGV API so that skip-instruction requests are more explicit. Yes,
that's api change, but that's cooler now for SheepShaver. ;-)

File Contents

# Content
1 /*
2 * sigsegv.h - SIGSEGV signals support
3 *
4 * Derived from Bruno Haible's work on his SIGSEGV library for clisp
5 * <http://clisp.sourceforge.net/>
6 *
7 * Basilisk II (C) 1997-2002 Christian Bauer
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24 #ifndef SIGSEGV_H
25 #define SIGSEGV_H
26
27 // Address type
28 typedef char * sigsegv_address_t;
29
30 // Transfer type (intended to be used a mask for sigsegv_*_ignore_range())
31 enum sigsegv_transfer_type_t {
32 SIGSEGV_TRANSFER_UNKNOWN = 0,
33 SIGSEGV_TRANSFER_LOAD = 1,
34 SIGSEGV_TRANSFER_STORE = 2,
35 };
36
37 // SIGSEGV handler return state
38 enum sigsegv_return_t {
39 SIGSEGV_RETURN_SUCCESS,
40 SIGSEGV_RETURN_FAILURE,
41 SIGSEGV_RETURN_SKIP_INSTRUCTION,
42 };
43
44 // Type of a SIGSEGV handler. Returns boolean expressing successful operation
45 typedef sigsegv_return_t (*sigsegv_fault_handler_t)(sigsegv_address_t fault_address, sigsegv_address_t instruction_address);
46
47 // Type of a SIGSEGV state dump function
48 typedef void (*sigsegv_state_dumper_t)(sigsegv_address_t fault_address, sigsegv_address_t instruction_address);
49
50 // Install a SIGSEGV handler. Returns boolean expressing success
51 extern bool sigsegv_install_handler(sigsegv_fault_handler_t handler);
52
53 // Remove the user SIGSEGV handler, revert to default behavior
54 extern void sigsegv_uninstall_handler(void);
55
56 // Set callback function when we cannot handle the fault
57 extern void sigsegv_set_dump_state(sigsegv_state_dumper_t handler);
58
59 // Define an address that is bound to be invalid for a program counter
60 const sigsegv_address_t SIGSEGV_INVALID_PC = (sigsegv_address_t)(-1);
61
62 #endif /* SIGSEGV_H */