cmd/link/internal/ld: linker problem with shared libraries #44031
Labels
FrozenDueToAge
NeedsInvestigation
Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env
)?go env
OutputWhat did you do?
We have problem with shared library linking of new ld in 1.16rc1, I recreated the problem using standard library, we originally had the issue with our own developed libraries
I have chosen the following based on their dependencies hierarchy
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib runtime sync
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib runtime/race
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib unicode
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib unicode/utf8
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib unicode/utf16
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib math/bits
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib math
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/unsafeheader
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/reflectlite
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/testlog
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib container/list
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib container/ring
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib crypto/internal/subtle
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib crypto/subtle
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib vendor/golang.org/x/crypto/cryptobyte/asn1
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/nettrace
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib vendor/golang.org/x/crypto/internal/subtle
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib encoding
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/goversion
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib hash/maphash
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib image/color
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/cfg
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib image/color/palette
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib math/cmplx
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib runtime/metrics
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/singleflight
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib internal/sysinfo
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib math/rand
go install -v -ldflags '-s -w' -gcflags '-trimpath /usr/src/go' -buildmode=shared -linkshared -pkgdir /usr/src/lib errors
What did you expect to see?
shared libraries built and placed into /usr/src/lib
/usr/src/lib/libcontainer-list.so
/usr/src/lib/libcontainer-ring.so
/usr/src/lib/libcrypto-internal-subtle.so
/usr/src/lib/libcrypto-subtle.so
/usr/src/lib/libencoding.so
/usr/src/lib/libhash-maphash.so
/usr/src/lib/libimage-color-palette.so
/usr/src/lib/libimage-color.so
/usr/src/lib/libinternal-cfg.so
/usr/src/lib/libinternal-goversion.so
/usr/src/lib/libinternal-nettrace.so
/usr/src/lib/libinternal-reflectlite.so
/usr/src/lib/libinternal-singleflight.so
/usr/src/lib/libinternal-sysinfo.so
/usr/src/lib/libinternal-testlog.so
/usr/src/lib/libinternal-unsafeheader.so
/usr/src/lib/libmath-bits.so
/usr/src/lib/libmath-cmplx.so
/usr/src/lib/libmath-rand.so
/usr/src/lib/libmath.so
/usr/src/lib/libruntime-metrics.so
/usr/src/lib/libruntime-race.so
/usr/src/lib/libruntime,sync.so
/usr/src/lib/libunicode.so
/usr/src/lib/libunicode-utf16.so
/usr/src/lib/libunicode-utf8.so
/usr/src/lib/libvendor-golang.org-x-crypto-cryptobyte-asn1.so
/usr/src/lib/libvendor-golang.org-x-crypto-internal-subtle.so
/usr/src/lib/liberrors.so
What did you see instead?
All shared libraries created except for liberrors.so
Attention it is possible to replicate this with strings, bufio, and so many other libraries, as well as our properietary libraries, older versions worked just fine)
/tmp/go-build3363267740/b011/liberrors.so
panic: runtime error: index out of range [23] with length 0
goroutine 1 [running]:
cmd/link/internal/ld.decodetypeKind(...)
/usr/src/go/src/cmd/link/internal/ld/decodesym.go:52
cmd/link/internal/ld.(*deadcodePass).decodeIfaceMethod(0xc000112c50, 0xc00009c000, 0x87f340, 0xc8, 0x68, 0x8b, 0xc0000be000, 0xc00009c000)
/usr/src/go/src/cmd/link/internal/ld/deadcode.go:391 +0x247
cmd/link/internal/ld.(*deadcodePass).flood(0xc000112c50)
/usr/src/go/src/cmd/link/internal/ld/deadcode.go:169 +0x5bb
cmd/link/internal/ld.deadcode(0xc000152000)
/usr/src/go/src/cmd/link/internal/ld/deadcode.go:308 +0xa9
cmd/link/internal/ld.Main(0x87f340, 0x20, 0x20, 0x1, 0x7, 0x10, 0x0, 0x0, 0x6e8658, 0x1b, ...)
/usr/src/go/src/cmd/link/internal/ld/main.go:247 +0xdf6
main.main()
/usr/src/go/src/cmd/link/main.go:68 +0x258
The text was updated successfully, but these errors were encountered: