Browse Source
runtime: refactor initialization code
Let each target handle its own initialization/finalization sequence
instead of providing one in the runtime with hooks for memory
initialization etc. This is much more flexible although it causes a
little bit of code duplication.
pull/43/merge
Ayke van Laethem
6 years ago
No known key found for this signature in database
GPG Key ID: E97FF5335DFDFDED
6 changed files with
29 additions and
33 deletions
src/runtime/runtime.go
src/runtime/runtime_arm.go
src/runtime/runtime_avr.go
src/runtime/runtime_nrf.go
src/runtime/runtime_stm32.go
src/runtime/runtime_unix.go
@ -23,25 +23,6 @@ func initAll()
// scheduler(coroutine)
func mainWrapper ( )
// Entry point for Go. Initialize all packages and call main.main().
//go:export main
func main ( ) int {
// Initialize memory etc.
preinit ( )
// Run initializers of all packages.
initAll ( )
// Enable interrupts etc.
postinit ( )
// Compiler-generated wrapper to main.main().
mainWrapper ( )
// For libc compatibility.
return 0
}
func GOMAXPROCS ( n int ) int {
// Note: setting GOMAXPROCS is ignored.
return 1
@ -40,9 +40,6 @@ func preinit() {
}
}
func postinit ( ) {
}
func abort ( ) {
for {
arm . Asm ( "wfi" )
@ -36,6 +36,15 @@ var _sbss unsafe.Pointer
//go:extern _ebss
var _ebss unsafe . Pointer
//go:export main
func main ( ) {
preinit ( )
initAll ( )
postinit ( )
mainWrapper ( )
abort ( )
}
func preinit ( ) {
// Initialize .bss: zero-initialized global variables.
ptr := uintptr ( unsafe . Pointer ( & _sbss ) )
@ -107,7 +116,6 @@ func ticks() timeUnit {
}
func abort ( ) {
avr . Asm ( "cli" )
for {
sleepWDT ( WDT_PERIOD_2S )
}
@ -16,9 +16,12 @@ const tickMicros = 1024 * 32
func systemInit ( )
//go:export Reset_Handler
func handleReset ( ) {
func main ( ) {
systemInit ( )
main ( )
preinit ( )
initAll ( )
mainWrapper ( )
abort ( )
}
func init ( ) {
@ -11,11 +11,11 @@ type timeUnit int64
const tickMicros = 1 // TODO
//go:export Reset_Handler
func handleReset ( ) {
main ( )
}
func ini t( ) {
func main ( ) {
preinit ( )
initAll ( )
mainWrapper ( )
abor t ( )
}
func putchar ( c byte ) {
@ -24,10 +24,17 @@ type timespec struct {
const CLOCK_MONOTONIC_RAW = 4
func preinit ( ) {
}
// Entry point for Go. Initialize all packages and call main.main().
//go:export main
func main ( ) int {
// Run initializers of all packages.
initAll ( )
// Compiler-generated wrapper to main.main().
mainWrapper ( )
func postinit ( ) {
// For libc compatibility.
return 0
}
func putchar ( c byte ) {