* Re: [PATCH 08/15] nios2: Use Linux kABI for syscall return
[not found] ` <20200210192038.23588-8-adhemerval.zanella@linaro.org>
@ 2020-02-19 21:40 ` Vineet Gupta
2020-02-20 13:14 ` Adhemerval Zanella
0 siblings, 1 reply; 5+ messages in thread
From: Vineet Gupta @ 2020-02-19 21:40 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha; +Cc: arcml
On 2/10/20 11:20 AM, Adhemerval Zanella wrote:
> It changes the nios INTERNAL_SYSCALL_RAW macro to return a negative
> value instead of 'r2' register value on 'err' macro argument.
>
> The macro INTERNAL_SYSCALL_DECL is no longer required, and the
> INTERNAL_SYSCALL_ERROR_P follows the other Linux kABIS.
>
> Checked with a build against nios2-linux-gnu.
> ---
> sysdeps/unix/sysv/linux/nios2/sysdep.h | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h
> index b02730bd23..eab888df32 100644
> --- a/sysdeps/unix/sysv/linux/nios2/sysdep.h
> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep.h
> @@ -157,13 +157,14 @@
> (int) result_var; })
>
> #undef INTERNAL_SYSCALL_DECL
> -#define INTERNAL_SYSCALL_DECL(err) unsigned int err __attribute__((unused))
> +#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
>
> #undef INTERNAL_SYSCALL_ERROR_P
> -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (unsigned int) (err))
> +#define INTERNAL_SYSCALL_ERROR_P(val, err) \
> + ((unsigned long) (val) >= (unsigned long) -4095)
>
> #undef INTERNAL_SYSCALL_ERRNO
> -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val)
> +#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
>
> #undef INTERNAL_SYSCALL_RAW
> #define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \
> @@ -180,8 +181,7 @@
> : "+r" (_r2), "=r" (_err) \
> : ASM_ARGS_##nr \
> : __SYSCALL_CLOBBERS); \
> - _sys_result = _r2; \
> - err = _err; \
> + _sys_result = _err != 0 ? -_r2 : -_r2; \
Is there a typo here ? both cases seem to be -ve
> } \
> (int) _sys_result; })
>
>
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 08/15] nios2: Use Linux kABI for syscall return
2020-02-19 21:40 ` [PATCH 08/15] nios2: Use Linux kABI for syscall return Vineet Gupta
@ 2020-02-20 13:14 ` Adhemerval Zanella
2020-02-20 20:39 ` Vineet Gupta
0 siblings, 1 reply; 5+ messages in thread
From: Adhemerval Zanella @ 2020-02-20 13:14 UTC (permalink / raw)
To: Vineet Gupta, libc-alpha; +Cc: arcml
On 19/02/2020 18:40, Vineet Gupta wrote:
> On 2/10/20 11:20 AM, Adhemerval Zanella wrote:
>> It changes the nios INTERNAL_SYSCALL_RAW macro to return a negative
>> value instead of 'r2' register value on 'err' macro argument.
>>
>> The macro INTERNAL_SYSCALL_DECL is no longer required, and the
>> INTERNAL_SYSCALL_ERROR_P follows the other Linux kABIS.
>>
>> Checked with a build against nios2-linux-gnu.
>> ---
>> sysdeps/unix/sysv/linux/nios2/sysdep.h | 10 +++++-----
>> 1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h
>> index b02730bd23..eab888df32 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/sysdep.h
>> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep.h
>> @@ -157,13 +157,14 @@
>> (int) result_var; })
>>
>> #undef INTERNAL_SYSCALL_DECL
>> -#define INTERNAL_SYSCALL_DECL(err) unsigned int err __attribute__((unused))
>> +#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
>>
>> #undef INTERNAL_SYSCALL_ERROR_P
>> -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (unsigned int) (err))
>> +#define INTERNAL_SYSCALL_ERROR_P(val, err) \
>> + ((unsigned long) (val) >= (unsigned long) -4095)
>>
>> #undef INTERNAL_SYSCALL_ERRNO
>> -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val)
>> +#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
>>
>> #undef INTERNAL_SYSCALL_RAW
>> #define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \
>> @@ -180,8 +181,7 @@
>> : "+r" (_r2), "=r" (_err) \
>> : ASM_ARGS_##nr \
>> : __SYSCALL_CLOBBERS); \
>> - _sys_result = _r2; \
>> - err = _err; \
>> + _sys_result = _err != 0 ? -_r2 : -_r2; \
>
> Is there a typo here ? both cases seem to be -ve
It is, thanks for catching it. I have pushed b790c8c2ed to fix and
double checked nios2 syscall handling (arch/nios2/kernel/entry.S:205)
to certify that the modification does follow nios2 kABI.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 08/15] nios2: Use Linux kABI for syscall return
2020-02-20 13:14 ` Adhemerval Zanella
@ 2020-02-20 20:39 ` Vineet Gupta
2020-02-20 21:04 ` Vineet Gupta
0 siblings, 1 reply; 5+ messages in thread
From: Vineet Gupta @ 2020-02-20 20:39 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha; +Cc: arcml
Hi Adhemerval,
On 2/20/20 5:14 AM, Adhemerval Zanella wrote:
>
>
> On 19/02/2020 18:40, Vineet Gupta wrote:
>> On 2/10/20 11:20 AM, Adhemerval Zanella wrote:
>>> It changes the nios INTERNAL_SYSCALL_RAW macro to return a negative
>>> value instead of 'r2' register value on 'err' macro argument.
>>>
>>> The macro INTERNAL_SYSCALL_DECL is no longer required, and the
>>> INTERNAL_SYSCALL_ERROR_P follows the other Linux kABIS.
>>>
>>> Checked with a build against nios2-linux-gnu.
>>> ---
>>> sysdeps/unix/sysv/linux/nios2/sysdep.h | 10 +++++-----
>>> 1 file changed, 5 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep.h b/sysdeps/unix/sysv/linux/nios2/sysdep.h
>>> index b02730bd23..eab888df32 100644
>>> --- a/sysdeps/unix/sysv/linux/nios2/sysdep.h
>>> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep.h
>>> @@ -157,13 +157,14 @@
>>> (int) result_var; })
>>>
>>> #undef INTERNAL_SYSCALL_DECL
>>> -#define INTERNAL_SYSCALL_DECL(err) unsigned int err __attribute__((unused))
>>> +#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
>>>
>>> #undef INTERNAL_SYSCALL_ERROR_P
>>> -#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (unsigned int) (err))
>>> +#define INTERNAL_SYSCALL_ERROR_P(val, err) \
>>> + ((unsigned long) (val) >= (unsigned long) -4095)
>>>
>>> #undef INTERNAL_SYSCALL_ERRNO
>>> -#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val)
>>> +#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
>>>
>>> #undef INTERNAL_SYSCALL_RAW
>>> #define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \
>>> @@ -180,8 +181,7 @@
>>> : "+r" (_r2), "=r" (_err) \
>>> : ASM_ARGS_##nr \
>>> : __SYSCALL_CLOBBERS); \
>>> - _sys_result = _r2; \
>>> - err = _err; \
>>> + _sys_result = _err != 0 ? -_r2 : -_r2; \
>>
>> Is there a typo here ? both cases seem to be -ve
>
> It is, thanks for catching it. I have pushed b790c8c2ed to fix and
> double checked nios2 syscall handling (arch/nios2/kernel/entry.S:205)
> to certify that the modification does follow nios2 kABI.
Actually the reason I spotted it was trying to replicate similar changes in ARC
port and it seems to be hosed now. It is quite likely a snaufu at my end, but I
don't quite understand the new logic.
Consider brk syscall which does
__curbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr);
Through a maze of defines this ends up calling INTERNAL_SYSCALL_RAW which seems be
unconditionally converting !0 value (success) into -ve and returning it. So won't
it convert a legit brk address return into a -ve and save in __curbrk.
Am I not following this correctly ?
Thx,
-Vineet
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 08/15] nios2: Use Linux kABI for syscall return
2020-02-20 20:39 ` Vineet Gupta
@ 2020-02-20 21:04 ` Vineet Gupta
2020-02-27 17:49 ` Adhemerval Zanella
0 siblings, 1 reply; 5+ messages in thread
From: Vineet Gupta @ 2020-02-20 21:04 UTC (permalink / raw)
To: Vineet Gupta, Adhemerval Zanella, libc-alpha; +Cc: arcml
On 2/20/20 12:39 PM, Vineet Gupta wrote:
> Am I not following this correctly ?
Oh never mind, they use 2 seperate regs to convey syscall result and error, so
your code is right.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 08/15] nios2: Use Linux kABI for syscall return
2020-02-20 21:04 ` Vineet Gupta
@ 2020-02-27 17:49 ` Adhemerval Zanella
0 siblings, 0 replies; 5+ messages in thread
From: Adhemerval Zanella @ 2020-02-27 17:49 UTC (permalink / raw)
To: Vineet Gupta, libc-alpha; +Cc: arcml
On 20/02/2020 18:04, Vineet Gupta wrote:
>
> Through a maze of defines this ends up calling INTERNAL_SYSCALL_RAW which seems be
> unconditionally converting !0 value (success) into -ve and returning it. So won't
> it convert a legit brk address return into a -ve and save in __curbrk.
> On 2/20/20 12:39 PM, Vineet Gupta wrote:
>> Am I not following this correctly ?
>
> Oh never mind, they use 2 seperate regs to convey syscall result and error, so
> your code is right.
>
One of my goals is to disentangle the {INTERNAL,INLINE}_SYSCALL macros
to consolidate their definitions and move the arch-specific bits to
inline functions instead of macros. Another one is to remove the
requirement to define similar assembly macros to be used by the
auto-generated one.
The idea is an architecture will just need to define a set of
inline_syscall{0-6} functions.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-02-27 17:49 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20200210192038.23588-1-adhemerval.zanella@linaro.org>
[not found] ` <20200210192038.23588-8-adhemerval.zanella@linaro.org>
2020-02-19 21:40 ` [PATCH 08/15] nios2: Use Linux kABI for syscall return Vineet Gupta
2020-02-20 13:14 ` Adhemerval Zanella
2020-02-20 20:39 ` Vineet Gupta
2020-02-20 21:04 ` Vineet Gupta
2020-02-27 17:49 ` Adhemerval Zanella
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.