This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>>>>> On Thu, 30 Oct 2003 08:03:02 +0100, Jakub Jelinek <jakub@redhat.com> said:
>> - The "assert (ph->p_vaddr == GL(dl_sysinfo_dso)" check in
>> elf/rtld.c is too strict. On ia64, we have two LOAD segments, so
>> the check can't possibly succeed:
>> $ readelf -l arch/ia64/kernel/gate.so |grep LOAD LOAD
>> 0x0000000000000000 0xa000000000010000 0xa000000000010000 LOAD
>> 0x0000000000000000 0xa000000000020000 0xa000000000020000
Jakub> Can you readelf -Wl arch/ia64/kernel/gate.so |grep LOAD (or
Jakub> grep -A1 LOAD instead), or better yet readelf -Wa
Jakub> arch/ia64/kernel/gate.so ? I'd like to understand why you
Jakub> need the second LOAD segment, what stuff has it in etc.
How about I try to explain? The reason there are two segments is that
the privilege-promote page used to enter the kernel is executable only
at the user-level. To export the DSO headers etc., we thus create a
second, read-only mapping. Here is the expanded readelf output:
$ readelf -Wl arch/ia64/kernel/gate.so |grep LOAD
LOAD 0x000000 0xa000000000010000 0xa000000000010000 0x000628 0x000628 R 0x10000
LOAD 0x000000 0xa000000000020000 0xa000000000020000 0x0009e0 0x0009e0 E 0x10000
>> - The changes to linuxthreads/{manager,pthread}.c are almost
>> certainly wrong, but I'm not sure I understand how you want
>> things set up to ensure that single-threaded apps use the new
>> stub but linuxthread apps use the old one.
Jakub> IMHO NEED_DL_SYSINFO should be defined in both NPTL and
Jakub> Linuxthread ia64/dl-sysdep.h, while USE_DL_SYSINFO only in
Jakub> NPTL. And sysdep.h should use sysinfo only if USE_DL_SYSINFO is
Jakub> defined. Then linuxthreads will work just fine (use break
Jakub> always, who cares) and NPTL will use VDSO.
But wouldn't this imply that non-threaded apps won't use the new
stubs? I'm probably missing something here.
>> - The libc-start.c change is also "wrong" but since
>> DL_SYSDEP_OSCHECK() may do syscalls, it is necessary to do
>> __pthread_initialize_minimal() first, as otherwise the minimal
>> thread descriptor isn't setup.
Jakub> This is handled on IA-32 by providing DL_SYSINFO_DEFAULT (and
Jakub> defining USE_DL_SYSINFO). This means the few syscalls in
Jakub> DL_SYSDEP_OSCHECK will use the break insn and the rest will
Jakub> use VDSO if available.
OK, that behavior should be fine (especially if the DL_SYSDEP_OSCHECK
can go away completely with the right libc config option).
--david
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |