1/*- 2 * Copyright 1996, 1997, 1998, 1999, 2000 John D. Polstra. 3 * Copyright 2003 Alexander Kabaev <kan@FreeBSD.ORG>. 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 9 unchanged lines hidden (view full) --- 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/libexec/rtld-elf/rtld.c 208256 2010-05-18 08:55:23Z rdivacky $ |
27 */ 28 29/* 30 * Dynamic linker for ELF. 31 * 32 * John Polstra <jdp@polstra.com>. 33 */ 34 --- 3271 unchanged lines hidden (view full) --- 3306 break; 3307 } 3308 if (!obj) { 3309 _rtld_error("Can't find module with TLS index %d", index); 3310 die(); 3311 } 3312 3313 p = malloc(obj->tlssize); |
3314 if (p == NULL) { 3315 _rtld_error("Cannot allocate TLS block for index %d", index); 3316 die(); 3317 } |
3318 memcpy(p, obj->tlsinit, obj->tlsinitsize); 3319 memset(p + obj->tlsinitsize, 0, obj->tlssize - obj->tlsinitsize); 3320 3321 return p; 3322} 3323 3324bool 3325allocate_tls_offset(Obj_Entry *obj) --- 305 unchanged lines hidden --- |