Subversion Repositories HelenOS-doc

Rev

Rev 133 | Rev 146 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 133 Rev 137
Line 62... Line 62...
62
      <para>The code accessing thread local storage uses a segment register FS
62
      <para>The code accessing thread local storage uses a segment register FS
63
      as a base. The thread local storage is stored in the hidden 64-bit part
63
      as a base. The thread local storage is stored in the hidden 64-bit part
64
      of the FS register which must be written using priviledged machine
64
      of the FS register which must be written using priviledged machine
65
      specific instructions. Special syscall to change this register is
65
      specific instructions. Special syscall to change this register is
66
      provided to user applications. The TLS address for this platform is
66
      provided to user applications. The TLS address for this platform is
67
      expected to point just after the end of the thread local data.</para>
67
      expected to point just after the end of the thread local data. The
-
 
68
      application sometimes need to get a real address of the thread local
-
 
69
      data in its address space but it is impossible to read the base of the
-
 
70
      FS segmentation register. The solution is to add the self-reference
-
 
71
      address to the end of thread local data, so that the application can
-
 
72
      read the address as %gs:0. </para>
-
 
73
 
-
 
74
      <figure float="1">
-
 
75
        <title>IA32 &amp; AMD64</title>
-
 
76
 
-
 
77
        <mediaobject id="tldia32">
-
 
78
          <imageobject role="pdf">
-
 
79
            <imagedata fileref="images/tld_ia32.pdf" format="PDF" />
-
 
80
          </imageobject>
-
 
81
 
-
 
82
          <imageobject role="html">
-
 
83
            <imagedata fileref="images/tld_ia32.png" format="PNG" />
-
 
84
          </imageobject>
-
 
85
 
-
 
86
          <imageobject role="fop">
-
 
87
            <imagedata fileref="images/tld_ia32.svg" format="SVG" />
-
 
88
          </imageobject>
-
 
89
        </mediaobject>
-
 
90
      </figure>
68
    </section>
91
    </section>
69
 
92
 
70
    <section>
93
    <section>
71
      <title>Fast SYSCALL/SYSRET Support</title>
94
      <title>Fast SYSCALL/SYSRET Support</title>
72
 
95
 
Line 123... Line 146...
123
      supposed to emulate it. HelenOS expects that the TLS pointer is in the
146
      supposed to emulate it. HelenOS expects that the TLS pointer is in the
124
      K1 register. Upon encountering the reserved instruction exception and
147
      K1 register. Upon encountering the reserved instruction exception and
125
      checking that the application is requesting a TLS pointer, it returns
148
      checking that the application is requesting a TLS pointer, it returns
126
      the contents of the K1 register. The K1 register is expected to point
149
      the contents of the K1 register. The K1 register is expected to point
127
      0x7000 bytes after the beginning of the thread local data.</para>
150
      0x7000 bytes after the beginning of the thread local data.</para>
-
 
151
 
-
 
152
      <figure float="1">
-
 
153
        <title>MIPS &amp; PPC</title>
-
 
154
 
-
 
155
        <mediaobject id="tldmips">
-
 
156
          <imageobject role="pdf">
-
 
157
            <imagedata fileref="images/tld_mips.pdf" format="PDF" />
-
 
158
          </imageobject>
-
 
159
 
-
 
160
          <imageobject role="html">
-
 
161
            <imagedata fileref="images/tld_mips.png" format="PNG" />
-
 
162
          </imageobject>
-
 
163
 
-
 
164
          <imageobject role="fop">
-
 
165
            <imagedata fileref="images/tld_mips.svg" format="SVG" />
-
 
166
          </imageobject>
-
 
167
        </mediaobject>
-
 
168
      </figure>
128
    </section>
169
    </section>
129
  </section>
170
  </section>
130
 
171
 
131
  <section>
172
  <section>
132
    <title>Power PC</title>
173
    <title>Power PC</title>
133
 
174
 
134
    <para></para>
175
    <para></para>
-
 
176
 
-
 
177
    <section>
-
 
178
      <title>Thread Local Storage</title>
-
 
179
 
-
 
180
      <para>The Power PC thread local storage uses R2 register to hold an
-
 
181
      address, that is 0x7000 bytes after the beginning of the thread local
-
 
182
      data. Overally it is the same as on the MIPS architecture.</para>
-
 
183
    </section>
135
  </section>
184
  </section>
136
 
185
 
137
  <section>
186
  <section>
138
    <title>IA-64</title>
187
    <title>IA-64</title>
139
 
188
 
140
    <para></para>
189
    <para></para>
-
 
190
 
-
 
191
    <figure float="1">
-
 
192
      <title>IA64</title>
-
 
193
 
-
 
194
      <mediaobject id="tldia64">
-
 
195
        <imageobject role="pdf">
-
 
196
          <imagedata fileref="images/tld_ia64.pdf" format="PDF" />
-
 
197
        </imageobject>
-
 
198
 
-
 
199
        <imageobject role="html">
-
 
200
          <imagedata fileref="images/tld_ia64.png" format="PNG" />
-
 
201
        </imageobject>
-
 
202
 
-
 
203
        <imageobject role="fop">
-
 
204
          <imagedata fileref="images/tld_ia64.svg" format="SVG" />
-
 
205
        </imageobject>
-
 
206
      </mediaobject>
-
 
207
    </figure>
141
  </section>
208
  </section>
142
</appendix>
209
</appendix>
143
210