From 18fb657b0c6f8abfe4048e5252a9ffab960acabc Mon Sep 17 00:00:00 2001 From: Brian Demsky Date: Sun, 3 Jun 2012 18:05:39 -0700 Subject: [PATCH] hack some stuff towards running on mac... unrelated bugs still.. --- Makefile | 10 +++++++-- snapshot-interface.cc | 50 ++++++++++++++++++++++++++++++++++++++++++- snapshot.cc | 7 ++++++ 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index de9051c..203ed68 100644 --- a/Makefile +++ b/Makefile @@ -16,21 +16,27 @@ SHMEM_CC=snapshot.cc malloc.c mymemory.cc SHMEM_O=snapshot.o malloc.o mymemory.o SHMEM_H=snapshot.h snapshotimp.h mymemory.h -CPPFLAGS=-Wall -g +CPPFLAGS=-Wall -g -O0 LDFLAGS=-ldl -lrt +SHARED=-shared all: $(BIN) debug: CPPFLAGS += -DCONFIG_DEBUG debug: all +mac: CPPFLAGS += -D_XOPEN_SOURCE -DMAC +mac: LDFLAGS=-ldl +mac: SHARED=-Wl,-undefined,dynamic_lookup -dynamiclib +mac: all + $(BIN): $(USER_O) $(LIB_SO) $(CXX) -o $(BIN) $(USER_O) -L. -l$(LIB_NAME) # note: implicit rule for generating $(USER_O) (i.e., userprog.c -> userprog.o) $(LIB_SO): $(MODEL_O) $(MODEL_H) $(SHMEM_O) $(SHMEM_H) - $(CXX) -shared -o $(LIB_SO) $(MODEL_O) $(SHMEM_O) $(LDFLAGS) + $(CXX) $(SHARED) -o $(LIB_SO) $(MODEL_O) $(SHMEM_O) $(LDFLAGS) malloc.o: malloc.c $(CC) -fPIC -c malloc.c -DMSPACES -DONLY_MSPACES $(CPPFLAGS) diff --git a/snapshot-interface.cc b/snapshot-interface.cc index 4def5c8..cece58d 100644 --- a/snapshot-interface.cc +++ b/snapshot-interface.cc @@ -11,15 +11,62 @@ #include #include #include - #include "common.h" + #define MYBINARYNAME "model" #define MYLIBRARYNAME "libmodel.so" #define MAPFILE_FORMAT "/proc/%d/maps" SnapshotStack * snapshotObject; +#ifdef MAC +void SnapshotGlobalSegments(){ + int pid = getpid(); + char buf[9000], execname[100]; + FILE *map; + + sprintf(execname, "vmmap -interleaved %d", pid); + map=popen(execname, "r"); + + if (!map) { + perror("popen"); + exit(EXIT_FAILURE); + } + + /* Wait for correct part */ + while (fgets(buf, sizeof(buf), map)) { + if (strstr(buf, "==== regions for process")) + break; + } + + while (fgets(buf, sizeof(buf), map)) { + char regionname[200] = ""; + char type[23]; + char smstr[23]; + char r, w, x; + char mr, mw, mx; + int size; + void *begin, *end; + + //Skip out at the end of the section + if (buf[0]=='\n') + break; + + sscanf(buf, "%22s %p-%p [%5dK] %c%c%c/%c%c%c SM=%3s %200s\n", &type, &begin, &end, &size, &r, &w, &x, &mr, &mw, &mx, smstr, regionname); + + if (w == 'w' && (strstr(regionname, MYBINARYNAME) || strstr(regionname, MYLIBRARYNAME))) { + printf("%s\n", buf); + + size_t len = ((uintptr_t)end - (uintptr_t)begin) / PAGESIZE; + if (len != 0) + addMemoryRegionToSnapShot(begin, len); + DEBUG("%45s: %18p - %18p\t%c%c%c%c\n", regionname, begin, end, r, w, x, p); + } + } + pclose(map); +} +#else void SnapshotGlobalSegments(){ int pid = getpid(); char buf[9000], filename[100]; @@ -46,6 +93,7 @@ void SnapshotGlobalSegments(){ } fclose(map); } +#endif //class definition of SnapshotStack..... //declaration of constructor.... diff --git a/snapshot.cc b/snapshot.cc index 5a25bb1..e3ca558 100644 --- a/snapshot.cc +++ b/snapshot.cc @@ -136,10 +136,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 -- 2.34.1