Make sure every to-be-implemented GC can use the same interface. As a
result, a 1MB chunk of RAM is allocated on Unix systems on init instead
of allocating on demand.
Этот коммит содержится в:
Ayke van Laethem 2018-11-17 14:11:58 +01:00
родитель 4fdffdf8b2
коммит 15a4afb22a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED
9 изменённых файлов: 37 добавлений и 47 удалений

Просмотреть файл

@ -6,3 +6,8 @@ const GOARCH = "amd64"
// The bitness of the CPU (e.g. 8, 32, 64).
const TargetBits = 64
// Align on word boundary.
func align(ptr uintptr) uintptr {
return (ptr + 7) &^ 7
}

Просмотреть файл

@ -12,4 +12,12 @@ const GOARCH = "avr"
const TargetBits = 8
//go:extern _heap_start
var heapStart unsafe.Pointer
var heapStartSymbol unsafe.Pointer
var heapStart = uintptr(unsafe.Pointer(&heapStartSymbol))
// Align on a word boundary.
func align(ptr uintptr) uintptr {
// No alignment necessary on the AVR.
return ptr
}

Просмотреть файл

@ -12,4 +12,11 @@ const GOARCH = "arm"
const TargetBits = 32
//go:extern _heap_start
var heapStart unsafe.Pointer
var heapStartSymbol unsafe.Pointer
var heapStart = uintptr(unsafe.Pointer(&heapStartSymbol))
// Align on word boundary.
func align(ptr uintptr) uintptr {
return (ptr + 3) &^ 3
}

Просмотреть файл

@ -12,4 +12,11 @@ const GOARCH = "wasm"
const TargetBits = 32
//go:extern __heap_base
var heapStart unsafe.Pointer
var heapStartSymbol unsafe.Pointer
var heapStart = uintptr(unsafe.Pointer(&heapStartSymbol))
// Align on word boundary.
func align(ptr uintptr) uintptr {
return (ptr + 3) &^ 3
}

Просмотреть файл

@ -1,12 +1,11 @@
// +build !linux
package runtime
import (
"unsafe"
)
var heapptr = uintptr(unsafe.Pointer(&heapStart))
// Ever-incrementing pointer: no memory is freed.
var heapptr = heapStart
func alloc(size uintptr) unsafe.Pointer {
// TODO: this can be optimized by not casting between pointers and ints so

Просмотреть файл

@ -120,9 +120,3 @@ func abort() {
sleepWDT(WDT_PERIOD_2S)
}
}
// Align on a word boundary.
func align(ptr uintptr) uintptr {
// No alignment necessary on the AVR.
return ptr
}

Просмотреть файл

@ -46,11 +46,6 @@ func abort() {
}
}
// Align on word boundary.
func align(ptr uintptr) uintptr {
return (ptr + 3) &^ 3
}
// Implement memset for compiler-rt.
//go:export memset
func memset(ptr unsafe.Pointer, c byte, size uintptr) {

Просмотреть файл

@ -8,10 +8,14 @@ import (
func _Cfunc_putchar(c int) int
func _Cfunc_usleep(usec uint) int
func _Cfunc_calloc(nmemb, size uintptr) unsafe.Pointer
func _Cfunc_malloc(size uintptr) unsafe.Pointer
func _Cfunc_abort()
func _Cfunc_clock_gettime(clk_id uint, ts *timespec)
const heapSize = 1 * 1024 * 1024 // 1MB to start
var heapStart = uintptr(_Cfunc_malloc(heapSize))
type timeUnit int64
const tickMicros = 1
@ -62,27 +66,3 @@ func abort() {
// panic() exits with exit code 2.
_Cfunc_abort()
}
func alloc(size uintptr) unsafe.Pointer {
buf := _Cfunc_calloc(1, size)
if buf == nil {
runtimePanic("cannot allocate memory")
}
return buf
}
func free(ptr unsafe.Pointer) {
//C.free(ptr) // TODO
}
func GC() {
// Unimplemented.
}
func KeepAlive(x interface{}) {
// Unimplemented. Only required with SetFinalizer().
}
func SetFinalizer(obj interface{}, finalizer interface{}) {
// Unimplemented.
}

Просмотреть файл

@ -44,11 +44,6 @@ func ticks() timeUnit {
return timestamp
}
// Align on word boundary.
func align(ptr uintptr) uintptr {
return (ptr + 3) &^ 3
}
// Abort executes the wasm 'unreachable' instruction.
func abort() {
trap()