diff --git a/README.md b/README.md index ff2784c3..cd20a497 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,6 @@ Common Go syntax is already supported. Except for the following, which needs to * panic (Limited support) * recover (Not supported yet) * defer (Limited: defer in loops is not supported) -* gc (Not supported yet) * chan (Not supported yet) * generics (Not supported yet) @@ -204,6 +203,7 @@ Follow these steps to generate the `llgo` command (its usage is the same as the ```sh brew update # execute if needed +brew install bdw-gc brew install llvm@17 go install -v ./... ``` @@ -214,6 +214,7 @@ go install -v ./... echo 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main' | sudo tee /etc/apt/sources.list.d/llvm.list wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-get update # execute if needed +sudo apt-get install libgc-dev sudo apt-get install --no-install-recommends llvm-17-dev go install -v ./... ``` diff --git a/internal/runtime/bdwgc/bdwgc.go b/internal/runtime/bdwgc/bdwgc.go index f15c1bad..907b3217 100644 --- a/internal/runtime/bdwgc/bdwgc.go +++ b/internal/runtime/bdwgc/bdwgc.go @@ -1,6 +1,5 @@ package bdwgc -import "C" import ( _ "unsafe" @@ -28,16 +27,28 @@ func Free(ptr c.Pointer) // ----------------------------------------------------------------------------- //go:linkname RegisterFinalizer C.GC_register_finalizer -func RegisterFinalizer(obj c.Pointer, fn func(c.Pointer, c.Pointer), cd c.Pointer, old_fn *func(c.Pointer, c.Pointer), old_cd *c.Pointer) int +func RegisterFinalizer( + obj c.Pointer, + fn func(c.Pointer, c.Pointer), cd c.Pointer, + oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) //go:linkname RegisterFinalizerNoOrder C.GC_register_finalizer_no_order -func RegisterFinalizerNoOrder(obj c.Pointer, fn func(c.Pointer, c.Pointer), cd c.Pointer, old_fn *func(c.Pointer, c.Pointer), old_cd *c.Pointer) int +func RegisterFinalizerNoOrder( + obj c.Pointer, + fn func(c.Pointer, c.Pointer), cd c.Pointer, + oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) //go:linkname RegisterFinalizerIgnoreSelf C.GC_register_finalizer_ignore_self -func RegisterFinalizerIgnoreSelf(obj c.Pointer, fn func(c.Pointer, c.Pointer), cd c.Pointer, old_fn *func(c.Pointer, c.Pointer), old_cd *c.Pointer) int +func RegisterFinalizerIgnoreSelf( + obj c.Pointer, + fn func(c.Pointer, c.Pointer), cd c.Pointer, + oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) //go:linkname RegisterFinalizerUnreachable C.GC_register_finalizer_unreachable -func RegisterFinalizerUnreachable(obj c.Pointer, fn func(c.Pointer, c.Pointer), cd c.Pointer, old_fn *func(c.Pointer, c.Pointer), old_cd *c.Pointer) int +func RegisterFinalizerUnreachable( + obj c.Pointer, + fn func(c.Pointer, c.Pointer), cd c.Pointer, + oldFn *func(c.Pointer, c.Pointer), oldCd *c.Pointer) // ----------------------------------------------------------------------------- @@ -48,7 +59,7 @@ func Enable() func Disable() //go:linkname IsDisabled C.GC_is_disabled -func IsDisabled() int +func IsDisabled() c.Int //go:linkname Gcollect C.GC_gcollect func Gcollect() @@ -62,10 +73,10 @@ func GetMemoryUse() uintptr func EnableIncremental() //go:linkname IsIncrementalMode C.GC_is_incremental_mode -func IsIncrementalMode() int +func IsIncrementalMode() c.Int //go:linkname IncrementalProtectionNeeds C.GC_incremental_protection_needs -func IncrementalProtectionNeeds() int +func IncrementalProtectionNeeds() c.Int //go:linkname StartIncrementalCollection C.GC_start_incremental_collection func StartIncrementalCollection()