ChangeLog
1998-03-03 Giuseppe Attardi <attardi@di.unipi.it>
* version 1.9g released.
* cmm.h (OUTSIDE_HEAPS): checks both NOHEAP and UNCOLLECTEDHEAP
1998-03-02 Giuseppe Attardi <attardi@di.unipi.it>
* cmm.h, cmm.cpp: added allocAtomic() to allocate block not
containing pointers.
Tue Feb 3 11:46:48 1998 Giuseppe Attardi <attardi@omega>
* cmm.cpp (expandHeap): fix for Linux: fill gap between old and
new heap.
Wed Jan 28 11:37:11 1998 Giuseppe Attardi <attardi@omega>
* cmm.h (WHEN_FLAGS): added {}
Fri Nov 7 10:40:42 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (verifyHeader): fixed to deal with SCANNED pages.
* cmm.cpp (promotionPhase): scan only objects in pages in transparent
heaps; scan every address in opaque heaps.
* cmm.cpp (logRoot): use basePointer() instead of nextObject().
* test1.cpp, test5.cpp: added version using FIELDTABLE
* cmm.h, cmm.cpp, machine.h: port to MacIntosh for Metrowerks C++
contributed by Patrick C. Beard <beard@apple.com>
* cmm.prj: project file for MacIntosh for Metrowerks CodeWarrior Pro
* cmm.cpp (traverse): version based on FieldTable contributed by
Patrick C. Beard
Wed Nov 5 10:17:36 1997 Giuseppe Attardi <attardi@omega>
* msw.cpp: unsigned long -> size_t
* test7.cpp: VC++ 5.0 accepts operator new[] but gives
error LNK2001: unresolved external symbol
"public: static void __cdecl CmmObject::operator>>=[](void *)" (??_VCmmObject@@SAXPAX@Z)
when linking
* msw.cpp (mswMarkRegisteredRoots): fix for butcher-split and
gerdt-split2
Tue Oct 21 22:58:28 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (collect): moved setjmp from promotionPhase() to collect()
to solve problem with SGI compiler. See test3.
Sun Oct 19 12:39:42 1997 Giuseppe Attardi <attardi@omega>
* Released version 1.9c
Sat Oct 18 11:55:55 1997 Giuseppe Attardi <attardi@omega>
* tests passed on SGI IRIX 5.3 with GCC 2.7.1.
* tests passed (except test7, testmsw3) on SGI IRIX 5.3 with CC.
* test*.cpp: added public to struct definitions
* test6.cpp: removed use of CmmArray
* cmm.cpp (promotionPhase): use ®s as base since fp may get
allocated at higher address (e.g. on SGI)
* cmm.h: fix to VirtualBase for SGI
Wed Oct 1 17:44:10 1997 Giuseppe Attardi <attardi@omega>
* machine.h: bool type present in MS VC 5.0
* cmm.h (CmmObject): new[] and delete[] available to MS VC 5.0
Thu Sep 25 16:03:39 1997 Giuseppe Attardi <attardi@omega>
* test1.cpp (listtest2): reduced to 100 iterations
* msw.cpp (mswMarkRegisteredRoots): added so that MSW exhamines
registered roots. Was reason for bug in mac-rad-split.xcl with MSW.
* cmm.h: moved declaration of RootArea and RootAreas from cmm.cpp
for use by msw.cpp
Wed Sep 24 13:42:12 1997 Giuseppe Attardi <attardi@omega>
* Released version 1.9a
* msw.cpp (mswRealloc): added fix by Iglio for bug in cassou
Mon Sep 22 10:19:21 1997 Giuseppe Attardi <attardi@omega>
* Makefile (test): renamed test5 to test1
* test5.cpp: added new test for reference types
Wed Sep 17 18:25:01 1997 Giuseppe Attardi <attardi@laplace>
* cmm.h: added macros CmmRefLoc and CmmRefLocRel to handle
reference types within traverse
* cmm.h (class CmmObject): ID field with unique ID for objects.
Useful for experimentation, is available by defining flag CMM_ID
Mon Aug 18 11:41:34 1997 Giuseppe Attardi <attardi@omega>
* cmm.h: moved typedef bool to machine.h
* cmm.h (CmmHeap::scanRoots): arg type is Page (for Watcom)
Wed Aug 6 11:38:21 1997 Giuseppe Attardi <attardi@omega>
* Released version 1.9
Passed all tests on:
OSF1 V3.2 41 alpha
Linux 2.0.18 i686
SunOS 5.3 sparc
SunOS 4.1.3_U1 sparc
Win32 VC++ 4.0 (except testmsw3 with debug)
* tempheap.cpp (scavenge): (int) -> (Word)
* cmm.cpp (Cmm): ensure max n. of pages will fit in a Page
* cmm.cpp (promotePage, scavenge, isTraced): page must be declared Word
or else on 64bit architectures test for OUTSIDE_HEAPS may fail.
* cmm.cpp (collect): use
bool totalCollection = queueHead == 0;
to determine if current collection is a total one.
Sun Aug 3 21:29:30 1997 Giuseppe Attardi <attardi@omega>
* msw.cpp: added some comments on the implementation.
Sat Aug 2 13:39:18 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp:
CmmMove() turned into static DefaultHeap::move()
CmmInit() into static CmmHeap::init()
Fri Aug 1 19:44:45 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (collect): do not collect immediately after a
generational collection fails to recover enough space, but
continue until next collection.
This improves space requirements by over 20%.
* CMM.cpp (shouldExpandHeap): test with usedPages instead of
stablePages. Inside collect() they are the same.
Thu Jul 31 12:04:31 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (collect): CLOSE_CURRENT_PAGE before inner collection
* cmm.cpp (collect): reassign usedPages before inner promotionPhase()
* cmm.cpp (CmmMove): #if HEADER_ALIGN -> #ifdef HEADER_ALIGN
(was degrading katsura6 on SunOS)
Tue Jul 29 10:11:03 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (shouldExpandHeap): Cast to (int) required by VC++
Mon Jul 28 20:02:42 1997 Giuseppe Attardi <attardi@omega>
* machine.h (DOUBLE_ALIGN): undefined for alpha
Fri Jul 25 19:59:17 1997 Giuseppe Attardi <attardi@omega>
* testmsw1.c (strFromInt): use of strlen() ony on SunOS
* cmm.cpp: port to Digital alpha completed
* machine.h (ARRAY_PADDING): added flag for architectures were
padding for arrays is used
* cmm.h (CmmArray): padding for arrays applies for sparc
Wed Jul 23 17:44:39 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (collect): split collect() into promotionPhase() and
compactionPhase(). This allows us to avoid recursive call to
perform total collection.
The total collection after a generational collection, before
compactionPhase() adds at the end of the queue the pages which
were copied within CmmMove().
These could not be left at the beginning of the queue, since
no root pointers point into them, therefore scanning them first
would be useless and when later pointers into them are found,
traverse() would go wildly recursive since such pages appear
as scanned.
This avoids stack overflow on Alpha for test8.
* cmm.cpp (emptyStableSpace): decrease stablePages by number of pages
moved to FromSpace rather than counting elements past end, since
these might be multiple pages.
Fri Jul 11 01:29:55 1997 Giuseppe Attardi <attardi@omega>
* cmm.h (bytesPerPage): dependent on sizeof(Word)
Thu Jul 10 09:15:56 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (tableFraction): size of pageHeap items is sizeof(CmmHeap**)
* cmm.cpp (basePointer): use 1L in shift operations
* cmm.h (WORD_INDEX, BIT_INDEX): use Word instead of unsigned
* cmm.h (SET_OBJECTMAP, CLEAR_OBJECTMAP, MARK): use 1L
Thu May 15 08:24:54 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (collect): fixed bug when scavenge() allocates objects
in page already scanned by the collector. This happens when
current page contains a pointer to a large object, whose page gets
promoted and added to the queue. When this page is scanned, the
objects it contains are moved to the current page, which however
has been already scanned.
Wed Apr 16 23:09:22 1997 Giuseppe Attardi <attardi@omega>
* memory.cpp: added CmmSVR4DataStart()
* machine.h: use CmmSVR4DataStart for SysV
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 (count -> last)
* 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
Sometimes malloc() allocates small blocks at quite distant addresses
from large blocks. In this case tablePages would be huge,
to encompass the gap between the blocks.
Therefore we don't recycle them.
Wed Feb 26 11:35:32 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (scavenge): optimization to avoid traversal of object
in page being scanned must compare with scanPtr, rather then loc,
since traverse may be called recursively from another page.
* cmm.h (DefaultHeap): added scanPtr
scanning -> scanPage
Tue Feb 25 16:10:12 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (collect): loop which restores scanned pages to STABLESPACE
should not stop at lastStable.
Suggestion by Christian Heckler <chh@plato.uni-paderborn.de>
Thu Feb 20 12:49:20 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (scavenge): avoid recursive traversal for objects which
are later in the page being scanned.
* cmm.h (DefaultHeap): added member scanning.
Wed Feb 19 20:30:42 1997 Giuseppe Attardi <attardi@omega>
* cmm.h (CmmHeap): opaque turned into protected
Mon Jan 20 16:44:58 1997 Giuseppe Attardi <attardi@omega>
* cmm.h (UncollectedHeap): added constructor to make heap opaque
Mon Jan 13 12:32:57 1997 Giuseppe Attardi <attardi@omega>
* cmm.h (visit): isMarked -> marked
Thu Jan 9 09:04:37 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp: eliminated useless CmmObject::new[] and CmmObject::delete[]
* test5.cpp: eliminated unused references to tempheap
* cmm.cpp (CmmObject::new[]): revised to use CmmArray
Tue Jan 7 10:43:54 1997 Giuseppe Attardi <attardi@omega>
* msw.cpp (mswSelect): added to select M&S heap from C
* testmsw1.c, testmsw1.c: eliminated mswInit()
Sat Jan 4 11:53:41 1997 Giuseppe Attardi <attardi@omega>
* Makefile.d: removed
* Makefile.dist: renamed to Makefile
Fri Jan 3 12:10:45 1997 Giuseppe Attardi <attardi@omega>
* cmm.cpp (RootArea): fixed typedef syntax
Sun Dec 22 10:05:24 1996 Giuseppe Attardi <attardi@omega>
* cmm.h (Set): added template class Set.
* doc/CMMguide.tex (subsection{Array of CmmObject's}):
revised to describe new implementation
* tempheap.h (RootSet): used template class Set for dealing with
sets of roots.
Class RootSet now contains two members:
Set<CmmObject> roots;
Set<CmmObject*> rootsLoc;
* cmm.cpp: changed gcRoots() and gcUnroots() to
registerRootArea() and unregisterRootArea(), which use the classes
RootArea and RootAreas
* tempheap.cpp (RootSet): renamed
set -> insert
setp -> insert
unset -> erase
unsetp -> erase
* cmm.h (CmmHeap): added reservedPages. Requires recompiling
all applications
* msw.cpp (MarkAndSweep): constructor replaces mswInit()
* cmm.cpp (allocatePages): updates reservedPages
* cmm.h (_CmmInit): eliminated ~_CmmInit()
* cmm.cpp (collect): restore scanned pages up to scan != lastStable
* machine.h: renamed type page -> Page
Wed Dec 18 17:07:57 1996 Giuseppe Attardi <attardi@omega>
* cmm.cpp (CmmInit): heap rounding requires cast to (Word) for
usage with mmap.
Wed Dec 18 12:02:09 1996 Pietro Iglio <iglio@di.unipi.it>
* cmm.cpp (emptyStableSpace): check for empty queue
* test7.cpp (class Item): added public to CmmObject
Sun Dec 15 20:04:45 1996 Giuseppe Attardi <attardi@omega>
* msw.cpp (mswAlloc, mswAllocOpaque): added casts:
*(Byte *)(freeList-1) = TransparentMask;
*(Byte *)(ret-2) = OpaqueMask
* machine.h: changed basic types:
typedef char * Ptr;
typedef Ptr * GCP;
* msw.cpp: added various fixes by Iglio
Sun Dec 8 13:57:08 1996 Giuseppe Attardi <attardi@omega>
* cmm.cpp (promotePage): added test OUTSIDE_HEAPS before MARK.
Was causing failure in test4 with new MSW initialization.
* cmm.h: revised mechanism for CmmArray.
Arrays of CmmObject's can be created and used with the standard
syntax provided one overloads new[] for the class used for elements.
Solution is dependent on GCC.
test7 now works
* test7.cpp (test): revised to use new mechanism.
Tue Dec 3 19:31:53 1996 Giuseppe Attardi <attardi@omega>
* README: added Win32 port
Mon Dec 2 09:20:32 1996 Giuseppe Attardi <attardi@omega>
* machine.h:
typedef char * Ptr;
typedef Ptr * GCP;
Sun Dec 1 10:59:54 1996 Pietro Iglio <iglio@cardano>
* cmm.h:
Default page size can be overridden defining CMM_PAGE_SIZE=<size>
* msw.cpp:
MSW is no more allocating a large number of pages upon initialization
Thu Nov 28 09:55:04 1996 Giuseppe Attardi <attardi@omega>
* msw.cpp (mswExpandMarkStack): added (for WIN32)
newFrame->next = NULL;
* memory.c -> memory.cpp
* memory.c, cmm.cpp:
(char *) -> (void *)
* cmm.cpp (collect): fixed bug for katsura:
nextSpace = STABLESPACE
Wed Nov 27 13:47:34 1996 Giuseppe Attardi <attardi@omega>
* Makefile.schema: added .cpp suffix and rule
* cmm.h: added explanation on traverse() for CmmVarObject
Mon Nov 25 12:01:27 1996 Giuseppe Attardi <attardi@di.unipi.it>
* Makefile: renamed test files
test8 -> test7
testp2 -> testmsw1
testp3 -> testmsw2
testp5 -> testmsw3
Sun Nov 24 19:13:45 1996 Giuseppe Attardi <attardi@omega>
* cmm.cpp: missing in WIN32
- set_new_handler does not work
- new[] and delete[] not supported
- isTraced to be fixed
* cmm.cpp: changes for WIN32
- pageLink initialized to 0
* memory.c: changes for WIN32
- added globalHeapStart, getGlobalHeapStart() and getGlobalHeapEnd()
- CmmExamineStaticAreas: removed test for Win32s
* cmm.h: changes for WIN32
- added (again) typedef int bool
Fri Nov 22 22:13:22 1996 Giuseppe Attardi <attardi@omega>
* Makefile.schema: renamed files to .cpp extension accepted
by both gcc and VC++.
* machine.h: changed __WIN32__ in _WIN32 for VC++
* cmm.c, cmm.cxx, msw.cxx: introduced typedef unsigned page
* cmm.h, cmm.cxx: VC does not accept operator new[] and delete[]
Wed Oct 30 12:01:12 1996 Giuseppe Attardi <attardi@omega>
* cmm.h (_CmmInit): *** WARNING ***
Changed initialization protocol:
Cmm::theMSHeap is always created, to use MSW one must assign
Cmm::heap = Cmm::theMSHeap
* cmm.h: eliminated typedef int bool
* msw.cc: declared static:
tempHeapInfo, mustResetTempHeap, noCollection, collectSerial,
freeSerial, allocSerial, totFreeFixedMem, totFreeFPages, sweptBytes,
markedBytes
* cmm.h, msw.h, msw.cc, README, testp3.c, testp5.cc:
eliminated option MSW_OnDemand
* cmm.h (class MarkAndSweep): eliminated collectNow
Sun Oct 27 12:29:23 1996 Giuseppe Attardi <attardi@omega>
* cmm.c: revised MARKING algorithm: it distinguishes pages already
scanned by collector to avoid recursive traversal: 30% improvement
in number of calls to scavenge, 50% reduction of time in scavenge.
The new MARKING algorithm saves between 20 to 40% of space.
* cmm.h, cmm.cc: revised generational mechanism.
See explanation in cmm.h.
Fri Oct 25 09:02:18 1996 Giuseppe Attardi <attardi@omega>
* cmm.h, cmm.cc: merged PoSSo and DEC copyright notices.
Thu Oct 24 16:29:42 1996 Giuseppe Attardi <attardi@omega>
* cmm.h: moved inFromSpace, inFreeSpace, inStableSpace to cmm.cc
* machine.h: reinstated bzero for SunOS 4: twice as fast as memset
Thu Oct 17 12:23:27 1996 Giuseppe Attardi <attardi@omega>
* test2.cc, test3.cc, test4.cc: updated heap initialization
* msw.cc: merged with Iglio version for CAR.
Sat Sep 21 21:08:02 1996 Giuseppe Attardi <attardi@di.unipi.it>
* machine.h: added flag __CYGWIN32__ for gcc-win32
Sat Aug 24 12:57:52 1996 Giuseppe Attardi <attardi@omega>
* cmm.h, cmm.cc: renamed
FromSpace -> FreeSpace
ToSpace -> FromSpace
Thu Aug 22 20:01:45 1996 Tito Flagella <tito@memphis>
* cmm.h: added #ifndef PL_GROEBNER for bool definition. The PL
considers bool as a builtin C++ type.
Sat Aug 10 14:29:06 1996 Giuseppe Attardi <attardi@omega>
* cmm.cc: restored identifier for StableSpace to toSpace+1
(using 0 seemed to reduce performance)
Fri Aug 9 20:01:09 1996 Giuseppe Attardi <attardi@omega>
* cmm.cc (getPages): moved test for invocation of collector
to alloc(), so we need not to distinguish calls to getPages from
alloc() and from CmmMove().
Thu Aug 8 18:38:49 1996 Giuseppe Attardi <attardi@omega>
* cmm.cc (scavenge): moved here from CmmMove traversal of unmarked
objects in promoted (but unscanned) pages
* cmm.h: renamed
OUTSIDE_HEAP -> OUTSIDE_HEAPS
* cmm.cc: Stable pages have all pageSpace = 0.
Eliminated: nextSpace, currentSpace, pageIsStable, pageIsUnStable
Introduced: toSpace, whichSpace, inFromSpace, inToSpace, inStableSpace.
renamed:
emptyStableSet -> emptyStableSpace
Tue Aug 6 11:39:19 1996 Giuseppe Attardi <attardi@omega>
* cmm.h: renamed
reservePages -> getPages
SetForward -> setForward
GetForward -> getForward
* msw.cc: renamed
mswReservePages -> mswGetPages
heapStartPtr -> heapStart
heapEndPtr -> heapEnd
stackStartPtr -> stackStart
stackEndPtr -> stackEnd
dataStartPtr -> dataStart
dataEndPtr -> dataEnd
Thu Jun 6 11:07:03 1996 Giuseppe Attardi <attardi@omega>
* msw.cc: split mswDEBUG into mswDEBUG and mswVERBOSE.
This one is used to print out info on amount collected
Replaced:
INDEX_FROM_PTR with GCPtoPage
PAGE_FROM_INDEX with (Ptr)pageToGCP
gcOut with stdout
renamed:
PAGE_INFO_FROM_PTR -> PAGE_INFO
PAGE_SPACE_FROM_PTR -> PAGE_START
Fri Apr 19 19:01:06 1996 Giuseppe Attardi <attardi@omega>
* cmm.h: split <flags> into <flags> and <verbose> so that
they can be controlled independently
Thu Feb 29 18:32:42 1996 Giuseppe Attardi <attardi@omega>
* cmm.h: restructured include files, eliminated memory.h
Fri Feb 16 11:24:37 1996 Giuseppe Attardi <attardi@omega>
* test6.cc: it now compiles
* cmm.cc (collect): procedure CmmExamineStaticAreas takes as argument
function to scan the areas.
* memory.c: eliminated memGetSegments().
Thu Feb 15 18:22:04 1996 Giuseppe Attardi <attardi@omega>
* memory.c: added memory.h containg exported definitions,
including memSetStackBottom(), used to set stackBottom as
early as possible in main.
Mon Feb 12 23:48:00 1996 Pietro Iglio <iglio@di.unipi.it>
* Added memGetSegments() in memory.c.
* CMM port for Borland C++ 4.5 and Win95.
Mon Jan 22 11:37:24 1996 Giuseppe Attardi <attardi@omega>
* memory.c: added to handle memory areas in Windows95 and NT
Thu Nov 2 16:11:11 1995 Pietro Iglio <iglio@attardi.di.unipi.it>
* Added CmmObject::operator new[] and CmmObject::operator delete[].
Now CmmArray shouldn't be necessary.
Wed Nov 1 13:53:42 1995 Giuseppe Attardi <attardi@omega>
* cmm.h (Cmm): renamed mswHeap to theMSHeap
(GcObject): renamed fo CmmObject
(GcVarObject): renamed fo CmmVarObject
(GcArray): renamed fo CmmArray
Tue Oct 31 14:00:35 1995 Pietro Iglio <iglio@attardi>
* C++ programs don't need to call mswInit() any more.
Mon Oct 30 19:00:35 1995 Pietro Iglio <iglio@attardi>
* Added virtual method "CmmHeap::scanRoots(page)" that promote pages
for each allocated object inside "page". Such method has a
meaningful implementation for MarkAndSweep and UncollectedHeap heaps.
* Minor changes/cleanings.
Thu Oct 26 19:37:35 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc (Cmm): added parameter newGcThreshold
Thu Oct 12 13:06:18 1995 Giuseppe Attardi <attardi@omega>
* cmm.h (bytesPerPageLg): eliminated
* cmm.cc: default traverse() is again empty:
it is not possible to call promotePage during traverse, since
all promotions must be done in first phase of collector.
Objects in such pages might have been already copied.
Tue Oct 3 11:43:54 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc: added default traverse() for GcObject
Sat Jun 10 10:47:08 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc (collect):
verify_object -> verifyObject
verify_header -> verifyHeader
log_root -> logRoot
* cmm.h (WHEN_FLAGS): fixed
Thu Mar 23 18:58:17 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc (CmmInit): removed memalign because it is not
available on Linux
Tue Mar 21 09:19:25 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc (expandHeap): added parameter increment
Replaced new char with MEMALIGN, normally defined as memalign
* cmm.cc: allocatePage -> allocatePages
Fri Mar 3 12:17:21 1995 Giuseppe Attardi <attardi@omega>
* cmm.h (GCPtoPage): fixes for Alpha
* cmm.cc (basePointer): fixes for Alpha
Thu Mar 2 09:59:03 1995 Giuseppe Attardi <attardi@omega>
* tempheap.cc (scavenge): fixed MARKING with TempHeap
Tue Feb 28 09:52:56 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc: fixes for RS/6000:
added DefaultHeap::DefaultHeap() to initialize usedPages
added STACKBOTTOM
Wed Feb 22 12:51:01 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc (collect): traverse Marked objects only in pages not yet scanned
* cmm.h (GcObject): Marked() -> isMarked()
Tue Feb 21 10:14:34 1995 Giuseppe Attardi <attardi@omega>
* cmm.cc (promotePage): fixed to work with MARKING
Sat Feb 18 13:12:05 1995 Giuseppe Attardi <attardi@omega>
* cmm.h: typedef long *GCP, for compatibility with
64-bit architecutres
Fri Feb 17 19:16:23 1995 Giuseppe Attardi <attardi@omega>
* machine.h: fixed DATASTART for SVR4 (Solaris2)
* cmm.cc (emptyStableSet): empties up to page.
This allows retaininig in stable set pages which have just been
copied during last collection which is not worth while to copy
again in the immediately following full collection.
Sat Feb 11 12:45:43 1995 Giuseppe Attardi <attardi@omega>
* tempheap.cc (collect): fixed printout when VERBOSE
Thu Jan 19 11:02:34 1995 Giuseppe Attardi <attardi@omega>
* cmm.h (GcArray): revised by Tito to use overloaded [].
Tue Jan 3 13:25:16 1995 Giuseppe Attardi <attardi@omega>
* cmm.h (CmmHeap):
changed transparent to opaque, so that default is 0 (false).
isTransparent() -> isOpaque()
setTransparent(bool) -> setOpaque(bool)
bool transparent -> bool opaque
Mon Dec 19 12:35:11 1994 Giuseppe Attardi <attardi@omega>
* cmm.h (Cmm): added
inline bool isTransparent()
inline void setTransparent(bool transparency)
private:
bool transparent = false;
Wed Dec 14 13:03:28 1994 Giuseppe Attardi <attardi@omega>
* cmm.cc (scavenge): fixed to visit only if base pointer is not
OUTSIDE_HEAP
Tue Dec 13 12:07:04 1994 Giuseppe Attardi <attardi@omega>
* cmm.*:
added support for SGI (contributed by Uttam M. Narsu" <narsu@styx.hks.com>)
* test*.cc:
updated to version 1.4
* doc/CMMguide.tex:
updated to version 1.4
Thu Dec 1 10:56:13 1994 Giuseppe Attardi <attardi@omega>
* tempheap.cc (alloc):
When HEADER_SIZE && defined(DOUBLE_ALIGN), top is kept at an odd value
by incrementing it if necessary after alloc() or copy().
* tempheap.h:
In class Container replaced variable bytes with size, which measures
the size in words.
Sun Nov 27 10:43:30 1994 Giuseppe Attardi <attardi@neuron>
* cmm.h: renamed
gcobject -> isTraced
Fri Nov 25 13:47:50 1994 Giuseppe Attardi <attardi@neuron>
* cmm.cc (expandHeap): restored from version 1.3
Mon Nov 21 17:16:19 1994 Giuseppe Attardi <attardi@omega>
* tempheap.cc: renamed
BBStack -> TempHeap
heapstack.cc -> tempheap.cc
heapstack.h -> tempheap.h
Eliminated HeapStack.
Sat Nov 19 12:35:36 1994 Giuseppe Attardi <attardi@neuron>
* cmm.cc:
firstp -> firstFreeWord
* heapstack.cc (Container::alloc, Container::copy, HeapStack::collect,
BBStack::collect):
added handling of case HEADER_SIZE && defined(DOUBLE_ALIGN)
Mon Nov 7 17:36:34 1994 Giuseppe Attardi <attardi@omega>
* machine.H: #undef STACK_GROWS_DOWNWARD for hp pa architecture
Thu Oct 27 12:26:20 1994 Giuseppe Attardi (attardi@omega)
* cmm.H: renamed STATIC_0 as DATASTART
DATASTART is defined for many architectures
* cmm.C, cmm.H: updated for g++ 2.6
Thu Oct 20 11:11:16 1994 Giuseppe Attardi (attardi@omega)
* HeapStack.C (scavenge):
use OUTSIDE_HEAP instead of !inside
Wed Oct 19 11:39:50 1994 Giuseppe Attardi (attardi@omega)
* cmm.H (DefaultHeap::scavenge):
moved to cmm.C
* cmm.C (allocate_page):
removed bzero of page
Thu Oct 13 09:07:15 1994 Giuseppe Attardi (attardi@omega)
* cmm.H (CmmHeap):
DefaultHeap -> theDefaultHeap
gcmove -> CmmMove
* cmm.C (reserve_pages):
maintain reservedPages instead of unusedPages
* cmm.C ():
UNALLOCATEDPAGE -> UNALLOCATEDSPACE with value 1 to ensure it is
not STABLE()
Tue Oct 11 09:44:33 1994 Giuseppe Attardi (attardi@omega)
* cmm.C (reserve_page):
restricted search for unused pages to pages between
firstReservedPage and lastReservedPage
* cmm.C:
use memset (STD C) instead of bzero (BSD) when not GCC
(bzero is 3 times faster than memset)
Mon Oct 10 10:24:06 1994 Giuseppe Attardi (attardi@omega)
* cmm.C (collect):
#ifdef STACK_GROWS_DOWNWARD
register unsigned *lim = (unsigned *)regs;
#else
register unsigned *lim = (unsigned *)regs + sizeof(regs);
#endif
Fri Oct 7 18:49:27 1994 Giuseppe Attardi (attardi@omega)
* cmm.C (collect):
while (cp < nextcp ||
inCurrentPage && cp < (nextcp = (cp <= freep && freep < nextPage) ?
freep : nextPage)) {
was: cp < freep
* cmm.C : restored working version with HEADER_SIZE = 1,
Revised DOUBLE_SIZE handling with HEADER_SIZE = 1.
Tue Oct 4 11:52:29 1994 Giuseppe Attardi (attardi@igor)
* HeapStack.C (scavenge): eliminated Heapstack::outside
Mon Oct 3 20:15:02 1994 Giuseppe Attardi (attardi@igor)
* HeapStack.C (collect): added
SET_OBJECTMAP(ToSpace->current());
SET_OBJECTMAP(container->current());
to ensure that we stop at the end of the container.
* cmm.C (allocate_page):
set pageGroup for the benefit of words() in non default heap
Fri Sep 30 16:20:00 1994 Giuseppe Attardi (attardi@igor)
* cmm.C (collect):
Added
if (freePages + unusedPages < usedPages)
expandHeap();
to ensure that expandHeap is not called within gcmove.
* cmm.C (CmmInitEarly):
#ifdef STACK_GROWS_DOWNWARD
#else
stackBottom = (unsigned)&i & ~STACKBOTTOM_ALIGNMENT_M1;
#endif
* HeapStack.C (scavenge):
Added cast for correct offset computation:
*ptr = (GcObject *)((char *)newObj + offset);
Moved #include <iostream.h> to HeapStack.C to avoid unnecessary
inclusion
Fri Sep 30 09:55:24 1994 Giuseppe Attardi (attardi@omega)
* HeapStack.C (scan):
modified so that it the argument heap is used in traversal
* HeapStack.H ():
insert -> copy
ContainerStack -> Container
WordsInUse -> usedWords
used -> usedBytes
entryNump -> entrypNum
BBStack::top -> BBStack::current
Thu Sep 29 14:27:17 1994 Giuseppe Attardi (attardi@omega)
* HeapStack.C:
HeapStack::scavenge() and BBStack::scavenge() use just MARKED(p)
(rather than p->forwarded()) to determine whether object is forwarded
added resetLiveMap to clear LiveMap at beginning of collection
* cmm.H:
SetForward() marks object
Tue Sep 20 20:37:17 1994 Giuseppe Attardi (attardi@neuron)
* Makefile.schema (HFILES): added machine,h,
new file containing processor parameters.
* cmm.C (alloc): added alignment support
On processors requiring double alignment, objects of size > 12
are aligned to double words boundaries.
A padding is added when a large object is adjacent to a small one.
Fri Sep 16 14:41:17 1994 Giuseppe Attardi (attardi@omega)
* cmm.C (collect):
Added STACK_GROWS_DOWNWARD for stack limit identification.
Thu Sep 15 10:30:59 1994 Giuseppe Attardi (attardi@omega)
* Makefile.schema (demo): eliminated LCFLAGS
Tue Sep 6 11:40:40 1994 Giuseppe Attardi (attardi@omega)
* cmm.H: added #define VirtualBase(A)
Fri Aug 12 13:18:56 1994 Giuseppe Attardi (attardi@igor)
* cmm.H (GcObject):
Can't use IS_OBJECT(++nextObj), since macro evaluates arg twice:
while (! IS_OBJECT(nextObj) && nextObj < lastObj)
nextObj++;
Wed Aug 10 14:36:28 1994 Giuseppe Attardi (attardi@omega)
* cmm.C (collect):
Bartlett discards current page after sweeping it.
We continue using it instead.
* cmm.C (collect):
With traversal of uncollected heap:
valla 207.5 1.30 2150400
Without:
valla 166.94 1.9 2146304
Thu Aug 4 17:49:50 1994 Giuseppe Attardi (attardi@posso)
* Gr13/gc/cmm/cmm.H (MARK):
MARK operates on pointer to object, not to header
Eliminated flag GCHEAPMAP
Thu Aug 4 07:47:19 1994 Giuseppe Attardi (attardi@omega)
* Gr13/groebner/groebner.C (ShowTime):
Display name of problem and results on a single line so that it
can be pasted in a result file.
* Gr13/gc/cmm/cmm.C:
Eliminated callbacks.
HEADER_CALLBACK -> HEADER_TAG
freespace_callback -> freespace_tag
* Gr12a/gc/cmm/cmm.H (CmmHeap):
Eliminated CmmHeap()
* Gr12a/configure.in:
bartlett -> default
heapzone -> heap
with- ->
* Gr12a/gc/cmm/cmm.C (new):
Eliminated heap->id();
Wed Aug 3 12:07:01 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/cmm.C (reserve_pages):
moved call to queue in gcmove
* Gr12a/gc/cmm/cmm.C:
Eliminated
#include <sys/time.h>
#include <sys/ioctl.h>
#include <machine/vmparam.h>
#include <machine/param.h> -> <sys/param.h>
Tue Aug 2 11:16:51 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/cmm.C:
Introduced flag STACK_GROWS_DOWNWARD
* Gr12a/gc/cmm/cmm.C (alloc):
Should be better that alloc would return (object+1), i.e. pointer
to data, rather than to header.
Mon Aug 1 08:52:27 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/cmm.H (CmmHeap):
alloc returns GCP instead of GcObject*
* Gr12a/gc/cmm/interface.H (IsAnObject): eliminated
* Gr12a/gc/cmm/cmm.H (scavenge):
We must distinguish membership among several heaps.
So we use the following:
OUSIDE_HEAP outside any heap
gcobject recognised GcObject (to which traverse
can be applied)
CmmHeap::outside outside this heap
OutsideHeap -> !gcobject
Sat Jul 30 11:25:15 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/ecl.doc:
/* Shifting by 32 is noop, so we must do it in two steps: */
MTword(p) |= (~0 << MTbit(p)) & ~(~0 << MTbit(q) << 1);
* Rename:
Bartlett -> DefaultHeap
reclaimer -> reclaim
zone() -> heap()
firstword -> ObjectMap
GetBeginning -> basePointer
makecurrentstableset -> stableset_to_current
gcallpercent -> gcFullGcThreshold
GCALLPERCENT -> GCFULLGCTHRESHOLD
MARKED -> MARKING
IS_MARKED -> MARKED
IsMarked -> Marked
* Gr12a/Makefile (Makefiles):
Added:
rm -f junk.c \
Fri Jul 29 11:43:20 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/cmm.C:
GcObject -> gcobject (according to what mentioned in header file)
* Eliminated _gcinit: initialization is done by _CmmInit() in
interface.H
* stackbase is aligned to segment boundary:
stackbase = (((unsigned)&i + NBPG - 1) / NBPG) * NBPG;
->
stackbase = ((unsigned)&i + STACKBOTTOM_ALIGNMENT_M1)
& ~STACKBOTTOM_ALIGNMENT_M1;
* Eliminated STACKINC
Thu Jul 28 21:37:14 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/cmm.C (expand_heap):
new_firstword[i + (firstHeapPage-new_firstHeapPage)*BITSxWORD] = firstword[i];
->
new_firstword[i] = firstword[i];
* Gr12a/greobner/Makefile.schema (bench):
Added dependencies:
H = BaseItem.H gdiv.H pair.H algebra.H groebner.H poly.H util.H ../util/List.H
groebner: $(OBJS) $(GC_LIBS)
groebner.o: groebner.C $(H)
Thu Jul 28 12:09:26 1994 Giuseppe Attardi (attardi@omega)
* Gr12a/gc/cmm/cmm.C (promote_page):
Eliminated guess_pointer_count, guess_pointers and GCGUESSPTRS
* Gr12a/gc/cmm/cmm.H:
Eliminated __GCVariable and gcvnew
Introduced new flag TRACE: only when defined logging and
tracing are performed.
* Gr12a/gc/cmm/cmm.C (gccollect):
Serious error in Bartlett code:
for (int i = 0; i < roots_count; i++) {
fp = roots[i].addr;
for (int j = roots[i].bytes; j > 0; j = j-STACKINC) {
promote_page((GCP)*fp);
}
fp++; <- should be inside previous for loop
}
Serious error in Bartlett code:
if (gcflags & GCHEAPROOTS || gcflags & GCHEAPLOG) {
if (gcflags & GCHEAPLOG)
fprintf(stderr, "non-GC heap roots:\n");
unsigned* heapend = (unsigned*)sbrk(0);
while (fp < heapend) {
^^ is not initialized
* Gr12a/gc/cmm/interface.H:
follow -> visit
* Gr12a/gc/cmm/cmm.C
(allocate_page):
bzero((char*)&firstword[firstpage*BITSxWORD],
BIT_BYTES*pages);
->
bzero((char*)&firstword[WORD_INDEX(firstpage*BYTESxPAGE)],
pages*(WORDSxPAGE/BITSxWORD));
(gccollect):
bzero((char*)&marked[firstHeapPage*BITSxWORD],
BIT_BYTES*heapspanpages);
->
bzero((char*)&marked[WORD_INDEX(firstHeapPage*BYTESxWORD)],
heapspanpages*(WORDSxPAGE/BITSxWORD));
* Global renaming:
BIT_WORDS -> BITSxWORD
WORDBYTES -> BYTESxWORD
PAGEBYTES -> BYTESxPAGE
PAGEWORDS -> WORDSxPAGE
HeapZone -> CmmHeap
* Gr12a/gc/cmm/cmm.C (GcObject):
firstword = firstword - WORD_INDEX(firstHeapPage*BYTESxPAGE);
marked = marked - WORD_INDEX(firstHeapPage*BYTESxPAGE);
corretto di nuovo GcObjectect -> GcObject
Wed Jul 27 21:44:23 1994 Giuseppe Attardi (attardi@posso)
* Gr12a/config.h.in:
BARTLETT -> __BARTLETT
BOEHM -> __BOEHM
* Gr12a/groebner/main.H: added #ifdef __CMM before
extern HeapZone *hs;
* Gr12a/gc/cmm/gcalloc.C (gccollect):
replaced gcregisters with setjmp/longjmp