linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Kees Cook <kees@kernel.org>,
	Eric Biederman <ebiederm@xmission.com>,
	 Shuah Khan <shuah@kernel.org>,
	Nathan Chancellor <nathan@kernel.org>,
	 Nick Desaulniers <ndesaulniers@google.com>,
	Bill Wendling <morbo@google.com>,
	 Justin Stitt <justinstitt@google.com>,
	Andy Lutomirski <luto@kernel.org>,
	 Thomas Gleixner <tglx@linutronix.de>,
	Vincenzo Frascino <vincenzo.frascino@arm.com>,
	 linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org,  llvm@lists.linux.dev
Subject: Re: [PATCH 00/16] selftests: vDSO: parse_vdso: Make compatible with nolibc
Date: Mon, 3 Feb 2025 14:50:16 +0100	[thread overview]
Message-ID: <20250203143640-70c59c53-af45-40cb-9a52-6395b3fdd263@linutronix.de> (raw)
In-Reply-To: <cd1147a8-25ba-47d2-a59a-0a686469a808@csgroup.eu>

On Mon, Feb 03, 2025 at 12:23:29PM +0100, Christophe Leroy wrote:
> Le 03/02/2025 à 10:05, Thomas Weißschuh a écrit :
> > For testing the functionality of the vDSO, it is necessary to build
> > userspace programs for multiple different architectures.
> > It is additional work to acquire matching userspace cross-compilers with
> > full C libraries and then building root images out of those.
> > The kernel tree already contains nolibc, a small, header-only C library.
> > By using it, it is possible to build userspace programs without any
> > additional dependencies.
> > For example the kernel.org crosstools or multi-target clang can be used
> > to build test programs for a multitude of architectures.
> > While nolibc is very limited, it is enough for many selftests.
> > With some minor adjustments it is possible to make parse_vdso.c
> > compatible with nolibc.
> > As an example, vdso_standalone_test_x86 is now built from the same C
> > code as the regular vdso_test_gettimeofday, while still being completely
> > standalone.
> > 
> > This should probably go through the kselftest tree.
> 
> Not sure what are the expectations with this series.

In general it should also work for PPC,
thanks for testing it.

> I gave it a try with vdso_test_gettimeofday and get the following:
> 
> $ powerpc64-linux-gcc -nostdlib -nostdinc -ffreestanding
> -fno-asynchronous-unwind-tables -fno-stack-protector -include /home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/include/nolibc/nolibc.h -I/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/include/nolibc/
> -isystem
> /home/chleroy/linux-powerpc/tools/testing/selftests/../../../usr/include
> -std=gnu99 -O2 -D_GNU_SOURCE= -isystem /home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/include/uapi
> vdso_test_gettimeofday.c parse_vdso.c  -o /home/chleroy/linux-powerpc/tools/testing/selftests/vDSO/vdso_test_gettimeofday
> 
> make: Entering directory
> '/home/chleroy/linux-powerpc/tools/testing/selftests/vDSO'
> powerpc64-linux-gcc -nostdlib -nostdinc -ffreestanding
> -fno-asynchronous-unwind-tables -fno-stack-protector -include /home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/include/nolibc/nolibc.h -I/home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/include/nolibc/
> -isystem
> /home/chleroy/linux-powerpc/tools/testing/selftests/../../../usr/include
> -std=gnu99 -O2 -D_GNU_SOURCE= -isystem /home/chleroy/linux-powerpc/tools/testing/selftests/../../../tools/include/uapi
> vdso_test_gettimeofday.c parse_vdso.c  -o /home/chleroy/linux-powerpc/tools/testing/selftests/vDSO/vdso_test_gettimeofday

This log is confusing. It contains traces of "make" output but no "make"
invocation. I'm also not sure if there were two different compilations
or only one. Can you give the full commandline?
For your testing it should be enough to enable
"vdso_test_standalone_x86" in the Makefile for PPC.

