Linux Kernel Selftest development
 help / color / mirror / Atom feed
* [PATCH v4 00/18] tools/nolibc: shrink arch support
@ 2023-07-15 18:16 Zhangjin Wu
  2023-07-15 18:17 ` [PATCH v4 01/18] tools/nolibc: arch-*.h: add missing space after ',' Zhangjin Wu
                   ` (18 more replies)
  0 siblings, 19 replies; 22+ messages in thread
From: Zhangjin Wu @ 2023-07-15 18:16 UTC (permalink / raw)
  To: w; +Cc: arnd, falcon, linux-kernel, linux-kselftest, thomas

Hi, Willy, Thomas

Thanks very much for your careful review and great suggestions, now, we
get v4 revision of the arch shrink series [1], it mainly include a new
fixup for -O0 under gcc < 11.1.0, the stackprotector support for
_start_c(), new testcases for startup code and two new test targets.

All of the tests passed or skipped (tinyconfig + few options +
qemu-system) for both -Os and -O0:

                arch/board | result
                ------------|------------
            arm/versatilepb | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
            arm/vexpress-a9 | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
                   arm/virt | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
               aarch64/virt | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
                    i386/pc | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
                  x86_64/pc | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
               mipsel/malta | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
           loongarch64/virt | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
               riscv64/virt | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.
      s390x/s390-ccw-virtio | 165 test(s): 158 passed,   7 skipped,   0 failed => status: warning.

And more, for both -Os and -O0:

    $ for r in run-user run-nolibc-test run-libc-test; do make clean > /dev/null; make $r | grep status; done
    165 test(s): 157 passed,   8 skipped,   0 failed => status: warning
    165 test(s): 157 passed,   8 skipped,   0 failed => status: warning
    165 test(s): 153 passed,  12 skipped,   0 failed => status: warning

    // for make run-user, the euid0 and 32bit limit related tests are
    // skipped
    $ make clean && make run-user
    $ grep -i skip run.out
    17 chroot_root                                                  [SKIPPED]
    39 link_dir                                                     [SKIPPED]
    62 limit_intptr_min_32                                          [SKIPPED]
    63 limit_intptr_max_32                                          [SKIPPED]
    64 limit_uintptr_max_32                                         [SKIPPED]
    65 limit_ptrdiff_min_32                                         [SKIPPED]
    66 limit_ptrdiff_max_32                                         [SKIPPED]
    67 limit_size_max_32                                            [SKIPPED]

    // for run-libc-test, the _auxv variables, euid0, 32bits limit and 
    // stackprotector related tests are skipped
    $ make clean && make run-libc-test
    $ grep -i skip run.out
    9 environ_auxv                                                  [SKIPPED]
    10 environ_total                                                [SKIPPED]
    12 auxv_addr                                                    [SKIPPED]
    17 chroot_root                                                  [SKIPPED]
    39 link_dir                                                     [SKIPPED]
    62 limit_intptr_min_32                                          [SKIPPED]
    63 limit_intptr_max_32                                          [SKIPPED]
    64 limit_uintptr_max_32                                         [SKIPPED]
    65 limit_ptrdiff_min_32                                         [SKIPPED]
    66 limit_ptrdiff_max_32                                         [SKIPPED]
    67 limit_size_max_32                                            [SKIPPED]
    0 -fstackprotector not supported                                [SKIPPED]

    $ make clean >/dev/null; make run-libc-test CC=/labs/linux-lab/src/examples/musl-install/bin/musl-gcc  | grep status
    165 test(s): 151 passed,  12 skipped,   2 failed => status: failure

    // The failures are expected for musl has disabled both sbrk and brk
    // but not the sbrk(0); the _auxv variables, euid0, 32bits limit and
    // stackprotector related tests are skipped for musl too

    $ grep FAIL -ur run.out 
    9 sbrk = 1 ENOMEM                                               [FAIL]
    10 brk = -1 ENOMEM                                              [FAIL]

    $ grep "SKIP" -ur run.out 
    9 environ_auxv                                                  [SKIPPED]
    10 environ_total                                                [SKIPPED]
    12 auxv_addr                                                    [SKIPPED]
    17 chroot_root                                                  [SKIPPED]
    39 link_dir                                                     [SKIPPED]
    62 limit_intptr_min_32                                          [SKIPPED]
    63 limit_intptr_max_32                                          [SKIPPED]
    64 limit_uintptr_max_32                                         [SKIPPED]
    65 limit_ptrdiff_min_32                                         [SKIPPED]
    66 limit_ptrdiff_max_32                                         [SKIPPED]
    67 limit_size_max_32                                            [SKIPPED]
    0 -fstackprotector not supported                                [SKIPPED]

