summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/mkasmh.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/mkasmh.sh')
-rwxr-xr-xsrc/pkg/runtime/mkasmh.sh41
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