Commit Graph

341 Commits

Author SHA1 Message Date
mjf
27cb8d0e73 After a recent WARNS= bump on ld.elf_so it fails to build on hppa,
complaining that we're "discarding qualifier from pointer target
type".

Use const char * instead of caddr_t to avoid the warning and get
distribution building on hppa again.
2009-05-23 17:50:34 +00:00
martin
c131490c29 Use the new Elf_SOff (signed offset) type to fix a few signed/unsigned
problems.
2009-05-22 21:47:46 +00:00
christos
b19e027aab fix signed/unsigned comparisons and const cast away (untested) 2009-05-20 22:31:46 +00:00
lukem
b4fba76b41 Fix const issues (cast const pointers to "const uint8_t *" instead of "caddr_t")
NOTE: change based on ../i386/mdreloc.c 1.27
XXX: not compile tested
2009-03-16 02:46:47 +00:00
lukem
337930db10 Fix const issues (cast const pointers to "const uint8_t *" instead of "caddr_t") 2009-03-16 02:44:47 +00:00
lukem
b8276deac1 rename a variable to avoid a compiler warning 2009-03-15 23:53:03 +00:00
mrg
9108f12f6b move the defines for RTLD_ARCH_SUBDIR into a sub-sub-makefile so we can
grab these values via reach-over more easily.
2009-01-06 02:15:06 +00:00
mrg
8679e33545 if LD32DIR is defined:
- look in src/compat/lib/libc for libc_pic.
- define RTLD_ARCH_SUBDIR to "i386" or "sparc" for amd64 and sparc64
  builds, respectively
if RTLD_ARCH_SUBDIR is defined, add this path before
RTLD_DEFAULT_LIBRARY_PATH in the default search path.
2008-10-26 07:11:54 +00:00
skrll
dccd9ddf7f RCSID police 2008-07-24 06:51:58 +00:00
matt
38bdc8954f Refactor common code to _rtld_relocate_plt_object to i386 and arm so they
act like the other versions.
In _rtld_bind, if the result is 0, call _rtld_die.
Initialize _rtld_sym_zero.st_value to -_rtld_objself.maprelocbase.  Now when
the symbol is resolved, st_value + maprelocbase will equal 0 and the above
check in _rtld_bind will fire and a call to NULL will be avoided.
2008-07-24 04:39:25 +00:00
christos
d3b459e727 abort() if we are trying to use an undefined weak symbol from the plt. Remove
check from relocate_plt_object() since we cannot return _rtld_sym_zero anymore.
Code from gimpy.
2008-07-23 18:16:42 +00:00
christos
0d33a45b97 handle sym_zero like x86_64; other ports might need this too. 2008-07-22 22:27:07 +00:00
christos
56e895e29f deal specially with sym_zero, returned by a weak symbol that was not found,
by retrieving it's name instead of printing random garbage.
2008-07-21 20:19:28 +00:00
martin
ce099b4099 Remove clause 3 and 4 from TNF licenses 2008-04-28 20:22:51 +00:00
scw
5764a76889 Remove support for NetBSD/{,evb}sh5. 2007-04-08 09:35:21 +00:00
matt
ee98d74a6b Remove MD COMBRELOC support since it's now MI.
Enable COMBRELOC for all arches
2007-02-23 01:17:11 +00:00
martin
3cc1de3d7b Add COMBRELOC support 2007-02-15 19:42:13 +00:00
skrll
1fddd99f52 Provide COMBRELOC support for amd64 in answer to PR/35589.
Some statistics:

base + COMBRELOC
$ time (for i in `seq 100`;do noatun --help>/dev/null;done)
(; for i in `seq 100`; do; noatun --help > /dev/null; done; )  148.64s
user 4.82s system 99% cpu 2:33.93 total

base + DF caching:
$ time (for i in `seq 100`;do noatun --help>/dev/null;done)
(; for i in `seq 100`; do; noatun --help > /dev/null; done; )  151.15s
user 5.53s system 99% cpu 2:37.23 total

base:
$ time (for i in `seq 100`;do noatun --help>/dev/null;done)
(; for i in `seq 100`; do; noatun --help > /dev/null; done; )  492.36s user
5.34s system 99% cpu 8:19.17 total
2007-02-15 15:44:28 +00:00
skrll
6f388cd224 Create _rtld_relocate_plt_object and use it in _rtld_bind and
_rtld_relocate_plt_objects.

