]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/base-filesystem: add (empty) iffdery for the table
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 17 Nov 2021 13:43:02 +0000 (14:43 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 19 Nov 2021 14:30:08 +0000 (15:30 +0100)
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

index 47c1ea2802a7f1ed2d0d36e08d8d13136f96776f..90fc5282a1ff9f6f4b917e5c1e766d0106b9c7d8 100644 (file)
@@ -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) {