More Yap_ fixes.

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@716 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2002-12-03 06:06:44 +00:00
parent 763b59bb05
commit 13e409c659
2 changed files with 26 additions and 19 deletions

View File

@ -12,7 +12,7 @@
* Last rev: * * Last rev: *
* mods: * * mods: *
* comments: allocating space * * comments: allocating space *
* version:$Id: alloc.c,v 1.29 2002-11-19 17:10:42 vsc Exp $ * * version:$Id: alloc.c,v 1.30 2002-12-03 06:06:43 vsc Exp $ *
*************************************************************************/ *************************************************************************/
#ifdef SCCS #ifdef SCCS
static char SccsId[] = "%W% %G%"; static char SccsId[] = "%W% %G%";
@ -760,33 +760,33 @@ ExtendWorkSpace(Int s)
{ {
MALLOC_T ptr; MALLOC_T ptr;
int shm_id; int shm_id;
prolog_exec_mode OldPrologMode = PrologMode; prolog_exec_mode OldPrologMode = Yap_PrologMode;
PrologMode = ExtendStackMode; Yap_PrologMode = ExtendStackMode;
/* mapping heap area */ /* mapping heap area */
if((shm_id = shmget(IPC_PRIVATE, (size_t)s, SHM_R|SHM_W)) == -1) { if((shm_id = shmget(IPC_PRIVATE, (size_t)s, SHM_R|SHM_W)) == -1) {
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"could not shmget %d bytes", s); "could not shmget %d bytes", s);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
if((ptr = (MALLOC_T)shmat(shm_id, WorkSpaceTop, 0)) == (MALLOC_T) -1) { if((ptr = (MALLOC_T)shmat(shm_id, WorkSpaceTop, 0)) == (MALLOC_T) -1) {
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"could not shmat at %p", MMAP_ADDR); "could not shmat at %p", MMAP_ADDR);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
if (shmctl(shm_id, IPC_RMID, 0) != 0) { if (shmctl(shm_id, IPC_RMID, 0) != 0) {
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"could not remove shm segment", shm_id); "could not remove shm segment", shm_id);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
WorkSpaceTop = (char *) ptr + s; WorkSpaceTop = (char *) ptr + s;
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(TRUE); return(TRUE);
} }
@ -835,17 +835,17 @@ static int
ExtendWorkSpace(Int s) ExtendWorkSpace(Int s)
{ {
MALLOC_T ptr = (MALLOC_T)sbrk(s); MALLOC_T ptr = (MALLOC_T)sbrk(s);
prolog_exec_mode OldPrologMode = PrologMode; prolog_exec_mode OldPrologMode = Yap_PrologMode;
PrologMode = ExtendStackMode; Yap_PrologMode = ExtendStackMode;
if (ptr == ((MALLOC_T) - 1)) { if (ptr == ((MALLOC_T) - 1)) {
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"could not expand stacks over %d bytes", s); "could not expand stacks over %d bytes", s);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return TRUE; return TRUE;
} }
@ -965,9 +965,9 @@ static int
ExtendWorkSpace(Int s) ExtendWorkSpace(Int s)
{ {
MALLOC_T ptr; MALLOC_T ptr;
prolog_exec_mode OldPrologMode = PrologMode; prolog_exec_mode OldPrologMode = Yap_PrologMode;
PrologMode = ExtendStackMode; Yap_PrologMode = ExtendStackMode;
total_space += s; total_space += s;
if (total_space < MAX_SPACE) return(TRUE); if (total_space < MAX_SPACE) return(TRUE);
ptr = (MALLOC_T)realloc((void *)Yap_HeapBase, total_space); ptr = (MALLOC_T)realloc((void *)Yap_HeapBase, total_space);
@ -975,24 +975,24 @@ ExtendWorkSpace(Int s)
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"could not allocate %d bytes", s); "could not allocate %d bytes", s);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
if (ptr != (MALLOC_T)Yap_HeapBase) { if (ptr != (MALLOC_T)Yap_HeapBase) {
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf4(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"could not expand contiguous stacks %d bytes", s); "could not expand contiguous stacks %d bytes", s);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
if ((CELL)ptr & MBIT) { if ((CELL)ptr & MBIT) {
Yap_ErrorMessage = Yap_ErrorSay; Yap_ErrorMessage = Yap_ErrorSay;
snprintf5(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE, snprintf5(Yap_ErrorMessage, MAX_ERROR_MSG_SIZE,
"memory at %p conflicts with MBIT %lx", ptr, (unsigned long)MBIT); "memory at %p conflicts with MBIT %lx", ptr, (unsigned long)MBIT);
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return(FALSE); return(FALSE);
} }
PrologMode = OldPrologMode; Yap_PrologMode = OldPrologMode;
return TRUE; return TRUE;
} }

View File

@ -35,14 +35,21 @@ Yap_FindExecutable(char *name)
* LoadForeign(file_name,proc_name,init_proc) dynamically loads a foreign * LoadForeign(file_name,proc_name,init_proc) dynamically loads a foreign
* code file and locates an initialization routine * code file and locates an initialization routine
*/ */
Int static Int
Yap_LoadForeign(StringList ofiles, StringList libs, LoadForeign(StringList ofiles, StringList libs,
char *proc_name, YapInitProc *init_proc) char *proc_name, YapInitProc *init_proc)
{ {
strcpy(Yap_ErrorSay,"load_foreign not supported in this version of Yap"); strcpy(Yap_ErrorSay,"load_foreign not supported in this version of Yap");
return LOAD_FAILLED; return LOAD_FAILLED;
} }
Int
Yap_LoadForeign(StringList ofiles, StringList libs,
char *proc_name, YapInitProc *init_proc)
{
return(LoadForeign(ofiles,libs, proc_name, init_proc));
}
void void
Yap_ShutdownLoadForeign(void) Yap_ShutdownLoadForeign(void)
{ {