Hi Michael,
I see there is a problem for debugging ld.so even on native GNU/Linux when
I get some intentional way into the ld.so code. Existing problem:
(gdb) frame
#0 _dl_fixup (l=0x7ffff7ffe0e8, reloc_arg=<value optimized out>) at ../elf/dl-runtime.c:90
90 if (__builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0)
(gdb) next
94 if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL)
(gdb) next
99 version = &l->l_versions[ndx];
(gdb) next
100 if (version->hash == 0)
(gdb) step
pause () at ../sysdeps/unix/syscall-template.S:82
82 T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
("next" works but "step" skips whole ld.so resolver)
Wouldn't the patch below also solve your "PIE kernel" problem?
No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.
But I am not much sure about some possible regressions with this code.