Age | Commit message (Collapse) | Author |
|
Here's an updated version of the patch I posted about a month ago. It
leaves -nostdinc alone, and uses -print-file-name=include instead of
-print-search-dirs to figure out where GCC's internal headers are.
Please let me know whether there are any portions of this patch you'd
like me to break into smaller pieces, to rework, or to give up trying
to get into uClibc :-) Thanks,
|
|
Andrew de Quincey, who has been most helpful getting this sorted
out, thanks. Thanks also to Peter Mazinger who did alot of testing.
Removed all traces of dl_parse_copy_information() since it is no longer used.
|
|
- Replace all open coded dynamic handling with a function. Reduces size.
- Fold special MIPS dynamic code into the dynamic_info item.
- Add RELRO support.
- Support linking with "-z now".
- prepare for DT_RELACOUNT/DT_RELCOUNT optimization.
- Add -z now to ld.so linking, this is what ld.so does anyway so
let the linker know that.
|
|
without LDSO_CACHE_SUPPORT turned on, LDSO_CONF and LDSO_CACHE are
not defined anywhere, but still used by ldconfig.c This patch allows
ldconfig to build again, although there may be a cleaner way to fix
this????
Applied with minor modification.
|
|
Remove definition of _dl_parse_copy_information() for powerpc.
Remaining archs can do the same.
Make debugging output of "relocation processing: xxx" a bit more sane.
|
|
Hello!
Here is the modified unsecvars patch that applies to cvs.
|
|
dl-cache.h and make use of it. Also disables the lib-path-redundancy check
for the case the cache is not used. Makes use of _PRELOAD_FILE_SUPPORT.
From Peter Mazinger.
|
|
Mazinger implements the changes suggested by me on the uclibc list.
On Tuesday 28 September 2004 02:24 pm, Erik Andersen wrote:
> What I think should be done is
>
> *) Someone that cares about USE_CACHE should fix that option
> up to be sure it works, and give it a proper config entry
> in extra/Configs/Config.in, and rename it to something
> more appropriate such as LDSO_CACHE_SUPPORT.
>
> *) When LDSO_CACHE_SUPPORT=n, UCLIBC_RUNTIME_PREFIX /usr/X11R6/lib
> should be included in the default library search path in
> dl-elf.c, ldd, and ldconfig.
>
> *) When LDSO_CACHE_SUPPORT=y, UCLIBC_RUNTIME_PREFIX /usr/X11R6/lib
> should be excluded from the default library search path in
> dl-elf.c, ldd, and ldconfig, and those wishing to include
> X11 stuff should add that into /etc/ld.so.conf and re-run
> ldconfig.
>
> *) At present, LDSO_CONF and LDSO_CACHE use the same names
> and same structure as glibc. This precludes
> LDSO_CACHE_SUPPORT being uses in any sane fashion on a
> dial glibc and uClibc system. Just as it was necessary
> for use to use a different name for 'libuClibc' rather
> than 'libc', and 'ld-uClibc.so.0' rather than
> 'ld-linux.so.2' it seems that these configuration files
> really ought to be given different names.
>
|
|
This needs testing with apps that have complex dependencies.
|
|
|
|
|
|
Remove unused function parameter in ldso.
Remove echo option '-e' since it is not supported on Solaris.
|
|
|
|
|
|
|
|
is needed if ldso should use libcs malloc whenever possible.
Fix RTLD_LAZY propagation to RTLD_NOW relocation when requested by
libdl.
|
|
-Erik
|
|
Other arches may also benefit from this iff it can do
unaligned stores.
|
|
|
|
_dl_strchr,_dl_strrchr,_dl_strstr,_dl_memcmp:
Optimize for archs which can do pre increment/decrement and load/store
in one instruction.
|
|
handle "" strings and optimze it.
_dl_simple_ltoa,_dl_simple_ltoahex:
Optimize for archs which can do pre increment/decrement and load/store
in one instruction.
|
|
rather than _dl_malloc, fprintf rather than _dl_printf, etc.
-Erik
|
|
|
|
tree. Bad boy, No doughnut.
-Erik
|
|
aligned pointer that may be aligned up to page_size. Also add _dl_free,
|
|
|
|
dl-string.h references do_rem, but do_rem is a #define in <arch>/dl-sysdep.h
which is not included by dl-sysdep.h. This causes a problem in libdl:
In file included from ../../ldso/include/ldso.h:27, from libdl.c:33:
../../ldso/include/dl-string.h: In function `_dl_simple_ltoa':
../../ldso/include/dl-string.h:216: warning: implicit declaration of
function `do_rem'
Include dl-sysdep.h in dl-string.h before using do_rem.
|
|
Hello,
I managed to get ldso (and thus shared linking to uClibc) to work on
sparc (actually sparc64 kernel with 32-bit userspace), at least on
simple "hello world" program (more complex ones not tested).
Some notes on attached patch (against 0.9.26, would require some work
to apply on current CVS - but I tested 0.9.26, not CVS):
- ELF magic cannot be examined by _dl_strncmp so early, probably because of
string constant, like on ppc/mips/sh
(note that early SEND_STDERR still crashes when trying to do _dl_strlen
- I suppose that string constants require relocation; but adding
load_addr didn't help, just ELF header was displayed instead of crash)
- mmap() is syscall6 like on ppc/mips/sh, not old i386 mmap()
- for generic sparc (i.e. not sparcv8/sparcv9) gcc produces .udiv/.urem
calls for unsigned integer / and % operators - so these operations
must be avoided. I copied do_rem definition from arm header.
But / and % are used also in _dl_simple_ltoa() and
_dl_simple_ltoahex(); in ltoahex gcc optimizes it to shifts (but
I think it's safer to use shifts explicitly, not rely on
optimization...).
I changed % in ltoa to do_rem, but as there was no do_div definition,
I changed all "%d" specifiers to "%x" to avoid crashes (this changes
wouldn't be needed if _dl_simple_ltoa() were fixed to not use
division on sparc).
- "#define SOLARIS_COMPATIBLE" in ld_sysdep.h broke ldso on Linux
because of redefining _dl_linux_resolve only in some places (it was
still referenced in INIT_GOT before redefinition). So
_dl_linux_resolve redefinition should be moved before INIT_GOT
definition or removed.
- sparc64 kernel requires mmap() addresses to be aligned to 8192, not
4096, otherwise mmap() call failed
- reloc_entry must be shifted by 10, not 12 (I found similar operation
in glibc sources)
Aside of sparc-specific fixes:
- I moved some _dl_dprintf()s inside if(_dl_debug_*) conditions (to avoid
debugging messages when LD_DEBUG is not defined)
- it seems that there was possible off-by-one in ltoa and ltoahex?
they are called with char[22] as 1st argument, and then '\0' is stored
in local[22] (_before_ p decrementation)... or am I missing something?
If not, fix is included in patch.
|
|
by extracting the value from the ELF header.
|
|
with __NR_mmap is not available (i.e. only __NR_mmap2)
|
|
|
|
|
|
|
|
|
|
Hi it is me again.
This is the latest ldso patch. the NEW weak symbol handling works now
with a little special handling in _dl_find_hash(). You get to chose
if you want the new or old handling :)
There was 2 missing _dl_check_if_named_library_is_loaded() calls in _dlopen().
I then disabled the _dl_check_if_named_library_is_loaded() in dl-elf.c since
it is rendundant.
Question, why does some _dl_linux_resolver(), like i386, have 2 calls
to _dl_find_hash()? I think that is wrong, isn't it?
I really hope you can check this out soon ...
|
|
|
|
|
|
till I properly finish the next step in my evil plan.
|
|
to make it easier to treat it specially while not bothering the
rest of the code with the same constraints.
|
|
|
|
|
|
_dl_parse_lazy_relocation_information() and _dl_parse_copy_information()
so they are all consistant, allowing for future consolidation.
Trim some trailing whitespace as well.
|
|
|
|
do both operations in a single pass.
|
|
|
|
|
|
which should simplify enabling arbitrary architectures.
-Erik
|
|
|
|
|
|
checking for duplicates and returning an alias if an existing lib
is already loaded is still correct for the dlopen case.
|