No functional change.
2006-10-17 08:33:36 +00:00
skrll
152e43d87a Support unaligned DIR32 relocs.
Closes PR 18293
2006-10-17 08:28:06 +00:00
skrll
edf13fb5fb Reformat a comment. 2006-10-16 13:53:09 +00:00
skrll
78b8583054 Correct the frame size for a couple of ENTRYs 2006-10-16 13:52:47 +00:00
simonb
428d37fad6 Fix unaligned loads and stores generated by gcc4. Problem described in
http://mail-index.NetBSD.org/tech-toolchain/2006/06/27/0001.html.
This cleaner version of the patch from Christos - thanks!
2006-06-28 16:48:38 +00:00
mrg
0f0f2b4e93 in _rtld_bind() initialise new_value for GCC4. 2006-05-23 16:27:41 +00:00
mrg
d677e4a13a avoid more GCC4 uninitialised variable problems. (sh3 known, vax guessed.) 2006-05-21 04:17:35 +00:00
dan
b995f58933 appease gcc4 uninitialiased warning
ok mrg.
2006-05-20 23:38:27 +00:00
mrg
82f7733046 in _rtld_bind() initialise result to appease GCC4. 2006-05-20 07:09:44 +00:00
mrg
084c052803 quell GCC 4.1 uninitialised variable warnings.
XXX: we should audit the tree for which old ones are no longer needed
after getting the older compilers out of the tree..
2006-05-10 21:53:14 +00:00
skrll
c965f60a50 Remove empty lines. 2006-04-03 13:23:15 +00:00
christos
458b13dee7 Coverity CID 923: Avoid NULL deref. 2006-03-18 23:09:34 +00:00
skrll
125d6a43ac Add LD_BIND_NOW support for mips.
This is the last arch to be done so remove the large ugly #if defined()
stuff in reloc.c.
2006-03-04 08:58:46 +00:00
uwe
a35d2a5b09 Add some comments. 2006-01-11 22:24:34 +00:00
uwe
e7102691a2 Kill trailing whitespace.
Indent delay slots.
2006-01-11 22:05:27 +00:00
perry
ae6ae2c362 Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete. 2005-12-24 20:56:41 +00:00
chs
0c6e4dbbc4 ok, the change from rev 1.33 was unnecessary after all,
only the second part of the previous revision was needed.
put the logic for the initial icache invalidation of the PLT
back the way it was, but in a way that makes clearer what's going on,
and add some comments explaining it.
2005-09-27 07:20:32 +00:00
chs
96fb424f44 fix two problems with icache invalidation of the PLT:
- restore revision 1.33, it was correct.
 - fix pointer arithmetic in other calls to __syncicache().
2005-09-26 05:45:13 +00:00
skrll
680596d08e Add __RCSID. 2005-08-20 19:01:16 +00:00
skrll
9f486044a0 KNF 2005-08-15 10:52:42 +00:00
skrll
5f0dd3a852 Add support for immediate PLT binding on SH5. Compile tested only as
shared libs don't actually work on SH5 (yet).

OK'd by Steve Woodford.
2005-07-28 12:35:21 +00:00
skrll
57e00bf69e Support immediate PLT binding on powerpc. Thanks to Simon Burge for
testing.

I can see the finish line...
2005-07-28 10:54:30 +00:00
skrll
56d4febf60 Support immediate PLT binding on m68k. Tested on NetBSD/sun3 using the new
version of tme.

Not far now...
2005-07-26 15:43:34 +00:00
skrll
51c5e03c82 Support immediate PLT binding on vax. Tested on simh.
Nearly there...
2005-07-24 08:02:23 +00:00
skrll
16044f3d38 Support immediate binding on x86_64.
Closes PR 30570. Thanks to TAMURA Kent for testing.
2005-07-17 05:57:21 +00:00
fair
af23ff4dbb appease gcc -Wuninitialized 2005-06-08 00:19:18 +00:00
he
7ed57630be Initialize a bunch of local variables in _rtld_relocate_nonplt_self().
Found by -Wuninitialized while compiling for newsmips.

