syscall_exec16: Rework close_on_exec a bit to fix SDCC crap code generation
authorAlan Cox <alan@linux.intel.com>
Wed, 22 Aug 2018 10:24:07 +0000 (11:24 +0100)
committerAlan Cox <alan@linux.intel.com>
Wed, 22 Aug 2018 10:24:07 +0000 (11:24 +0100)
Kernel/syscall_exec16.c

index 58fc0e0..876258e 100644 (file)
@@ -5,10 +5,14 @@
 
 static void close_on_exec(void)
 {
-       int j;
+       /* Keep the mask separate to stop SDCC generating crap code */
+       uint16_t m = 1 << (UFTSIZE - 1);
+       int8_t j;
+
        for (j = UFTSIZE - 1; j >= 0; --j) {
-               if (udata.u_cloexec & (1 << j))
+               if (udata.u_cloexec & m)
                        doclose(j);
+               m >>= 1;
        }
        udata.u_cloexec = 0;
 }