aboutsummaryrefslogtreecommitdiff
path: root/internal/libc2
diff options
context:
space:
mode:
Diffstat (limited to 'internal/libc2')
-rw-r--r--internal/libc2/Makefile68
-rw-r--r--internal/libc2/all_test.go56
-rw-r--r--internal/libc2/capi_linux_amd64.go21
-rw-r--r--internal/libc2/libc2.go116
4 files changed, 261 insertions, 0 deletions
diff --git a/internal/libc2/Makefile b/internal/libc2/Makefile
new file mode 100644
index 0000000..a54e63b
--- /dev/null
+++ b/internal/libc2/Makefile
@@ -0,0 +1,68 @@
+# Copyright 2019 The Sqlite Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+.PHONY: all clean cover cpu editor internalError later mem nuke todo edit
+
+grep=--include=*.go --include=*.l --include=*.y --include=*.yy
+ngrep='TODOOK\|internal\/bin'
+
+all: editor
+ date
+ go version 2>&1 | tee log
+ gofmt -l -s -w *.go
+ go test -i
+ go test 2>&1 -timeout 1h | tee -a log
+ #TODO GOOS=linux GOARCH=arm go build
+ #TODO GOOS=linux GOARCH=arm64 go build
+ #TODO GOOS=linux GOARCH=386 go build
+ GOOS=linux GOARCH=amd64 go build
+ #TODO GOOS=windows GOARCH=386 go build
+ #TODO GOOS=windows GOARCH=amd64 go build
+ go vet 2>&1 | grep -v $(ngrep) || true
+ golint 2>&1 | grep -v $(ngrep) || true
+ make todo
+ misspell *.go
+ staticcheck | grep -v 'lexer\.go\|parser\.go' || true
+ maligned || true
+ grep -n 'FAIL\|PASS' log
+ go version
+ date 2>&1 | tee -a log
+
+clean:
+ go clean
+ rm -f *~ *.test *.out test.db* tt4-test*.db* test_sv.* testdb-*
+
+cover:
+ t=$(shell tempfile) ; go test -coverprofile $$t && go tool cover -html $$t && unlink $$t
+
+cpu: clean
+ go test -run @ -bench . -cpuprofile cpu.out
+ go tool pprof -lines *.test cpu.out
+
+edit:
+ gvim -p Makefile *.go &
+
+editor:
+ gofmt -l -s -w *.go
+ go test 2>&1 | tee log
+
+internalError:
+ egrep -ho '"internal error.*"' *.go | sort | cat -n
+
+later:
+ @grep -n $(grep) LATER * || true
+ @grep -n $(grep) MAYBE * || true
+
+mem: clean
+ go test -run @ -bench . -memprofile mem.out
+ go tool pprof -lines -web -alloc_space *.test mem.out
+
+nuke: clean
+ go clean -i
+
+todo:
+ @grep -nr $(grep) ^[[:space:]]*_[[:space:]]*=[[:space:]][[:alpha:]][[:alnum:]]* * | grep -v $(ngrep) || true
+ @grep -nr $(grep) TODO * | grep -v $(ngrep) || true
+ @grep -nr $(grep) BUG * | grep -v $(ngrep) || true
+ @grep -nr $(grep) [^[:alpha:]]println * | grep -v $(ngrep) || true
diff --git a/internal/libc2/all_test.go b/internal/libc2/all_test.go
new file mode 100644
index 0000000..5842011
--- /dev/null
+++ b/internal/libc2/all_test.go
@@ -0,0 +1,56 @@
+// Copyright 2019 The Sqlite Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package libc2 // import "modernc.org/sqlite/internal/libc2"
+
+import (
+ "fmt"
+ "os"
+ "path"
+ "runtime"
+ "strings"
+ "testing"
+)
+
+func caller(s string, va ...interface{}) {
+ if s == "" {
+ s = strings.Repeat("%v ", len(va))
+ }
+ _, fn, fl, _ := runtime.Caller(2)
+ fmt.Fprintf(os.Stderr, "# caller: %s:%d: ", path.Base(fn), fl)
+ fmt.Fprintf(os.Stderr, s, va...)
+ fmt.Fprintln(os.Stderr)
+ _, fn, fl, _ = runtime.Caller(1)
+ fmt.Fprintf(os.Stderr, "# \tcallee: %s:%d: ", path.Base(fn), fl)
+ fmt.Fprintln(os.Stderr)
+ os.Stderr.Sync()
+}
+
+func dbg(s string, va ...interface{}) {
+ if s == "" {
+ s = strings.Repeat("%v ", len(va))
+ }
+ _, fn, fl, _ := runtime.Caller(1)
+ fmt.Fprintf(os.Stderr, "# dbg %s:%d: ", path.Base(fn), fl)
+ fmt.Fprintf(os.Stderr, s, va...)
+ fmt.Fprintln(os.Stderr)
+ os.Stderr.Sync()
+}
+
+func TODO(...interface{}) string { //TODOOK
+ _, fn, fl, _ := runtime.Caller(1)
+ return fmt.Sprintf("# TODO: %s:%d:\n", path.Base(fn), fl) //TODOOK
+}
+
+func use(...interface{}) {}
+
+func init() {
+ use(caller, dbg, TODO) //TODOOK
+}
+
+// ============================================================================
+
+func Test(t *testing.T) {
+ t.Log("TODO")
+}
diff --git a/internal/libc2/capi_linux_amd64.go b/internal/libc2/capi_linux_amd64.go
new file mode 100644
index 0000000..01064c4
--- /dev/null
+++ b/internal/libc2/capi_linux_amd64.go
@@ -0,0 +1,21 @@
+// Copyright 2020 The Sqlite Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package libc2 // import "modernc.org/sqlite/internal/libc2"
+
+var CAPI = map[string]struct{}{
+ "pthread_cond_broadcast": {},
+ "pthread_cond_destroy": {},
+ "pthread_cond_init": {},
+ "pthread_cond_signal": {},
+ "pthread_cond_wait": {},
+ "pthread_create": {},
+ "pthread_detach": {},
+ "pthread_mutex_destroy": {},
+ "pthread_mutex_init": {},
+ "pthread_mutex_lock": {},
+ "pthread_mutex_trylock": {},
+ "pthread_mutex_unlock": {},
+ "sched_yield": {},
+}
diff --git a/internal/libc2/libc2.go b/internal/libc2/libc2.go
new file mode 100644
index 0000000..92e529f
--- /dev/null
+++ b/internal/libc2/libc2.go
@@ -0,0 +1,116 @@
+// Copyright 2020 The Sqlite Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package libc2 // import "modernc.org/sqlite/internal/libc2"
+
+import (
+ "fmt"
+ "os"
+ "runtime"
+ "strings"
+
+ "modernc.org/libc"
+ "modernc.org/libc/sys/types"
+)
+
+func todo(s string, args ...interface{}) string { //TODO-
+ switch {
+ case s == "":
+ s = fmt.Sprintf(strings.Repeat("%v ", len(args)), args...)
+ default:
+ s = fmt.Sprintf(s, args...)
+ }
+ pc, fn, fl, _ := runtime.Caller(1)
+ f := runtime.FuncForPC(pc)
+ var fns string
+ if f != nil {
+ fns = f.Name()
+ if x := strings.LastIndex(fns, "."); x > 0 {
+ fns = fns[x+1:]
+ }
+ }
+ r := fmt.Sprintf("%s:%d:%s: TODOTODO %s", fn, fl, fns, s) //TODOOK
+ fmt.Fprintf(os.Stdout, "%s\n", r)
+ os.Stdout.Sync()
+ return r
+}
+
+func trc(s string, args ...interface{}) string { //TODO-
+ switch {
+ case s == "":
+ s = fmt.Sprintf(strings.Repeat("%v ", len(args)), args...)
+ default:
+ s = fmt.Sprintf(s, args...)
+ }
+ _, fn, fl, _ := runtime.Caller(1)
+ r := fmt.Sprintf("\n%s:%d: TRC %s", fn, fl, s)
+ fmt.Fprintf(os.Stdout, "%s\n", r)
+ os.Stdout.Sync()
+ return r
+}
+
+// int sched_yield(void);
+func Xsched_yield(tls *libc.TLS) int32 {
+ panic(todo(""))
+}
+
+// int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
+func Xpthread_create(tls *libc.TLS, thread, attr, start_routine, arg uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_detach(pthread_t thread);
+func Xpthread_detach(tls *libc.TLS, thread types.Size_t) int32 {
+ panic(todo(""))
+}
+
+// int pthread_mutex_lock(pthread_mutex_t *mutex);
+func Xpthread_mutex_lock(tls *libc.TLS, mutex uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_cond_signal(pthread_cond_t *cond);
+func Xpthread_cond_signal(tls *libc.TLS, cond uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_mutex_unlock(pthread_mutex_t *mutex);
+func Xpthread_mutex_unlock(tls *libc.TLS, mutex uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
+func Xpthread_mutex_init(tls *libc.TLS, mutex, attr uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
+func Xpthread_cond_init(tls *libc.TLS, cond, attr uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
+func Xpthread_cond_wait(tls *libc.TLS, cond, mutex uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_cond_destroy(pthread_cond_t *cond);
+func Xpthread_cond_destroy(tls *libc.TLS, cond uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_mutex_destroy(pthread_mutex_t *mutex);
+func Xpthread_mutex_destroy(tls *libc.TLS, mutex uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_mutex_trylock(pthread_mutex_t *mutex);
+func Xpthread_mutex_trylock(tls *libc.TLS, mutex uintptr) int32 {
+ panic(todo(""))
+}
+
+// int pthread_cond_broadcast(pthread_cond_t *cond);
+func Xpthread_cond_broadcast(tls *libc.TLS, cond uintptr) int32 {
+ panic(todo(""))
+}