github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/src/runtime/runtime_tinygoriscv.go (about)

     1  //go:build tinygo.riscv32
     2  
     3  package runtime
     4  
     5  import "unsafe"
     6  
     7  //go:extern _sbss
     8  var _sbss [0]byte
     9  
    10  //go:extern _ebss
    11  var _ebss [0]byte
    12  
    13  //go:extern _sdata
    14  var _sdata [0]byte
    15  
    16  //go:extern _sidata
    17  var _sidata [0]byte
    18  
    19  //go:extern _edata
    20  var _edata [0]byte
    21  
    22  func preinit() {
    23  	// Initialize .bss: zero-initialized global variables.
    24  	ptr := unsafe.Pointer(&_sbss)
    25  	for ptr != unsafe.Pointer(&_ebss) {
    26  		*(*uint32)(ptr) = 0
    27  		ptr = unsafe.Add(ptr, 4)
    28  	}
    29  
    30  	// Initialize .data: global variables initialized from flash.
    31  	src := unsafe.Pointer(&_sidata)
    32  	dst := unsafe.Pointer(&_sdata)
    33  	for dst != unsafe.Pointer(&_edata) {
    34  		*(*uint32)(dst) = *(*uint32)(src)
    35  		dst = unsafe.Add(dst, 4)
    36  		src = unsafe.Add(src, 4)
    37  	}
    38  }