PATCH: Update x86-64/sysdep.h
Andreas Jaeger
aj@suse.com
Wed May 23 08:58:00 GMT 2012
On 05/22/2012 10:11 AM, Andreas Jaeger wrote:
> On Tuesday, May 22, 2012 00:12:09 H.J. Lu wrote:
>> On Mon, May 21, 2012 at 2:22 PM, Roland McGrath<roland@hack.frob.com>
> wrote:
>>>> Here is what I implemented. Since I need to refine
>>>> SYSCALL_ERROR_HANDLER anyway, I use it to define my own error
>>>> handler. Does it look OK?
>>>>
>>>> I noticed that SYSCALL_ERROR_HANDLER has
>>>>
>>>> xorl %edx, %edx; \
>>>> subq %rax, %rdx; \
>>>> movl %edx, (%rcx); \
>>>> orq $-1, %rax; \
>>>> jmp L(pseudo_end);
>>>>
>>>> Why not simply "neg %rax"?
>>>
>>> No idea. It appears it was done that way in the first version of this
>>> file, added by AJ.
>>>
>>>> Also why not just "ret" instead of jmp?
>
> I don't remember why I did this but see the same code in i386/sysdep.h. If
> we change the x86-64 code, I suggest to revisit the i386 one as well.
>
> This part looks fine to me.
>
>>>
>>> Likewise. This one seems downright wrong, since theoretically the
>>> code at the label might not be just "ret". That code (i.e. whatever
>>> comes after the PSEUDO macro invocation) was always meant to be only
>>> the code for the success case.
>
> It's the same code as in i386/sysdep.h - let's change both if we want that.
>
> But I'm not sure whether this change is really correct, have a look at
> sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S
>
> It contains:
> L(pseudo_end):
> add $0x8, %rsp
> cfi_adjust_cfa_offset(-8)
> ret
>
> A simple return in the error case would be wrong.
>
> Since both i386 and x86-64 do this, I would not make the change Roland
> proposes unless we have reviewed all code that does cleanup after the
> pseudo_end label.
>
> So, please do not put this in for now.
I reviewed all usage of pseudo end in sysdeps, only the two
sched_getcpu.S versions were wrong.
HJ, please prepare a patch for both i386 and x86-64 to use ret instead
of jmp and then send it again for review.
Thanks,
Andreas
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
More information about the Libc-alpha
mailing list