Skip to content

cmd/link: ld: B/BL out of range -134840372 (max +/-128MB) from 0x10809F954 #67854

Open
@d-bytebase

Description

@d-bytebase

Go version

1.22.4

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/danny/Library/Caches/go-build'
GOENV='/Users/danny/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/danny/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/danny/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/opt/homebrew/Cellar/go/1.22.4/libexec'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/opt/homebrew/Cellar/go/1.22.4/libexec/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.4'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='c++'
CGO_ENABLED='1'
GOMOD='/Users/danny/src/bytebase/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/2m/s9rrpxps5rl00_wnvy3b2jd40000gn/T/go-build3442076162=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

https://github.com/bytebase/bytebase

build command: CGO_ENABLED=1 go build -o ./.air/bytebase ./backend/bin/server/main.go

What did you see happen?

/opt/homebrew/Cellar/go/1.22.4/libexec/pkg/tool/darwin_arm64/link: running cc failed: exit status 1
ld: warning: -bind_at_load is deprecated on macOS
ld: B/BL out of range -134840372 (max +/-128MB) from 0x10809F954 ('_runtime.cmpstring.island' from 'branch-islands-file') to 0x100007920 ('_runtime.cmpstring' from '/private/var/folders/2m/s9rrpxps5rl00_wnvy3b2jd40000gn/T/go-link-1336181017/go.o')
final section layout:
__PAGEZERO addr=0x00000000, size=0x100000000, fileOffset=0x00000000
__TEXT addr=0x100000000, size=0x11640000, fileOffset=0x00000000
__text addr=0x100002ff0, size=0x082b982c, fileOffset=0x00002ff0
__stubs addr=0x1082bc81c, size=0x00000810, fileOffset=0x082bc81c
__rodata addr=0x1082bd040, size=0x0929ddf0, fileOffset=0x082bd040
__cstring addr=0x11155ae30, size=0x000363a7, fileOffset=0x1155ae30
__const addr=0x111591200, size=0x000a71b8, fileOffset=0x11591200
__unwind_info addr=0x1116383b8, size=0x00003d40, fileOffset=0x116383b8
__eh_frame addr=0x11163c0f8, size=0x000000b8, fileOffset=0x1163c0f8
__DATA_CONST addr=0x111640000, size=0x0f640000, fileOffset=0x11640000
__got addr=0x111640000, size=0x00000948, fileOffset=0x11640000
__const addr=0x111640948, size=0x00039678, fileOffset=0x11640948
__cfstring addr=0x111679fc0, size=0x000000e0, fileOffset=0x11679fc0
__rodata addr=0x11167a0a0, size=0x027eb4d0, fileOffset=0x1167a0a0
__typelink addr=0x113e65580, size=0x00050d44, fileOffset=0x13e65580
__itablink addr=0x113eb62e0, size=0x0003a7c8, fileOffset=0x13eb62e0
__gopclntab addr=0x113ef0ac0, size=0x0cd8c250, fileOffset=0x13ef0ac0
__DATA addr=0x120c80000, size=0x011f8000, fileOffset=0x20c80000
__data addr=0x120c80000, size=0x006ad908, fileOffset=0x20c80000
__go_buildinfo addr=0x12132d910, size=0x000069c0, fileOffset=0x2132d910
__noptrdata addr=0x1213342e0, size=0x009145c0, fileOffset=0x213342e0
__thread_vars addr=0x121c488a0, size=0x00000630, fileOffset=0x21c488a0
__thread_ptrs addr=0x121c48ed0, size=0x00000138, fileOffset=0x21c48ed0
__thread_data addr=0x121c49008, size=0x00000108, fileOffset=0x21c49008
__thread_bss addr=0x121c49110, size=0x00000618, fileOffset=0x21c49110
__bss addr=0x121c49740, size=0x0020c74c, fileOffset=0x00000000
__noptrbss addr=0x121e55ea0, size=0x000201b0, fileOffset=0x00000000
__common addr=0x121e76050, size=0x00000070, fileOffset=0x00000000
__LINKEDIT addr=0x121e78000, size=0x0db24000, fileOffset=0x21c4c000
clang: error: linker command failed with exit code 1 (use -v to see invocation)

What did you expect to see?

build success. I think this is MacOS only issue related to linker and starting since 1.22.

related issue: #66993

Activity

d-bytebase

d-bytebase commented on Jun 6, 2024

@d-bytebase
Author

Hi @cherrymui @randall77 would you help take a look? Thanks!

I feel like it's a bug in MacOS linker. We can workaround the issue with -ldflags="-extldflags='-ld64'", however, not sure what the long-term solution is.

changed the title [-]build/link: ld: B/BL out of range -134840372 (max +/-128MB) from 0x10809F954[/-] [+]cmd/link: ld: B/BL out of range -134840372 (max +/-128MB) from 0x10809F954[/+] on Jun 6, 2024
added
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.
on Jun 6, 2024
randall77

randall77 commented on Jun 6, 2024

@randall77
Contributor

It does not fail for me.

What does /usr/bin/xcodebuild -version print? For me it is

Xcode 15.2
Build version 15C500b

The error printed is strange. arm64 has a branch limit of +/- 32MB, not +/- 128MB. Also, the branch is between two locations in the text section, which has presumably already been resolved by the Go linker. The external linker shouldn't have to process any relocations for such a branch.

d-bytebase

d-bytebase commented on Jun 7, 2024

@d-bytebase
Author

Thanks. The link failures were not consistent with low chance to succeed. We could run 'go clean -cache' and reboot the laptop to get a more consistent failure.

% /usr/bin/xcodebuild -version
Xcode 15.4
Build version 15F31d

% clang --version
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

randall77

randall77 commented on Jun 7, 2024

@randall77
Contributor

So the failure doesn't happen consistently? That is even more strange.
The Go tools are carefully designed to generate the exact same artifacts each time.

d-bytebase

d-bytebase commented on Jun 7, 2024

@d-bytebase
Author

Yup, +1 for Go tool consistency. We have different Xcode version though. I wonder if it's using some cached objects or it's a bug in Xcode toolkit instead of Go, but Go triggers it somehow. The behavior is quite consistent if we clean all the cache and reboot the laptop.

cherrymui

cherrymui commented on Jun 7, 2024

@cherrymui
Member

I cannot reproduce this with

Xcode 15.4
Build version 15F31d

It builds successfully for me.

We can workaround the issue with -ldflags="-extldflags='-ld64'"

As it works with the old Apple linker, it might be a bug in the new Apple linker. The .island symbol looks like a trampoline generated by the Apple linker. It is unclear to me why it wants to generate such a symbol at that address.

(ARM64 B/BL instruction branch limit is actually +/- 128MB. It takes 26 bits off offset, adding two 0s at the end, as the an instruction address is always 4-byte aligned.)

added
WaitingForInfoIssue is not actionable because of missing required information, which needs to be provided.
on Jun 7, 2024
gopherbot

gopherbot commented on Jul 7, 2024

@gopherbot
Contributor

Timed out in state WaitingForInfo. Closing.

(I am just a bot, though. Please speak up if this is a mistake or you have the requested information.)

11 remaining items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.OS-Darwincompiler/runtimeIssues related to the Go compiler and/or runtime.

    Type

    No type

    Projects

    Status

    In Progress

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @vektah@randall77@gopherbot@seankhliao@cherrymui

        Issue actions

          cmd/link: ld: B/BL out of range -134840372 (max +/-128MB) from 0x10809F954 · Issue #67854 · golang/go