ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/sigsegv.h
Revision: 1.11
Committed: 2008-01-01T09:40:33Z (16 years, 11 months ago) by gbeauche
Content type: text/plain
Branch: MAIN
Changes since 1.10: +1 -1 lines
Log Message:
Happy New Year!

File Contents

# User Rev Content
1 gbeauche 1.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 gbeauche 1.11 * Basilisk II (C) 1997-2008 Christian Bauer
8 gbeauche 1.1 *
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 gbeauche 1.10 #define SIGSEGV_MAJOR_VERSION 1
28     #define SIGSEGV_MINOR_VERSION 0
29     #define SIGSEGV_MICRO_VERSION 0
30    
31     #define SIGSEGV_CHECK_VERSION(MAJOR, MINOR, MICRO) \
32     (SIGSEGV_MAJOR_VERSION > (MAJOR) || \
33     (SIGSEGV_MAJOR_VERSION == (MAJOR) && SIGSEGV_MINOR_VERSION > (MINOR)) || \
34     (SIGSEGV_MAJOR_VERSION == (MAJOR) && SIGSEGV_MINOR_VERSION == (MINOR) && SIGSEGV_MICRO_VERSION >= (MICRO)))
35    
36 gbeauche 1.1 // Address type
37 gbeauche 1.10 typedef char *sigsegv_address_t;
38    
39     // SIGSEGV handler argument (forward declaration)
40     struct sigsegv_info_t;
41 gbeauche 1.1
42 gbeauche 1.6 // SIGSEGV handler return state
43     enum sigsegv_return_t {
44     SIGSEGV_RETURN_SUCCESS,
45     SIGSEGV_RETURN_FAILURE,
46     SIGSEGV_RETURN_SKIP_INSTRUCTION,
47     };
48    
49 gbeauche 1.1 // Type of a SIGSEGV handler. Returns boolean expressing successful operation
50 gbeauche 1.10 typedef sigsegv_return_t (*sigsegv_fault_handler_t)(sigsegv_info_t *sip);
51 gbeauche 1.4
52     // Type of a SIGSEGV state dump function
53 gbeauche 1.10 typedef void (*sigsegv_state_dumper_t)(sigsegv_info_t *sip);
54 gbeauche 1.1
55     // Install a SIGSEGV handler. Returns boolean expressing success
56 gbeauche 1.4 extern bool sigsegv_install_handler(sigsegv_fault_handler_t handler);
57 gbeauche 1.1
58     // Remove the user SIGSEGV handler, revert to default behavior
59     extern void sigsegv_uninstall_handler(void);
60 gbeauche 1.3
61     // Set callback function when we cannot handle the fault
62 gbeauche 1.4 extern void sigsegv_set_dump_state(sigsegv_state_dumper_t handler);
63 gbeauche 1.3
64 gbeauche 1.10 // Return the address of the invalid memory reference
65     extern sigsegv_address_t sigsegv_get_fault_address(sigsegv_info_t *sip);
66    
67     // Return the address of the instruction that caused the fault, or
68     // SIGSEGV_INVALID_ADDRESS if we could not retrieve this information
69     extern sigsegv_address_t sigsegv_get_fault_instruction_address(sigsegv_info_t *sip);
70    
71 gbeauche 1.1 // Define an address that is bound to be invalid for a program counter
72 gbeauche 1.10 const sigsegv_address_t SIGSEGV_INVALID_ADDRESS = (sigsegv_address_t)(-1UL);
73 gbeauche 1.1
74     #endif /* SIGSEGV_H */