
====================================================
OPEN GENGC BUGS
====================================================

7. OPEN. This isn't really a GENGC bug, but, for completeness, we
   should fix ppc-vm.lisp so that the fixup can take an offset a la
   x86-64. This was done in generic.lisp, but needs corresponding
   changes in pcc-vm.lisp

====================================================
CLOSED GENGC BUGS
====================================================

1. FIXED. Occasional inline allocation failures? I'm guessing that's
   what we're seeing here. Certain operations take a long time and
   involve a lot kernel_task CPU activity. It's possible that this is
   just I/O, but I don't think so. This seems to have gotten worse
   recently. Changing the allocation macro to not use a fixup with an
   offset fixes this.

2. FIXED. Purify fails. Running the core-test.sh test causes a BUS
   ERROR. The problem was that calling alien-callbacks loaded from a
   saved core was failing. See note in
   c-call.lisp/alien-assembler-callback-wrapper for details.

3. FIXED! cons-madly test (gc.impure.lisp) fails and
   drops into LDB. My hunch is that this is related to the
   allocation/moving of large objects in gencgc.c.

4. FIXED. PPC/Linux gencgc fails with a BUS ERROR (SIGSEGV maybe?)
   after the first GC.

5. FIXED. sb-md5 and cltl2 often (but not always) fail to build out of
   contrib. Latest gencgc fixes seem to have fixed this. Keep an eye
   out for it though. I think the allocation macro fixup changes fixed
   this one.

6. FIXED. finalize-test.sh fails. finalizers weren't being run
   properly. removed #ifdef LISP_FEATURE_X86[_64] in
   gencgc.c/scav_weak_pointer and now things seem to work.

8. NOT A BUG. In insts.lisp, we do a lis/addi to load the address of a
   fixup. This should really be lis/ori, but the ori instruction
   doesn't deal with fixups. This should be fixed, but doesn't seem to
   be rearing its ugly head at the moment. This is wrong. The fixup
   deals with adjusting the high word such that the the lis/addi
   sequence functions correctly here.

9. FIXED. x86-64 builds busted. they build ok, but then can't do a
   full rebuild of themselves. They die after the first purify.
   GENCGC_RUNS_1 works, GENCGC_CANDIDATE_1 breaks. Wrongly #ifdef'ed
   out an os_zero call in purify.c. Restoring this fixes things.



====================================================
CVS tag: ALLOCATION_CLEANUP_1
====================================================

File: src/assembly/ppc/arith.lisp
================

* Fixed allocation for CONS-BIGNUM. Note that we now always cons 2 words
  instead of trying to fit into 1 word first

File: src/compiler/ppc/alloc.lisp
================

* Fixed vop for list-or-list*. Uses the allocation macro instead of
  setting alloc-tn directly. Note that the (relatively) recent dynamic
  extent support should still work here. In this case, we directly
  allocate this by adjusting csp-tn.

* Fixed vop for make-closure. See note above. Dynamic extent should
  still work.

* TODO: [FUTURE] add stack allocation to the allocate macro.

File: src/compiler/ppc/macros.lisp

* Added allocation macro. Note that this is using king nato's version
  and may not do everything we need to do for GENCGC.

* with-fixed-allocation changes. Now takes a keyword argument (:lowtag
  other-pointer-lowtag). Removed restriction on having a non-empty
  body as we can use this macro just for allocating data. Now uses the
  allocation macro instead of adjusting alloc-tn directly.

* Removed the :extra keyword argument from pseudo-atomic. Don't use
  this for allocating memory anymore! Removed the corresponding gensym
  and let. This is still King Nato's pseudo-atomic. At some point we
  should better understand the differences between rtoy's version and
  king nato's version.


File: move.lisp
===============

* move-from-unsigned vop now uses with-fixed allocation instead of
  setting alloc-tn directly. We always allocate two words now instead
  of trying to get away with one first.


====================================================
CVS tag: ALLOCATION_CLEANUP_2
====================================================

File: src/assembly/ppc/array.lisp
=============================

* Fixed allocate-vector assembly-routine to use allocate macro instead
  of adjusting alloc-tn directly.

File: src/compiler/ppc/array.lisp
=============================

* make-array-header vop now uses allocation macro instead of setting
  alloc-tn directly

File: src/compiler/ppc/call.lisp
============================

* listify-rest-args now uses the allocation macro instead of adjusting
  alloc-tn directly.  For dynamic extent args, we still allocate
  directly by adjusting csp-tn. We should implement stack allocation
  in the allocation macro.


====================================================
CVS tag: BUILD_CLEANUP_1
====================================================

File: src/code/ppc-vm.lisp

* Add flag disabling scavenging of read-only space (to be used later)

File: src/compiler/ppc/parms.lisp

* Add gencgc-page-bytes variable. Currently 4096. Bump to 32k later.

* Added dynamic-space-start and dynamic-space-end constants for linux
  and darwin #!+gencgc. Conditionalized dynamic-0 and dynamic-1
  constants for#!-gencgc.

* Added *restart-lisp-function*, *current-region-end-addr* and
  *scavenge-read-only-space* static-symbols.

File: src/runtime/Config.ppc-darwin

* Make GC_SRC shell commands that search for LISP_FEATURE_GENCGC in
  genesis/config.h and set GC_SRC to gencgc.c or cheneygc.c as
  appropriate

File: src/runtime/Config.ppc-linux

* Make GC_SRC shell commands that search for LISP_FEATURE_GENCGC in
  genesis/config.h and set GC_SRC to gencgc.c or cheneygc.c as
  appropriate

====================================================
CVS tag: GENCGC_PREP_1
====================================================

File: src/runtime/arch.h

* Moved extern fpu_save and fpu_restore defintions here

File: src/runtime/cheneygc.c

* removed static scavenge_interrupt_contexts prototype

File: gc-common.c

* Instead of #ifndef LISP_FEATURE_SPARC for scav_fdefn, use
  defined(LISP_FEATURE_X86) || defined(LISP_FEATURE_X86_64)

* Instead of #ifndef LISP_FEATURE_GENCGC for scav_fun_header and
  scav_return_pc_header scavtab entries, use #if
  !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64)

* set scav_tab[FDEFN_WIDETAG] to scav_fdefn on X86 and X86_64 and
  scav_boxed for everything else.

File: gc-internal.h

* added prototype for scavenge_interrupt_contexts

====================================================
CVS tag: GENCGC_PREP_2
====================================================

File: gc-common.c

* Reverted gc-common.c changes from GENCGC_PREP_1. The problem was
  that I was mimicing rtoy's FDEFN changes for PPC, superficially,
  without changing the underlying code. He changed the way fdefn's
  work on ppc to look more like they do on SPARC. I think we can get
  away with leaving this alone, at least for now.

File: ppc-arch.c

* Moved PSEUDO_ATOMIC_INTERRUPTED_BIAS to ppc-arch.h

File: ppc-arch.h

* Moved PSEUDO_ATOMIC_INTERRUPTED_BIAS to ppc-arch.h

File: ppc-assem.S

* Added do_pending_interrupt, fpu_save and fpu_restore.

File: ppc-darwin-spacelist.h

* Adjust spaces for #+gencgc and #-gencgc

File: purify.c

* #ifdef LISP_FEATURE_GENCGC -> X86{_64}

File: gencgc.c

* Remove fpu_save and fpu_restore prototypes

====================================================
CVS tag: GENCGC_PREP_3
====================================================

File: src/runtime/gc.h

* Added xxx_pseudo_atomic_xxx and xxx_alloc_pointer #defines

File: src/runtime/alloc.c

* Start using xxx_pseudo_atomic_xxx

====================================================
CVS tag: GENCGC_PREP_4
====================================================

File: src/runtime/globals.c

* Cleaning up GENCGC/X86[_64] ifdefs

File: src/runtime/globals.h

* Cleaning up GENCGC/X86[_64] ifdefs

File: src/runtime/parse.c

* Use get_alloc_pointer instead of arch specific ways of doing so

====================================================
CVS tag: PSEUDO_ATOMIC_REG_ALLOC
====================================================

File: compiler/ppc/macros.lisp

* Pseudo-atomic now uses bits 3 and 1 of reg_ALLOC insetead of using
  reg_NL3 for the interrutped part.

File: src/runtime/gc.h

* Pseudo-atomic now uses bits 3 and 1 of reg_ALLOC insetead of using
  reg_NL3 for the interrutped part.

File: src/runtime/ppc-arch.c

* Pseudo-atomic now uses bits 3 and 1 of reg_ALLOC insetead of using
  reg_NL3 for the interrutped part.

* Brought the allocation trap stuff along, but this is untested.

File: src/runtime/ppc-assem.S

* Pseudo-atomic now uses bits 3 and 1 of reg_ALLOC insetead of using
  reg_NL3 for the interrutped part.

====================================================
CVS tag: GENCGC_BUILDS_1
====================================================

File: src/runtime/gencgc.c

* The big kahuna...

* Ok, lots of little changes to get things working. Had to fix up the
  allocation macro, the uses of it, etc... 


====================================================
CVS tag: GENCGC_RUNS_1
====================================================

* Ok, it runs now, but we seem to trap on every allocation. Trying to
  figure out why. Works -gencgc/ppc and works on x86-64.

====================================================
CVS tag: GENCGC_RUNS_INLINE_ALLOCATION_1
====================================================

File: src/compiler/generic/genesis.lisp

* do-cold-fixup now looks at the SI portion of PPC instructions in :ha
  and :l fixups and uses these as offsets in calculating the address.

File: src/compiler/ppc/insts.lisp

* in define-d-si-instruction we now stick the fikup-offset into the si
  portion of the opcode instead of always using 0. This allows us to
  pass this information on to do-cold-fixup in genesis.lisp.

File: src/compiler/ppc/macros.lisp

* gencgc allocation macro now uses fixups to boxed_region.free_pointer
  and boxed_region.end_addr to get these values instead of pulling
  them out of registers. This removes the need to keep these registers
  in sync with the C struct values. And it is more like what we will
  eventually need to do if we ever do PPC threads.

File: src/runtime/gc.h

* removed set_current_region_free, get_current_free, and
  set_current_region_end.

File: src/runtime/gencgc.c

* In gc_alloc_new_region, use page_address(last_page) + PAGE_BYTES to
  get the end_addr instead of start_addr + bytes_found.

* removed set_current_region_end calls.

File: src/runtime/ppc-arch.c

* include gencgc-alloc-region.h

* look back 3 instructions instead of 2 to match the new allocation
  macro

* added end_addr variable for debugging.

* no longer adjust dynamic_space_free_pointer

====================================================
CVS TAG: GENCGC_MOSTLY_WORKING_1
====================================================

* Making purify and loading callbacks from cores work for ppc/gengc.

* Remove *scavenge-read-only-space*

File: src/compiler/ppc/c-call.lisp

* Fixed alien-callback-assembler-wrapper to get the address for
  enter-alien-callback from the symbol-value slot of
  SB-ALIEN::*ENTER-ALIEN-CALLBACK* to ensure that this works even if
  the GC moves ENTER-ALIEN-CALLBACK. Thanks to JES for the suggestion
  on the fix. callback.impure.lisp now passes.

File: src/runtime/gencgc.c

* Removed #ifdef LISP_FEATURE_X86[_64] in
  gengcc.c/scav_weak_pointer. Definitely some OOAO violations here,
  but now finalize.test.sh passes.

====================================================
CVS TAG: GENCGC_MOSTLY_WORKING_2
====================================================

* New allocation macro. Seems to make things better.

====================================================
CVS TAG: GENCGC_MOSTLY_WORKING_3
====================================================

* Trying to undo damage done along the way. Lots of little
  changes. Please document these in the morning.

====================================================
CVS TAG: This stuff never got tagged. I backed it out before I tagged
         it.
====================================================

* Added ARCH_HAS_CTR_REGISTER and friends. Now we fixup the CTR in
  scavenge_interrupt_context. Whoops. Backed this out as it seemed to
  be messing things up.

====================================================
CVS TAG: GENCGC_ALL_TESTS_PASSED
====================================================

File: src/runtime/gc.h

* set_alloc_pointer now just sets the high bits and leaves the p-a
  flags alone.

File: src/runtime/interrupt.c

* interrupt_handle_pending clears the p-a-interrupted flag

* undo_fake_foreign_function_call doesn't zap the p-a bits in
  reg_ALLOC

File: src/runtime/ppc-arch.c

* handle_allocation_trap doesn't zap the p-a bits in reg_ALLOC

====================================================
CVS TAG: GENCGC_ALL_0_9_9_27_MERGE
====================================================

* Forward ported to 0.9.9.27

====================================================
CVS TAG: GENCGC_CANDIDATE_1
====================================================

File: src/runtime/ppc-assem.S

* Massive props to Xophe for finding this. For a long time now, we had
  been using lis, addi to load the address of NIL. Turns out this
  fails when the high bit of the low word is set. I have no idea how
  we missed this for so long, but changing the instruction sequence to
  lis, ori fixes the problem of linux/ppc gencgc not working.

File: src/runtime/ppc-arch.c

* Turn off the address checking in arch_get_bad_addr. The pointer
  arithmetic was wrong and was causing problems. We don't really need
  this check (right?).

File: src/code/toplevel.lisp

* Fix the way we compute the end-of-stack in scrub-control-stack.

File: src/runtime/bsd-os.c

* Use arch_get_bad_addr to get fault address

====================================================
CVS TAG: GENCGC_SBCL_0_9_9_34_MERGE
====================================================

* Forward ported to 0.9.9.34

====================================================
CVS TAG: GENCGC_CANDIDATE_2
====================================================

File: src/compiler/ppc/macros.lisp

* cleaned up comments for allocation macro

* removed commented code that used to throw an error for empty
  allocation macro body. Now we call this for its side effect of
  allocating memory

File: src/compiler/ppc/parms.lisp

* gencgc-page-bytes -> 4096

* added pseudo-atomic-interrupted-flag and pseudo-atomic-flag

File: src/runtime/alloc.c

* clr_pseudo_atomic -> clear_pseudo_atomic

File: src/runtime/gc.h

* clr_pseudo_atomic -> clear_pseudo_atomic

* PSEUDO_ATOMIC_[INTERRUPTED_]VALUE -> flag_PseudoAtomic[Interrupted]

File: src/runtime/interrupt.c

* clr_pseudo_atomic -> clear_pseudo_atomic

File: src/runtime/ppc-arch.c

* whitespace fix

File: package-data-list.lisp-expr

* added PSEUDO-ATOMIC-INTERRUPTED-FLAG and PSEUDO-ATOMIC-FLAG to sb-vm
  exports

====================================================
CVS TAG: GENCGC_SBCL_0_9_9_35_MERGE
====================================================

* Forward parted to 0.9.9.35

====================================================
CVS TAG: GENCGC_CANDIDATE_3
====================================================

NOTE: This includes the fix for the problem where x86-64 couldn't
build itself. I erroneously removed an os_zero in purify.c. This has
been restored.

File: src/runtime/purify.c

* remove ifndef GENCGC check around os_zero call
* undo recent change to add back in a bit setting the
  dynamic_space_free_pointer on x86[_64]. I don't think we need this

File: src/runtime/parse.c

* dunamic_space_free_ptr -> dynamic_space_free_pointer

File: src/runtime/ppc-arch.c

* Fixing comment text in allocation_trap_p
* arch_clr_pseudo_atomic_interrupted ->
    arch_clear_pseudo_atomic_interrupted

File: src/runtime/gc-common.c

* restore workaround behvaior for !GENCGC, not !X86[_64]

* whitespace fix

File :src/runtime/gencgc.c

* undoing gratuitous spacing changes and fixing whitespace
* remove bogus comment

====================================================
CVS TAG: GENCGC_CANDIDATE_4
====================================================

File: src/runtime/purify.c

* Use dynamic_space_purify_pointer instead of
  dynamic_space_free_pointer to mark the end of the dynamic_space
  that we purify
* call gc_free_heap in purify when using GENCGC

File: src/runtime/interrupt.c

clear_psuedo_atomic_interrupted -> arch_clear_pseudo_atomic_interrupted

====================================================
CVS TAG: GENCGC_CANDIDATE_5
** Note: not tagged, but patch made
====================================================

File: src/runtime/assembly/ppc/array.lisp

* cleaning up comment

File: src/code/ppc-vm.lisp

* removed unused commented-out chunk

File: src/compiler/generic/genesis.lisp

* Added FIXME about ppc offset fixups only being half-done

File: src/compiler/ppc/c-call.lisp

* Comment cleanup

File: src/compiler/ppc/macros.lisp

* Allocation macro comment cleanup

File: src/runtime/gc.h

* Whitespace

* #ifdef GENCGC for the p_a macros

File: src/runtime/gencgc.c

* whitespace

* removed bogus comment

* restore gc_assert for alignment check on PPC

File: src/runtime/globals.h

* updated comment about dyanmic_space_free_pointer

File: src/runtime/interrupt.c

* whitespace

File: src/runtime/ppc-arch.c

* Remove pc checking stuff

* remove SIGILL handling and adjust comment

* whitespace

* updated comment aboud dynamic_space_free_pointer

File: src/runtime/ppc-arch.h

* removed bogus comment

File: src/runtime/ppc-darwin-spacelist.h

* removed extraneous space

====================================================
CVS TAG: GENCGC_CANDIDATE_6
====================================================

File: src/runtime/ppc-arch.c

* Removed enable_some_signals and call to it. We don't need these
  signals on when we call alloc, but CMUCL does.

File: src/runtime/alloc.c

* Put in Xophe's fix against GC moving a newly pointer from moving out
  from under us when we handle a pending interrupt. If the C stack is
  not scavenged during GC, result needs to be protected against not
  being referred to by any roots, so we push it onto the lisp control
  stack, and read it back off after any potential GC has finished
 
====================================================
CVS TAG: GENCGC_CANDIDATE_7
====================================================

* Fix mismatched } and #endif in bsd-os.c/memory_fault_handler

====================================================
Untagged Changes
====================================================


====================================================
Uncommited Changes
====================================================

