| #!/bin/sh | |
| # Copyright 2009 The Go Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style | |
| # license that can be found in the LICENSE file. | |
| set -e | |
| cat <<'EOF' | |
| // Assembly constants. | |
| // AUTOMATICALLY GENERATED BY mkasmh.sh DURING BUILD | |
| EOF | |
| case "$GOARCH" in | |
| 386) | |
| # The offsets 0 and 4 are also known to: | |
| # nacl/thread.c:/^newosproc | |
| # ../../cmd/8l/pass.c:/D_GS | |
| # ../../libcgo/linux_386.c:/^start | |
| # ../../libcgo/darwin_386.c:/^start | |
| case "$GOOS" in | |
| mingw) | |
| echo '#define get_tls(r) MOVL 0x2c(FS), r' | |
| echo '#define g(r) 0(r)' | |
| echo '#define m(r) 4(r)' | |
| ;; | |
| *) | |
| echo '#define get_tls(r)' | |
| echo '#define g(r) 0(GS)' | |
| echo '#define m(r) 4(GS)' | |
| ;; | |
| esac | |
| ;; | |
| amd64) | |
| # These registers are also known to: | |
| # ../../libcgo/linux_amd64.c:/^start | |
| echo '#define g R15' | |
| echo '#define m R14' | |
| ;; | |
| arm) | |
| echo '#define g R10' | |
| echo '#define m R9' | |
| echo '#define LR R14' | |
| ;; | |
| *) | |
| echo 'unknown $GOARCH: '$GOARCH 1>&2 | |
| exit 1 | |
| ;; | |
| esac | |
| echo | |
| awk ' | |
| /^aggr G$/ { aggr="g" } | |
| /^aggr M$/ { aggr = "m" } | |
| /^aggr Gobuf$/ { aggr = "gobuf" } | |
| /^}/ { aggr = "" } | |
| # Gobuf 24 sched; | |
| # 'Y' 48 stack0; | |
| # 'Y' 56 entry; | |
| # 'A' G 64 alllink; | |
| aggr != "" && /^ / { | |
| name=$NF; | |
| sub(/;/, "", name); | |
| offset=$(NF-1); | |
| printf("#define %s_%s %s\n", aggr, name, offset); | |
| } | |
| ' runtime.acid.$GOARCH | |