NameDateSize

..03-May-202431

arch/H03-May-202415

debug.cH A D21-Oct-20042.1 KiB

debug.hH A D12-Sep-20022.1 KiB

expand.cH A D28-Apr-20084.1 KiB

headers.cH A D08-Aug-201210.2 KiB

ld.elf_so.1H A D17-Dec-20107.7 KiB

load.cH A D24-Dec-20108.6 KiB

MakefileH A D07-Oct-20113.5 KiB

map_object.cH A D13-Aug-201112.9 KiB

paths.cH A D19-May-200911 KiB

READMEH A D24-Nov-2006150

README.TLSH A D10-Mar-20112.7 KiB

reloc.cH A D06-Jan-20126.8 KiB

rtld.cH A D17-Oct-201238.2 KiB

rtld.hH A D02-Dec-201115.7 KiB

rtldenv.hH A D11-Dec-20113.1 KiB

search.cH A D24-Dec-20105.5 KiB

symbol.cH A D25-Nov-201116.3 KiB

symver.cH A D24-Jun-20119.4 KiB

sysident.hH A D24-Jun-20073.1 KiB

tls.cH A D07-Nov-20137.6 KiB

TODOH A D09-Mar-20111 KiB

xmalloc.cH A D25-May-201112.9 KiB

xprintf.cH A D16-Dec-20106.5 KiB

README

1$NetBSD: README,v 1.10 2002/09/13 04:05:00 mycroft Exp $
2
3TO DO:
4
5* Support for coexistence of 32-bit and 64-bit ELF on platforms that can
6  do that.
7

README.TLS

1Steps for adding TLS support for a new platform:
2
3(1) Declare TLS variant in machine/types.h by defining either
4__HAVE_TLS_VARIANT_I or __HAVE_TLS_VARIANT_II.
5
6(2) _lwp_makecontext has to set the reserved register or kernel transfer
7variable in uc_mcontext to the provided value of 'private'. See
8src/lib/libc/arch/$PLATFORM/gen/_lwp.c.
9
10This is not possible on the VAX as there is no free space in ucontext_t.
11This requires either a special version of _lwp_create or versioning
12everything using ucontext_t. Debug support depends on getting the data from
13ucontext_t, so the second option is possibly required.
14
15(3) _lwp_setprivate(2) has to update the same register as
16_lwp_makecontext uses for the private area pointer. Normally
17cpu_lwp_setprivate is provided by MD to reflect the kernel view and
18enabled by defining __HAVE_CPU_LWP_SETPRIVATE in machine/types.h.
19cpu_setmcontext is responsible for keeping the MI l_private field
20synchronised by calling lwp_setprivate as needed.
21
22cpu_switchto has to update the mapping.
23
24_lwp_setprivate is used for the initial thread, all other threads
25created by libpthread use _lwp_makecontext for this purpose.
26
27(4) Provide __tls_get_addr and possible other MD functions for dynamic
28TLS offset computation. If such alternative entry points exist (currently
29only i386), also add a weak reference to 0 in src/lib/libc/tls/tls.c.
30
31The generic implementation can be found in tls.c and is used with
32__HAVE_COMMON___TLS_GET_ADDR. It depends on ___lwp_getprivate_fast
33(see below).
34
35(5) Implement the necessary relocation records in mdreloc.c.  There are
36typically three relocation types found in dynamic binaries:
37
38(a) R_TYPE(TLS_DTPOFF): Offset inside the module.  The common TLS code
39ensures that the DTV vector points to offset 0 inside the module TLS block.
40This is normally def->st_value + rela->r_addend.
41
42(b) R_TYPE(TLS_DTPMOD): Module index.
43
44(c) R_TYPE(TLS_TPOFF): Static TLS offset.  The code has to check whether
45the static TLS offset for this module has been allocated
46(defobj->tls_done) and otherwise call _rtld_tls_offset_allocate().  This
47may fail if no static space is available and the object has been pulled
48in via dlopen(3).
49
50For TLS Variant I, this is typically:
51
52def->st_value + rela->r_addend + defobj->tlsoffset + sizeof(struct tls_tcb)
53
54e.g. the relocation doesn't include the fixed TCB.
55
56For TLS Variant II, this is typically:
57
58def->st_value - defobj->tlsoffset + rela->r_addend
59
60e.g. starting offset is counting down from the TCB.
61
62(6) Implement _lwp_getprivate_fast() in machine/mcontext.h and set
63__HAVE___LWP_GETPRIVATE_FAST in machine/types.h.
64
65(7) Test using src/tests/lib/libc/tls.  Make sure with "objdump -R" that
66t_tls_dynamic has two TPOFF relocations and h_tls_dlopen.so.1 and
67libh_tls_dynamic.so.1 have both two DTPMOD and DTPOFF relocations.
68