Reviewed by lukem.
2005-06-07 09:20:19 +00:00
chs
7bbdd188e1 appease gcc -Wuninitialized on hp700. 2005-06-05 19:08:28 +00:00
lukem
3ed9ffcae1 Explicitly prefix ld(1) options in LDFLAGS with "-Wl," rather than
using the ${LDFLAGS:@F@-Wl,$F@} make substitution because that breaks
if LDFLAGS is already set.
2005-06-04 16:17:17 +00:00
lukem
a12d17494d appease gcc -Wuninitialized 2005-06-01 14:14:55 +00:00
skrll
9c5ec319c5 Support LD_BIND_NOW on sh3.. 2005-05-31 19:30:38 +00:00
skrll
13901ecdef Support LD_BIND_NOW for alpha. 2005-05-25 13:39:46 +00:00
skrll
504512d318 Copyright maintenance. 2005-05-21 06:43:39 +00:00
martin
0a1196da3e Add LD_BIND_NOW support for sparc and remove some relocation types that
are not supposed to happen in 32bit code.
From Nick Hudson.
2005-01-09 14:58:15 +00:00
martin
995d8a8e4b Add support for unaligned relocs on sparc, from PR 26858.
Should also fix PR 25901 and PR 18296.
2005-01-05 09:18:53 +00:00
martin
35130888e4 Add LD_BIND_NOW support for sparc64. 2005-01-05 09:16:03 +00:00
mycroft
ac7236712a ELF32_ST_TYPE -> ELF_ST_TYPE 2004-12-17 10:53:27 +00:00
skrll
38fb01be3a Apply fixes from Charles:
- Fix how _rtld_relocate_nonplt_self deals with REL32 relocations.

- Change the assert so that it is correct for binutils 2.14 and 2.15.

There are still problems with the libraries generated with binutils 2.15,
but at least ld.elf_so doesn't crash.
2004-12-15 10:26:29 +00:00
uwe
255de8f40e Preserve r2 in _rtld_bind_start - in r2 functions that return
aggregate types are passed the address of the memory area to store the
returned result to.

