SIGSEGV: segmentation violation on Linux/ARM

Hello, i cross compile a minimal program to run on a board with a Microchip SAM9x60 (ARM926 core) processor. The app only tries to create a single table. The executable crashes and the resulting database file has a size of 0 bytes.

Here are the details to reproduce:

modernc sqlite version: v1.20.3

Go version: go1.20 linux/amd64 (also tested with go1.19.5, same result)

main.go:

package main

import (
	"database/sql"
	"log"

	_ "modernc.org/sqlite"
)

func main() {
	db, err := sql.Open("sqlite", "./foo.db")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	db.Exec("create table if not exists buffer(item text);")
}

Compiled with: GOOS=linux GOARCH=arm GOARM=5 go build -o sqlitetest main.go

Output when running the executable:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x2c pc=0x23fe8c]

goroutine 1 [running]:
modernc.org/sqlite/lib.Xsqlite3WhereBegin(0x868140, 0xae500780, 0xad900618, 0x0, 0xad900718, 0xae700518, 0xad900798, 0x0, 0x140)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:105361 +0xca0
modernc.org/sqlite/lib.Xsqlite3Select(0x868140, 0xae500780, 0xad900798, 0xae500dd0)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:91138 +0x1a84
modernc.org/sqlite/lib.yy_reduce(0x868140, 0xae5008c0, 0x54, 0x1, {0xadf00a86, 0x0}, 0xae500780)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:110915 +0x10cc
modernc.org/sqlite/lib.Xsqlite3Parser(0x868140, 0xae5008c0, 0x1, {0xadf00a86, 0x0})
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:112470 +0xb8
modernc.org/sqlite/lib.Xsqlite3RunParser(0x868140, 0xae500780, 0xadf00a58)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:113193 +0x330
modernc.org/sqlite/lib.sqlite3Prepare(0x868140, 0xadb00018, 0xadf00a58, 0xffffffff, 0x80, 0x0, 0xae500760, 0xae500764)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:85245 +0x340
modernc.org/sqlite/lib.sqlite3LockAndPrepare(0x868140, 0xadb00018, 0xadf00a58, 0xffffffff, 0x80, 0x0, 0xae500760, 0xae500764)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:85328 +0x150
modernc.org/sqlite/lib.Xsqlite3_prepare_v2(...)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:85395
modernc.org/sqlite/lib.Xsqlite3_exec(0x868140, 0xadb00018, 0xadf00a58, 0x320b68, 0xae500728, 0x0)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:80037 +0x218
modernc.org/sqlite/lib.Xsqlite3InitOne(0x868140, 0xadb00018, 0x0, 0xae500054, 0x0)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:84871 +0x81c
modernc.org/sqlite/lib.Xsqlite3Init(0x868140, 0xadb00018, 0xae500054)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:84948 +0x70
modernc.org/sqlite/lib.Xsqlite3ReadSchema(0x868140, 0xae500050)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:84975 +0x50
modernc.org/sqlite/lib.Xsqlite3StartTable(0x868140, 0xae500050, 0xae5001d8, 0xae5001e4, 0x0, 0x0, 0x0, 0x0)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:68478 +0x424
modernc.org/sqlite/lib.yy_reduce(0x868140, 0xae500190, 0xd, 0x16, {0xadd00583, 0x1}, 0xae500050)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:110546 +0x284
modernc.org/sqlite/lib.Xsqlite3Parser(0x868140, 0xae500190, 0x16, {0xadd00583, 0x1})
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:112470 +0xb8
modernc.org/sqlite/lib.Xsqlite3RunParser(0x868140, 0xae500050, 0xadd00570)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:113193 +0x330
modernc.org/sqlite/lib.sqlite3Prepare(0x868140, 0xadb00018, 0xadd00570, 0xffffffff, 0x80, 0x0, 0xae300028, 0xae300030)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:85245 +0x340
modernc.org/sqlite/lib.sqlite3LockAndPrepare(0x868140, 0xadb00018, 0xadd00570, 0xffffffff, 0x80, 0x0, 0xae300028, 0xae300030)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:85328 +0x150
modernc.org/sqlite/lib.Xsqlite3_prepare_v2(...)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/lib/sqlite_linux_arm.go:85395
modernc.org/sqlite.(*conn).prepareV2(0x890a20, 0x867c04)
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/sqlite.go:1211 +0x17c
modernc.org/sqlite.(*stmt).exec(0x80e110, {0x361634, 0x812070}, {0x545c08, 0x0, 0x0})
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/sqlite.go:498 +0x148
modernc.org/sqlite.(*conn).exec(0x890a20, {0x361634, 0x812070}, {0x30d54e, 0x1f}, {0x545c08, 0x0, 0x0})
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/sqlite.go:1416 +0x100
modernc.org/sqlite.(*conn).ExecContext(0x890a20, {0x361634, 0x812070}, {0x30d54e, 0x1f}, {0x545c08, 0x0, 0x0})
        /home/ff/go/pkg/mod/modernc.org/sqlite@v1.20.3/sqlite_go18.go:33 +0x54
database/sql.ctxDriverExec({0x361634, 0x812070}, {0xae87d868, 0x890a20}, {0x0, 0x0}, {0x30d54e, 0x1f}, {0x545c08, 0x0, ...})
        /usr/local/go/src/database/sql/ctxutil.go:31 +0x94
database/sql.(*DB).execDC.func2()
        /usr/local/go/src/database/sql/sql.go:1675 +0x178
database/sql.withLock({0x3614ac, 0x86c1e0}, 0x867e2c)
        /usr/local/go/src/database/sql/sql.go:3405 +0x84
database/sql.(*DB).execDC(0x85a3f0, {0x361634, 0x812070}, 0x86c1e0, 0x867eb0, {0x30d54e, 0x1f}, {0x0, 0x0, 0x0})
        /usr/local/go/src/database/sql/sql.go:1670 +0x1d4
database/sql.(*DB).exec(0x85a3f0, {0x361634, 0x812070}, {0x30d54e, 0x1f}, {0x0, 0x0, 0x0}, 0x1)
        /usr/local/go/src/database/sql/sql.go:1655 +0xd4
database/sql.(*DB).ExecContext.func1(0x1)
        /usr/local/go/src/database/sql/sql.go:1634 +0x6c
database/sql.(*DB).retry(0x85a3f0, 0x867f44)
        /usr/local/go/src/database/sql/sql.go:1538 +0x78
database/sql.(*DB).ExecContext(0x85a3f0, {0x361634, 0x812070}, {0x30d54e, 0x1f}, {0x0, 0x0, 0x0})
        /usr/local/go/src/database/sql/sql.go:1633 +0x9c
database/sql.(*DB).Exec(...)
        /usr/local/go/src/database/sql/sql.go:1647
main.main()
        /home/ff/Develop/temp/gotemp/sqlite/main.go:19 +0x124

Output of uname -a: Linux 5.15.68-linux4microchip-2022.10 #1 Thu Feb 2 07:33:09 UTC 2023 armv5tejl GNU/Linux The linux system is build with https://buildroot.org/.

As i said, there exists a db file, but with size 0. If i create a valid the db file manually before run, the same error occures.

Any help would be appreciated. Do you need any additional information?

Edited by Florian Fankhauser