Le 12/06/2023 à 09:17, Yann Sionneau a écrit :
Le 08/06/2023 à 10:39, Yann a écrit :

June 8, 2023 2:05 AM, "Damien Le Moal" <damien.lem...@wdc.com> wrote:
Note that to test patches/regressions for risc-v NOMMU builds, you can simply
use buildroot and run:

make sipeed_maix_bit_defconfig
make

To check that it builds.
Hello Damien,

With buildroot master branch, I can build sipeed_maix_bit_defconfig config with the reverted patch with no build error.

How can I reproduce the issue?

At most I can see those warnings but it still builds fine:

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

Also, I tried to build with and without your patch and then I compared the 2 resulting librt/clock_nanosleep.os object files: they show up exactly the same.

I am guessing that now it works because of a newer compiler that does a better job at optimizing because if I build clock_nanosleep.os with -save-temps I can see the output of pre-processor being:

  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);
    }

So basically if (1) { } else { call to undefined function }.

I guess the `else` part is being optimized out and it silents the issue.

Regards,

OK I'll just send a fix for that that applies on top of a revert of  08d46f1ce21e4ec51b2b1626beeaea6cbe7fdc6b

Regards,

--

Yann

_______________________________________________
devel mailing list -- devel@uclibc-ng.org
To unsubscribe send an email to devel-le...@uclibc-ng.org

Reply via email to