1
/* Load a shared object at runtime, relocate it, and run its initializer.
2
Copyright (C) 1996-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
3
This file is part of the GNU C Library.
5
The GNU C Library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
10
The GNU C Library is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Lesser General Public License for more details.
15
You should have received a copy of the GNU Lesser General Public
16
License along with the GNU C Library; if not, write to the Free
17
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
28
#include <sys/mman.h> /* Check whether MAP_COPY is defined. */
29
#include <sys/param.h>
30
#include <bits/libc-lock.h>
34
#include <sysdep-cancel.h>
40
extern ElfW(Addr) _dl_sysdep_start (void **start_argptr,
41
void (*dl_main) (const ElfW(Phdr) *phdr,
43
ElfW(Addr) *user_entry));
44
weak_extern (BP_SYM (_dl_sysdep_start))
46
extern int __libc_multiple_libcs; /* Defined in init-first.c. */
48
/* Undefine the following for debugging. */
49
/* #define SCOPE_DEBUG 1 */
51
static void show_scope (struct link_map *new);
54
/* We must be carefull not to leave us in an inconsistent state. Thus we
55
catch any error and re-raise it after cleaning up. */
61
/* This is the caller of the dlopen() function. */
62
const void *caller_dlopen;
63
/* This is the caller if _dl_open(). */
64
const void *caller_dl_open;
68
/* Original parameters to the program and the current environment. */
76
add_to_global (struct link_map *new)
78
struct link_map **new_global;
79
unsigned int to_add = 0;
82
/* Count the objects we have to put in the global scope. */
83
for (cnt = 0; cnt < new->l_searchlist.r_nlist; ++cnt)
84
if (new->l_searchlist.r_list[cnt]->l_global == 0)
87
/* The symbols of the new objects and its dependencies are to be
88
introduced into the global scope that will be used to resolve
89
references from other dynamically-loaded objects.
91
The global scope is the searchlist in the main link map. We
92
extend this list if necessary. There is one problem though:
93
since this structure was allocated very early (before the libc
94
is loaded) the memory it uses is allocated by the malloc()-stub
95
in the ld.so. When we come here these functions are not used
96
anymore. Instead the malloc() implementation of the libc is
97
used. But this means the block from the main map cannot be used
98
in an realloc() call. Therefore we allocate a completely new
99
array the first time we have to add something to the locale scope. */
101
struct link_namespaces *ns = &GL(dl_ns)[new->l_ns];
102
if (ns->_ns_global_scope_alloc == 0)
104
/* This is the first dynamic object given global scope. */
105
ns->_ns_global_scope_alloc
106
= ns->_ns_main_searchlist->r_nlist + to_add + 8;
107
new_global = (struct link_map **)
108
malloc (ns->_ns_global_scope_alloc * sizeof (struct link_map *));
109
if (new_global == NULL)
111
ns->_ns_global_scope_alloc = 0;
113
_dl_signal_error (ENOMEM, new->l_libname->name, NULL,
114
N_("cannot extend global scope"));
118
/* Copy over the old entries. */
119
ns->_ns_main_searchlist->r_list
120
= memcpy (new_global, ns->_ns_main_searchlist->r_list,
121
(ns->_ns_main_searchlist->r_nlist
122
* sizeof (struct link_map *)));
124
else if (ns->_ns_main_searchlist->r_nlist + to_add
125
> ns->_ns_global_scope_alloc)
127
/* We have to extend the existing array of link maps in the
129
struct link_map **old_global
130
= GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list;
131
size_t new_nalloc = ((ns->_ns_global_scope_alloc + to_add) * 2);
133
new_global = (struct link_map **)
134
malloc (new_nalloc * sizeof (struct link_map *));
135
if (new_global == NULL)
138
memcpy (new_global, old_global,
139
ns->_ns_global_scope_alloc * sizeof (struct link_map *));
141
ns->_ns_global_scope_alloc = new_nalloc;
142
ns->_ns_main_searchlist->r_list = new_global;
144
if (!RTLD_SINGLE_THREAD_P)
145
THREAD_GSCOPE_WAIT ();
150
/* Now add the new entries. */
151
unsigned int new_nlist = ns->_ns_main_searchlist->r_nlist;
152
for (cnt = 0; cnt < new->l_searchlist.r_nlist; ++cnt)
154
struct link_map *map = new->l_searchlist.r_list[cnt];
156
if (map->l_global == 0)
159
ns->_ns_main_searchlist->r_list[new_nlist++] = map;
162
atomic_write_barrier ();
163
ns->_ns_main_searchlist->r_nlist = new_nlist;
169
_dl_scope_free (void *old)
171
struct dl_scope_free_list *fsl;
172
#define DL_SCOPE_FREE_LIST_SIZE (sizeof (fsl->list) / sizeof (fsl->list[0]))
174
if (RTLD_SINGLE_THREAD_P)
176
else if ((fsl = GL(dl_scope_free_list)) == NULL)
178
GL(dl_scope_free_list) = fsl = malloc (sizeof (*fsl));
181
THREAD_GSCOPE_WAIT ();
191
else if (fsl->count < DL_SCOPE_FREE_LIST_SIZE)
192
fsl->list[fsl->count++] = old;
195
THREAD_GSCOPE_WAIT ();
196
while (fsl->count > 0)
197
free (fsl->list[--fsl->count]);
204
dl_open_worker (void *a)
206
struct dl_open_args *args = a;
207
const char *file = args->file;
208
int mode = args->mode;
209
struct link_map *new;
212
bool any_tls = false;
213
struct link_map *call_map = NULL;
215
/* Check whether _dl_open() has been called from a valid DSO. */
216
if (__check_caller (args->caller_dl_open,
217
allow_libc|allow_libdl|allow_ldso) != 0)
218
_dl_signal_error (0, "dlopen", NULL, N_("invalid caller"));
220
/* Determine the caller's map if necessary. This is needed in case
221
we have a DST, when we don't know the namespace ID we have to put
222
the new object in, or when the file name has no path in which
223
case we need to look along the RUNPATH/RPATH of the caller. */
224
const char *dst = strchr (file, '$');
225
if (dst != NULL || args->nsid == __LM_ID_CALLER
226
|| strchr (file, '/') == NULL)
228
const void *caller_dlopen = args->caller_dlopen;
230
/* We have to find out from which object the caller is calling.
231
By default we assume this is the main application. */
232
call_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
235
for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
236
for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next)
237
if (caller_dlopen >= (const void *) l->l_map_start
238
&& caller_dlopen < (const void *) l->l_map_end
240
|| _dl_addr_inside_object (l, (ElfW(Addr)) caller_dlopen)))
242
assert (ns == l->l_ns);
248
if (args->nsid == __LM_ID_CALLER)
251
/* In statically linked apps there might be no loaded object. */
252
if (call_map == NULL)
253
args->nsid = LM_ID_BASE;
256
args->nsid = call_map->l_ns;
260
assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT);
262
/* Maybe we have to expand a DST. */
263
if (__builtin_expect (dst != NULL, 0))
265
size_t len = strlen (file);
269
/* Determine how much space we need. We have to allocate the
271
required = DL_DST_REQUIRED (call_map, file, len, _dl_dst_count (dst, 0));
273
/* Get space for the new file name. */
274
new_file = (char *) alloca (required + 1);
276
/* Generate the new file name. */
277
_dl_dst_substitute (call_map, file, new_file, 0);
279
/* If the substitution failed don't try to load. */
280
if (*new_file == '\0')
281
_dl_signal_error (0, "dlopen", NULL,
282
N_("empty dynamic string token substitution"));
284
/* Now we have a new file name. */
287
/* It does not matter whether call_map is set even if we
288
computed it only because of the DST. Since the path contains
289
a slash the value is not used. See dl-load.c. */
292
/* Load the named object. */
293
args->map = new = _dl_map_object (call_map, file, 0, lt_loaded, 0,
294
mode | __RTLD_CALLMAP, args->nsid);
296
/* If the pointer returned is NULL this means the RTLD_NOLOAD flag is
297
set and the object is not already loaded. */
300
assert (mode & RTLD_NOLOAD);
304
if (__builtin_expect (mode & __RTLD_SPROF, 0))
305
/* This happens only if we load a DSO for 'sprof'. */
308
/* This object is directly loaded. */
309
++new->l_direct_opencount;
311
/* It was already open. */
312
if (__builtin_expect (new->l_searchlist.r_list != NULL, 0))
314
/* Let the user know about the opencount. */
315
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
316
_dl_debug_printf ("opening file=%s [%lu]; direct_opencount=%u\n\n",
317
new->l_name, new->l_ns, new->l_direct_opencount);
319
/* If the user requested the object to be in the global namespace
320
but it is not so far, add it now. */
321
if ((mode & RTLD_GLOBAL) && new->l_global == 0)
322
(void) add_to_global (new);
324
assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT);
329
/* Load that object's dependencies. */
330
_dl_map_object_deps (new, NULL, 0, 0,
331
mode & (__RTLD_DLOPEN | RTLD_DEEPBIND | __RTLD_AUDIT));
333
/* So far, so good. Now check the versions. */
334
for (i = 0; i < new->l_searchlist.r_nlist; ++i)
335
if (new->l_searchlist.r_list[i]->l_real->l_versions == NULL)
336
(void) _dl_check_map_versions (new->l_searchlist.r_list[i]->l_real,
344
/* Auditing checkpoint: we have added all objects. */
345
if (__builtin_expect (GLRO(dl_naudit) > 0, 0))
347
struct link_map *head = GL(dl_ns)[new->l_ns]._ns_loaded;
348
/* Do not call the functions for any auditing object. */
349
if (head->l_auditing == 0)
351
struct audit_ifaces *afct = GLRO(dl_audit);
352
for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt)
354
if (afct->activity != NULL)
355
afct->activity (&head->l_audit[cnt].cookie, LA_ACT_CONSISTENT);
363
/* Notify the debugger all new objects are now ready to go. */
364
struct r_debug *r = _dl_debug_initialize (0, args->nsid);
365
r->r_state = RT_CONSISTENT;
368
/* Only do lazy relocation if `LD_BIND_NOW' is not set. */
369
lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && GLRO(dl_lazy);
371
/* Relocate the objects loaded. We do this in reverse order so that copy
372
relocs of earlier objects overwrite the data written by later objects. */
374
struct link_map *l = new;
379
if (! l->l_real->l_relocated)
382
if (__builtin_expect (GLRO(dl_profile) != NULL, 0))
384
/* If this here is the shared object which we want to profile
385
make sure the profile is started. We can find out whether
386
this is necessary or not by observing the `_dl_profile_map'
387
variable. If was NULL but is not NULL afterwars we must
388
start the profiling. */
389
struct link_map *old_profile_map = GL(dl_profile_map);
391
_dl_relocate_object (l, l->l_scope, 1, 1);
393
if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
395
/* We must prepare the profiling. */
396
_dl_start_profile ();
398
/* Prevent unloading the object. */
399
GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE;
404
_dl_relocate_object (l, l->l_scope, lazy, 0);
412
/* If the file is not loaded now as a dependency, add the search
413
list of the newly loaded object to the scope. */
414
for (i = 0; i < new->l_searchlist.r_nlist; ++i)
416
struct link_map *imap = new->l_searchlist.r_list[i];
418
/* If the initializer has been called already, the object has
419
not been loaded here and now. */
420
if (imap->l_init_called && imap->l_type == lt_loaded)
422
struct r_scope_elem **runp = imap->l_scope;
425
while (*runp != NULL)
427
if (*runp == &new->l_searchlist)
434
/* Avoid duplicates. */
437
if (__builtin_expect (cnt + 1 >= imap->l_scope_max, 0))
439
/* The 'r_scope' array is too small. Allocate a new one
442
struct r_scope_elem **newp;
444
#define SCOPE_ELEMS(imap) \
445
(sizeof (imap->l_scope_mem) / sizeof (imap->l_scope_mem[0]))
447
if (imap->l_scope != imap->l_scope_mem
448
&& imap->l_scope_max < SCOPE_ELEMS (imap))
450
new_size = SCOPE_ELEMS (imap);
451
newp = imap->l_scope_mem;
455
new_size = imap->l_scope_max * 2;
456
newp = (struct r_scope_elem **)
457
malloc (new_size * sizeof (struct r_scope_elem *));
459
_dl_signal_error (ENOMEM, "dlopen", NULL,
460
N_("cannot create scope list"));
463
memcpy (newp, imap->l_scope, cnt * sizeof (imap->l_scope[0]));
464
struct r_scope_elem **old = imap->l_scope;
466
imap->l_scope = newp;
468
if (old != imap->l_scope_mem)
469
_dl_scope_free (old);
471
imap->l_scope_max = new_size;
474
/* First terminate the extended list. Otherwise a thread
475
might use the new last element and then use the garbage
477
imap->l_scope[cnt + 1] = NULL;
478
atomic_write_barrier ();
479
imap->l_scope[cnt] = &new->l_searchlist;
481
/* Only add TLS memory if this object is loaded now and
482
therefore is not yet initialized. */
483
else if (! imap->l_init_called
484
/* Only if the module defines thread local data. */
485
&& __builtin_expect (imap->l_tls_blocksize > 0, 0))
487
/* Now that we know the object is loaded successfully add
488
modules containing TLS data to the slot info table. We
489
might have to increase its size. */
490
_dl_add_to_slotinfo (imap);
492
if (imap->l_need_tls_init)
494
imap->l_need_tls_init = 0;
496
/* Update the slot information data for at least the
497
generation of the DSO we are allocating data for. */
498
_dl_update_slotinfo (imap->l_tls_modid);
501
GL(dl_init_static_tls) (imap);
502
assert (imap->l_need_tls_init == 0);
505
/* We have to bump the generation counter. */
510
/* Bump the generation number if necessary. */
511
if (any_tls && __builtin_expect (++GL(dl_tls_generation) == 0, 0))
512
_dl_fatal_printf (N_("\
513
TLS generation counter wrapped! Please report this."));
515
/* Run the initializer functions of new objects. */
516
_dl_init (new, args->argc, args->argv, args->env);
518
/* Now we can make the new map available in the global scope. */
519
if (mode & RTLD_GLOBAL)
520
/* Move the object in the global namespace. */
521
if (add_to_global (new) != 0)
525
/* Mark the object as not deletable if the RTLD_NODELETE flags was
527
if (__builtin_expect (mode & RTLD_NODELETE, 0))
528
new->l_flags_1 |= DF_1_NODELETE;
531
/* We must be the static _dl_open in libc.a. A static program that
532
has loaded a dynamic object now has competition. */
533
__libc_multiple_libcs = 1;
536
/* Let the user know about the opencount. */
537
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
538
_dl_debug_printf ("opening file=%s [%lu]; direct_opencount=%u\n\n",
539
new->l_name, new->l_ns, new->l_direct_opencount);
544
_dl_open (const char *file, int mode, const void *caller_dlopen, Lmid_t nsid,
545
int argc, char *argv[], char *env[])
547
if ((mode & RTLD_BINDING_MASK) == 0)
548
/* One of the flags must be set. */
549
_dl_signal_error (EINVAL, file, NULL, N_("invalid mode for dlopen()"));
551
/* Make sure we are alone. */
552
__rtld_lock_lock_recursive (GL(dl_load_lock));
554
if (nsid == LM_ID_NEWLM)
556
/* Find a new namespace. */
557
for (nsid = 1; nsid < DL_NNS; ++nsid)
558
if (GL(dl_ns)[nsid]._ns_loaded == NULL)
563
/* No more namespace available. */
564
__rtld_lock_unlock_recursive (GL(dl_load_lock));
566
_dl_signal_error (EINVAL, file, NULL, N_("\
567
no more namespaces available for dlmopen()"));
570
_dl_debug_initialize (0, nsid)->r_state = RT_CONSISTENT;
572
/* Never allow loading a DSO in a namespace which is empty. Such
573
direct placements is only causing problems. Also don't allow
574
loading into a namespace used for auditing. */
575
else if (nsid != LM_ID_BASE && nsid != __LM_ID_CALLER
576
&& (GL(dl_ns)[nsid]._ns_nloaded == 0
577
|| GL(dl_ns)[nsid]._ns_loaded->l_auditing))
578
_dl_signal_error (EINVAL, file, NULL,
579
N_("invalid target namespace in dlmopen()"));
581
struct dl_open_args args;
584
args.caller_dlopen = caller_dlopen;
585
args.caller_dl_open = RETURN_ADDRESS (0);
593
const char *errstring;
595
int errcode = _dl_catch_error (&objname, &errstring, &malloced,
596
dl_open_worker, &args);
599
/* We must munmap() the cache file. */
603
/* See if an error occurred during loading. */
604
if (__builtin_expect (errstring != NULL, 0))
606
/* Remove the object from memory. It may be in an inconsistent
607
state if relocation failed, for example. */
610
/* Maybe some of the modules which were loaded use TLS.
611
Since it will be removed in the following _dl_close call
612
we have to mark the dtv array as having gaps to fill the
613
holes. This is a pessimistic assumption which won't hurt
614
if not true. There is no need to do this when we are
615
loading the auditing DSOs since TLS has not yet been set
617
if ((mode & __RTLD_AUDIT) == 0)
618
GL(dl_tls_dtv_gaps) = true;
620
_dl_close_worker (args.map);
623
assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);
625
/* Release the lock. */
626
__rtld_lock_unlock_recursive (GL(dl_load_lock));
628
/* Make a local copy of the error string so that we can release the
629
memory allocated for it. */
630
size_t len_errstring = strlen (errstring) + 1;
631
char *local_errstring;
632
if (objname == errstring + len_errstring)
634
size_t total_len = len_errstring + strlen (objname) + 1;
635
local_errstring = alloca (total_len);
636
memcpy (local_errstring, errstring, total_len);
637
objname = local_errstring + len_errstring;
641
local_errstring = alloca (len_errstring);
642
memcpy (local_errstring, errstring, len_errstring);
646
free ((char *) errstring);
648
/* Reraise the error. */
649
_dl_signal_error (errcode, objname, NULL, local_errstring);
652
assert (_dl_debug_initialize (0, args.nsid)->r_state == RT_CONSISTENT);
654
/* Release the lock. */
655
__rtld_lock_unlock_recursive (GL(dl_load_lock));
658
DL_STATIC_INIT (args.map);
669
show_scope (struct link_map *new)
673
for (scope_cnt = 0; new->l_scope[scope_cnt] != NULL; ++scope_cnt)
678
numbuf[0] = '0' + scope_cnt;
680
_dl_printf ("scope %s:", numbuf);
682
for (cnt = 0; cnt < new->l_scope[scope_cnt]->r_nlist; ++cnt)
683
if (*new->l_scope[scope_cnt]->r_list[cnt]->l_name)
684
_dl_printf (" %s", new->l_scope[scope_cnt]->r_list[cnt]->l_name);
686
_dl_printf (" <main>");
694
/* Return non-zero if ADDR lies within one of L's segments. */
697
_dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr)
700
const ElfW(Addr) reladdr = addr - l->l_addr;
703
if (l->l_phdr[n].p_type == PT_LOAD
704
&& reladdr - l->l_phdr[n].p_vaddr >= 0
705
&& reladdr - l->l_phdr[n].p_vaddr < l->l_phdr[n].p_memsz)