Changes needed to run on OS X... Example runs on my laptop now. No need to push...
[model-checker.git] / snapshot.cc
index 5a25bb14efbe24bbf88ad0e4d6de8238316f884b..2440b6e8bda8a06afa040475266e69d02094981e 100644 (file)
@@ -68,6 +68,7 @@ void HandlePF( int sig, siginfo_t *si, void * unused){
                exit( EXIT_FAILURE );
        }
        void* addr = ReturnPageAlignedAddress(si->si_addr);
+
        unsigned int backingpage=snapshotrecord->lastBackingPage++; //Could run out of pages...
        if (backingpage==snapshotrecord->maxBackingPages) {
                printf("Out of backing pages at %p\n", si->si_addr);
@@ -136,10 +137,17 @@ void initSnapShotLibrary(unsigned int numbackingpages,
        sa.sa_flags = SA_SIGINFO | SA_NODEFER | SA_RESTART | SA_ONSTACK;
        sigemptyset( &sa.sa_mask );
        sa.sa_sigaction = HandlePF;
+#ifdef MAC
+       if( sigaction( SIGBUS, &sa, NULL ) == -1 ){
+               printf("SIGACTION CANNOT BE INSTALLED\n");
+               exit(EXIT_FAILURE);
+       }
+#endif
        if( sigaction( SIGSEGV, &sa, NULL ) == -1 ){
                printf("SIGACTION CANNOT BE INSTALLED\n");
                exit(EXIT_FAILURE);
        }
+
        initSnapShotRecord(numbackingpages, numsnapshots, nummemoryregions);
 
        // EVIL HACK: We need to make sure that calls into the HandlePF method don't cause dynamic links
@@ -148,6 +156,7 @@ void initSnapShotLibrary(unsigned int numbackingpages,
 
        siginfo_t si;
        si.si_addr=ss.ss_sp;
+       si.si_code = 0;
        HandlePF(SIGSEGV, &si, NULL);
        snapshotrecord->lastBackingPage--; //remove the fake page we copied