[PATCH] [lsan] [mips] adding support of lsan for mips64/mips64el arch

Sagar Thakur Sagar.Thakur at imgtec.com
Wed Jan 14 23:06:04 PST 2015


Hi @earthdok,

As per my understanding of the TLS memory layout and the TLS part required for sanitizers, we need to get the range of static TLS area in GetTls ().

X86_64 uses tls variant 2 and `TLS_TCB_AT_TP` is set to 1 in tls.h. So the size we get from `__dl_tls_get_static_info ()` includes the thread descriptor size along with size of static TLS area as per the following code in elf/dl-tls.c:

  223  GL(dl_tls_static_used) = offset;
  224  GL(dl_tls_static_size) = (roundup (offset + TLS_STATIC_SURPLUS, max_align)
  225			    + TLS_TCB_SIZE);

Therefore we need the Thread Descriptor Size, so that we can exclude it from the size we get from  `__dl_tls_get_static_info ()`.

But MIPS uses TLS variant 1 and `TLS_DTV_AT_TP` is set to 1 in tls.h. So the size we get from `__dl_tls_get_static_info ()` is only the size of static TLS area and does not include the thread descriptor size as per the following code in elf/dl-tls.c:

  267  GL(dl_tls_static_used) = offset;
  268  GL(dl_tls_static_size) = roundup (offset + TLS_STATIC_SURPLUS,
  269				    TLS_TCB_ALIGN);


Also when we read from hardware register $29 and subtract 0x7000 from it we reach to the start of static TLS (which is also end of TCB for TLS variant 1).
Therefore we already have the start address and size of static TLS area so we don't require TlsPreTcbSize () and ThreadDescriptorSize () at all for MIPS.

Documents refered :

[1] http://www.akkadia.org/drepper/tls.pdf
[2] http://www.linux-mips.org/wiki/NPTL


REPOSITORY
  rL LLVM

http://reviews.llvm.org/D5616

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list