> parse_vdso.c:38:34: error: unknown type name 'Elf64_Versym'
>    38 | #define ELF_BITS_XFORM2(bits, x) Elf##bits##_##x
>       |                                  ^~~
> parse_vdso.c:39:33: note: in expansion of macro 'ELF_BITS_XFORM2'
>    39 | #define ELF_BITS_XFORM(bits, x) ELF_BITS_XFORM2(bits, x)
>       |                                 ^~~~~~~~~~~~~~~
> parse_vdso.c:40:16: note: in expansion of macro 'ELF_BITS_XFORM'
>    40 | #define ELF(x) ELF_BITS_XFORM(ELF_BITS, x)
>       |                ^~~~~~~~~~~~~~
> parse_vdso.c:63:9: note: in expansion of macro 'ELF'
>    63 |         ELF(Versym) *versym;
>       |         ^~~
> parse_vdso.c:38:34: error: unknown type name 'Elf64_Verdef'
>    38 | #define ELF_BITS_XFORM2(bits, x) Elf##bits##_##x
>       |                                  ^~~
> parse_vdso.c:39:33: note: in expansion of macro 'ELF_BITS_XFORM2'
>    39 | #define ELF_BITS_XFORM(bits, x) ELF_BITS_XFORM2(bits, x)
>       |                                 ^~~~~~~~~~~~~~~
> parse_vdso.c:40:16: note: in expansion of macro 'ELF_BITS_XFORM'
>    40 | #define ELF(x) ELF_BITS_XFORM(ELF_BITS, x)
>       |                ^~~~~~~~~~~~~~
> parse_vdso.c:64:9: note: in expansion of macro 'ELF'
>    64 |         ELF(Verdef) *verdef;
>       |         ^~~
> parse_vdso.c: In function 'vdso_init_from_sysinfo_ehdr':
> parse_vdso.c:38:34: error: 'Elf64_Versym' undeclared (first use in this
> function); did you mean 'Elf64_Sym'?
>    38 | #define ELF_BITS_XFORM2(bits, x) Elf##bits##_##x
>       |                                  ^~~
> parse_vdso.c:39:33: note: in expansion of macro 'ELF_BITS_XFORM2'
>    39 | #define ELF_BITS_XFORM(bits, x) ELF_BITS_XFORM2(bits, x)
>       |                                 ^~~~~~~~~~~~~~~
> parse_vdso.c:40:16: note: in expansion of macro 'ELF_BITS_XFORM'
>    40 | #define ELF(x) ELF_BITS_XFORM(ELF_BITS, x)
>       |                ^~~~~~~~~~~~~~
> parse_vdso.c:150:45: note: in expansion of macro 'ELF'
>   150 |                         vdso_info.versym = (ELF(Versym) *)
>       |                                             ^~~
> parse_vdso.c:38:34: note: each undeclared identifier is reported only once
> for each function it appears in
>    38 | #define ELF_BITS_XFORM2(bits, x) Elf##bits##_##x
>       |                                  ^~~
> parse_vdso.c:39:33: note: in expansion of macro 'ELF_BITS_XFORM2'
>    39 | #define ELF_BITS_XFORM(bits, x) ELF_BITS_XFORM2(bits, x)
>       |                                 ^~~~~~~~~~~~~~~
> parse_vdso.c:40:16: note: in expansion of macro 'ELF_BITS_XFORM'
>    40 | #define ELF(x) ELF_BITS_XFORM(ELF_BITS, x)
>       |                ^~~~~~~~~~~~~~
> parse_vdso.c:150:45: note: in expansion of macro 'ELF'
>   150 |                         vdso_info.versym = (ELF(Versym) *)
>       |                                             ^~~
> parse_vdso.c:150:58: error: expected expression before ')' token
>   150 |                         vdso_info.versym = (ELF(Versym) *)
>       |                                                          ^
> parse_vdso.c:38:34: error: 'Elf64_Verdef' undeclared (first use in this
> function); did you mean 'Elf64_Word'?
>    38 | #define ELF_BITS_XFORM2(bits, x) Elf##bits##_##x
>       |                                  ^~~
> parse_vdso.c:39:33: note: in expansion of macro 'ELF_BITS_XFORM2'
>    39 | #define ELF_BITS_XFORM(bits, x) ELF_BITS_XFORM2(bits, x)
>       |                                 ^~~~~~~~~~~~~~~
> parse_vdso.c:40:16: note: in expansion of macro 'ELF_BITS_XFORM'
>    40 | #define ELF(x) ELF_BITS_XFORM(ELF_BITS, x)
>       |                ^~~~~~~~~~~~~~
> parse_vdso.c:155:45: note: in expansion of macro 'ELF'
>   155 |                         vdso_info.verdef = (ELF(Verdef) *)
>       |                                             ^~~
> parse_vdso.c:155:58: error: expected expression before ')' token
>   155 |                         vdso_info.verdef = (ELF(Verdef) *)
>       |                                                          ^
> parse_vdso.c: At top level:
> parse_vdso.c:38:34: error: unknown type name 'Elf64_Versym'; did you mean
> 'Elf64_Sym'?
>    38 | #define ELF_BITS_XFORM2(bits, x) Elf##bits##_##x
>       |                                  ^~~
> parse_vdso.c:39:33: note: in expansion of macro 'ELF_BITS_XFORM2'
>    39 | #define ELF_BITS_XFORM(bits, x) ELF_BITS_XFORM2(bits, x)
>       |                                 ^~~~~~~~~~~~~~~
> parse_vdso.c:40:16: note: in expansion of macro 'ELF_BITS_XFORM'
>    40 | #define ELF(x) ELF_BITS_XFORM(ELF_BITS, x)
>       |                ^~~~~~~~~~~~~~
> parse_vdso.c:177:32: note: in expansion of macro 'ELF'
>   177 | static bool vdso_match_version(ELF(Versym) ver,
>       |                                ^~~
> parse_vdso.c: In function 'vdso_sym':
> parse_vdso.c:224:25: error: 'STN_UNDEF' undeclared (first use in this
> function); did you mean 'SHN_UNDEF'?
>   224 |         for (; chain != STN_UNDEF; chain = vdso_info.chain[chain]) {
>       |                         ^~~~~~~~~
>       |                         SHN_UNDEF
> parse_vdso.c:240:25: warning: implicit declaration of function
> 'vdso_match_version' [-Wimplicit-function-declaration]
>   240 |                     && !vdso_match_version(vdso_info.versym[chain],
>       |                         ^~~~~~~~~~~~~~~~~~
> make: *** [../lib.mk:222: /home/chleroy/linux-powerpc/tools/testing/selftests/vDSO/vdso_test_gettimeofday]
> Error 1
> make: Leaving directory
> '/home/chleroy/linux-powerpc/tools/testing/selftests/vDSO'
> 
> Christophe
> 
> > 
> > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
> > ---
> > Thomas Weißschuh (16):
> >        MAINTAINERS: Add vDSO selftests
> >        elf, uapi: Add definition for STN_UNDEF
> >        elf, uapi: Add definition for DT_GNU_HASH
> >        elf, uapi: Add definitions for VER_FLG_BASE and VER_FLG_WEAK
> >        elf, uapi: Add type ElfXX_Versym
> >        elf, uapi: Add types ElfXX_Verdef and ElfXX_Veraux
> >        tools/include: Add uapi/linux/elf.h
> >        selftests: Add headers target
> >        selftests: vDSO: vdso_standalone_test_x86: Use vdso_init_form_sysinfo_ehdr
> >        selftests: vDSO: parse_vdso: Drop vdso_init_from_auxv()
> >        selftests: vDSO: parse_vdso: Use UAPI headers instead of libc headers
> >        selftests: vDSO: parse_vdso: Test __SIZEOF_LONG__ instead of ULONG_MAX
> >        selftests: vDSO: parse_vdso: Make compatible with nolibc
> >        selftests: vDSO: vdso_test_gettimeofday: Clean up includes
> >        selftests: vDSO: vdso_test_gettimeofday: Make compatible with nolibc
> >        selftests: vDSO: vdso_standalone_test_x86: Switch to nolibc
> > 
> >   MAINTAINERS                                        |   1 +
> >   include/uapi/linux/elf.h                           |  38 ++
> >   tools/include/uapi/linux/elf.h                     | 524 +++++++++++++++++++++
> >   tools/testing/selftests/lib.mk                     |   5 +-
> >   tools/testing/selftests/vDSO/Makefile              |  11 +-
> >   tools/testing/selftests/vDSO/parse_vdso.c          |  21 +-
> >   tools/testing/selftests/vDSO/parse_vdso.h          |   1 -
> >   .../selftests/vDSO/vdso_standalone_test_x86.c      | 143 +-----
> >   .../selftests/vDSO/vdso_test_gettimeofday.c        |   4 +-
> >   9 files changed, 584 insertions(+), 164 deletions(-)
> > ---
> > base-commit: 2014c95afecee3e76ca4a56956a936e23283f05b
> > change-id: 20241017-parse_vdso-nolibc-e069baa7ff48
> > 
> > Best regards,
> 


  reply	other threads:[~2025-02-03 13:55 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-03  9:05 Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 01/16] MAINTAINERS: Add vDSO selftests Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 02/16] elf, uapi: Add definition for STN_UNDEF Thomas Weißschuh
2025-02-04 15:32   ` Kees Cook
2025-02-03  9:05 ` [PATCH 03/16] elf, uapi: Add definition for DT_GNU_HASH Thomas Weißschuh
2025-02-04 15:32   ` Kees Cook
2025-02-03  9:05 ` [PATCH 04/16] elf, uapi: Add definitions for VER_FLG_BASE and VER_FLG_WEAK Thomas Weißschuh
2025-02-04 15:10   ` Kees Cook
2025-02-04 15:17     ` Thomas Weißschuh
2025-02-04 15:32       ` Kees Cook
2025-02-04 15:33   ` Kees Cook
2025-02-03  9:05 ` [PATCH 05/16] elf, uapi: Add type ElfXX_Versym Thomas Weißschuh
2025-02-04 15:32   ` Kees Cook
2025-02-03  9:05 ` [PATCH 06/16] elf, uapi: Add types ElfXX_Verdef and ElfXX_Veraux Thomas Weißschuh
2025-02-04 15:33   ` Kees Cook
2025-02-03  9:05 ` [PATCH 07/16] tools/include: Add uapi/linux/elf.h Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 08/16] selftests: Add headers target Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 09/16] selftests: vDSO: vdso_standalone_test_x86: Use vdso_init_form_sysinfo_ehdr Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 10/16] selftests: vDSO: parse_vdso: Drop vdso_init_from_auxv() Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 11/16] selftests: vDSO: parse_vdso: Use UAPI headers instead of libc headers Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 12/16] selftests: vDSO: parse_vdso: Test __SIZEOF_LONG__ instead of ULONG_MAX Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 13/16] selftests: vDSO: parse_vdso: Make compatible with nolibc Thomas Weißschuh
2025-02-22 10:24   ` Willy Tarreau
2025-02-24 14:41     ` Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 14/16] selftests: vDSO: vdso_test_gettimeofday: Clean up includes Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 15/16] selftests: vDSO: vdso_test_gettimeofday: Make compatible with nolibc Thomas Weißschuh
2025-02-03  9:05 ` [PATCH 16/16] selftests: vDSO: vdso_standalone_test_x86: Switch to nolibc Thomas Weißschuh
2025-02-03 11:23 ` [PATCH 00/16] selftests: vDSO: parse_vdso: Make compatible with nolibc Christophe Leroy
2025-02-03 13:50   ` Thomas Weißschuh [this message]
2025-02-03 15:43     ` Christophe Leroy
2025-02-03 16:14       ` Thomas Weißschuh
2025-02-22 10:26         ` Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250203143640-70c59c53-af45-40cb-9a52-6395b3fdd263@linutronix.de \
    --to=thomas.weissschuh@linutronix.de \
    --cc=christophe.leroy@csgroup.eu \
    --cc=ebiederm@xmission.com \
    --cc=justinstitt@google.com \
    --cc=kees@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=llvm@lists.linux.dev \
    --cc=luto@kernel.org \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=shuah@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=vincenzo.frascino@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox