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>