For stackprotector, gcc 13.1.0 is used to test on x86_64 standalonely:

    $ make run-user CROSS_COMPILE=x86_64-linux- | grep status
    165 test(s): 157 passed,   8 skipped,   0 failed => status: warning
    $ grep stack -ur run.out 
    0 -fstackprotector                                               [OK]
    $ make run-nolibc-test CROSS_COMPILE=x86_64-linux- | grep status
    165 test(s): 157 passed,   8 skipped,   0 failed => status: warning
    $ grep stack -ur run.out 
    0 -fstackprotector                                               [OK]

Changes from v3 --> v4:

* tools/nolibc: arch-*.h: add missing space after ','
  tools/nolibc: fix up startup failures for -O0 under gcc < 11.1.0

    Both of the above changes are for _start, it is able to merge them
    if necessary.

    The first one is old for format errors reported by
    scripts/checkpatch.pl

    The second one is for -O0 failure under gcc < 11.1.0, applied the
    optimize("-Os", "omit-frame-pointer") suggestion from Thomas. 

* tools/nolibc: remove the old sys_stat support

    As suggested by Willy, Document carefully about the statx supported
    Linux version info.

* tools/nolibc: add new crt.h with _start_c

    The code is polished carefully for smaller size and better
    readability.

* tools/nolibc: stackprotector.h: add empty __stack_chk_init for !_NOLIBC_STACKPROTECTOR
  tools/nolibc: crt.h: initialize stack protector

    As suggested by Thomas, init stackprotector in _start_c() too.

* tools/nolibc: arm: shrink _start with _start_c
  tools/nolibc: aarch64: shrink _start with _start_c
  tools/nolibc: i386: shrink _start with _start_c
  tools/nolibc: x86_64: shrink _start with _start_c
  tools/nolibc: mips: shrink _start with _start_c
  tools/nolibc: loongarch: shrink _start with _start_c
  tools/nolibc: riscv: shrink _start with _start_c
  tools/nolibc: s390: shrink _start with _start_c

    Removed the stackprotector initialization from _start too, we
    already have it in _start_c().

* selftests/nolibc: add EXPECT_PTRGE, EXPECT_PTRGT, EXPECT_PTRLE, EXPECT_PTRLT
  selftests/nolibc: add testcases for startup code

    Add a new startup test group to cover the testing of argc,
    argv/argv0, envp/environ and _auxv.

    Some testcases are enhanced, some are newly added from after the
    discussion during v3 review.

* selftests/nolibc: allow run nolibc-test locally
  selftests/nolibc: allow test -include /path/to/nolibc.h

    Two new test targets are added to cover more scenes.

Hope you like this revisoin ;-)

Next patchset is powerpc & powerpc64 support, after that we will send
the v2 of tinyconfig support, at last the left rv32 patches (mainly
64bit time).

Best regards,
Zhangjin
---
[1]: https://lore.kernel.org/lkml/20230715100134.GD24086@1wt.eu/

