Closed
Description
Zig Version
0.8.0-1921-g83a668195
Steps to Reproduce
Identical to #10297, but substitute:
x86_64
withaarch64
.amd64
witharm64
.
Step-by-step:
hello.go
package main
// #include <stdio.h>
// void helloworld() { printf("hello, world\n"); }
import "C"
func main() {
C.helloworld()
}
~/test
#!/bin/bash
set -xe
pushd $HOME/dev/zig/build
cmake ..
make -j$(nproc)
popd
GOOS=darwin GOARCH=arm64 CC=$HOME/zcc CGO_ENABLED=1 go build -a -buildmode=pie -ldflags "-s -w" $HOME/hello.go
~/zcc
user@motiejus:~/dev/zig$ cat ~/zcc
#!/bin/bash
zig=$HOME/dev/zig/build/zig
exec "$zig" cc -target aarch64-macos-gnu "$@"
Bisect Result
fc302f0 is the first bad commit, which doesn't revert cleanly.
$ git bisect good dde0adcb363f3a3f306c0fc9eaec511cc3b74965
$ git bisect bad master
$ git bisect run ~/test
<...>
fc302f00a9de5de0490f4a66720e75946763c695 is the first bad commit
commit fc302f00a9de5de0490f4a66720e75946763c695
Author: Jakub Konka <kubkon@jakubkonka.com>
Date: Sun Oct 10 10:33:15 2021 +0200
macho: redo relocation handling and lazy bind globals
* apply late symbol resolution for globals - instead of resolving
the exact location of a symbol in locals, globals or undefs,
we postpone the exact resolution until we have a full picture
for relocation resolution.
* fixup stubs to defined symbols - this is currently a hack rather
than a final solution. I'll need to work out the details to make
it more approachable. Currently, we preemptively create a stub
for a lazy bound global and fix up stub offsets in stub helper
routine if the global turns out to be undefined only. This is quite
wasteful in terms of space as we create stub, stub helper and lazy ptr
atoms but don't use them for defined globals.
* change log scope to .link for macho.
* remove redundant code paths from Object and Atom.
* drastically simplify the contents of Relocation struct (i.e., it is
now a simple superset of macho.relocation_info), clean up relocation
parsing and resolution logic.
src/codegen.zig | 45 +-
src/link/MachO.zig | 478 +++++++-------
src/link/MachO/Archive.zig | 2 +-
src/link/MachO/Atom.zig | 1538 +++++++++++++++++---------------------------
src/link/MachO/Dylib.zig | 2 +-
src/link/MachO/Object.zig | 11 +-
6 files changed, 857 insertions(+), 1219 deletions(-)
bisect run success
Expected Behavior
~/test
should produce a working darwin aarch64 executable.
Actual Behavior
Running ~/test
on master fails to produce an executable:
$ GOOS=darwin GOARCH=arm64 CC=$HOME/zcc CGO_ENABLED=1 go build -a -buildmode=pie -ldflags "-s -w" hello.go
# runtime/cgo
warning(link): framework not found for '-framework CoreFoundation'
warning(link): Framework search paths:
# runtime/cgo
/tmp/go-build2151189485/b003/_cgo_import.go:2:3: usage: //go:cgo_import_dynamic local [remote ["library"]]
/tmp/go-build2151189485/b003/_cgo_import.go:4:3: usage: //go:cgo_import_dynamic local [remote ["library"]]
/tmp/go-build2151189485/b003/_cgo_import.go:6:3: usage: //go:cgo_import_dynamic local [remote ["library"]]
cc @kubkon