Skip to content

Commit 2754118

Browse files
PureWhiteWurobpike
authored andcommitted
doc/asm: document go_asm.h only works in the runtime package
Fixes #33054 Change-Id: I687d45e092d721a6c22888cc7ddbe420c16a5af9 GitHub-Last-Rev: a7208c8 GitHub-Pull-Request: #33069 Reviewed-on: https://go-review.googlesource.com/c/go/+/185917 Reviewed-by: Rob Pike <[email protected]>
1 parent 3928915 commit 2754118

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

doc/asm.html

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,27 +590,37 @@ <h3 id="x86">32-bit Intel 386</h3>
590590
<p>
591591
The runtime pointer to the <code>g</code> structure is maintained
592592
through the value of an otherwise unused (as far as Go is concerned) register in the MMU.
593-
A OS-dependent macro <code>get_tls</code> is defined for the assembler if the source includes
594-
a special header, <code>go_asm.h</code>:
593+
An OS-dependent macro <code>get_tls</code> is defined for the assembler if the source is
594+
in the <code>runtime</code> package and includes a special header, <code>go_tls.h</code>:
595595
</p>
596596

597597
<pre>
598-
#include "go_asm.h"
598+
#include "go_tls.h"
599599
</pre>
600600

601601
<p>
602602
Within the runtime, the <code>get_tls</code> macro loads its argument register
603603
with a pointer to the <code>g</code> pointer, and the <code>g</code> struct
604604
contains the <code>m</code> pointer.
605+
There's another special header containing the offsets for each
606+
element of <code>g</code>, called <code>go_asm.h</code>.
605607
The sequence to load <code>g</code> and <code>m</code> using <code>CX</code> looks like this:
606608
</p>
607609

608610
<pre>
611+
#include "go_tls.h"
612+
#include "go_asm.h"
613+
...
609614
get_tls(CX)
610615
MOVL g(CX), AX // Move g into AX.
611616
MOVL g_m(AX), BX // Move g.m into BX.
612617
</pre>
613618

619+
<p>
620+
Note: The code above works only in the <code>runtime</code> package, while <code>go_tls.h</code> also
621+
applies to <a href="#arm">arm</a>, <a href="#amd64">amd64</a> and amd64p32, and <code>go_asm.h</code> applies to all architectures.
622+
</p>
623+
614624
<p>
615625
Addressing modes:
616626
</p>

0 commit comments

Comments
 (0)