Fixes PR port-sh3/26949.
2004-09-14 21:34:01 +00:00
rearnsha
3fa803b523 Check the type of symbols; if it's a Thumb function, then set the Thumb
bit in the relocated value (JUMP_SLOT, ABS32 & GLOB_DAT).
2004-08-21 11:14:07 +00:00
rearnsha
c3e148044f Use BX if available. 2004-08-21 11:12:03 +00:00
skrll
701ae47cdf Fix the dynamic linker for hppa using ELF.
Lazy binding doesn't work 100% of the time so force immediate binding.
One possible reason is that the PLT stub blows away r20 which the
compiler might not take into account.
2004-05-17 13:16:02 +00:00
skrll
8431fb3c4c Wrap a couple of lines to <80 columns 2004-05-14 11:59:14 +00:00
skrll
c788a1a535 Whitespace. 2004-05-14 11:11:02 +00:00
mhitch
b6825b1e42 The -symbolic flag in gcc 2.95.3 is not passed to the linker, which is
required.  Restore the -Bsymbolic option in LDFLAGS on the vax.  Fixes
the problem with ld.elf_so mentioned on port-vax.
2004-04-28 02:04:56 +00:00
skrll
4d30716d36 Remove the millicode hack - its not needed anymore.
Get the entry point right.
2004-02-23 21:20:40 +00:00
skrll
b5330c98c7 Add the standard XXX about CPPFLAGS and -fpic here. 2004-02-21 16:02:06 +00:00
skrll
d93f13855a Move common LDFLAGS into Makefile from arch/*/Makefile.inc 2004-02-21 15:56:03 +00:00
skrll
151426159b Whitespace. 2004-02-20 20:58:24 +00:00
enami
074a9e8fee Salvage the instruction to save the pointer to ps_strings for later use
so that setproctitle() works again.  The problem reported by Naoki Fukaumi
on japanese mailing list.

Approved by: Ross Harvey
2004-02-18 23:04:49 +00:00
simonb
28817edd35 Restore handling of reloc entries that point to unaligned locations
that seems to have disappeared in rev 1.34.

Thanks to Jason Thorpe for suggesting where to look.
Fixes the simple test case in PR port-mips/23366.
2003-11-19 19:41:57 +00:00
matt
fd1caff7c2 Update to new reality. XXX _rtld_bind still needs to be written. 2003-10-06 16:08:35 +00:00
mycroft
65ed3bdcdd Make the effect of the hack clearer. 2003-09-24 10:25:26 +00:00
mycroft
7242c1114c One more tweak... 2003-09-24 10:18:52 +00:00
mycroft
7b234fd232 Make the comment a little more accurate. 2003-09-24 09:59:45 +00:00
mycroft
89ea37c60a Temporary workaround for some binutils/ld lossage. See the comment for more
information.
2003-09-24 09:55:35 +00:00
mrg
88bb1d9b3b include <string.h> or <stdlib.h> for all prototypes 2003-07-26 15:04:38 +00:00
skrll
5f573ab68d ANSIfy and de-__P(). 2003-07-24 10:12:25 +00:00
skrll
ddc9322f3b Support immediate binding on arm. 2003-07-21 15:34:35 +00:00
skrll
619dee76f6 Correct the in_plt parameter of a couple of _rtld_find_symdef calls.
The mips_reloc.c case is a no-op as _rtld_symlook_obj ignores in_plt for
MIPS.

OK'ed by Charles.
2003-07-17 13:56:32 +00:00
marcus
fae2567c9b Removed unused function. 2003-07-05 20:48:39 +00:00
tsutsui
0e65101f60 Add function prototype declarations. 2003-07-05 18:18:51 +00:00
marcus
a4878b4349 Bugfix: Don't pick addend both from reloc and contents at the same time. 2003-07-02 15:29:34 +00:00
marcus
6aeeb40d4a Updated to work with current rtld code. 2003-06-30 00:50:46 +00:00
petrov
458dbd70ac Fix alignment problem in debug output.
Happens only under RTLD_DEBUG_RELOC.
2003-05-23 20:13:50 +00:00
scw
0b8f02edad Handle unaligned relocations, and RELATIVE relocs with non-zero addends.
This gets binaries linked against libstdc++ working (FSVO "working").
2003-04-21 11:54:46 +00:00
scw
e6b13790fa SH5 needs __HAVE_FUNCTION_DESCRIPTORS defined in order for ld.elf_so
to resolve SHmedia function pointers correctly.
2003-03-26 14:46:32 +00:00
scw
d174ad2eab Add support for shared libraries/dynamically linked binaries on sh5.
With the latest SuperH toolchain, NetBSD/evbsh5 can now
run with a fully dynamic userland (modulo a few remaining
gremlins affecting a couple of binaries).
2003-03-25 13:11:53 +00:00
mycroft
7cbba1750d Shorten rtld_start() by 2 instructions or 8 bytes, and make it not use GOT
entries.
2003-03-02 22:56:14 +00:00
mycroft
d2fd5f837d Shorten rtld_start() slightly -- there's a base-relative _DYNAMIC pointer at
the beginning of the GOT, so we don't need an extra one here.  Also, remove a
bogus comment -- we do in fact have to do fixups, because there are pointers in
ld.elf_so's data segment that need to be relocated.
2003-03-02 22:03:40 +00:00
mycroft
33131cb294 Update copyright. 2003-03-01 15:14:59 +00:00
mycroft
9939b38056 Eliminate GOT usage in rtld_start() on this platform, too. 2003-02-28 22:37:35 +00:00
mycroft
9cb7d16b11 Similar to other rela platforms, do not use any GOT entries (other than the
first entry, which is a special case) in rtld_start, because they could be
all 0s.  Instead we use the difference between the real _DYNAMIC address
(which we can determine on 68k with a "lea (%pc,_DYNAMIC),..." and the
base-relative one (at the beginning of the GOT) to figure out the relocation
offset.

Not needed for binutils-current, but I might as well fix it now.
2003-02-28 07:06:16 +00:00
mycroft
eea1001a73 Adjust for the fact that the GOT is all 0s in new binutils -- do the trick of
disassembling a call to _DYNAMIC to determine its real address, and using the
first entry of the GOT as its base-relative address.

It's evil, but it works.
2003-02-27 05:39:42 +00:00
mycroft
c42fd7b479 Revert previous change. 2003-02-21 01:12:56 +00:00
matt
0655a07988 Fix bug where only 2/3 of the PLT was being synched with the icache.
PLT entries are 12 bytes.  Add a #define for that and replace the
explicit values with the PLT_ENTRY_SIZE.  This bug can cause random
SIGILL signals to happen.
2003-01-11 01:33: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
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
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
mycroft
ad8ccd6290 Minor cleanup. 2002-10-05 11:59:03 +00:00