ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/main_unix.cpp
(Generate patch)

Comparing BasiliskII/src/Unix/main_unix.cpp (file contents):
Revision 1.53 by cebix, 2003-07-25T13:41:58Z vs.
Revision 1.54 by gbeauche, 2003-09-29T07:02:58Z

# Line 210 | Line 210 | char *strdup(const char *s)
210  
211  
212   /*
213 + *  SIGSEGV handler
214 + */
215 +
216 + static sigsegv_return_t sigsegv_handler(sigsegv_address_t fault_address, sigsegv_address_t fault_instruction)
217 + {
218 + #if ENABLE_VOSF
219 +        // Handle screen fault
220 +        extern bool Screen_fault_handler(sigsegv_address_t, sigsegv_address_t);
221 +        if (Screen_fault_handler(fault_address, fault_instruction))
222 +                return SIGSEGV_RETURN_SUCCESS;
223 + #endif
224 +
225 + #ifdef HAVE_SIGSEGV_SKIP_INSTRUCTION
226 +        // Ignore writes to ROM
227 +        if (((uintptr)fault_address - (uintptr)ROMBaseHost) < ROMSize)
228 +                return SIGSEGV_RETURN_SKIP_INSTRUCTION;
229 +
230 +        // Ignore all other faults, if requested
231 +        if (PrefsFindBool("ignoresegv"))
232 +                return SIGSEGV_RETURN_SKIP_INSTRUCTION;
233 + #endif
234 +
235 +        return SIGSEGV_RETURN_FAILURE;
236 + }
237 +
238 + /*
239   *  Dump state when everything went wrong after a SEGV
240   */
241  
# Line 357 | Line 383 | int main(int argc, char **argv)
383                  if (!PrefsEditor())
384                          QuitEmulator();
385  
386 <        // Register request to ignore all segmentation faults
387 < #ifdef HAVE_SIGSEGV_SKIP_INSTRUCTION
388 <        if (PrefsFindBool("ignoresegv"))
389 <                sigsegv_add_ignore_range(0, ~(0UL), SIGSEGV_TRANSFER_LOAD | SIGSEGV_TRANSFER_STORE);
364 < #endif
365 <
386 >        // Install the handler for SIGSEGV
387 >        if (!sigsegv_install_handler(sigsegv_handler))
388 >                return false;
389 >        
390          // Register dump state function when we got mad after a segfault
391          sigsegv_set_dump_state(sigsegv_dump_state);
392  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines