Re: [PATCH] PowerPC 32 with Secure PLT

Michael Eager
2012-01-25T01:12:55Z

On 01/24/2012 04:37 PM, Ryan Arnold wrote:
> On Tue, 2012-01-24 at 15:49 -0800, Michael Eager wrote:
>> On 01/17/2012 07:04 PM, Michael Eager wrote:
>>> This patch adds support for stepping into/over the PLT stubs generated
>>> for secure PLT on PowerPC 32. It requires a recent binutils which
>>> generates symbols for the stubs.
>>>
>>> This has been tested on PowerPC 32-bit systems with and without PAX.
>>>
>>> 2012-01-17 Michael Eager<eager@eagercon.com>
>>>
>>> * configure.tgt (powerpc-*-linux*): Add glibc-tdep.o.
>>> * ppc-linux-tdep.c: Include glibc-tdep.h.
>>> (powerpc32_plt_stub, powerpc32_plt_stub_so): Add PLT stub templates.
>>> (powerpc_linux_in_plt_stub): New function.
>>> (powerpc_linux_in_dynsym_resolve_code): New function.
>>> (ppc_skip_trampoline_code): New function.
>>> (ppc_linux_init_abi): Use PPC specific functions rather than generic.
>>> Use glibc_skip_solib_resolver.
>>
>> Will check in in a couple days, unless I hear additional comments.
>
> I'm not familiar with the GDB code at all so I couldn't tell from the
> patch whether it addresses my concern.
>
> Prior to resolving the PLT entries will this trap in the loader's
> resolver code or does it 'continue' until the PLT entry is populated and
> the target symbol address has been branched to?

It works in two phases: first steps over the stub to where ever it points
(which may be the target function), then it skips over the resolver code
if it still hasn't reached the function.

> It's fine with me if it skips the PLT stubs and the resolver trampoline
> code but being able to step into the resolver code is still useful to me
> as a GLIBC developer.

Most users don't want to see gdb stepping through symbol resolution
on the way to their library function.

I didn't run tests with a glibc which had debug symbols, but I think
that it will skip over the resolver if you say step. If you want to
stop at _dl_resolve, you will need to put a breakpoint at that location.

Naturally, if you do stepi, you see each instruction executed.