Changeset 93266c5 in git
- Timestamp:
- Dec 7, 1998, 9:48:27 AM (25 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- a8213b0b8b3ace6b1fef40b50aac8147ab7b4381
- Parents:
- 7f0e6fea6bba489a550307279a2809c1dd27d593
- Location:
- Singular
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/Makefile.in
r7f0e6f r93266c5 86 86 87 87 CSOURCES=gmalloc.c mmalloc.c mmheap.c mmpage.c mmcheck.c mmisc.c mmtables.c \ 88 mmbt.c weight0.c find_exec.c getopt.c fereadl.c 88 mmbt.c weight0.c find_exec.c getopt.c fereadl.c page.c 89 89 90 90 SOURCES=${CSOURCES} ${CXXSOURCES} grammar.y scanner.l libparse.l spSpolyLoop.pl … … 96 96 cntrlc.h ipprint.h ring.h timer.h \ 97 97 febase.h ipshell.h shortfl.h tok.h \ 98 mmemory.h mmprivate.h mmheap.h mmpage.h \98 mmemory.h mmprivate.h mmheap.h mmpage.h page.h \ 99 99 ffields.h khstd.h silink.h \ 100 100 fglm.h comm.h kstd1.h modulop.h sing_dbm.h weight.h \ … … 124 124 ipid.o ipshell.o iplib.o ipassign.o ipconv.o ipprint.o\ 125 125 polys.o polys0.o polys1.o polys-impl.o extra.o\ 126 mminit.o mmtables.o mmalloc.o mmheap.o mmpage.o \126 mminit.o mmtables.o mmalloc.o mmheap.o mmpage.o page.o \ 127 127 mmisc.o mmcheck.o mmbt.o sing_dld.o sing_dbm.o silink.o \ 128 128 sing_mp.o fglm.o fglmzero.o fglmvec.o fglmhom.o fglmgauss.o cntrlc.o \ … … 349 349 pcv.og 350 350 351 OBJG2= mmalloc.og mmheap.og mmpage.og mmcheck.og mmbt.og \351 OBJG2= mmalloc.og mmheap.og mmpage.og mmcheck.og mmbt.og page.og \ 352 352 mmisc.og mmtables.og weight0.og find_exec.og getopt.og fereadl.og 353 353 … … 425 425 pcv.op 426 426 427 OBJP2= mmalloc.op mmheap.op mmpage.op mmcheck.op mmbt.op \427 OBJP2= mmalloc.op mmheap.op mmpage.op mmcheck.op mmbt.op page.op \ 428 428 mmisc.op mmtables.op weight0.op find_exec.op getopt.op fereadl.op 429 429 … … 451 451 pcv.ob 452 452 453 OBJB2= mmalloc.ob mmheap.ob mmpage.ob mmcheck.ob mmbt.ob \453 OBJB2= mmalloc.ob mmheap.ob mmpage.ob mmcheck.ob mmbt.ob page.ob\ 454 454 mmisc.ob mmtables.ob weight0.ob find_exec.ob getopt.ob fereadl.ob 455 455 -
Singular/cntrlc.cc
r7f0e6f r93266c5 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: cntrlc.cc,v 1.2 0 1998-09-24 09:59:36Singular Exp $ */4 /* $Id: cntrlc.cc,v 1.21 1998-12-07 08:48:23 Singular Exp $ */ 5 5 /* 6 6 * ABSTRACT - interupt handling … … 132 132 133 133 #ifdef PAGE_TEST 134 #ifdef PAGE_COUNT135 static int page_segv_count=0;136 #endif137 134 void sig11_handler(int sig, sigcontext s) 138 135 { 139 #ifdef PAGE_COUNT 140 page_segv_count++; 141 #endif 142 long base =s.cr2&(~4095); 143 int i=page_tab_ind-1; 136 unsigned long base =(unsigned long)(s.cr2&(~4095)); 137 int i; 138 i=mmPage_tab_ind-1; 139 while (mmPage_tab[i]!=base) i--; 140 mmUse_tab[i]='1'; 141 mmPage_tab_acc++; 142 mmPage_AllowAccess((void *)base); 143 signal(SIGSEGV,(si_hdl_typ)sig11_handler); 144 } 145 146 void sigalarm_handler(int sig, sigcontext s) 147 { 148 int i=mmPage_tab_ind-1; 149 mmWriteStat(); 144 150 for(;i>=0;i--) 145 151 { 146 if (page_tab[i]==base) { use_tab[i]='X'; break; } 147 } 148 Page_AllowAccess((void *)base, 4096); 149 signal(SIGSEGV,(si_hdl_typ)sig11_handler); 150 } 151 152 void sigalarm_handler(int sig, sigcontext s) 153 { 154 int i=page_tab_ind-1; 155 #ifdef PAGE_COUNT 156 write(2,use_tab,page_segv_count); 157 page_segv_count=0; 158 #else 159 write(2,use_tab,page_tab_ind); 160 #endif 161 write(2,"<\n",2); 162 for(;i>=0;i--) 163 { 164 Page_DenyAccess((void *)page_tab[i],4096); 165 #ifndef PAGE_COUNT 166 use_tab[i]=' '; 167 #endif 152 mmPage_DenyAccess((void *)mmPage_tab[i]); 168 153 } 169 154 struct itimerval t,o; … … 176 161 signal(SIGVTALRM,(si_hdl_typ)sigalarm_handler); 177 162 } 178 179 163 #endif 180 164 … … 187 171 #ifdef PAGE_TEST 188 172 signal(SIGSEGV,(si_hdl_typ)sig11_handler); 189 page_tab_ind=0;190 173 struct itimerval t,o; 191 174 memset(&t,0,sizeof(t)); -
Singular/misc.cc
r7f0e6f r93266c5 19 19 #include "cntrlc.h" 20 20 #include "mmemory.h" 21 #include "page.h" 21 22 #include "ipid.h" 22 23 #include "ipshell.h" … … 88 89 void m2_end(short i) 89 90 { 91 #ifdef PAGE_TEST 92 mmEndStat(); 93 #endif 90 94 #ifdef HAVE_TCL 91 95 if (tclmode) -
Singular/mmpage.h
r7f0e6f r93266c5 1 1 #ifndef MMPAGE_H 2 2 #define MMPAGE_H 3 #include "mod2.h" 3 4 #ifdef PAGE_TEST 5 #undef PALLOC 6 #define PALLOC mmPage_Create 7 #undef PFREE 8 #define PFREE mmPage_Delete 9 #endif 4 10 5 11 /*********************************************************************** -
Singular/mmprivate.h
r7f0e6f r93266c5 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: mmprivate.h,v 1. 1 1998-12-02 13:57:36 obachmanExp $ */6 /* $Id: mmprivate.h,v 1.2 1998-12-07 08:48:25 Singular Exp $ */ 7 7 /* 8 8 * ABSTRACT 9 9 */ 10 #include "mod2.h"11 10 #include "structs.h" 12 11 #include "mmheap.h" -
Singular/mod2.h.in
r7f0e6f r93266c5 346 346 /* #define MM_STAT 1 */ 347 347 /* #define PAGE_TEST */ 348 /* #define PAGE_COUNT */349 348 350 349 /* define YYDEBUG 1 for debugging bison texts, 0 otherwise */ … … 384 383 #define buildin_rand 1 385 384 #endif 386 #endif387 388 #ifdef PAGE_COUNT389 #define PAGE_TEST390 385 #endif 391 386 -
Singular/page.c
r7f0e6f r93266c5 12 12 #include <sys/types.h> 13 13 #include <sys/times.h> 14 15 unsigned long page_tab[2048]; 16 char use_tab [2048]; 17 int page_tab_ind=2049; 18 void * 19 Page_Create(size_t size); 20 void 21 Page_AllowAccess(void * address, size_t size); 22 void 23 Page_DenyAccess(void * address, size_t size); 24 size_t 25 Page_Size(void); 14 #include "tok.h" 15 #include "page.h" 16 17 unsigned long mmPage_tab[MAX_PAGE_TAB]; 18 char mmUse_tab [MAX_PAGE_TAB]; 19 int mmPage_tab_ind=0; 20 int mmPage_tab_acc=0; 21 static caddr_t startAddr = (caddr_t) 0; 22 26 23 #ifndef PROT_NONE 27 24 #define PROT_NONE 0 … … 32 29 #endif 33 30 34 static caddr_t startAddr = (caddr_t) 0;35 31 36 32 extern int sys_nerr; 37 33 extern char * sys_errlist[]; 38 34 39 static const char * 40 stringErrorReport(void) 35 static const char * mmStringErrorReport(void) 41 36 { 42 37 if ( errno > 0 && errno < sys_nerr ) … … 51 46 #if defined(MAP_ANONYMOUS) 52 47 void * 53 Page_Create(size_t size)48 mmPage_Create(size_t size) 54 49 { 55 50 caddr_t allocation; … … 86 81 87 82 if ( allocation == (caddr_t)-1 ) 88 printf("mmap() failed: %s", stringErrorReport()); 89 90 page_tab[page_tab_ind]=allocation; 91 page_tab_ind++; 83 printf("mmap() failed: %s", mmStringErrorReport()); 84 85 if (mmPage_tab_ind<MAX_PAGE_TAB) 86 { 87 mmPage_tab[mmPage_tab_ind]=(long)allocation; 88 if (mmPage_tab_ind==0) 89 { 90 memset(mmUse_tab,'0',MAX_PAGE_TAB); 91 } 92 mmPage_tab_ind++; 93 } 92 94 return (void *)allocation; 93 95 } 94 96 #else 95 void * 96 Page_Create(size_t size) 97 void * mmPage_Create(size_t size) 97 98 { 98 99 static int devZeroFd = -1; 99 100 caddr_t allocation; 100 101 101 if ( devZeroFd == -1 ) { 102 if ( devZeroFd == -1 ) 103 { 102 104 devZeroFd = open("/dev/zero", O_RDWR); 103 105 if ( devZeroFd < 0 ) 104 printf( 105 "open() on /dev/zero failed: %s" 106 ,stringErrorReport()); 106 printf( "open() on /dev/zero failed: %s",mmStringErrorReport()); 107 107 } 108 108 … … 128 128 129 129 if ( allocation == (caddr_t)-1 ) 130 printf("mmap() failed: %s", stringErrorReport()); 131 132 page_tab[page_tab_ind]=allocation; 133 page_tab_ind++; 130 printf("mmap() failed: %s", mmStringErrorReport()); 131 132 if (mmPage_tab_ind<MAX_PAGE_TAB) 133 { 134 mmPage_tab[mmPage_tab_ind]=allocation; 135 if (mmPage_tab_ind==0) 136 { 137 memset(mmUse_tab,'0',MAX_PAGE_TAB); 138 } 139 mmPage_tab_ind++; 140 } 134 141 return (void *)allocation; 135 142 } 136 143 #endif 137 144 138 static void 139 mprotectFailed(void) 140 { 141 printf("mprotect() failed: %s", stringErrorReport()); 142 } 143 144 void 145 Page_AllowAccess(void * address, size_t size) 146 { 147 if ( mprotect((caddr_t)address, size, PROT_READ|PROT_WRITE) < 0 ) 148 mprotectFailed(); 149 } 150 151 void 152 Page_DenyAccess(void * address, size_t size) 153 { 154 if ( mprotect((caddr_t)address, size, PROT_NONE) < 0 ) 155 mprotectFailed(); 156 } 157 158 void 159 Page_Delete(void * address, size_t size) 160 { 161 if ( munmap((caddr_t)address, size) < 0 ) 162 Page_DenyAccess(address, size); 163 } 164 165 #if defined(_SC_PAGESIZE) 166 size_t 167 Page_Size(void) 168 { 169 return (size_t)sysconf(_SC_PAGESIZE); 170 } 171 #elif defined(_SC_PAGE_SIZE) 172 size_t 173 Page_Size(void) 174 { 175 return (size_t)sysconf(_SC_PAGE_SIZE); 176 } 177 #else 178 /* extern int getpagesize(); */ 179 size_t 180 Page_Size(void) 181 { 182 return getpagesize(); 183 } 184 #endif 185 186 #endif 145 void mmPage_AllowAccess(void * address) 146 { 147 if ( mprotect((caddr_t)address, 4096, PROT_READ|PROT_WRITE) < 0 ) 148 printf("mprotect(READ|WRITE) failed: %s", mmStringErrorReport()); 149 } 150 151 void mmPage_DenyAccess(void * address) 152 { 153 if ( mprotect((caddr_t)address, 4096, PROT_NONE) < 0 ) 154 printf("mprotect(NONE) failed: %s", mmStringErrorReport()); 155 } 156 157 void mmPage_Delete(void * address) 158 { 159 if ( munmap((caddr_t)address, 4096) < 0 ) 160 mmPage_DenyAccess(address); 161 } 162 163 FILE *mmStatFile=NULL; 164 unsigned mmStatLines=0; 165 void mmWriteStat() 166 { 167 int i,l,start; 168 if (mmStatFile==NULL) 169 { 170 mmStatFile=fopen(MM_STAT_FILE,"w"); 171 #if 0 172 fprintf(mmStatFile,"P1\n%d ???\n",MAX_PAGE_TAB); 173 #endif 174 } 175 if ((mmUse_tab[MAX_PAGE_TAB-1]=='0') 176 || (mmUse_tab[MAX_PAGE_TAB-1]=='1')) 177 { 178 mmStatLines++; 179 l=MAX_PAGE_TAB; 180 start=0; 181 fprintf(mmStatFile,"%d\n",mmPage_tab_acc); 182 /* fwrite("#\n", 2, 1, mmStatFile);*/ 183 #if 0 184 fflush(mmStatFile); 185 #endif 186 /* fwrite("#\n", 2, 1, mmStatFile);*/ 187 #if 0 188 do 189 { 190 i=min(70,l); 191 fwrite(&(mmUse_tab[start]), i, 1, mmStatFile); 192 fwrite("\n", 1, 1, mmStatFile); 193 start+=i; 194 l-=i; 195 } while (l>0); 196 #endif 197 } 198 memset(mmUse_tab,'0',MAX_PAGE_TAB); 199 mmPage_tab_acc=0; 200 } 201 202 void mmEndStat() 203 { 204 if (mmStatFile!=NULL) 205 { 206 mmWriteStat(); 207 #if 0 208 fprintf(mmStatFile,"# %d %d\n",MAX_PAGE_TAB,mmStatLines); 209 #endif 210 fclose(mmStatFile); 211 } 212 } 213 #endif -
Singular/page.h
r7f0e6f r93266c5 1 1 #ifndef PAGE_H 2 2 #define PAGE_H 3 #if defined(PAGE_TEST) || defined(PAGE_COUNT)3 #if defined(PAGE_TEST) 4 4 #ifdef __cplusplus 5 5 extern "C" { … … 12 12 #include <sys/times.h> 13 13 14 void * Page_Create(size_t size); 15 void Page_AllowAccess(void * address, size_t size); 16 void Page_DenyAccess(void * address, size_t size); 17 size_t Page_Size(void); 18 extern unsigned long page_tab[2048]; 19 extern char use_tab [2048]; 20 extern int page_tab_ind; 14 void * mmPage_Create(size_t size); 15 void mmPage_Delete(void * address); 16 17 void mmPage_AllowAccess(void * address); 18 void mmPage_DenyAccess(void * address); 19 void mmWriteStat(); 20 void mmEndStat(); 21 #define MAX_PAGE_TAB 4096 22 #define MM_STAT_FILE "mem_stat.txt" 23 24 extern unsigned long mmPage_tab[MAX_PAGE_TAB]; 25 extern char mmUse_tab [MAX_PAGE_TAB]; 26 extern int mmPage_tab_ind; 27 extern int mmPage_tab_acc; 21 28 #ifdef __cplusplus 22 29 }
Note: See TracChangeset
for help on using the changeset viewer.