Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 8 Dec 2010 17:34:00 +0100
From:      Robert Millan <rmh@debian.org>
To:        freebsd-mips@freebsd.org
Subject:   [PATCH] Retrieval of TLS pointer via RDHWR
Message-ID:  <AANLkTimg3CUk0p8YPyepiumEHvKo2F6jdVA0=1CefYrQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--00248c6a57264247f90496e8b040
Content-Type: text/plain; charset=UTF-8

This patch implements support for retrieving the TLS pointer via RDHWR
instruction.

It is implemented through emulation for platforms that don't provide
this instruction natively (such as gxemul/malta).  Platforms that do
provide it would need a separate patch.

Reading register $29 with RDHWR is becoming the de-facto standard to
implement TLS.  According to linux-mips wiki, MIPS Technologies has
reserved hardware register $29 for ABI use.  Furthermore current GCC [1]
makes the following assumptions:
- RDHWR is natively available or otherwise emulated by the kernel
- Register $29 holds the TLS pointer

[1] gcc-4.4.4/gcc/config/mips/mips.md reads:

;; The TLS base pointer is accessed via "rdhwr $3, $29".  No current
;; MIPS architecture defines this register, and no current
;; implementation provides it; instead, any OS which supports TLS is
;; expected to trap and emulate this instruction.  rdhwr is part of the
;; MIPS 32r2 specification, but we use it on any architecture because
;; we expect it to be emulated.

-- 
Robert Millan

--00248c6a57264247f90496e8b040
Content-Type: text/x-patch; charset=US-ASCII; name="rdhwr.diff"
Content-Disposition: attachment; filename="rdhwr.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ghgfuu2a0

SW5kZXg6IG1pcHMvaW5jbHVkZS9taXBzX29wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1pcHMvaW5j
bHVkZS9taXBzX29wY29kZS5oCShyZXZpc2lvbiAyMTYyOTkpCisrKyBtaXBzL2luY2x1ZGUvbWlw
c19vcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYgKzE3NiwxMSBAQAogI2RlZmluZQlP
UF9MREwJCTAzMgogI2RlZmluZQlPUF9MRFIJCTAzMwogCisjZGVmaW5lIE9QX1NQRUNJQUwyCTAz
NAorI2RlZmluZSBPUF9KQUxYCQkwMzUKKworI2RlZmluZSBPUF9TUEVDSUFMMwkwMzcKKwogI2Rl
ZmluZQlPUF9MQgkJMDQwCiAjZGVmaW5lCU9QX0xICQkwNDEKICNkZWZpbmUJT1BfTFdMCQkwNDIK
QEAgLTM4OSw2ICszOTQsMTEgQEAKICNkZWZpbmUJT1BfUl9CR0VaQUxMCU9QX0JHRVpBTEwKIAog
LyoKKyAqIFZhbHVlcyBmb3IgdGhlICdmdW5jJyBmaWVsZCB3aGVuICdvcCcgPT0gT1BfU1BFQ0lB
TDMuCisgKi8KKyNkZWZpbmUJT1BfUkRIV1IJMDczCisKKy8qCiAgKiBWYWx1ZXMgZm9yIHRoZSAn
cnMnIGZpZWxkIHdoZW4gJ29wJyA9PSBPUF9DT1B6LgogICovCiAjZGVmaW5lCU9QX01GCQkwMDAK
SW5kZXg6IG1pcHMvbWlwcy90cmFwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWlwcy9taXBzL3RyYXAuYwko
cmV2aXNpb24gMjE2Mjk5KQorKysgbWlwcy9taXBzL3RyYXAuYwkod29ya2luZyBjb3B5KQpAQCAt
ODI0LDkgKzgyNCwyNiBAQAogCQl9CiAKIAljYXNlIFRfUkVTX0lOU1QgKyBUX1VTRVI6Ci0JCWxv
Z19pbGxlZ2FsX2luc3RydWN0aW9uKCJSRVNfSU5TVCIsIHRyYXBmcmFtZSk7Ci0JCWkgPSBTSUdJ
TEw7Ci0JCWFkZHIgPSB0cmFwZnJhbWUtPnBjOworCQl7CisJCQlyZWdpc3Rlcl90IGluc3QgPSAq
KChyZWdpc3Rlcl90ICopIHRyYXBmcmFtZS0+cGMpOworCQkJc3dpdGNoIChNSVBTX0lOU1RfT1BD
T0RFKGluc3QpKSB7CisJCQljYXNlIE9QX1NQRUNJQUwzOgorCQkJCXN3aXRjaCAoTUlQU19JTlNU
X0ZVTkMoaW5zdCkpIHsKKwkJCQljYXNlIE9QX1JESFdSOgorCQkJCQkvKiBSZWdpc3RlciAyOSB1
c2VkIGZvciBUTFMgKi8KKwkJCQkJaWYgKE1JUFNfSU5TVF9SRChpbnN0KSA9PSAyOSkgeworCQkJ
CQkJKChyZWdpc3Rlcl90ICopIHRyYXBmcmFtZSlbTUlQU19JTlNUX1JUKGluc3QpXSA9IHRkLT50
ZF9tZC5tZF90bHM7CisJCQkJCQl0cmFwZnJhbWUtPnBjICs9IHNpemVvZihpbnQpOworCQkJCQkJ
Z290byBvdXQ7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQlicmVhazsKKwkJCX0KKwkJ
CWxvZ19pbGxlZ2FsX2luc3RydWN0aW9uKCJSRVNfSU5TVCIsIHRyYXBmcmFtZSk7CisJCQlpID0g
U0lHSUxMOworCQkJYWRkciA9IHRyYXBmcmFtZS0+cGM7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBU
X0MyRToKIAljYXNlIFRfQzJFICsgVF9VU0VSOgo=
--00248c6a57264247f90496e8b040--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimg3CUk0p8YPyepiumEHvKo2F6jdVA0=1CefYrQ>