Zhangjin Wu (18):
  tools/nolibc: arch-*.h: add missing space after ','
  tools/nolibc: fix up startup failures for -O0 under gcc < 11.1.0
  tools/nolibc: remove the old sys_stat support
  tools/nolibc: add new crt.h with _start_c
  tools/nolibc: stackprotector.h: add empty __stack_chk_init for
    !_NOLIBC_STACKPROTECTOR
  tools/nolibc: crt.h: initialize stack protector
  tools/nolibc: arm: shrink _start with _start_c
  tools/nolibc: aarch64: shrink _start with _start_c
  tools/nolibc: i386: shrink _start with _start_c
  tools/nolibc: x86_64: shrink _start with _start_c
  tools/nolibc: mips: shrink _start with _start_c
  tools/nolibc: loongarch: shrink _start with _start_c
  tools/nolibc: riscv: shrink _start with _start_c
  tools/nolibc: s390: shrink _start with _start_c
  selftests/nolibc: add EXPECT_PTRGE, EXPECT_PTRGT, EXPECT_PTRLE,
    EXPECT_PTRLT
  selftests/nolibc: add testcases for startup code
  selftests/nolibc: allow run nolibc-test locally
  selftests/nolibc: allow test -include /path/to/nolibc.h

 tools/include/nolibc/Makefile                |   1 +
 tools/include/nolibc/arch-aarch64.h          |  57 +---------
 tools/include/nolibc/arch-arm.h              |  83 ++-------------
 tools/include/nolibc/arch-i386.h             |  62 ++---------
 tools/include/nolibc/arch-loongarch.h        |  46 +-------
 tools/include/nolibc/arch-mips.h             |  76 ++-----------
 tools/include/nolibc/arch-riscv.h            |  69 ++----------
 tools/include/nolibc/arch-s390.h             |  63 ++---------
 tools/include/nolibc/arch-x86_64.h           |  58 ++--------
 tools/include/nolibc/crt.h                   |  61 +++++++++++
 tools/include/nolibc/stackprotector.h        |   2 +
 tools/include/nolibc/sys.h                   |  63 ++---------
 tools/include/nolibc/types.h                 |   4 +-
 tools/testing/selftests/nolibc/Makefile      |  12 +++
 tools/testing/selftests/nolibc/nolibc-test.c | 106 ++++++++++++++++++-
 15 files changed, 246 insertions(+), 517 deletions(-)
 create mode 100644 tools/include/nolibc/crt.h

-- 
2.25.1


^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2023-07-16  4:50 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-15 18:16 [PATCH v4 00/18] tools/nolibc: shrink arch support Zhangjin Wu
2023-07-15 18:17 ` [PATCH v4 01/18] tools/nolibc: arch-*.h: add missing space after ',' Zhangjin Wu
2023-07-15 18:18 ` [PATCH v4 02/18] tools/nolibc: fix up startup failures for -O0 under gcc < 11.1.0 Zhangjin Wu
2023-07-15 18:20 ` [PATCH v4 03/18] tools/nolibc: remove the old sys_stat support Zhangjin Wu
2023-07-15 18:21 ` [PATCH v4 04/18] tools/nolibc: add new crt.h with _start_c Zhangjin Wu
2023-07-15 18:22 ` [PATCH v4 05/18] tools/nolibc: stackprotector.h: add empty __stack_chk_init for !_NOLIBC_STACKPROTECTOR Zhangjin Wu
2023-07-15 18:23 ` [PATCH v4 06/18] tools/nolibc: crt.h: initialize stack protector Zhangjin Wu
2023-07-15 18:24 ` [PATCH v4 07/18] tools/nolibc: arm: shrink _start with _start_c Zhangjin Wu
2023-07-15 18:25 ` [PATCH v4 08/18] tools/nolibc: aarch64: " Zhangjin Wu
2023-07-15 18:26 ` [PATCH v4 09/18] tools/nolibc: i386: " Zhangjin Wu
2023-07-15 18:27 ` [PATCH v4 10/18] tools/nolibc: x86_64: " Zhangjin Wu
2023-07-15 18:28 ` [PATCH v4 11/18] tools/nolibc: mips: " Zhangjin Wu
2023-07-15 18:30 ` [PATCH v4 12/18] tools/nolibc: loongarch: " Zhangjin Wu
2023-07-15 18:31 ` [PATCH v4 13/18] tools/nolibc: riscv: " Zhangjin Wu
2023-07-15 18:32 ` [PATCH v4 14/18] tools/nolibc: s390: " Zhangjin Wu
2023-07-15 18:33 ` [PATCH v4 15/18] selftests/nolibc: add EXPECT_PTRGE, EXPECT_PTRGT, EXPECT_PTRLE, EXPECT_PTRLT Zhangjin Wu
2023-07-15 18:34 ` [PATCH v4 16/18] selftests/nolibc: add testcases for startup code Zhangjin Wu
2023-07-15 18:35 ` [PATCH v4 17/18] selftests/nolibc: allow run nolibc-test locally Zhangjin Wu
2023-07-15 18:36 ` [PATCH v4 18/18] selftests/nolibc: allow test -include /path/to/nolibc.h Zhangjin Wu
2023-07-15 22:26 ` [PATCH v4 00/18] tools/nolibc: shrink arch support Willy Tarreau
2023-07-16  1:17   ` Zhangjin Wu
2023-07-16  4:50     ` Willy Tarreau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox