Port to x86-64 versions of Windows
authorDavid Lichteblau <david@lichteblau.com>
Mon, 12 Nov 2012 16:32:51 +0000 (17:32 +0100)
committerDavid Lichteblau <david@lichteblau.com>
Wed, 5 Dec 2012 16:34:28 +0000 (17:34 +0100)
commit26ac616b6783b8841ccda8b4f1caa7d898d91b86
treea210e2cb210fe5ab1e640a4415faacc9a191a9d6
parentf93e3064ca572904ee399b77642ba52f2edfce3e
Port to x86-64 versions of Windows

  - Microsoft x86-64 calling convention differences compared to the
    the System V ABI: Argument passing registers; shadow space.
  - Inform gcc that we are using the System V ABI for a few functions.
  - Define long, unsigned-long to be 32 bit.  This change just falls
    into place now, since incompatible code had been adjusted earlier.
  - Use VEH, not SEH.
  - No pseudo atomic needed around inline allocation, but tweak alloc().
  - Use the gencgc space alignment that also works on win32 x86.
  - Factor "function end breakpoint" handling out of the sigtrap handler.

Beware known bugs, manifested as hangs during threads.impure.lisp,
happening rather frequently with 64 bit builds and at least much
less frequently (or not at all) with 32 bit binaries on the same
version of Windows, tested on Server 2012.  (All credit for features
goes to Anton, all bugs are my fault.)

Thanks to Anton Kovalenko.
25 files changed:
src/code/irrat.lisp
src/code/target-c-call.lisp
src/compiler/generic/genesis.lisp
src/compiler/generic/objdef.lisp
src/compiler/x86-64/c-call.lisp
src/compiler/x86-64/macros.lisp
src/compiler/x86-64/parms.lisp
src/compiler/x86-64/vm.lisp
src/runtime/Config.x86-64-win32 [new file with mode: 0644]
src/runtime/arch.h
src/runtime/funcall.c
src/runtime/gc.h
src/runtime/gencgc.c
src/runtime/mswin64.def [new file with mode: 0644]
src/runtime/os.h
src/runtime/pthreads_win32.h
src/runtime/run-program.c
src/runtime/runtime.h
src/runtime/thread.c
src/runtime/win32-os.c
src/runtime/x86-64-arch.c
src/runtime/x86-64-arch.h
src/runtime/x86-64-assem.S
src/runtime/x86-64-win32-os.c [new file with mode: 0644]
src/runtime/x86-64-win32-os.h [new file with mode: 0644]