4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
27 * Copyright (c) 1988 AT&T
32 * Run time linker common setup.
34 * Called from _setup to get the process going at startup.
40 #include <sys/types.h>
46 #include <sys/sysconfig.h>
57 extern int _end
, _edata
, _etext
;
58 extern void _init(void);
59 extern int _brk_unlocked(void *);
61 #ifndef SGS_PRE_UNIFIED_PROCESS
62 /* needed for _brk_unlocked() */
67 * Counters that are incremented every time an object is mapped/unmapped.
69 * Note that exec() will usually map 2 objects before we receive control,
70 * but this can be 1 if ld.so.1 is executed directly. We count one of these
71 * here, and add another as necessary in setup().
73 u_longlong_t cnt_map
= 1;
74 u_longlong_t cnt_unmap
= 0;
78 * Define for the executable's interpreter.
79 * Usually it is ld.so.1, but for the first release of ICL binaries
80 * it is libc.so.1. We keep this information so that we don't end
81 * up mapping libc twice if it is the interpreter.
83 static Interp _interp
;
89 preload(const char *str
, Rt_map
*mlmp
, Rt_map
**clmp
)
92 char *objs
, *ptr
, *next
;
93 Word lmflags
= lml_main
.lm_flags
;
96 DBG_CALL(Dbg_util_nl(&lml_main
, DBG_NL_STD
));
98 if ((objs
= strdup(str
)) == NULL
)
102 * Determine if we've been called from lddstub.
104 lddstub
= (lmflags
& LML_FLG_TRC_ENABLE
) &&
105 (FLAGS1(*clmp
) & FL1_RT_LDDSTUB
);
108 for (ptr
= strtok_r(objs
, MSG_ORIG(MSG_STR_DELIMIT
), &next
);
110 ptr
= strtok_r(NULL
, MSG_ORIG(MSG_STR_DELIMIT
), &next
)) {
114 DBG_CALL(Dbg_file_preload(&lml_main
, ptr
));
117 * Establish the flags for loading each object. If we're
118 * called via lddstub, then the first preloaded object is the
119 * object being inspected by ldd(1). This object should not be
120 * marked as an interposer, as this object is intended to act
121 * as the target object of the process.
124 flags
= FLG_RT_PRELOAD
;
126 flags
= (FLG_RT_PRELOAD
| FLG_RT_OBJINTPO
);
129 * If this a secure application, then preload errors are
130 * reduced to warnings, as the errors are non-fatal.
132 if (rtld_flags
& RT_FL_SECURE
)
133 rtld_flags2
|= RT_FL2_FTL2WARN
;
134 if (expand_paths(*clmp
, ptr
, &palp
, AL_CNT_NEEDED
,
135 PD_FLG_EXTLOAD
, 0) != 0)
136 nlmp
= load_one(&lml_main
, ALIST_OFF_DATA
, palp
, *clmp
,
137 MODE(mlmp
), flags
, 0, NULL
);
138 remove_alist(&palp
, 0);
139 if (rtld_flags
& RT_FL_SECURE
)
140 rtld_flags2
&= ~RT_FL2_FTL2WARN
;
141 if (nlmp
&& (bind_one(*clmp
, nlmp
, BND_NEEDED
) == 0))
144 if (lddstub
&& nlmp
) {
148 * Fabricate a binding between the target shared object
149 * and lddstub so that the target object isn't called
150 * out from unused() processing.
153 (LML_FLG_TRC_UNREF
| LML_FLG_TRC_UNUSED
)) {
154 if (bind_one(*clmp
, nlmp
, BND_REFER
) == 0)
159 * By identifying lddstub as the caller, several
160 * confusing ldd() diagnostics get suppressed. These
161 * diagnostics would reveal how the target shared object
162 * was found from lddstub. Now that the real target is
163 * loaded, identify the target as the caller so that all
164 * ldd() diagnostics are enabled for subsequent objects.
171 * If no error occurred with loading this object, indicate that
172 * this link-map list contains an interposer.
175 if ((lmflags
& LML_FLG_TRC_ENABLE
) ||
176 (rtld_flags
& RT_FL_SECURE
))
181 if (flags
& FLG_RT_OBJINTPO
)
182 lml_main
.lm_flags
|= LML_FLG_INTRPOSE
;
192 setup(char **envp
, auxv_t
*auxv
, Word _flags
, char *_platform
, int _syspagsz
,
193 char *_rtldname
, ulong_t ld_base
, ulong_t interp_base
, int fd
, Phdr
*phdr
,
194 char *execname
, char **argv
, uid_t uid
, uid_t euid
, gid_t gid
, gid_t egid
,
195 void *aoutdyn
, int auxflags
, uint_t hwcap_1
)
197 Rt_map
*rlmp
, *mlmp
, *clmp
, **tobj
= NULL
;
200 int features
= 0, ldsoexec
= 0;
202 char *str
, *argvname
;
204 mmapobj_result_t
*mpp
;
205 Fdesc fdr
= { 0 }, fdm
= { 0 };
206 Rej_desc rej
= { 0 };
210 * Now that ld.so has relocated itself, initialize our own 'environ' so
211 * as to establish an address suitable for any libc requirements.
213 _environ
= (char **)((ulong_t
)auxv
- sizeof (char *));
218 * Establish a base time. Total time diagnostics start from entering
219 * ld.so.1 here, however the base time is reset each time the ld.so.1
220 * is re-entered. Note also, there will be a large time associated
221 * with the first diagnostic from ld.so.1, as bootstrapping ld.so.1
222 * and establishing the liblddbg infrastructure takes some time.
224 (void) gettimeofday(&DBG_TOTALTIME
, NULL
);
225 DBG_DELTATIME
= DBG_TOTALTIME
;
228 * Determine how ld.so.1 has been executed.
230 if ((fd
== -1) && (phdr
== NULL
)) {
232 * If we received neither the AT_EXECFD nor the AT_PHDR aux
233 * vector, ld.so.1 must have been invoked directly from the
239 * AT_SUN_EXECNAME provides the most precise name, if it is
240 * available, otherwise fall back to argv[0]. At this time,
241 * there is no process name.
248 rtldname
= (char *)MSG_INTL(MSG_STR_UNKNOWN
);
251 * Otherwise, we have a standard process. AT_SUN_EXECNAME
252 * provides the most precise name, if it is available,
253 * otherwise fall back to argv[0]. Provided the application
254 * is already mapped, the process is the application, so
255 * simplify the application name for use in any diagnostics.
260 argvname
= execname
= argv
[0];
262 argvname
= execname
= (char *)MSG_INTL(MSG_STR_UNKNOWN
);
265 if ((str
= strrchr(argvname
, '/')) != NULL
)
272 * At this point, we don't know the runtime linkers full path
273 * name. The _rtldname passed to us is the SONAME of the
274 * runtime linker, which is typically /lib/ld.so.1 no matter
275 * what the full path is. Use this for now, we'll reset the
276 * runtime linkers name once the application is analyzed.
279 if ((str
= strrchr(_rtldname
, '/')) != NULL
)
282 rtldname
= _rtldname
;
284 rtldname
= (char *)MSG_INTL(MSG_STR_UNKNOWN
);
286 /* exec() brought in two objects for us. Count the second one */
291 * Initialize any global variables.
295 if ((org_scapset
->sc_plat
= _platform
) != NULL
)
296 org_scapset
->sc_platsz
= strlen(_platform
);
298 if (org_scapset
->sc_plat
== NULL
)
299 platform_name(org_scapset
);
300 if (org_scapset
->sc_mach
== NULL
)
301 machine_name(org_scapset
);
304 * If pagesize is unspecified find its value.
306 if ((syspagsz
= _syspagsz
) == 0)
307 syspagsz
= _sysconfig(_CONFIG_PAGESIZE
);
310 * Add the unused portion of the last data page to the free space list.
311 * The page size must be set before doing this. Here, _end refers to
312 * the end of the runtime linkers bss. Note that we do not use the
313 * unused data pages from any included .so's to supplement this free
314 * space as badly behaved .os's may corrupt this data space, and in so
315 * doing ruin our data.
317 eaddr
= S_DROUND((size_t)&_end
);
318 esize
= eaddr
% syspagsz
;
320 esize
= syspagsz
- esize
;
321 addfree((void *)eaddr
, esize
);
325 * Establish initial link-map list flags, and link-map list alists.
327 if (alist_append(&lml_main
.lm_lists
, NULL
, sizeof (Lm_cntl
),
328 AL_CNT_LMLISTS
) == NULL
)
330 lml_main
.lm_flags
|= LML_FLG_BASELM
;
331 lml_main
.lm_lmid
= LM_ID_BASE
;
332 lml_main
.lm_lmidstr
= (char *)MSG_ORIG(MSG_LMID_BASE
);
334 if (alist_append(&lml_rtld
.lm_lists
, NULL
, sizeof (Lm_cntl
),
335 AL_CNT_LMLISTS
) == NULL
)
337 lml_rtld
.lm_flags
|= (LML_FLG_RTLDLM
| LML_FLG_HOLDLOCK
);
338 lml_rtld
.lm_tflags
|= LML_TFLG_NOAUDIT
;
339 lml_rtld
.lm_lmid
= LM_ID_LDSO
;
340 lml_rtld
.lm_lmidstr
= (char *)MSG_ORIG(MSG_LMID_LDSO
);
343 * Determine whether we have a secure executable.
345 security(uid
, euid
, gid
, egid
, auxflags
);
348 * Make an initial pass of environment variables to pick off those
349 * related to locale processing. At the same time, collect and save
350 * any LD_XXXX variables for later processing. Note that this later
351 * processing will be skipped if ld.so.1 is invoked from the command
352 * line with -e LD_NOENVIRON.
354 if (envp
&& (readenv_user((const char **)envp
, &ealp
) == 1))
358 * If ld.so.1 has been invoked directly, process its arguments.
362 * Process any arguments that are specific to ld.so.1, and
363 * reorganize the process stack to effectively remove ld.so.1
364 * from the stack. Reinitialize the environment pointer, as
365 * this pointer may have been shifted after skipping ld.so.1's
368 if (rtld_getopt(argv
, &envp
, &auxv
, &(lml_main
.lm_flags
),
369 &(lml_main
.lm_tflags
), (aoutdyn
!= 0)) == 1) {
370 eprintf(&lml_main
, ERR_NONE
, MSG_INTL(MSG_USG_BADOPT
));
376 * Open the object that ld.so.1 is to execute.
378 argvname
= execname
= argv
[0];
380 if ((fd
= open(argvname
, O_RDONLY
)) == -1) {
382 eprintf(&lml_main
, ERR_FATAL
, MSG_INTL(MSG_SYS_OPEN
),
383 argvname
, strerror(err
));
389 * Having processed any ld.so.1 command line options, return to process
390 * any LD_XXXX environment variables.
393 if (((rtld_flags
& RT_FL_NOENVIRON
) == 0) &&
394 (procenv_user(ealp
, &(lml_main
.lm_flags
),
395 &(lml_main
.lm_tflags
), (aoutdyn
!= 0)) == 1))
401 * Initialize a hardware capability descriptor for use in comparing
402 * each loaded object. The aux vector must provide AF_SUN_HWCAPVERIFY,
403 * as prior to this setting any hardware capabilities that were found
404 * could not be relied upon.
406 if (auxflags
& AF_SUN_HWCAPVERIFY
) {
407 rtld_flags2
|= RT_FL2_HWCAP
;
408 org_scapset
->sc_hw_1
= (Xword
)hwcap_1
;
412 * Create a mapping descriptor for ld.so.1. We can determine our
413 * two segments information from known symbols.
415 if ((mpp
= calloc(2, sizeof (mmapobj_result_t
))) == NULL
)
417 mpp
[0].mr_addr
= (caddr_t
)M_PTRUNC(ld_base
);
418 mpp
[0].mr_msize
= (caddr_t
)&_etext
- mpp
[0].mr_addr
;
419 mpp
[0].mr_fsize
= mpp
[0].mr_msize
;
420 mpp
[0].mr_prot
= (PROT_READ
| PROT_EXEC
);
422 mpp
[1].mr_addr
= (caddr_t
)M_PTRUNC((uintptr_t)&r_debug
);
423 mpp
[1].mr_msize
= (caddr_t
)&_end
- mpp
[1].mr_addr
;
424 mpp
[1].mr_fsize
= (caddr_t
)&_edata
- mpp
[1].mr_addr
;
425 mpp
[1].mr_prot
= (PROT_READ
| PROT_WRITE
| PROT_EXEC
);
427 if ((fdr
.fd_nname
= stravl_insert(_rtldname
, 0, 0, 0)) == NULL
)
429 if ((rlmp
= elf_new_lmp(&lml_rtld
, ALIST_OFF_DATA
, &fdr
,
430 (Addr
)mpp
->mr_addr
, (size_t)((uintptr_t)eaddr
- (uintptr_t)ld_base
),
431 NULL
, NULL
, NULL
)) == NULL
)
436 PADSTART(rlmp
) = (ulong_t
)mpp
[0].mr_addr
;
437 PADIMLEN(rlmp
) = (ulong_t
)mpp
[0].mr_addr
+ (ulong_t
)mpp
[1].mr_addr
+
438 (ulong_t
)mpp
[1].mr_msize
;
440 MODE(rlmp
) |= (RTLD_LAZY
| RTLD_NODELETE
| RTLD_GLOBAL
| RTLD_WORLD
);
441 FLAGS(rlmp
) |= (FLG_RT_ANALYZED
| FLG_RT_RELOCED
| FLG_RT_INITDONE
|
442 FLG_RT_INITCLCT
| FLG_RT_FINICLCT
| FLG_RT_MODESET
);
445 * Initialize the runtime linkers information.
448 interp
->i_name
= (char *)rtldname
;
449 interp
->i_faddr
= (caddr_t
)ADDR(rlmp
);
453 * Map in the file, if exec has not already done so, or if the file
454 * was passed as an argument to an explicit execution of ld.so.1 from
459 * Map the file. Once the object is mapped we no longer need
460 * the file descriptor.
462 (void) rtld_fstat(fd
, &status
);
463 fdm
.fd_oname
= argvname
;
464 fdm
.fd_ftp
= map_obj(&lml_main
, &fdm
, status
.st_size
, argvname
,
468 if (fdm
.fd_ftp
== NULL
) {
469 Conv_reject_desc_buf_t rej_buf
;
471 eprintf(&lml_main
, ERR_FATAL
,
472 MSG_INTL(err_reject
[rej
.rej_type
]), argvname
,
473 conv_reject_desc(&rej
, &rej_buf
, M_MACH
));
478 * Finish processing the loading of the file.
480 if ((fdm
.fd_nname
= stravl_insert(argvname
, 0, 0, 0)) == NULL
)
482 fdm
.fd_dev
= status
.st_dev
;
483 fdm
.fd_ino
= status
.st_ino
;
485 if ((mlmp
= load_file(&lml_main
, ALIST_OFF_DATA
, NULL
, &fdm
,
490 * We now have a process name for error diagnostics.
492 if ((str
= strrchr(argvname
, '/')) != NULL
)
498 mmapobj_result_t
*mpp
= MMAPS(mlmp
);
499 uint_t mnum
, mapnum
= MMAPCNT(mlmp
);
500 void *brkbase
= NULL
;
503 * Since ld.so.1 was the primary executed object - the
504 * brk() base has not yet been initialized, we need to
505 * initialize it. For an executable, initialize it to
506 * the end of the object. For a shared object (ET_DYN)
507 * initialize it to the first page in memory.
509 for (mnum
= 0; mnum
< mapnum
; mnum
++, mpp
++)
510 brkbase
= mpp
->mr_addr
+ mpp
->mr_msize
;
513 brkbase
= (void *)syspagsz
;
515 if (_brk_unlocked(brkbase
) == -1) {
518 eprintf(&lml_main
, ERR_FATAL
,
519 MSG_INTL(MSG_SYS_BRK
), argvname
,
526 * Set up function ptr and arguments according to the type
527 * of file class the executable is. (Currently only supported
528 * types are ELF and a.out format.) Then create a link map
529 * for the executable.
533 mmapobj_result_t
*mpp
;
536 * Create a mapping structure sufficient to describe
537 * a single two segments. The ADDR() of the a.out is
538 * established as 0, which is required but the AOUT
542 calloc(sizeof (mmapobj_result_t
), 2)) == NULL
)
546 stravl_insert(execname
, 0, 0, 0)) == NULL
)
548 if ((mlmp
= aout_new_lmp(&lml_main
, ALIST_OFF_DATA
,
549 &fdm
, 0, 0, aoutdyn
, NULL
, NULL
)) == NULL
)
553 * Establish the true mapping information for the a.out.
555 if (aout_get_mmap(&lml_main
, mpp
)) {
561 (size_t)(mpp
[1].mr_addr
+ mpp
[1].mr_msize
) -
562 S_ALIGN((size_t)mpp
[0].mr_addr
, syspagsz
);
565 PADSTART(mlmp
) = (ulong_t
)mpp
->mr_addr
;
566 PADIMLEN(mlmp
) = mpp
->mr_msize
;
569 * Disable any object configuration cache (BCP apps
570 * bring in sbcp which can benefit from any object
571 * cache, but both the app and sbcp can't use the same
574 rtld_flags
|= RT_FL_NOOBJALT
;
577 * Make sure no-direct bindings are in effect.
579 lml_main
.lm_tflags
|= LML_TFLG_NODIRECT
;
581 eprintf(&lml_main
, ERR_FATAL
,
582 MSG_INTL(MSG_ERR_REJ_UNKFILE
), argvname
);
590 mmapobj_result_t
*mpp
, *fmpp
, *hmpp
= NULL
;
596 * Using the executables phdr address determine the base
597 * address of the input file. NOTE, this assumes the
598 * program headers and elf header are part of the same
599 * mapped segment. Although this has held for many
600 * years now, it might be more flexible if the kernel
601 * gave use the ELF headers start address, rather than
602 * the Program headers.
604 * Determine from the ELF header if we're been called
605 * from a shared object or dynamic executable. If the
606 * latter, then any addresses within the object are used
607 * as is. Addresses within shared objects must be added
608 * to the process's base address.
610 ehdr
= (Ehdr
*)((Addr
)phdr
- phdr
->p_offset
);
611 phsize
= ehdr
->e_phentsize
;
612 if (ehdr
->e_type
== ET_DYN
)
616 * Allocate a mapping array to retain mapped segment
619 if ((fmpp
= mpp
= calloc(ehdr
->e_phnum
,
620 sizeof (mmapobj_result_t
))) == NULL
)
624 * Extract the needed information from the segment
627 for (i
= 0, pptr
= phdr
; i
< ehdr
->e_phnum
; i
++) {
628 if (pptr
->p_type
== PT_INTERP
) {
629 i_offset
= pptr
->p_offset
;
631 (caddr_t
)interp_base
;
633 if ((pptr
->p_type
== PT_LOAD
) &&
634 (pptr
->p_filesz
|| pptr
->p_memsz
)) {
635 int perm
= (PROT_READ
| PROT_EXEC
);
638 if (i_offset
&& pptr
->p_filesz
&&
639 (i_offset
>= pptr
->p_offset
) &&
641 (pptr
->p_memsz
+ pptr
->p_offset
))) {
642 interp
->i_name
= (char *)
643 pptr
->p_vaddr
+ i_offset
-
644 pptr
->p_offset
+ base
;
648 if (pptr
->p_flags
& PF_W
)
652 * Retain segments mapping info. Round
653 * each segment to a page boundary, as
654 * this insures addresses are suitable
655 * for mprotect() if required.
657 off
= pptr
->p_vaddr
+ base
;
660 mpp
->mr_addr
= (caddr_t
)ehdr
;
662 mpp
->mr_addr
= (caddr_t
)off
;
664 off
-= (size_t)(uintptr_t)mpp
->mr_addr
;
665 mpp
->mr_msize
= pptr
->p_memsz
+ off
;
666 mpp
->mr_fsize
= pptr
->p_filesz
+ off
;
672 pptr
= (Phdr
*)((ulong_t
)pptr
+ phsize
);
676 msize
= (size_t)(mpp
->mr_addr
+ mpp
->mr_msize
) -
677 S_ALIGN((size_t)fmpp
->mr_addr
, syspagsz
);
680 stravl_insert(execname
, 0, 0, 0)) == NULL
)
682 if ((mlmp
= elf_new_lmp(&lml_main
, ALIST_OFF_DATA
,
683 &fdm
, (Addr
)hmpp
->mr_addr
, msize
,
684 NULL
, NULL
, NULL
)) == NULL
)
688 MMAPCNT(mlmp
) = mapnum
;
689 PADSTART(mlmp
) = (ulong_t
)fmpp
->mr_addr
;
690 PADIMLEN(mlmp
) = (ulong_t
)fmpp
->mr_addr
+
691 (ulong_t
)mpp
->mr_addr
+ (ulong_t
)mpp
->mr_msize
;
696 * Establish the interpretors name as that defined within the initial
697 * object (executable). This provides for ORIGIN processing of ld.so.1
698 * dependencies. Note, the NAME() of the object remains that which was
699 * passed to us as the SONAME on execution.
702 size_t len
= strlen(interp
->i_name
);
704 if (expand(&interp
->i_name
, &len
, 0, 0,
705 (PD_TKN_ISALIST
| PD_TKN_CAP
), rlmp
) & PD_TKN_RESOLVED
)
706 fdr
.fd_flags
|= FLG_FD_RESOLVED
;
708 fdr
.fd_pname
= interp
->i_name
;
709 (void) fullpath(rlmp
, &fdr
);
712 * The runtime linker acts as a filtee for various dl*() functions that
713 * are defined in libc (and libdl). Make sure this standard name for
714 * the runtime linker is also registered in the FullPathNode AVL tree.
716 (void) fpavl_insert(&lml_rtld
, rlmp
, _rtldname
, 0);
719 * Having established the true runtime linkers name, simplify the name
720 * for error diagnostics.
722 if ((str
= strrchr(PATHNAME(rlmp
), '/')) != NULL
)
725 rtldname
= PATHNAME(rlmp
);
728 * Expand the fullpath name of the application. This typically occurs
729 * as a part of loading an object, but as the kernel probably mapped
730 * it in, complete this processing now.
732 (void) fullpath(mlmp
, 0);
735 * Some troublesome programs will change the value of argv[0]. Dupping
736 * the process string protects us, and insures the string is left in
739 if ((str
= (char *)strdup(procname
)) == NULL
)
743 FLAGS(mlmp
) |= (FLG_RT_ISMAIN
| FLG_RT_MODESET
);
744 FLAGS1(mlmp
) |= FL1_RT_USED
;
747 * It's the responsibility of MAIN(crt0) to call it's _init and _fini
748 * section, therefore null out any INIT/FINI so that this object isn't
749 * collected during tsort processing. And, if the application has no
750 * initarray or finiarray we can economize on establishing bindings.
752 INIT(mlmp
) = FINI(mlmp
) = NULL
;
753 if ((INITARRAY(mlmp
) == NULL
) && (FINIARRAY(mlmp
) == NULL
))
754 FLAGS1(mlmp
) |= FL1_RT_NOINIFIN
;
757 * Identify lddstub if necessary.
759 if (lml_main
.lm_flags
& LML_FLG_TRC_LDDSTUB
)
760 FLAGS1(mlmp
) |= FL1_RT_LDDSTUB
;
763 * Retain our argument information for use in dlinfo.
765 argsinfo
.dla_argv
= argv
--;
766 argsinfo
.dla_argc
= (long)*argv
;
767 argsinfo
.dla_envp
= envp
;
768 argsinfo
.dla_auxv
= auxv
;
773 * Add our two main link-maps to the dynlm_list
775 if (aplist_append(&dynlm_list
, &lml_main
, AL_CNT_DYNLIST
) == NULL
)
778 if (aplist_append(&dynlm_list
, &lml_rtld
, AL_CNT_DYNLIST
) == NULL
)
782 * Reset the link-map counts for both lists. The init count is used to
783 * track how many objects have pending init sections, this gets incre-
784 * mented each time an object is relocated. Since ld.so.1 relocates
785 * itself, it's init count will remain zero.
786 * The object count is used to track how many objects have pending fini
787 * sections, as ld.so.1 handles its own fini we can zero its count.
793 * Initialize debugger information structure. Some parts of this
794 * structure were initialized statically.
796 r_debug
.rtd_rdebug
.r_map
= (Link_map
*)lml_main
.lm_head
;
797 r_debug
.rtd_rdebug
.r_ldsomap
= (Link_map
*)lml_rtld
.lm_head
;
798 r_debug
.rtd_rdebug
.r_ldbase
= r_debug
.rtd_rdebug
.r_ldsomap
->l_addr
;
799 r_debug
.rtd_dynlmlst
= &dynlm_list
;
802 * Determine the dev/inode information for the executable to complete
803 * load_so() checking for those who might dlopen(a.out).
805 if (rtld_stat(PATHNAME(mlmp
), &status
) == 0) {
806 STDEV(mlmp
) = status
.st_dev
;
807 STINO(mlmp
) = status
.st_ino
;
811 * Initialize any configuration information.
813 if (!(rtld_flags
& RT_FL_NOCFG
)) {
814 if ((features
= elf_config(mlmp
, (aoutdyn
!= 0))) == -1)
820 * If this is a 64-bit process, determine whether this process has
821 * restricted the process address space to 32-bits. Any dependencies
822 * that are restricted to a 32-bit address space can only be loaded if
823 * the executable has established this requirement.
825 if (CAPSET(mlmp
).sc_sf_1
& SF1_SUNW_ADDR32
)
826 rtld_flags2
|= RT_FL2_ADDR32
;
829 * Establish any alternative capabilities, and validate this object
830 * if it defines it's own capabilities information.
832 if (cap_alternative() == 0)
835 if (cap_check_lmp(mlmp
, &rej
) == 0) {
836 if (lml_main
.lm_flags
& LML_FLG_TRC_ENABLE
) {
838 (void) printf(MSG_INTL(ldd_warn
[rej
.rej_type
]),
839 NAME(mlmp
), rej
.rej_str
);
842 eprintf(&lml_main
, ERR_FATAL
,
843 MSG_INTL(err_reject
[rej
.rej_type
]),
844 NAME(mlmp
), rej
.rej_str
);
850 * Establish the modes of the initial object. These modes are
851 * propagated to any preloaded objects and explicit shared library
854 * If we're generating a configuration file using crle(1), remove
855 * any RTLD_NOW use, as we don't want to trigger any relocation proc-
856 * essing during crle(1)'s first past (this would just be unnecessary
857 * overhead). Any filters are explicitly loaded, and thus RTLD_NOW is
858 * not required to trigger filter loading.
860 * Note, RTLD_NOW may have been established during analysis of the
861 * application had the application been built -z now.
863 MODE(mlmp
) |= (RTLD_NODELETE
| RTLD_GLOBAL
| RTLD_WORLD
);
865 if (rtld_flags
& RT_FL_CONFGEN
) {
866 MODE(mlmp
) |= RTLD_CONFGEN
;
867 MODE(mlmp
) &= ~RTLD_NOW
;
868 rtld_flags2
&= ~RT_FL2_BINDNOW
;
871 if ((MODE(mlmp
) & RTLD_NOW
) == 0) {
872 if (rtld_flags2
& RT_FL2_BINDNOW
)
873 MODE(mlmp
) |= RTLD_NOW
;
875 MODE(mlmp
) |= RTLD_LAZY
;
879 * If debugging was requested initialize things now that any cache has
880 * been established. A user can specify LD_DEBUG=help to discover the
881 * list of debugging tokens available without running the application.
882 * However, don't allow this setting from a configuration file.
884 * Note, to prevent recursion issues caused by loading and binding the
885 * debugging libraries themselves, a local debugging descriptor is
886 * initialized. Once the debugging setup has completed, this local
887 * descriptor is copied to the global descriptor which effectively
888 * enables diagnostic output.
890 * Ignore any debugging request if we're being monitored by a process
891 * that expects the old getpid() initialization handshake.
893 if ((rpl_debug
|| prm_debug
) && ((rtld_flags
& RT_FL_DEBUGGER
) == 0)) {
894 Dbg_desc _dbg_desc
= {0};
895 struct timeval total
= DBG_TOTALTIME
;
896 struct timeval delta
= DBG_DELTATIME
;
899 if (dbg_setup(rpl_debug
, &_dbg_desc
) == 0)
901 if (_dbg_desc
.d_extra
& DBG_E_HELP_EXIT
)
902 rtldexit(&lml_main
, 0);
905 (void) dbg_setup(prm_debug
, &_dbg_desc
);
907 *dbg_desc
= _dbg_desc
;
908 DBG_TOTALTIME
= total
;
909 DBG_DELTATIME
= delta
;
913 * Now that debugging is enabled generate any diagnostics from any
917 DBG_CALL(Dbg_cap_val(&lml_main
, org_scapset
, alt_scapset
,
919 DBG_CALL(Dbg_file_config_dis(&lml_main
, config
->c_name
,
922 DBG_CALL(Dbg_file_ldso(rlmp
, envp
, auxv
,
923 LIST(rlmp
)->lm_lmidstr
, ALIST_OFF_DATA
));
925 if (THIS_IS_ELF(mlmp
)) {
926 DBG_CALL(Dbg_file_elf(&lml_main
, PATHNAME(mlmp
),
927 ADDR(mlmp
), MSIZE(mlmp
), LIST(mlmp
)->lm_lmidstr
,
930 DBG_CALL(Dbg_file_aout(&lml_main
, PATHNAME(mlmp
),
931 ADDR(mlmp
), MSIZE(mlmp
), LIST(mlmp
)->lm_lmidstr
,
939 if (rpl_audit
|| prm_audit
|| profile_lib
) {
945 aud
[2] = profile_lib
;
948 * Any global auditing (set using LD_AUDIT or LD_PROFILE) that
949 * can't be established is non-fatal.
951 if ((auditors
= calloc(1, sizeof (Audit_desc
))) == NULL
)
954 for (ndx
= 0; ndx
< 3; ndx
++) {
956 if ((auditors
->ad_name
=
957 strdup(aud
[ndx
])) == NULL
)
959 rtld_flags2
|= RT_FL2_FTL2WARN
;
960 (void) audit_setup(mlmp
, auditors
,
961 PD_FLG_EXTLOAD
, NULL
);
962 rtld_flags2
&= ~RT_FL2_FTL2WARN
;
965 lml_main
.lm_tflags
|= auditors
->ad_flags
;
967 if (AUDITORS(mlmp
)) {
969 * Any object required auditing (set with a DT_DEPAUDIT dynamic
970 * entry) that can't be established is fatal.
972 if (FLAGS1(mlmp
) & FL1_RT_GLOBAUD
) {
974 * If this object requires global auditing, use the
975 * local auditing information to set the global
976 * auditing descriptor. The effect is that a
977 * DT_DEPAUDIT act as an LD_AUDIT.
979 if ((auditors
== NULL
) && ((auditors
= calloc(1,
980 sizeof (Audit_desc
))) == NULL
))
983 auditors
->ad_name
= AUDITORS(mlmp
)->ad_name
;
984 if (audit_setup(mlmp
, auditors
, 0, NULL
) == 0)
986 lml_main
.lm_tflags
|= auditors
->ad_flags
;
989 * Clear the local auditor information.
991 free((void *) AUDITORS(mlmp
));
992 AUDITORS(mlmp
) = NULL
;
996 * Establish any local auditing.
998 if (audit_setup(mlmp
, AUDITORS(mlmp
), 0, NULL
) == 0)
1001 AFLAGS(mlmp
) |= AUDITORS(mlmp
)->ad_flags
;
1002 lml_main
.lm_flags
|= LML_FLG_LOCAUDIT
;
1007 * Explicitly add the initial object and ld.so.1 to those objects being
1008 * audited. Note, although the ld.so.1 link-map isn't auditable,
1009 * establish a cookie for ld.so.1 as this may be bound to via the
1012 if ((lml_main
.lm_tflags
| AFLAGS(mlmp
)) & LML_TFLG_AUD_MASK
) {
1013 if (((audit_objopen(mlmp
, mlmp
) == 0) ||
1014 (audit_objopen(mlmp
, rlmp
) == 0)) &&
1015 (AFLAGS(mlmp
) & LML_TFLG_AUD_MASK
))
1020 * Map in any preloadable shared objects. Establish the caller as the
1021 * head of the main link-map list. In the case of being exercised from
1022 * lddstub, the caller gets reassigned to the first target shared object
1023 * so as to provide intuitive diagnostics from ldd().
1025 * Note, it is valid to preload a 4.x shared object with a 5.0
1026 * executable (or visa-versa), as this functionality is required by
1030 if (rpl_preload
&& (preload(rpl_preload
, mlmp
, &clmp
) == 0))
1032 if (prm_preload
&& (preload(prm_preload
, mlmp
, &clmp
) == 0))
1036 * Load all dependent (needed) objects.
1038 if (analyze_lmc(&lml_main
, ALIST_OFF_DATA
, mlmp
, mlmp
, NULL
) == NULL
)
1042 * Relocate all the dependencies we've just added.
1044 * If this process has been established via crle(1), the environment
1045 * variable LD_CONFGEN will have been set. crle(1) may create this
1046 * process twice. The first time crle only needs to gather dependency
1047 * information. The second time, is to dldump() the images.
1049 * If we're only gathering dependencies, relocation is unnecessary.
1050 * As crle(1) may be building an arbitrary family of objects, they may
1051 * not fully relocate either. Hence the relocation phase is not carried
1052 * out now, but will be called by crle(1) once all objects have been
1055 if ((rtld_flags
& RT_FL_CONFGEN
) == 0) {
1057 DBG_CALL(Dbg_util_nl(&lml_main
, DBG_NL_STD
));
1059 if (relocate_lmc(&lml_main
, ALIST_OFF_DATA
, mlmp
,
1064 * Inform the debuggers that basic process initialization is
1065 * complete, and that the state of ld.so.1 (link-map lists,
1066 * etc.) is stable. This handshake enables the debugger to
1067 * initialize themselves, and consequently allows the user to
1068 * set break points in .init code.
1070 * Most new debuggers use librtld_db to monitor activity events.
1071 * Older debuggers indicated their presence by setting the
1072 * DT_DEBUG entry in the dynamic executable (see elf_new_lm()).
1073 * In this case, getpid() is called so that the debugger can
1074 * catch the system call. This old mechanism has some
1075 * restrictions, as getpid() should not be called prior to
1076 * basic process initialization being completed. This
1077 * restriction has become increasingly difficult to maintain,
1078 * as the use of auditors, LD_DEBUG, and the initialization
1079 * handshake with libc can result in "premature" getpid()
1080 * calls. The use of this getpid() handshake is expected to
1081 * disappear at some point in the future, and there is intent
1082 * to work towards that goal.
1084 rd_event(&lml_main
, RD_DLACTIVITY
, RT_CONSISTENT
);
1085 rd_event(&lml_rtld
, RD_DLACTIVITY
, RT_CONSISTENT
);
1087 if (rtld_flags
& RT_FL_DEBUGGER
) {
1088 r_debug
.rtd_rdebug
.r_flags
|= RD_FL_ODBG
;
1094 * Indicate preinit activity, and call any auditing routines. These
1095 * routines are called before initializing any threads via libc, or
1096 * before collecting the complete set of .inits on the primary link-map.
1097 * Although most libc interfaces are encapsulated in local routines
1098 * within libc, they have been known to escape (ie. call a .plt). As
1099 * the appcert auditor uses preinit as a trigger to establish some
1100 * external interfaces to the main link-maps libc, we need to activate
1101 * this trigger before exercising any code within libc. Additionally,
1102 * I wouldn't put it past an auditor to add additional objects to the
1103 * primary link-map. Hence, we collect .inits after the audit call.
1105 rd_event(&lml_main
, RD_PREINIT
, 0);
1108 ((lml_main
.lm_tflags
| AFLAGS(mlmp
)) & LML_TFLG_AUD_ACTIVITY
))
1109 audit_activity(mlmp
, LA_ACT_CONSISTENT
);
1111 ((lml_main
.lm_tflags
| AFLAGS(mlmp
)) & LML_TFLG_AUD_PREINIT
))
1112 audit_preinit(mlmp
);
1115 * If we're creating initial configuration information, we're done
1116 * now that the auditing step has been called.
1118 if (rtld_flags
& RT_FL_CONFGEN
) {
1119 leave(LIST(mlmp
), 0);
1124 * Sort the .init sections of all objects we've added. If we're
1125 * tracing we only need to execute this under ldd(1) with the -i or -u
1128 lmflags
= lml_main
.lm_flags
;
1129 if (((lmflags
& LML_FLG_TRC_ENABLE
) == 0) ||
1130 (lmflags
& (LML_FLG_TRC_INIT
| LML_FLG_TRC_UNREF
))) {
1131 if ((tobj
= tsort(mlmp
, LIST(mlmp
)->lm_init
,
1132 RT_SORT_REV
)) == (Rt_map
**)S_ERROR
)
1137 * If we are tracing we're done. This is the one legitimate use of a
1138 * direct call to rtldexit() rather than return, as we don't want to
1139 * return and jump to the application.
1141 if (lmflags
& LML_FLG_TRC_ENABLE
) {
1143 rtldexit(&lml_main
, 0);
1147 * Check if this instance of the linker should have a primary link
1148 * map. This flag allows multiple copies of the -same- -version-
1149 * of the linker (and libc) to run in the same address space.
1151 * Without this flag we only support one copy of the linker in a
1152 * process because by default the linker will always try to
1153 * initialize at one primary link map The copy of libc which is
1154 * initialized on a primary link map will initialize global TLS
1155 * data which can be shared with other copies of libc in the
1156 * process. The problem is that if there is more than one copy
1157 * of the linker, only one copy should link libc onto a primary
1158 * link map, otherwise libc will attempt to re-initialize global
1159 * TLS data. So when a copy of the linker is loaded with this
1160 * flag set, it will not initialize any primary link maps since
1161 * presumably another copy of the linker will do this.
1163 * Note that this flag only allows multiple copies of the -same-
1164 * -version- of the linker (and libc) to coexist. This approach
1165 * will not work if we are trying to load different versions of
1166 * the linker and libc into the same process. The reason for
1167 * this is that the format of the global TLS data may not be
1168 * the same for different versions of libc. In this case each
1169 * different version of libc must have it's own primary link map
1170 * and be able to maintain it's own TLS data. The only way this
1171 * can be done is by carefully managing TLS pointers on transitions
1172 * between code associated with each of the different linkers.
1173 * Note that this is actually what is done for processes in lx
1174 * branded zones. Although in the lx branded zone case, the
1175 * other linker and libc are actually gld and glibc. But the
1176 * same general TLS management mechanism used by the lx brand
1177 * would apply to any attempts to run multiple versions of the
1178 * solaris linker and libc in a single process.
1180 if (auxflags
& AF_SUN_NOPLM
)
1181 rtld_flags2
|= RT_FL2_NOPLM
;
1184 * Establish any static TLS for this primary link-map. Note, regardless
1185 * of whether TLS is available, an initial handshake occurs with libc to
1186 * indicate we're processing the primary link-map. Having identified
1187 * the primary link-map, initialize threads.
1189 if (rt_get_extern(&lml_main
, mlmp
) == 0)
1192 if ((rtld_flags2
& RT_FL2_NOPLM
) == 0) {
1193 if (tls_statmod(&lml_main
, mlmp
) == 0)
1195 rt_thr_init(&lml_main
);
1196 rtld_flags2
|= RT_FL2_PLMSETUP
;
1198 rt_thr_init(&lml_main
);
1202 * Fire all dependencies .init sections. Identify any unused
1203 * dependencies, and leave the runtime linker - effectively calling
1204 * the dynamic executables entry point.
1206 call_array(PREINITARRAY(mlmp
), (uint_t
)PREINITARRAYSZ(mlmp
), mlmp
,
1210 call_init(tobj
, DBG_INIT_SORT
);
1212 rd_event(&lml_main
, RD_POSTINIT
, 0);
1216 DBG_CALL(Dbg_util_call_main(mlmp
));
1218 rtld_flags
|= (RT_FL_OPERATION
| RT_FL_APPLIC
);
1220 leave(LIST(mlmp
), 0);