Re: [PATCH v2 4/4] tools/nolibc: sys.h: apply __syscall() helper

From: Thomas Weißschuh
Date: Tue Jun 06 2023 - 14:37:05 EST


Hi Zhangjin,

On 2023-06-06 16:17:38+0800, Zhangjin Wu wrote:
> Use __syscall() helper to shrink 252 lines of code.
>
> $ git show HEAD^:tools/include/nolibc/sys.h | wc -l
> 1425
> $ git show HEAD:tools/include/nolibc/sys.h | wc -l
> 1173
> $ echo "1425-1173" | bc -l
> 252
>
> Signed-off-by: Zhangjin Wu <falcon@xxxxxxxxxxx>
> ---
> tools/include/nolibc/sys.h | 336 +++++--------------------------------
> 1 file changed, 42 insertions(+), 294 deletions(-)
>
> diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h
> index f6e3168b3e50..0cfc5157845a 100644
> --- a/tools/include/nolibc/sys.h
> +++ b/tools/include/nolibc/sys.h
> @@ -108,13 +108,7 @@ int sys_chdir(const char *path)
> static __attribute__((unused))
> int chdir(const char *path)
> {
> - int ret = sys_chdir(path);
> -
> - if (ret < 0) {
> - SET_ERRNO(-ret);
> - ret = -1;
> - }
> - return ret;
> + return __syscall(chdir, path);

To be honest I'm still not a big fan of the __syscall macro.
It's a bit too magic for too little gain.

The commit message argues that the patches make the code shorter.

However doing

__sysret(sys_chdir(path));

instead of

__syscall(chdir, path);

is only three characters longer and the same amout of lines.

Otherwise we would have syscall() _syscall() and __syscall() each doing
different things.

And __syscall does not behave like a regular function.

The rest of the patchset looks great.

Maybe Willy can break the tie?


Thomas


Note: If we figure out a way to build syscall() without macros I would
like that also :-)