On 06/26/2013 06:42 AM, Anton Blanchard wrote:
> Hi Denys,
> 
>> Just to be sure that we only fall back if PTRACE_GETREGS op is
>> unknown, not in other cases (such as tracee killed under us) lets do
>> this:
>>
>>      if (get_regs_error && errno == ????)
>>
>> Which errno is generated in this case?
> 
> Makes sense. We get -EIO back if PTRACE_GETREGS is not available.
> Tested on SLES10 (2.6.16).


Applied both patches, thanks.

Can you take a look at the silly dance we do with ppc_result variable?

get_syscall_result():

        ppc_result = ppc_regs.gpr[3];
        if (ppc_regs.ccr & SO_MASK)
                ppc_result = -ppc_result;


later, get_error():

        if (check_errno && is_negated_errno(ppc_result)) {
                tcp->u_rval = -1;
                u_error = -ppc_result;
        }
        else {
                tcp->u_rval = ppc_result;
        }

>From this, looks like PPC does NOT use "if it's negative
and below max errno" logic - it has a dedicated error bit,
SO_MASK. But our code shoehorn it into that logic.

Shouldn't get_syscall_result() code bit just nixed,
and get_error() changed to this? -

        if (ppc_regs.ccr & SO_MASK) {
                tcp->u_rval = -1;
                u_error = ppc_regs.gpr[3];
        }
        else {
                tcp->u_rval = ppc_regs.gpr[3];
        }



Next.

get_regs():

       get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, (long) &ppc_regs);
       if (get_regs_error && errno == EIO)
               get_regs_error = powerpc_getregs_old(pid);

The fallback will be taken _every time_ on old kernels.
Meaning, we will try PTRACE_GETREGS pointlessly twice per syscall.
We should remember the first failure instead.


Care to fix and test these problems?


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to