From 6f32005fd1e8d6c947a045a7a0087d275185381b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 17 Nov 2021 14:43:02 +0100 Subject: [PATCH] shared/base-filesystem: add (empty) iffdery for the table I think this is going to be very annoying for our downstream maintainers. Let's at least provide the ifdef scaffolding so that only filling in the actual entries remains. The structure is copied from missing_syscall.h. --- src/shared/base-filesystem.c | 37 ++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c index 47c1ea2802a..90fc5282a1f 100644 --- a/src/shared/base-filesystem.c +++ b/src/shared/base-filesystem.c @@ -38,25 +38,46 @@ static const BaseFilesystem table[] = { { "proc", 0755, NULL, NULL, true }, { "sys", 0755, NULL, NULL, true }, { "dev", 0755, NULL, NULL, true }, -#if defined(__i386__) || defined(__x86_64__) + /* Various architecture ABIs define the path to the dynamic loader via the /lib64/ subdirectory of * the root directory. When booting from an otherwise empty root file system (where only /usr/ has * been mounted into) it is thus necessary to create a symlink pointing to the right subdirectory of * /usr/ first — otherwise we couldn't invoke any dynamic binary. Let's detect this case here, and * create the symlink as needed should it be missing. We prefer doing this consistently with Debian's * multiarch logic, but support Fedora-style multilib too.*/ +#if defined(__aarch64__) +#elif defined(__alpha__) +#elif defined(__arc__) || defined(__tilegx__) +#elif defined(__arm__) +#elif defined(__i386__) || defined(__x86_64__) { "lib64", 0, "usr/lib/x86_64-linux-gnu\0" "usr/lib64\0", "ld-linux-x86-64.so.2" }, -#else - /* gcc doesn't allow pragma to be used within constructs, hence log about this separately below */ -# define WARN_LIB64 1 +# define KNOW_LIB64_DIRS 1 +#elif defined(__ia64__) +#elif defined(__m68k__) +#elif defined(_MIPS_SIM) +# if _MIPS_SIM == _MIPS_SIM_ABI32 +# elif _MIPS_SIM == _MIPS_SIM_NABI32 +# elif _MIPS_SIM == _MIPS_SIM_ABI64 +# else +# error "Unknown MIPS ABI" +# endif +#elif defined(__powerpc__) +#elif defined(__riscv) +# if __riscv_xlen == 32 +# elif __riscv_xlen == 64 +# else +# error "Unknown RISC-V ABI" +# endif +#elif defined(__s390__) +#elif defined(__s390x__) +#elif defined(__sparc__) #endif + /* gcc doesn't allow pragma to be used within constructs, hence log about this separately below */ }; -#ifdef WARN_LIB64 -#pragma message "If your architecture knows a /lib64/ or /lib32/ directory, please add an entry creating it here." - /* And if your architecture doesn't know these directories, make sure to add ifdeffery here to - * suppress this pragma message. */ +#ifndef KNOW_LIB64_DIRS +# pragma message "Please add an entry above specifying whether your architecture uses /lib64/, /lib32/, or no such links." #endif int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { -- 2.47.3