all: include picolibc for bare metal targets

This is necessary for better CGo support on bare metal. Existing
libraries expect to be able to include parts of libc and expect to be
able to link to those symbols.

Because with this all targets have a working libc, it is now possible to
add tests to check that a libc in fact works basically.

Not all parts of picolibc are included, such as the math or stdio parts.
These should be added later, when needed.

This commit also avoids the need for the custom memcpy/memset/memcmp
symbols that are sometimes emitted by LLVM. The C library will take care
of that.
This commit is contained in:
Ayke van Laethem
2020-01-15 15:59:51 +01:00
committed by Ron Evans
parent 9ec426e25e
commit f316ebc23b
18 changed files with 196 additions and 62 deletions
+7
View File
@@ -4,6 +4,7 @@ package main
int fortytwo(void);
#include "main.h"
int mul(int, int);
#include <string.h>
*/
import "C"
@@ -109,6 +110,12 @@ func main() {
var _ C.option3_t = C.option3A
println("option 2A:", C.option2A)
println("option 3A:", C.option3A)
// libc: test whether C functions work at all.
buf1 := []byte("foobar\x00")
buf2 := make([]byte, len(buf1))
C.strcpy((*C.char)(unsafe.Pointer(&buf2[0])), (*C.char)(unsafe.Pointer(&buf1[0])))
println("copied string:", string(buf2[:C.strlen((*C.char)(unsafe.Pointer(&buf2[0])))]))
}
func printUnion(union C.joined_t) C.joined_t {
+1
View File
@@ -55,3 +55,4 @@ option F: 11
option G: 12
option 2A: 20
option 3A: 21
copied string: foobar