https://github.com/Unipisa/CMM
Revision 55778ad8b99c136e1886959c1f1333c776df14e1 authored by Giuseppe Attardi on 15 May 1997, 06:24:54 UTC, committed by CMM Curation Team on 11 December 2019, 14:35:48 UTC
Contributors mentioned in Changelog : - Giuseppe Attardi @attardi - Tito Flagella @tflagella - Pietro Iglio
1 parent cfa2967
Tip revision: 55778ad8b99c136e1886959c1f1333c776df14e1 authored by Giuseppe Attardi on 15 May 1997, 06:24:54 UTC
1.8 -
1.8 -
Tip revision: 55778ad
patch-6
diff -c /home/omega/attardi/posso/cmm/ChangeLog /project/posso/cmm/curr/cmm/ChangeLog
*** /home/omega/attardi/posso/cmm/ChangeLog Fri Mar 28 20:20:58 1997
--- /project/posso/cmm/curr/cmm/ChangeLog Thu Mar 6 20:30:31 1997
***************
*** 1,32 ****
- Fri Mar 28 19:45:24 1997 Giuseppe Attardi <attardi@omega>
-
- * cmm.cpp (collect): revised to use roots.begin() and roots.get()
- to scan registered roots.
- Bartlett version was buggy, since it did not check that an entry
- had proper values for .addr and .bytes. They are not set to 0 on linux.
-
- for (int i = 0; i < rootsCount; i++)
- {
- fp = roots[i].addr;
- for (int j = roots[i].bytes; j > 0; j = j - bytesPerWord)
- promotePage((GCP)*fp++);
- }
-
- * cmm.h (Set): revised (no longer uses member count)
-
- * cmm.cpp (RootAreas): revised to make it similar to Set above
- (added begin() and get()). It also clears the new array.
-
-
- Mon Mar 24 21:34:38 1997 Giuseppe Attardi <attardi@omega>
-
- * cmm.h (Set): added initialization for entries and test before
- delete in insert()
-
- Mon Mar 10 18:12:02 1997 Giuseppe Attardi <attardi@omega>
-
- * cmm.h: added declaration for registerRootArea and unregisterRootArea
-
Thu Mar 6 20:28:35 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (expandHeap): fixed for Linux ELF
--- 1,3 ----
diff -c /home/omega/attardi/posso/cmm/cmm.cpp /project/posso/cmm/curr/cmm/cmm.cpp
*** /home/omega/attardi/posso/cmm/cmm.cpp Fri Mar 28 20:04:32 1997
--- /project/posso/cmm/curr/cmm/cmm.cpp Thu Mar 6 20:32:10 1997
***************
*** 54,60 ****
/* Version tag */
! char* Cmm::version = "CMM 1.8.5";
/*---------------------------------------------------------------------------*
*
--- 54,60 ----
/* Version tag */
! char* Cmm::version = "CMM 1.8.4";
/*---------------------------------------------------------------------------*
*
***************
*** 286,362 ****
public:
RootAreas()
{
max = 0;
free = 0;
- entries = NULL;
}
! void insert(void * addr, int bytes)
{
# define setIncrement 10
- int i;
if (free)
{
! for (i = 0; i < max; i++)
if (entries[i].addr == NULL)
! break;
}
! else
{
RootArea *np;
- int count = max;
max += setIncrement;
- free = setIncrement;
np = ::new RootArea[max];
! for (i = 0; i < count; i++)
np[i] = entries[i];
! // clear the rest
! for (; i < max; i++)
! np[i].addr = NULL;
! if (entries) ::delete entries;
entries = np;
- i = count;
}
! entries[i].addr = (GCP)addr;
! entries[i].bytes = bytes;
! free--;
}
! void erase(void* addr)
{
int i;
! for (i = 0; i < max; i++)
if (entries[i].addr == addr)
{
entries[i].addr = NULL;
free++;
return;
}
}
! RootArea* get()
! {
! // look for a non empty entry
! while (iter < max)
! {
! if (entries[iter].addr)
! return &entries[iter++];
! else
! iter++;
! }
! // No more entries;
! return (RootArea*)NULL;
! }
!
! void begin() { iter = 0;}
private:
! RootArea* entries;
! int max;
! int free;
! int iter;
};
static RootAreas roots; // areas registered as containing roots
--- 286,346 ----
public:
RootAreas()
{
+ count = 0;
max = 0;
free = 0;
}
! void add(void * addr, int bytes)
{
# define setIncrement 10
if (free)
{
! for (int i = 0; i < count; i++)
if (entries[i].addr == NULL)
! {
! entries[i].addr = (GCP)addr;
! entries[i].bytes = bytes;
! free--;
! return;
! }
}
! if (count == max)
{
RootArea *np;
max += setIncrement;
np = ::new RootArea[max];
! for (int i = 0; i < count; i++)
np[i] = entries[i];
! ::delete entries;
entries = np;
}
! entries[count].addr = (GCP)addr;
! entries[count],bytes = bytes;
! count++;
}
! void remove(void* addr)
{
int i;
! for (i = 0; i < count; i++)
if (entries[i].addr == addr)
{
entries[i].addr = NULL;
free++;
return;
}
+ assert(i < count);
}
! int count;
! RootArea* entries;
private:
! int max;
! int free;
};
static RootAreas roots; // areas registered as containing roots
***************
*** 372,384 ****
void
registerRootArea(void * addr, int bytes)
{
! roots.insert(addr, bytes);
}
void
unregisterRootArea(void* addr)
{
! roots.erase(addr);
}
/*---------------------------------------------------------------------------*
--- 356,368 ----
void
registerRootArea(void * addr, int bytes)
{
! roots.add(addr, bytes);
}
void
unregisterRootArea(void* addr)
{
! roots.remove(addr);
}
/*---------------------------------------------------------------------------*
***************
*** 1238,1248 ****
CmmExamineStaticAreas(CmmExamineStaticArea);
/* Examine registered roots: */
! roots.begin();
! while (RootArea* ra = roots.get())
{
! fp = ra->addr;
! for (int j = ra->bytes; j > 0; j = j - bytesPerWord)
promotePage((GCP)*fp++);
}
--- 1222,1231 ----
CmmExamineStaticAreas(CmmExamineStaticArea);
/* Examine registered roots: */
! for (int i = 0; i < roots.count; i++)
{
! fp = roots.entries[i].addr;
! for (int j = roots.entries[i].bytes; j > 0; j = j - bytesPerWord)
promotePage((GCP)*fp++);
}
diff -c /home/omega/attardi/posso/cmm/cmm.h /project/posso/cmm/curr/cmm/cmm.h
*** /home/omega/attardi/posso/cmm/cmm.h Fri Mar 28 18:25:29 1997
--- /project/posso/cmm/curr/cmm/cmm.h Wed Feb 26 12:09:06 1997
***************
*** 363,378 ****
#define VirtualBase(A) &(P ## A)
#endif
- /*---------------------------------------------------------------------------*
- *
- * Additional roots may be registered with the garbage collector by calling
- * the procedure gcRoots with a pointer to the area and the size of the area.
- *
- *---------------------------------------------------------------------------*/
-
- extern void registerRootArea(void *area, int bytes);
- extern void unregisterRootArea(void *addr);
-
/* Verbosity levels: */
const CMM_STATS = 1; /* Log garbage collector info */
const CMM_ROOTLOG = 2; /* Log roots found in registers, stack
--- 363,368 ----
***************
*** 877,931 ****
public:
Set()
{
max = 0;
free = 0;
iter = 0;
- entries = NULL;
}
void insert(T* entry)
{
# define setIncrement 10
- int i;
if (free)
{
! for (i = 0; i < max; i++)
if (entries[i] == NULL)
! break;
}
! else
{
T** np;
! int count = max;
max += setIncrement;
! free = setIncrement;
! np = ::new T*[max];
! for (i = 0; i < count; i++)
np[i] = entries[i];
// clear the rest
for (; i < max; i++)
! np[i] = NULL;
! if (entries) ::delete entries;
! entries = np;
! i = count;
}
! entries[i] = entry;
! free--;
}
void erase(T* entry)
{
int i;
! for (i = 0; i < max; i++)
if (entries[i] == entry)
{
entries[i] = NULL;
free++;
return;
}
! assert(i < count);
}
T* get()
--- 867,921 ----
public:
Set()
{
+ last = 0;
max = 0;
free = 0;
iter = 0;
}
void insert(T* entry)
{
# define setIncrement 10
if (free)
{
! for (int i = 0; i < last; i++)
if (entries[i] == NULL)
! {
! entries[i] = entry;
! free--;
! return;
! }
}
! if (last == max)
{
T** np;
! int i;
max += setIncrement;
! np = new T*[max];
! for (i = 0; i < last; i++)
np[i] = entries[i];
+ delete entries;
+ entries = np;
// clear the rest
for (; i < max; i++)
! entries[i] = NULL;
}
! entries[last++] = entry;
}
void erase(T* entry)
{
int i;
! for (i = 0; i < last; i++)
if (entries[i] == entry)
{
entries[i] = NULL;
free++;
return;
}
! assert(i < last);
}
T* get()
***************
*** 944,953 ****
void begin() { iter = 0;}
! protected:
T** entries;
! private:
int max;
int free;
int iter;
--- 934,943 ----
void begin() { iter = 0;}
! int last;
T** entries;
! private:
int max;
int free;
int iter;
Common subdirectories: /home/omega/attardi/posso/cmm/doc and /project/posso/cmm/curr/cmm/doc
Computing file changes ...