/[pcsx2_0.9.7]/trunk/pcsx2/Linux/LnxHostSys.cpp
ViewVC logotype

Contents of /trunk/pcsx2/Linux/LnxHostSys.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (show annotations) (download)
Tue Sep 7 03:24:11 2010 UTC (10 years, 4 months ago) by william
File size: 1890 byte(s)
committing r3113 initial commit again...
1 /* PCSX2 - PS2 Emulator for PCs
2 * Copyright (C) 2002-2010 PCSX2 Dev Team
3 *
4 * PCSX2 is free software: you can redistribute it and/or modify it under the terms
5 * of the GNU Lesser General Public License as published by the Free Software Found-
6 * ation, either version 3 of the License, or (at your option) any later version.
7 *
8 * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
9 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
10 * PURPOSE. See the GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License along with PCSX2.
13 * If not, see <http://www.gnu.org/licenses/>.
14 */
15
16 #include "PrecompiledHeader.h"
17
18 #include <sys/mman.h>
19 #include <signal.h>
20 #include "Common.h"
21 #include "System/PageFaultSource.h"
22
23 extern void SignalExit(int sig);
24
25 static const uptr m_pagemask = getpagesize()-1;
26
27 // Linux implementation of SIGSEGV handler. Bind it using sigaction().
28 static void SysPageFaultSignalFilter( int signal, siginfo_t *siginfo, void * )
29 {
30 // Note: Use of most stdio functions isn't safe here. Avoid console logs,
31 // assertions, file logs, or just about anything else useful.
32
33 Source_PageFault.Dispatch( PageFaultInfo( (uptr)siginfo->si_addr & ~m_pagemask ) );
34
35 // resumes execution right where we left off (re-executes instruction that
36 // caused the SIGSEGV).
37 if( Source_PageFault.WasHandled() ) return;
38
39 // Bad mojo! Completely invalid address.
40 // Instigate a trap if we're in a debugger, and if not then do a SIGKILL.
41
42 wxTrap();
43 if( !IsDebugBuild ) raise( SIGKILL );
44 }
45
46 void InstallSignalHandler()
47 {
48 struct sigaction sa;
49
50 sigemptyset(&sa.sa_mask);
51 sa.sa_flags = SA_SIGINFO;
52 sa.sa_sigaction = SysPageFaultSignalFilter;
53 sigaction(SIGSEGV, &sa, NULL);
54 }
55
56 void NTFS_CompressFile( const wxString& file, bool compressStatus ) {}

  ViewVC Help
Powered by ViewVC 1.1.22