glebarez/sqlite

Cause panic on arm9

305236917 opened this issue · 3 comments

Question:

  1. I had no problem running it on Cortex-A7, but I had problems running it on arm9
  2. The CGO version works on arm9

Code:
package main

import (
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)

type Product struct {
gorm.Model
Code string
Price uint
}

func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&Product{})
}

Build args:
GOARCH=arm GOOS=linux GOARM=5 go build .

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

goroutine 1 [running]:
modernc.org/sqlite/lib.Xsqlite3WhereBegin(0x2d025a0, 0xae5008b0, 0xad50b2b8, 0x0, 0xad50b0b8, 0xad507548, 0xad50b038, 0x0, 0x140)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:106300 +0xd20
modernc.org/sqlite/lib.Xsqlite3Select(0x2d025a0, 0xae5008b0, 0xad50b038, 0xae500f00)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:92009 +0x19fc
modernc.org/sqlite/lib.yy_reduce(0x2d025a0, 0xae5009f0, 0x54, 0x1, {0xad50b466, 0x0}, 0xae5008b0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:111851 +0x10d4
modernc.org/sqlite/lib.Xsqlite3Parser(0x2d025a0, 0xae5009f0, 0x1, {0xad50b466, 0x0})
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:113411 +0xb8
modernc.org/sqlite/lib.Xsqlite3RunParser(0x2d025a0, 0xae5008b0, 0xad50b438)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:114134 +0x32c
modernc.org/sqlite/lib.sqlite3Prepare(0x2d025a0, 0xad900018, 0xad50b438, 0xffffffff, 0x80, 0x0, 0xae500890, 0xae500894)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:85921 +0x338
modernc.org/sqlite/lib.sqlite3LockAndPrepare(0x2d025a0, 0xad900018, 0xad50b438, 0xffffffff, 0x80, 0x0, 0xae500890, 0xae500894)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:86004 +0x150
modernc.org/sqlite/lib.Xsqlite3_prepare_v2(...)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:86071
modernc.org/sqlite/lib.Xsqlite3_exec(0x2d025a0, 0xad900018, 0xad50b438, 0x48747c, 0xae500858, 0x0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:80623 +0x218
modernc.org/sqlite/lib.Xsqlite3InitOne(0x2d025a0, 0xad900018, 0x0, 0xae500054, 0x0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:85545 +0x850
modernc.org/sqlite/lib.Xsqlite3Init(0x2d025a0, 0xad900018, 0xae500054)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:85622 +0x70
modernc.org/sqlite/lib.Xsqlite3ReadSchema(0x2d025a0, 0xae500050)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:85649 +0x50
modernc.org/sqlite/lib.Xsqlite3LocateTable(0x2d025a0, 0xae500050, 0x0, 0xad50b738, 0x0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:68135 +0xa8
modernc.org/sqlite/lib.Xsqlite3LocateTableItem(0x2d025a0, 0xae500050, 0x0, 0xad50b8c0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:68192 +0x60
modernc.org/sqlite/lib.selectExpander(0x2d025a0, 0xae500790, 0xad50b4b8)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:90568 +0x330
modernc.org/sqlite/lib.Xsqlite3WalkSelect(0x2d025a0, 0xae500790, 0xad50b4b8)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:54992 +0x70
modernc.org/sqlite/lib.sqlite3SelectExpand(0x2d025a0, 0xae500050, 0xad50b4b8)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:90856 +0xf8
modernc.org/sqlite/lib.Xsqlite3SelectPrep(0x2d025a0, 0xae500050, 0xad50b4b8, 0x0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:90931 +0x50
modernc.org/sqlite/lib.Xsqlite3Select(0x2d025a0, 0xae500050, 0xad50b4b8, 0xae5006a0)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:91558 +0x1d4
modernc.org/sqlite/lib.yy_reduce(0x2d025a0, 0xae500190, 0x54, 0x1, {0xadb00550, 0x0}, 0xae500050)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:111851 +0x10d4
modernc.org/sqlite/lib.Xsqlite3Parser(0x2d025a0, 0xae500190, 0x1, {0xadb00550, 0x0})
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:113411 +0xb8
modernc.org/sqlite/lib.Xsqlite3RunParser(0x2d025a0, 0xae500050, 0xadb00510)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:114134 +0x32c
modernc.org/sqlite/lib.sqlite3Prepare(0x2d025a0, 0xad900018, 0xadb00510, 0xffffffff, 0x80, 0x0, 0xae300060, 0xae300068)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:85921 +0x338
modernc.org/sqlite/lib.sqlite3LockAndPrepare(0x2d025a0, 0xad900018, 0xadb00510, 0xffffffff, 0x80, 0x0, 0xae300060, 0xae300068)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:86004 +0x150
modernc.org/sqlite/lib.Xsqlite3_prepare_v2(...)
/Users/trevan/go/pkg/mod/modernc.org/sqlite@v1.23.1/lib/sqlite_linux_arm.go:86071
github.com/glebarez/go-sqlite.(*conn).prepareV2(0x2c8fde0, 0x2c7591c)
/Users/trevan/go/pkg/mod/github.com/glebarez/go-sqlite@v1.21.2/sqlite.go:1275 +0x17c
github.com/glebarez/go-sqlite.(*stmt).query(0x2d1c6b8, {0x4f24a0, 0x755d78}, {0x2d2c060, 0x1, 0x1})
/Users/trevan/go/pkg/mod/github.com/glebarez/go-sqlite@v1.21.2/sqlite.go:605 +0x134
github.com/glebarez/go-sqlite.(*conn).query(0x2c8fde0, {0x4f24a0, 0x755d78}, {0x2c39500, 0x40}, {0x2d2c060, 0x1, 0x1})
/Users/trevan/go/pkg/mod/github.com/glebarez/go-sqlite@v1.21.2/sqlite.go:1519 +0x100
github.com/glebarez/go-sqlite.(*conn).QueryContext(0x2c8fde0, {0x4f24a0, 0x755d78}, {0x2c39500, 0x40}, {0x2d2c060, 0x1, 0x1})
/Users/trevan/go/pkg/mod/github.com/glebarez/go-sqlite@v1.21.2/sqlite_go18.go:38 +0x54
database/sql.ctxDriverQuery({0x4f24a0, 0x755d78}, {0xae830d80, 0x2c8fde0}, {0x0, 0x0}, {0x2c39500, 0x40}, {0x2d2c060, 0x1, ...})
/usr/local/go/src/database/sql/ctxutil.go:48 +0x94
database/sql.(*DB).queryDC.func1()
/usr/local/go/src/database/sql/sql.go:1748 +0x178
database/sql.withLock({0x4f1fa8, 0x2d1a000}, 0x2c75b5c)
/usr/local/go/src/database/sql/sql.go:3502 +0x84
database/sql.(*DB).queryDC(0x2c76870, {0x4f24a0, 0x755d78}, {0x0, 0x0}, 0x2d1a000, 0x2d1c6b0, {0x2c39500, 0x40}, {0x2d1c678, ...})
/usr/local/go/src/database/sql/sql.go:1743 +0x174
database/sql.(*DB).query(0x2c76870, {0x4f24a0, 0x755d78}, {0x2c39500, 0x40}, {0x2d1c678, 0x1, 0x1}, 0x1)
/usr/local/go/src/database/sql/sql.go:1726 +0xe4
database/sql.(*DB).QueryContext.func1(0x1)
/usr/local/go/src/database/sql/sql.go:1704 +0x6c
database/sql.(*DB).retry(0x2c76870, 0x2c75c64)
/usr/local/go/src/database/sql/sql.go:1538 +0x78
database/sql.(*DB).QueryContext(0x2c76870, {0x4f24a0, 0x755d78}, {0x2c39500, 0x40}, {0x2d1c678, 0x1, 0x1})
/usr/local/go/src/database/sql/sql.go:1703 +0x9c
database/sql.(*DB).QueryRowContext(0x2c76870, {0x4f24a0, 0x755d78}, {0x2c39500, 0x40}, {0x2d1c678, 0x1, 0x1})
/usr/local/go/src/database/sql/sql.go:1804 +0x54
gorm.io/gorm/callbacks.RowQuery(0x2d1e9e0)
/Users/trevan/go/pkg/mod/gorm.io/gorm@v1.25.5/callbacks/row.go:18 +0x208
gorm.io/gorm.(*processor).Execute(0x2ce0b40, 0x2d1e9e0)
/Users/trevan/go/pkg/mod/gorm.io/gorm@v1.25.5/callbacks.go:130 +0x3ec
gorm.io/gorm.(*DB).Row(0x2d1e9e0)
/Users/trevan/go/pkg/mod/gorm.io/gorm@v1.25.5/finisher_api.go:502 +0x94
github.com/glebarez/sqlite.Migrator.HasTable.func1(0x2c6ab60)
/Users/trevan/go/pkg/mod/github.com/glebarez/sqlite@v1.10.0/migrator.go:32 +0x94
gorm.io/gorm/migrator.Migrator.RunWithValue({{0x1, 0x2d1e9c0, {0x4f2980, 0x2d2c048}}}, {0x42e9e8, 0x2d02640}, 0x2c75e34)
/Users/trevan/go/pkg/mod/gorm.io/gorm@v1.25.5/migrator/migrator.go:71 +0x144
github.com/glebarez/sqlite.Migrator.HasTable({{{0x1, 0x2d1e9c0, {0x4f2980, 0x2d2c048}}}}, {0x42e9e8, 0x2d02640})
/Users/trevan/go/pkg/mod/github.com/glebarez/sqlite@v1.10.0/migrator.go:31 +0x90
gorm.io/gorm/migrator.Migrator.AutoMigrate({{0x1, 0x2d1e5c0, {0x4f2980, 0x2cbdd88}}}, {0x2d1c350, 0x1, 0x1})
/Users/trevan/go/pkg/mod/gorm.io/gorm@v1.25.5/migrator/migrator.go:120 +0x198
gorm.io/gorm.(*DB).AutoMigrate(0x2c8fd40, {0x2d1c350, 0x1, 0x1})
/Users/trevan/go/pkg/mod/gorm.io/gorm@v1.25.5/migrator.go:24 +0x48
main.main()
/Users/trevan/Code/VSCode/demo/dnptime/main.go:28 +0x130

The same issue, but on arm5,do you have a solution?

The same issue, but on arm5,do you have a solution?

Nope, I used the CGO version instead of it.