add -A flag to ask for more attributed stack.
This commit is contained in:
parent
901161a413
commit
2aa5aa3a26
@ -1932,7 +1932,7 @@ X_API Int
|
|||||||
YAP_Init(YAP_init_args *yap_init)
|
YAP_Init(YAP_init_args *yap_init)
|
||||||
{
|
{
|
||||||
int restore_result;
|
int restore_result;
|
||||||
CELL Trail = 0, Stack = 0, Heap = 0;
|
CELL Trail = 0, Stack = 0, Heap = 0, Atts = 0;
|
||||||
|
|
||||||
Yap_argv = yap_init->Argv;
|
Yap_argv = yap_init->Argv;
|
||||||
Yap_argc = yap_init->Argc;
|
Yap_argc = yap_init->Argc;
|
||||||
@ -1956,6 +1956,7 @@ YAP_Init(YAP_init_args *yap_init)
|
|||||||
} else {
|
} else {
|
||||||
Trail = yap_init->TrailSize;
|
Trail = yap_init->TrailSize;
|
||||||
}
|
}
|
||||||
|
Atts = yap_init->AttsSize;
|
||||||
if (yap_init->StackSize == 0) {
|
if (yap_init->StackSize == 0) {
|
||||||
if (Stack == 0)
|
if (Stack == 0)
|
||||||
Stack = DefStackSpace;
|
Stack = DefStackSpace;
|
||||||
@ -1970,7 +1971,7 @@ YAP_Init(YAP_init_args *yap_init)
|
|||||||
}
|
}
|
||||||
/* tell the system who should cope with interruptions */
|
/* tell the system who should cope with interruptions */
|
||||||
Yap_PrologShouldHandleInterrupts = yap_init->PrologShouldHandleInterrupts;
|
Yap_PrologShouldHandleInterrupts = yap_init->PrologShouldHandleInterrupts;
|
||||||
Yap_InitWorkspace(Heap, Stack, Trail,
|
Yap_InitWorkspace(Heap, Stack, Trail, Atts,
|
||||||
yap_init->MaxTableSpaceSize,
|
yap_init->MaxTableSpaceSize,
|
||||||
yap_init->NumberWorkers,
|
yap_init->NumberWorkers,
|
||||||
yap_init->SchedulerLoop,
|
yap_init->SchedulerLoop,
|
||||||
@ -2093,6 +2094,10 @@ YAP_Init(YAP_init_args *yap_init)
|
|||||||
yap_init->ErrorCause = Yap_ErrorMessage;
|
yap_init->ErrorCause = Yap_ErrorMessage;
|
||||||
return YAP_BOOT_FROM_SAVED_ERROR;
|
return YAP_BOOT_FROM_SAVED_ERROR;
|
||||||
}
|
}
|
||||||
|
if (Atts && Atts > 2048*sizeof(CELL))
|
||||||
|
Yap_AttsSize = Atts;
|
||||||
|
else
|
||||||
|
Yap_AttsSize = 2048*sizeof(CELL);
|
||||||
if (restore_result == DO_ONLY_CODE) {
|
if (restore_result == DO_ONLY_CODE) {
|
||||||
return YAP_BOOT_FROM_SAVED_CODE;
|
return YAP_BOOT_FROM_SAVED_CODE;
|
||||||
} else {
|
} else {
|
||||||
@ -2109,6 +2114,7 @@ YAP_FastInit(char saved_state[])
|
|||||||
Int out;
|
Int out;
|
||||||
|
|
||||||
init_args.SavedState = saved_state;
|
init_args.SavedState = saved_state;
|
||||||
|
init_args.AttsSize = 0;
|
||||||
init_args.HeapSize = 0;
|
init_args.HeapSize = 0;
|
||||||
init_args.StackSize = 0;
|
init_args.StackSize = 0;
|
||||||
init_args.TrailSize = 0;
|
init_args.TrailSize = 0;
|
||||||
|
9
C/exec.c
9
C/exec.c
@ -1507,11 +1507,10 @@ Yap_InitYaamRegs(void)
|
|||||||
#endif /* PUSH_REGS */
|
#endif /* PUSH_REGS */
|
||||||
Yap_PutValue (AtomBreak, MkIntTerm (0));
|
Yap_PutValue (AtomBreak, MkIntTerm (0));
|
||||||
TR = (tr_fr_ptr)Yap_TrailBase;
|
TR = (tr_fr_ptr)Yap_TrailBase;
|
||||||
#ifdef COROUTINING
|
if (Yap_AttsSize > (Yap_LocalBase-Yap_GlobalBase)/8)
|
||||||
H = H0 = ((CELL *) Yap_GlobalBase)+ 2048;
|
Yap_AttsSize = (Yap_LocalBase-Yap_GlobalBase)/8;
|
||||||
#else
|
fprintf(stderr, "Atts=%ld\n",Yap_AttsSize);
|
||||||
H = H0 = (CELL *) Yap_GlobalBase;
|
H = H0 = ((CELL *) Yap_GlobalBase)+ Yap_AttsSize/sizeof(CELL);
|
||||||
#endif
|
|
||||||
LCL0 = ASP = (CELL *) Yap_LocalBase;
|
LCL0 = ASP = (CELL *) Yap_LocalBase;
|
||||||
/* notice that an initial choice-point and environment
|
/* notice that an initial choice-point and environment
|
||||||
*must* be created since for the garbage collector to work */
|
*must* be created since for the garbage collector to work */
|
||||||
|
7
C/init.c
7
C/init.c
@ -1289,7 +1289,7 @@ InitVersion(void)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt max_table_size,
|
Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt Atts, UInt max_table_size,
|
||||||
int n_workers, int sch_loop, int delay_load)
|
int n_workers, int sch_loop, int delay_load)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -1337,10 +1337,11 @@ Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt max_table_size,
|
|||||||
#else /* SBA */
|
#else /* SBA */
|
||||||
INFORMATION_MESSAGE("YapOr: sba model with %d worker%s", n_workers, n_workers == 1 ? "":"s");
|
INFORMATION_MESSAGE("YapOr: sba model with %d worker%s", n_workers, n_workers == 1 ? "":"s");
|
||||||
#endif /* ENV_COPY - ACOW - SBA */
|
#endif /* ENV_COPY - ACOW - SBA */
|
||||||
map_memory(Heap, Stack, Trail, n_workers);
|
map_memory(Heap, Stack+Atts, Trail, n_workers);
|
||||||
#else
|
#else
|
||||||
Yap_InitMemory (Trail, Heap, Stack);
|
Yap_InitMemory (Trail, Heap, Stack+Atts);
|
||||||
#endif /* YAPOR */
|
#endif /* YAPOR */
|
||||||
|
Yap_AttsSize = 2048*sizeof(CELL);
|
||||||
Yap_ClauseSpace = 0;
|
Yap_ClauseSpace = 0;
|
||||||
Yap_IndexSpace_Tree = 0;
|
Yap_IndexSpace_Tree = 0;
|
||||||
Yap_IndexSpace_EXT = 0;
|
Yap_IndexSpace_EXT = 0;
|
||||||
|
2
H/Heap.h
2
H/Heap.h
@ -224,6 +224,7 @@ typedef struct various_codes {
|
|||||||
UInt hole_size;
|
UInt hole_size;
|
||||||
struct malloc_state *av_;
|
struct malloc_state *av_;
|
||||||
|
|
||||||
|
UInt atts_size;
|
||||||
UInt clause_space, index_space_Tree, index_space_EXT, index_space_SW;
|
UInt clause_space, index_space_Tree, index_space_EXT, index_space_SW;
|
||||||
UInt lu_clause_space, lu_index_space_Tree, lu_index_space_CP, lu_index_space_EXT, lu_index_space_SW;
|
UInt lu_clause_space, lu_index_space_Tree, lu_index_space_CP, lu_index_space_EXT, lu_index_space_SW;
|
||||||
#if USE_DL_MALLOC
|
#if USE_DL_MALLOC
|
||||||
@ -470,6 +471,7 @@ extern struct various_codes *Yap_heap_regs;
|
|||||||
|
|
||||||
#define Yap_HoleSize Yap_heap_regs->hole_size
|
#define Yap_HoleSize Yap_heap_regs->hole_size
|
||||||
#define Yap_av Yap_heap_regs->av_
|
#define Yap_av Yap_heap_regs->av_
|
||||||
|
#define Yap_AttsSize Yap_heap_regs->atts_size
|
||||||
#define Yap_ClauseSpace Yap_heap_regs->clause_space
|
#define Yap_ClauseSpace Yap_heap_regs->clause_space
|
||||||
#define Yap_IndexSpace_Tree Yap_heap_regs->index_space_Tree
|
#define Yap_IndexSpace_Tree Yap_heap_regs->index_space_Tree
|
||||||
#define Yap_IndexSpace_EXT Yap_heap_regs->index_space_EXT
|
#define Yap_IndexSpace_EXT Yap_heap_regs->index_space_EXT
|
||||||
|
@ -221,7 +221,7 @@ void STD_PROTO(Yap_InitCPredBack,(char *, unsigned long int, unsigned int, CPred
|
|||||||
void STD_PROTO(Yap_InitCPredBackCut,(char *, unsigned long int, unsigned int, CPredicate,CPredicate,CPredicate,int));
|
void STD_PROTO(Yap_InitCPredBackCut,(char *, unsigned long int, unsigned int, CPredicate,CPredicate,CPredicate,int));
|
||||||
void STD_PROTO(Yap_InitCPredBack_,(char *, unsigned long int, unsigned int, CPredicate,CPredicate,CPredicate,int));
|
void STD_PROTO(Yap_InitCPredBack_,(char *, unsigned long int, unsigned int, CPredicate,CPredicate,CPredicate,int));
|
||||||
#endif
|
#endif
|
||||||
void STD_PROTO(Yap_InitWorkspace,(UInt,UInt,UInt,UInt,int,int,int));
|
void STD_PROTO(Yap_InitWorkspace,(UInt,UInt,UInt,UInt,UInt,int,int,int));
|
||||||
|
|
||||||
#if defined(YAPOR) || defined(THREADS)
|
#if defined(YAPOR) || defined(THREADS)
|
||||||
void STD_PROTO(Yap_KillStacks,(int));
|
void STD_PROTO(Yap_KillStacks,(int));
|
||||||
|
@ -305,7 +305,7 @@ parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
|||||||
#ifdef MYDDAS_MYSQL
|
#ifdef MYDDAS_MYSQL
|
||||||
char *myddas_temp;
|
char *myddas_temp;
|
||||||
#endif
|
#endif
|
||||||
int *ssize;
|
unsigned long int *ssize;
|
||||||
while (--argc > 0)
|
while (--argc > 0)
|
||||||
{
|
{
|
||||||
p = *++argv;
|
p = *++argv;
|
||||||
@ -434,6 +434,10 @@ parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
|||||||
}
|
}
|
||||||
#endif /* ENV_COPY || ACOW || SBA */
|
#endif /* ENV_COPY || ACOW || SBA */
|
||||||
goto GetSize;
|
goto GetSize;
|
||||||
|
case 'a':
|
||||||
|
case 'A':
|
||||||
|
ssize = &(iap->AttsSize);
|
||||||
|
goto GetSize;
|
||||||
case 't':
|
case 't':
|
||||||
case 'T':
|
case 'T':
|
||||||
ssize = &(iap->TrailSize);
|
ssize = &(iap->TrailSize);
|
||||||
@ -455,7 +459,7 @@ parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
int i = 0, ch;
|
unsigned long int i = 0, ch;
|
||||||
while ((ch = *p++) >= '0' && ch <= '9')
|
while ((ch = *p++) >= '0' && ch <= '9')
|
||||||
i = i * 10 + ch - '0';
|
i = i * 10 + ch - '0';
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
@ -497,7 +501,7 @@ parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
int i = 0, ch;
|
unsigned long int i = 0, ch;
|
||||||
while ((ch = *p++) >= '0' && ch <= '9')
|
while ((ch = *p++) >= '0' && ch <= '9')
|
||||||
i = i * 10 + ch - '0';
|
i = i * 10 + ch - '0';
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
|
@ -73,11 +73,13 @@ typedef struct {
|
|||||||
/* if NON-NULL, path where we can find the saved state */
|
/* if NON-NULL, path where we can find the saved state */
|
||||||
char *SavedState;
|
char *SavedState;
|
||||||
/* if NON-0, minimal size for Heap or Code Area */
|
/* if NON-0, minimal size for Heap or Code Area */
|
||||||
int HeapSize;
|
unsigned long int HeapSize;
|
||||||
/* if NON-0, minimal size for Local+Global Stack */
|
/* if NON-0, minimal size for Local+Global Stack */
|
||||||
int StackSize;
|
unsigned long int StackSize;
|
||||||
/* if NON-0, minimal size for Trail */
|
/* if NON-0, minimal size for Trail */
|
||||||
int TrailSize;
|
unsigned long int TrailSize;
|
||||||
|
/* if NON-0, minimal size for AttributeVarStack */
|
||||||
|
unsigned long int AttsSize;
|
||||||
/* if NON-NULL, value for YAPLIBDIR */
|
/* if NON-NULL, value for YAPLIBDIR */
|
||||||
char *YapLibDir;
|
char *YapLibDir;
|
||||||
/* if NON-NULL, name for a Prolog file to use when booting */
|
/* if NON-NULL, name for a Prolog file to use when booting */
|
||||||
@ -98,7 +100,7 @@ typedef struct {
|
|||||||
int FastBoot;
|
int FastBoot;
|
||||||
/* the next field only interest YAPTAB */
|
/* the next field only interest YAPTAB */
|
||||||
/* if NON-0, maximum size for Table Space */
|
/* if NON-0, maximum size for Table Space */
|
||||||
int MaxTableSpaceSize;
|
unsigned long int MaxTableSpaceSize;
|
||||||
/* the next three fields only interest YAPOR, but we keep them so that
|
/* the next three fields only interest YAPOR, but we keep them so that
|
||||||
users don't need to recompile DLL in order to use YAPOR */
|
users don't need to recompile DLL in order to use YAPOR */
|
||||||
/* if NON-0, number of workers we want to have (default=1) */
|
/* if NON-0, number of workers we want to have (default=1) */
|
||||||
|
Reference in New Issue
Block a user