2001-04-09 20:54:03 +01:00
|
|
|
/*************************************************************************
|
|
|
|
* *
|
|
|
|
* YAP Prolog %W% %G% *
|
|
|
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
|
|
|
* *
|
|
|
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
|
|
|
* *
|
|
|
|
**************************************************************************
|
|
|
|
* *
|
2009-10-23 14:22:17 +01:00
|
|
|
* File: YapHeap.h *
|
2001-04-09 20:54:03 +01:00
|
|
|
* mods: *
|
|
|
|
* comments: Heap Init Structure *
|
2008-08-08 15:05:34 +01:00
|
|
|
* version: $Id: Heap.h,v 1.136 2008-08-08 14:05:34 vsc Exp $ *
|
2001-04-09 20:54:03 +01:00
|
|
|
*************************************************************************/
|
|
|
|
|
|
|
|
/* information that can be stored in Code Space */
|
|
|
|
|
2004-02-05 16:57:02 +00:00
|
|
|
#ifndef HEAP_H
|
|
|
|
#define HEAP_H 1
|
|
|
|
|
2009-11-23 13:52:13 +00:00
|
|
|
#if LOW_PROF
|
|
|
|
#include <stdio.h>
|
|
|
|
#endif
|
|
|
|
|
2010-06-23 11:47:14 +01:00
|
|
|
typedef int (*SWI_PutFunction)(int, void *);
|
|
|
|
typedef int (*SWI_GetFunction)(void *);
|
|
|
|
typedef int (*SWI_CloseFunction)(void *);
|
|
|
|
|
2010-05-03 14:26:56 +01:00
|
|
|
#include "../include/dswiatoms.h"
|
|
|
|
|
2001-04-09 20:54:03 +01:00
|
|
|
#ifndef INT_KEYS_DEFAULT_SIZE
|
|
|
|
#define INT_KEYS_DEFAULT_SIZE 256
|
|
|
|
#endif
|
|
|
|
|
2006-05-16 19:37:31 +01:00
|
|
|
#if USE_DL_MALLOC
|
|
|
|
|
|
|
|
#define MAX_DLMALLOC_HOLES 32
|
|
|
|
|
|
|
|
typedef struct memory_hole {
|
|
|
|
ADDR start;
|
|
|
|
ADDR end;
|
|
|
|
} memory_hole_type;
|
|
|
|
#endif
|
|
|
|
|
2010-05-04 16:31:31 +01:00
|
|
|
typedef struct swi_reverse_hash {
|
|
|
|
ADDR key;
|
|
|
|
Int pos;
|
|
|
|
} swi_rev_hash;
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2005-12-07 17:53:30 +00:00
|
|
|
#define GC_MAVARS_HASH_SIZE 512
|
|
|
|
|
|
|
|
typedef struct gc_ma_hash_entry_struct {
|
|
|
|
UInt timestmp;
|
2008-03-25 22:03:14 +00:00
|
|
|
#ifdef TABLING
|
2006-12-29 01:57:50 +00:00
|
|
|
tr_fr_ptr loc;
|
|
|
|
struct gc_ma_hash_entry_struct *more;
|
|
|
|
#endif
|
2005-12-07 17:53:30 +00:00
|
|
|
CELL* addr;
|
|
|
|
struct gc_ma_hash_entry_struct *next;
|
|
|
|
} gc_ma_hash_entry;
|
|
|
|
|
2001-04-09 20:54:03 +01:00
|
|
|
typedef struct atom_hash_entry {
|
|
|
|
#if defined(YAPOR) || defined(THREADS)
|
|
|
|
rwlock_t AERWLock;
|
|
|
|
#endif
|
|
|
|
Atom Entry;
|
|
|
|
} AtomHashEntry;
|
|
|
|
|
2002-09-03 15:28:09 +01:00
|
|
|
typedef struct reduction_counters {
|
2003-03-20 15:10:18 +00:00
|
|
|
YAP_ULONG_LONG reductions;
|
|
|
|
YAP_ULONG_LONG reductions_retries;
|
|
|
|
YAP_ULONG_LONG retries;
|
2002-09-03 15:28:09 +01:00
|
|
|
int reductions_on;
|
|
|
|
int reductions_retries_on;
|
|
|
|
int retries_on;
|
|
|
|
} red_counters;
|
|
|
|
|
2004-01-23 02:23:51 +00:00
|
|
|
typedef struct scratch_block_struct {
|
|
|
|
char *ptr;
|
|
|
|
UInt sz, msz;
|
|
|
|
} scratch_block;
|
|
|
|
|
2005-01-04 02:50:23 +00:00
|
|
|
typedef struct restore_info {
|
2010-03-21 22:12:42 +00:00
|
|
|
Int base_diff;
|
|
|
|
Int cl_diff;
|
|
|
|
Int g_diff;
|
|
|
|
Int g_diff0;
|
|
|
|
Int h_diff;
|
|
|
|
Int l_diff;
|
|
|
|
Int tr_diff;
|
|
|
|
Int x_diff;
|
|
|
|
Int delay_diff;
|
|
|
|
CELL *old_ASP;
|
|
|
|
CELL *old_LCL0;
|
|
|
|
CELL *g_split;
|
2005-01-04 02:50:23 +00:00
|
|
|
tr_fr_ptr old_TR;
|
2010-03-21 22:12:42 +00:00
|
|
|
CELL *old_GlobalBase;
|
|
|
|
CELL *old_H;
|
|
|
|
CELL *old_H0;
|
|
|
|
ADDR old_TrailBase;
|
|
|
|
ADDR old_TrailTop;
|
|
|
|
ADDR old_HeapBase;
|
|
|
|
ADDR old_HeapTop;
|
2005-01-04 02:50:23 +00:00
|
|
|
} restoreinfo;
|
|
|
|
|
2004-01-23 02:23:51 +00:00
|
|
|
|
|
|
|
#ifdef THREADS
|
|
|
|
typedef struct thandle {
|
|
|
|
int in_use;
|
2008-01-27 11:01:07 +00:00
|
|
|
int zombie;
|
2004-01-23 02:23:51 +00:00
|
|
|
UInt ssize;
|
|
|
|
UInt tsize;
|
2008-08-07 21:51:23 +01:00
|
|
|
UInt sysize;
|
2008-04-02 18:37:07 +01:00
|
|
|
void *stack_address;
|
2004-02-11 01:20:56 +00:00
|
|
|
Term tdetach;
|
2008-08-07 21:51:23 +01:00
|
|
|
Term cmod, texit_mod;
|
|
|
|
struct DB_TERM *tgoal, *texit;
|
2004-01-23 02:23:51 +00:00
|
|
|
int id;
|
|
|
|
int ret;
|
|
|
|
REGSTORE *default_yaam_regs;
|
2004-02-05 16:57:02 +00:00
|
|
|
REGSTORE *current_yaam_regs;
|
|
|
|
struct pred_entry *local_preds;
|
2010-02-10 09:03:03 +00:00
|
|
|
pthread_t pthread_handle;
|
2004-07-22 22:32:23 +01:00
|
|
|
int ref_count;
|
2008-05-11 00:24:13 +01:00
|
|
|
#ifdef LOW_LEVEL_TRACER
|
|
|
|
long long int thread_inst_count;
|
2008-05-28 18:18:35 +01:00
|
|
|
int been_here1;
|
|
|
|
int been_here2;
|
2008-05-11 00:24:13 +01:00
|
|
|
#endif
|
2004-02-11 13:59:53 +00:00
|
|
|
pthread_mutex_t tlock;
|
2008-08-06 18:32:22 +01:00
|
|
|
pthread_mutex_t tlock_status;
|
2010-02-10 09:03:03 +00:00
|
|
|
#if HAVE_GETRUSAGE||defined(_WIN32)
|
2004-03-02 16:44:58 +00:00
|
|
|
struct timeval *start_of_timesp;
|
|
|
|
struct timeval *last_timep;
|
|
|
|
#endif
|
2004-01-23 02:23:51 +00:00
|
|
|
} yap_thandle;
|
|
|
|
#endif
|
|
|
|
|
2002-06-04 19:21:55 +01:00
|
|
|
typedef int (*Agc_hook)(Atom);
|
|
|
|
|
2010-03-21 22:12:42 +00:00
|
|
|
/*******************
|
|
|
|
this is the data base: everything here should be possible to restore
|
|
|
|
********************/
|
2001-04-09 20:54:03 +01:00
|
|
|
typedef struct various_codes {
|
2009-10-27 10:48:37 +00:00
|
|
|
/* memory allocation and management */
|
2001-04-09 20:54:03 +01:00
|
|
|
special_functors funcs;
|
2009-10-27 10:48:37 +00:00
|
|
|
|
2009-10-28 13:11:35 +00:00
|
|
|
#include "hstruct.h"
|
2009-10-27 10:48:37 +00:00
|
|
|
|
2001-04-09 20:54:03 +01:00
|
|
|
} all_heap_codes;
|
|
|
|
|
2010-03-21 22:12:42 +00:00
|
|
|
#include "hglobals.h"
|
|
|
|
|
|
|
|
extern struct worker_shared Yap_Global;
|
|
|
|
#define Yap_global (&Yap_Global)
|
|
|
|
|
|
|
|
#if defined(YAPOR) || defined(THREADS)
|
|
|
|
extern struct worker_local Yap_WLocal[MAX_WORKERS];
|
|
|
|
#define WL (Yap_WLocal+worker_id)
|
|
|
|
#define FOREIGN_WL(wid) (Yap_WLocal+(wid))
|
|
|
|
#else
|
|
|
|
extern struct worker_local Yap_WLocal;
|
|
|
|
#define WL (&Yap_WLocal)
|
|
|
|
#define FOREIGN_WL(wid) (&Yap_WLocal)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2004-04-22 21:07:07 +01:00
|
|
|
#ifdef USE_SYSTEM_MALLOC
|
2008-08-08 15:05:34 +01:00
|
|
|
extern struct various_codes *Yap_heap_regs;
|
2004-01-23 02:23:51 +00:00
|
|
|
#else
|
2004-12-02 06:06:47 +00:00
|
|
|
#define Yap_heap_regs ((all_heap_codes *)HEAP_INIT_BASE)
|
2004-01-23 02:23:51 +00:00
|
|
|
#endif
|
2001-04-09 20:54:03 +01:00
|
|
|
|
2009-10-28 13:11:35 +00:00
|
|
|
#include "dhstruct.h"
|
2010-03-21 22:12:42 +00:00
|
|
|
#include "dglobals.h"
|
2009-10-30 23:59:00 +00:00
|
|
|
|
2010-03-21 22:12:42 +00:00
|
|
|
/*******************
|
|
|
|
these are the global variables: they need not be restored...
|
|
|
|
********************/
|
2001-04-09 20:54:03 +01:00
|
|
|
|
|
|
|
#define UPDATE_MODE_IMMEDIATE 0
|
|
|
|
#define UPDATE_MODE_LOGICAL 1
|
|
|
|
#define UPDATE_MODE_LOGICAL_ASSERT 2
|
|
|
|
|
|
|
|
|
2010-03-21 22:12:42 +00:00
|
|
|
|
|
|
|
|
2001-04-09 20:54:03 +01:00
|
|
|
/* initially allow for files with up to 1024 predicates. This number
|
|
|
|
is extended whenever needed */
|
|
|
|
#define InitialConsultCapacity 1024
|
|
|
|
|
2006-05-18 17:33:05 +01:00
|
|
|
|
2008-03-25 22:03:14 +00:00
|
|
|
#if (defined(USE_SYSTEM_MALLOC) && HAVE_MALLINFO)||USE_DL_MALLOC
|
2006-05-18 17:33:05 +01:00
|
|
|
UInt STD_PROTO(Yap_givemallinfo, (void));
|
|
|
|
#endif
|
|
|
|
|
2009-05-23 00:35:24 +01:00
|
|
|
ADDR STD_PROTO(Yap_ExpandPreAllocCodeSpace, (UInt, void *, int));
|
2004-02-05 16:57:02 +00:00
|
|
|
#define Yap_ReleasePreAllocCodeSpace(x)
|
|
|
|
ADDR STD_PROTO(Yap_InitPreAllocCodeSpace, (void));
|
|
|
|
EXTERN inline ADDR
|
2009-05-23 00:35:24 +01:00
|
|
|
Yap_PreAllocCodeSpace(void)
|
2004-02-05 16:57:02 +00:00
|
|
|
{
|
2009-05-23 00:35:24 +01:00
|
|
|
return AuxBase;
|
2004-02-05 16:57:02 +00:00
|
|
|
}
|
2004-01-23 02:23:51 +00:00
|
|
|
|
2004-02-05 16:57:02 +00:00
|
|
|
#endif /* HEAP_H */
|