Hi Yann, looks good to me and nobody complained, so I pushed both patches.
best regards Waldemar Yann Sionneau wrote, > For instance with buildroot config sipeed_maix_bit_defconfig the > pre-processor generates > > if (1) > r = ({ long _sys_result; { register long int _a7 __asm__ ("a7"); register > long _a3 __asm__ ("a3"); long _a3tmp; register long _a2 __asm__ ("a2"); long > _a2tmp; register long _a1 __asm__ ("a1"); long _a1tmp; long _a0tmp; register > long _a0 __asm__ ("a0"); _a0tmp = (long) (clock_id); _a0 = _a0tmp; _a1tmp = > (long) (flags); _a1 = _a1tmp; _a2tmp = (long) (req); _a2 = _a2tmp; _a3tmp = > (long) (rem); _a3 = _a3tmp; _a7 = (115); __asm__ volatile ( "scall\n\t" : > "=r" (_a0) : "r"(_a7) , "r" (_a0), "r" (_a1), "r" (_a2), "r" (_a3) : > "memory"); _sys_result = _a0; } _sys_result; }); > else > { > int oldstate = LIBC_CANCEL_ASYNC (); > > r = ({ long _sys_result; { register long int _a7 __asm__ ("a7"); > register long _a3 __asm__ ("a3"); long _a3tmp; register long _a2 __asm__ > ("a2"); long _a2tmp; register long _a1 __asm__ ("a1"); long _a1tmp; long > _a0tmp; register long _a0 __asm__ ("a0"); _a0tmp = (long) (clock_id); _a0 = > _a0tmp; _a1tmp = (long) (flags); _a1 = _a1tmp; _a2tmp = (long) (req); _a2 = > _a2tmp; _a3tmp = (long) (rem); _a3 = _a3tmp; _a7 = (115); __asm__ volatile ( > "scall\n\t" : "=r" (_a0) : "r"(_a7) , "r" (_a0), "r" (_a1), "r" (_a2), "r" > (_a3) : "memory"); _sys_result = _a0; } _sys_result; }) > ; > > LIBC_CANCEL_RESET (oldstate); > } > > And also the compiler issues these warnings: > > librt/clock_nanosleep.c: In function 'clock_nanosleep': > librt/clock_nanosleep.c:43:22: warning: implicit declaration of function > 'LIBC_CANCEL_ASYNC'; did you mean 'LIBC_CANCEL_HANDLED'? > [-Wimplicit-function-declaration] > 43 | int oldstate = LIBC_CANCEL_ASYNC (); > | ^~~~~~~~~~~~~~~~~ > | LIBC_CANCEL_HANDLED > librt/clock_nanosleep.c:48:7: warning: implicit declaration of function > 'LIBC_CANCEL_RESET'; did you mean 'LIBC_CANCEL_HANDLED'? > [-Wimplicit-function-declaration] > 48 | LIBC_CANCEL_RESET (oldstate); > | ^~~~~~~~~~~~~~~~~ > | LIBC_CANCEL_HANDLED > > So if the compiler is a bit picky and does not optimize the if (1) {} else {} > it can fail to link with undefined symbols. > This patch fixes this issue: no more warning. > > Btw, that's the solution that is already used in the following cancellation > point files: > * libc/sysdeps/linux/common/__syscall_fcntl.c > * libc/sysdeps/linux/common/__syscall_fcntl64.c > * libc/sysdeps/linux/common/ioctl.c > * libc/sysdeps/linux/common/openat.c > * libc/sysdeps/linux/common/open.c > > Signed-off-by: Yann Sionneau <y...@sionneau.net> > --- > librt/clock_nanosleep.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/librt/clock_nanosleep.c b/librt/clock_nanosleep.c > index 4cf1e06b4..85db72fb3 100644 > --- a/librt/clock_nanosleep.c > +++ b/librt/clock_nanosleep.c > @@ -40,12 +40,14 @@ clock_nanosleep (clockid_t clock_id, int flags, const > struct timespec *req, > r = INTERNAL_SYSCALL (clock_nanosleep, err, 4, clock_id, flags, req, > rem); > else > { > +#ifdef __NEW_THREADS > int oldstate = LIBC_CANCEL_ASYNC (); > > r = INTERNAL_SYSCALL (clock_nanosleep, err, 4, clock_id, flags, req, > rem); > > LIBC_CANCEL_RESET (oldstate); > +#endif > } > > return (INTERNAL_SYSCALL_ERROR_P (r, err) > -- > 2.34.1 > > _______________________________________________ > devel mailing list -- devel@uclibc-ng.org > To unsubscribe send an email to devel-le...@uclibc-ng.org > _______________________________________________ devel mailing list -- devel@uclibc-ng.org To unsubscribe send an email to devel-le...@uclibc-ng.org