diff options
Diffstat (limited to 'src/pkg/runtime/mkasmh.sh')
| -rwxr-xr-x | src/pkg/runtime/mkasmh.sh | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/pkg/runtime/mkasmh.sh b/src/pkg/runtime/mkasmh.sh index 920e79a02..26a1263be 100755 --- a/src/pkg/runtime/mkasmh.sh +++ b/src/pkg/runtime/mkasmh.sh @@ -5,21 +5,44 @@ set -e +SYS=$1 +export GOOS=$(echo $SYS | sed 's/_.*//') +export GOARCH=$(echo $SYS | sed 's/.*_//') +shift + +case "$GOARCH" in +386) CC=8c;; +amd64) CC=6c;; +arm) CC=5c;; +esac +export CC + +export CFLAGS="-Dos_$GOOS -Darch_$GOARCH" + +cp arch_$GOARCH.h arch_GOARCH.h +cp defs_${GOOS}_$GOARCH.h defs_GOOS_GOARCH.h +cp os_$GOOS.h os_GOOS.h +cp signals_$GOOS.h signals_GOOS.h + cat <<'EOF' // Assembly constants. -// AUTOMATICALLY GENERATED BY mkasmh.sh DURING BUILD +// AUTO-GENERATED by autogen.sh; DO NOT EDIT EOF +if [ ! -x "${GOBIN:=$GOROOT/bin}/$CC" ]; then + echo "// dummy file for cmd/go to correctly generate buildscript" + exit +fi case "$GOARCH" in 386) # The offsets 0 and 4 are also known to: # ../../cmd/8l/pass.c:/D_GS - # ../../libcgo/linux_386.c:/^threadentry - # ../../libcgo/darwin_386.c:/^threadentry + # cgo/gcc_linux_386.c:/^threadentry + # cgo/gcc_darwin_386.c:/^threadentry case "$GOOS" in windows) - echo '#define get_tls(r) MOVL 0x2c(FS), r' + echo '#define get_tls(r) MOVL 0x14(FS), r' echo '#define g(r) 0(r)' echo '#define m(r) 4(r)' ;; @@ -63,15 +86,15 @@ case "$GOARCH" in amd64) case "$GOOS" in windows) - echo '#define get_tls(r) MOVQ 0x58(GS), r' + echo '#define get_tls(r) MOVQ 0x28(GS), r' echo '#define g(r) 0(r)' echo '#define m(r) 8(r)' ;; *) # The offsets 0 and 8 are known to: # ../../cmd/6l/pass.c:/D_GS - # ../../libcgo/linux_amd64.c:/^threadentry - # ../../libcgo/darwin_amd64.c:/^threadentry + # cgo/gcc_linux_amd64.c:/^threadentry + # cgo/gcc_darwin_amd64.c:/^threadentry # echo '#define get_tls(r)' echo '#define g(r) 0(GS)' @@ -91,6 +114,7 @@ arm) esac echo +$GOBIN/$CC $CFLAGS -a proc.c | awk ' { gsub(/\r/, ""); } /^aggr G$/ { aggr="g" } @@ -109,5 +133,6 @@ aggr != "" && /^ / { offset=$(NF-1); printf("#define %s_%s %s\n", aggr, name, offset); } -' runtime.acid.$GOARCH +' +rm -f arch_GOARCH.h defs_GOOS_GOARCH.h os_GOOS.h signals_GOOS.h |
