Commit Graph

455 Commits

Author SHA1 Message Date
junyoung 8707cd2a36 Gracefully exit when invoked directly. Use of assert() here caused a segfault.
Address PR#11785.
2002-12-14 15:37:57 +00:00
junyoung 9e11602ee9 Remove comment which is not true any more. alpha and i386 support
R_xxx_COPY relocations.
2002-12-14 09:13:00 +00:00
junyoung fd1f5e8f1b A bit speedup: in _rtld_load_object(), save the number of calls to
strcmp() by performing path name length comparison first. In the test
with Mozilla, the number was reduced to 1068 from 7182 (yes, we saved
6114 strcmp()!).
2002-12-05 04:56:56 +00:00
thorpej 044aeabaad Bintuils-current initializes the GOT entries to 0 (instead of the
base-relative offsets that were placed there previously), so we
must use a different mechanism to compute our reloc base.

Patch from Charles Hannum.
2002-12-04 01:19:37 +00:00
mycroft be3692c5a7 Back out the last two changes. They were misguided, and the code worked
correctly before.
2002-11-25 19:49:25 +00:00
fvdl 100e201ec6 Replace return -1 in rtld_bind with _rtld_die() call. 2002-11-24 18:19:23 +00:00
fvdl d93db1cfce Implement self-relocation as is required now. 2002-11-24 18:16:45 +00:00
fvdl 5505734fa9 For the debug case, print relocbase as well at the start of _rtld(). 2002-11-24 18:13:30 +00:00
junyoung 2cc0cde8f5 Now _rtld_relocate_objects() returns with error as soon as any of
subsequent calls in it fails.

Spotted by wiz and enami.
2002-11-22 04:39:37 +00:00
junyoung b5ffe4c33c Simplify code a bit. 2002-11-21 19:09:56 +00:00
nathanw 15f633fbd3 In _rtld_load_library(), ensure that the old _rtld_error state (a message from
a previous error, or NULL) is preserved if the search eventually succeeds.

Addresses the problem pointed out in PR pkg/19024.
2002-11-14 21:07:46 +00:00
nathanw 6c24ccfd1f Remove "extern const chat *_rtld_error_message;". There is no such
variable, and never has been.
2002-11-14 20:11:48 +00:00
matt 01ba93bc3c Convert to register prefixes. 2002-10-31 20:23:25 +00:00
thorpej b777dba640 _rtld_bind(): Don't use "rela" until after we've (potentially) adjusted
it.
2002-10-18 20:35:25 +00:00
junyoung d0c512001c Embedded whitespace in dirname is supported again. 2002-10-06 01:36:36 +00:00
junyoung 2036ad0c3f A line whose length is 0 always begins with '#'. 2002-10-05 16:26:37 +00:00
junyoung e4d4608a8b Minor cleanup. 2002-10-05 16:13:31 +00:00
junyoung 1b5e50eb7b Disable DEBUG again. 2002-10-05 15:52:15 +00:00
junyoung 2e85345237 Better fix of parser bug. 2002-10-05 15:43:56 +00:00
junyoung 89342b95bb Don't call _rtld_process_mapping() with null string. 2002-10-05 15:04:49 +00:00
mycroft 80b0665a93 Simplify the hint file parser a bit. 2002-10-05 12:23:39 +00:00
mycroft ad8ccd6290 Minor cleanup. 2002-10-05 11:59:03 +00:00
mycroft 5d4bc1adf5 Make this work for ldd again. 2002-10-05 00:13:27 +00:00
mycroft 2a88686d7a Recode _rtld_elf_hash() so it compiles better (at least on i386 and arm).
Still could be better on i386, but only written in assembler...
2002-10-04 20:34:10 +00:00
mycroft 6f56cdc91f Rearrange _rtld_map_object() a little, so that we don't have to have the first
page of the object double-mapped.  Not that it matters much, but someone was
whinging about it.
While I'm at it, nuke obj->phdr and obj->phsize; they're unused.
2002-10-04 18:50:43 +00:00
mycroft 0a519951b5 Pull out some objlist functions in ldd. 2002-10-04 04:04:26 +00:00
mycroft 3c57a33db5 Don't actually bother maintaining _rtld_list_main and _rtld_list_global in
ldd.
2002-10-04 04:01:13 +00:00
mycroft dfaba15604 Move the definition of _rtld_list_main so ldd builds again. 2002-10-04 03:59:40 +00:00
mycroft 4172074119 Skip the lazy PLT relocation if relocbase==0 (useful if libraries are loaded
at their VMA address).
2002-10-03 20:39:22 +00:00
mycroft 7a48cdb883 As seen on tech-userlevel...
There are several optimizations here:

1) Objects on _rtld_list_main do not participate in the DAG structures
   at all.  This is okay because all symbols must be resolvable at
   link/load time, and _rtld_list_main is always searched first, so
   any references from those objects must necessarily be resolved to
   other objects on _rtld_list_main.

   (Making this work completely required setting obj->main a bit
   earlier; hence the RTLD_MAIN hack.)

2) Objects on _rtld_list_main are not put on _rtld_list_global,
   preventing an extra search.

3) A bit is used to keep track of whether an object is on
   _rtld_list_global, so we don't have to do a silly linear search.

4) A small attempt is made to prevent objects being put on the DAG
   lists multiple times (using a silly linear search).

The sum of this appears to be a ~10% (.3s) reduction in Mozilla's
startup time on my 800MHz box.

Also, make sure _rtld_objmain->path is always set, just to make the
debug output nicer.
2002-10-03 20:35:19 +00:00
mycroft f66c66a92c Do not put objects on _rtld_list_main on any DAG member list -- any symbol we
will have already been found during the _rtld_list_main walk, so there's no
point in doing it again.
2002-10-03 01:09:21 +00:00
junyoung a189aa3eba Store pathnames of shared objects not found in search paths in cache
and utilize it. This greatly reduces the number of calls to open(2) and
malloc(3) for programs like mozilla that depend on many shared objects
while it doesn't affect performance of small programs.
2002-10-01 14:16:53 +00:00
wiz d6285bbf1d Begin new sentences on new lines.
Patch from Robert Elz (kre at munnari oz au).
2002-09-29 14:05:52 +00:00
junyoung b615e15549 Call NEW() rather than CNEW(). 2002-09-28 05:00:27 +00:00
thorpej 09a0767aa9 Only use the MKDYNAMICROOT semantics (i.e. -rpath=/lib,/usr/lib and
-dynamic-linker=/libexec/ld.elf_so) if the BINDIR of the program being
built is /bin or /sbin.

The reason we do this is because now all programs *except* those in
/bin and /sbin (i.e. the "special cases") match the default the compiler
uses, which is what is used for things in e.g. xsrc, pkgsrc, and other
random 3rd party programs.

This is done by decoupling where a shlib is installed from how it
is located.  Two new variables, SHLIBINSTALLDIR and SHLINKINSTALLDIR,
contain the former information, and key off MKDYNAMICROOT only.  SHLIBDIR
and SHLINKDIR contain the latter, and key off MKDYNAMICROOT and BINDIR.

The SHLIBINSTALLDIR, SHLIBDIR, _LIBSODIR, SHLINKINSTALLDIR, and
SHLINKDIR parameters are moved to a new <bsd.shlib.mk>; see bsd.README
for usage details.
2002-09-27 21:37:50 +00:00
mycroft c5739d43db Change the munmap() of the text-data gap to mprotect(PROT_NONE). This avoids
having scattered little mappings, although it's probably not the best way...
2002-09-27 19:48:24 +00:00
mycroft 0a20e1e977 We don't need to save r7, either... 2002-09-27 03:46:12 +00:00
mycroft b95736d94a Put back the short-circuiting code -- Matt claims there are functions that rely
on it.
OTOH, don't bother saving r6 a second time.
2002-09-27 03:34:22 +00:00
mycroft 6d8d08304c 1) There is no reason to flush the I$ here, given that we do not modify any
instructions.  Function calls use GOT indirection, and we only patch the
   GOT.
2) The mask-comparison optimization always fails, because the saved mask
   always has 0x2000 set, and the PLT stub mask never does.  So, remove it.
2002-09-27 02:46:05 +00:00
mycroft 42fb5b53c2 Save one more instruction. 2002-09-27 02:14:38 +00:00
mycroft 06f9fa98b0 Save relocbase in %r10, not %r1.
Also, save one instruction.
2002-09-26 23:28:52 +00:00
mycroft d437f6520b Implement a self-relocate function for the VAX. 2002-09-26 22:26:26 +00:00
mycroft 1c495430dd Remove the `self' args to _rtld_relocate_objects() and
_rtld_relocate_nonplt_objects().
2002-09-26 20:42:10 +00:00
mycroft 7d4bbc7f4e Add an iffy heuristic that allows us to do lazy binding with new objects, but
detect old objects and deal with them.
2002-09-26 20:41:34 +00:00
mycroft 73a80999b7 Clean up _rtld_init() -- there is no need to avoid globals.
Remove the call to _rtld_relocate_objects() completely -- except on VAX, where
we TEMPORARILY call _rtld_relocate_nonplt_objects() directly.
Also add more assertions -- ld.elf_so should never have PLT relocations.
2002-09-26 20:35:56 +00:00
mycroft 5f24ee89f3 Don't bogusly set obj->pltrela{,lim} if there is no DT_PLTREL. 2002-09-26 20:27:50 +00:00
mycroft a217e118cd *poof*
-fomit-frame-pointer works on 68k.
2002-09-26 14:30:47 +00:00
mycroft 3e9c6b1044 -vomit-frame-pointer is buggy on 68k. *sigh* 2002-09-26 13:56:01 +00:00
mycroft 273d2b19b4 Hm, the const isn't going to work. 2002-09-26 13:43:52 +00:00
mycroft 00088c228c Do not attempt to free(_rtld_objself.path) -- it's a pointer into our data
segment.
2002-09-26 13:42:05 +00:00