[PATCH v1 07/54] efi: types: add EFI_RUNTIME_SECTION
Ahmad Fatoum
a.fatoum at pengutronix.de
Thu Dec 18 02:37:27 PST 2025
With barebox acting as EFI loader, parts of it will remain resident in
RAM to provide runtime services. Add the necessary definitions for
annotating runtime data and services.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
include/efi/attributes.h | 84 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 84 insertions(+)
diff --git a/include/efi/attributes.h b/include/efi/attributes.h
index 49d401b8fab1..fe5e5f823ab9 100644
--- a/include/efi/attributes.h
+++ b/include/efi/attributes.h
@@ -2,6 +2,10 @@
#ifndef _EFI_ATTRIBUTES_H_
#define _EFI_ATTRIBUTES_H_
+#ifndef __ASSEMBLY__
+
+#include <linux/compiler.h>
+
#ifdef __x86_64__
#define EFIAPI __attribute__((ms_abi))
#define efi_va_list __builtin_ms_va_list
@@ -18,4 +22,84 @@
#define efi_va_end va_end
#endif /* __x86_64__ */
+#ifdef CONFIG_EFI_RUNTIME
+/**
+ * __efi_runtime_data - declares a non-const variable for EFI runtime section
+ *
+ * This macro indicates that a variable is non-const and should go into the
+ * EFI runtime section, and thus still be available when the OS is running.
+ *
+ * Only use on variables not declared const.
+ *
+ * Example:
+ *
+ * ::
+ *
+ * static __efi_runtime_data my_computed_table[256];
+ */
+#ifndef __efi_runtime_data
+#define __efi_runtime_data __section(.efi_runtime.data)
+#endif
+
+/**
+ * __efi_runtime_rodata - declares a read-only variable for EFI runtime section
+ *
+ * This macro indicates that a variable is read-only (const) and should go into
+ * the EFI runtime section, and thus still be available when the OS is running.
+ *
+ * Only use on variables also declared const.
+ *
+ * Example:
+ *
+ * ::
+ *
+ * static const __efi_runtime_rodata my_const_table[] = { 1, 2, 3 };
+ */
+#ifndef __efi_runtime_rodata
+#define __efi_runtime_rodata __section(.efi_runtime.rodata)
+#endif
+
+/**
+ * __efi_runtime - declares a function for EFI runtime section
+ *
+ * This macro indicates that a function should go into the EFI runtime section,
+ * and thus still be available when the OS is running.
+ *
+ * Example:
+ *
+ * ::
+ *
+ * static __efi_runtime compute_my_table(void);
+ */
+#ifndef __efi_runtime
+#define __efi_runtime __section(.efi_runtime.text) \
+ notrace __no_sanitize_address __no_stack_protector
+#endif
+#endif /* CONFIG_EFI_RUNTIME */
+
+/* We #ifndef beforehand to allow compiler flags to override */
+#ifndef __efi_runtime_data
+#define __efi_runtime_data
+#endif
+
+#ifndef __efi_runtime_rodata
+#define __efi_runtime_rodata
+#endif
+
+#ifndef __efi_runtime
+#define __efi_runtime
+#endif
+
+#else /* __ASSEMBLY__ */
+
+#if defined(CONFIG_EFI_RUNTIME) && !defined(EFI_RUNTIME_SECTION)
+#define EFI_RUNTIME_SECTION(sect) .efi_runtime##sect
+#endif
+
+#ifndef EFI_RUNTIME_SECTION
+#define EFI_RUNTIME_SECTION(sect) sect
+#endif
+
+#endif
+
#endif
--
2.47.3
More information about the barebox
mailing list