summaryrefslogtreecommitdiff
path: root/arch/sandbox/include/asm/sections.h
diff options
context:
space:
mode:
authorMarek BehĂșn <marek.behun@nic.cz>2021-05-20 13:24:06 +0200
committerTom Rini <trini@konsulko.com>2021-05-24 14:21:30 -0400
commitd1f81fd01598071ca9f8263dff43ac8860532f2b (patch)
treeff519fc3f940f6736d5153597f3c7085be617987 /arch/sandbox/include/asm/sections.h
parentbe1e77f2868f288a219090ee81427a9b800bb158 (diff)
sandbox: use sections instead of symbols for getopt array boundaries
In style of linked lists, instead of declaring symbols for boundaries of getopt options array in the linker script, declare corresponding sections and retrieve the boundaries via static inline functions. Without this clang's LTO produces binary without any getopt options, because for some reason it thinks that array is empty (start and end symbols are at the same address). Signed-off-by: Marek BehĂșn <marek.behun@nic.cz> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/sandbox/include/asm/sections.h')
-rw-r--r--arch/sandbox/include/asm/sections.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/arch/sandbox/include/asm/sections.h b/arch/sandbox/include/asm/sections.h
index fbc1bd11a34..f4351ae7dbf 100644
--- a/arch/sandbox/include/asm/sections.h
+++ b/arch/sandbox/include/asm/sections.h
@@ -13,12 +13,27 @@
struct sandbox_cmdline_option;
-extern struct sandbox_cmdline_option *__u_boot_sandbox_option_start[],
- *__u_boot_sandbox_option_end[];
+static inline struct sandbox_cmdline_option **
+__u_boot_sandbox_option_start(void)
+{
+ static char start[0] __aligned(4) __attribute__((unused))
+ __section(".u_boot_sandbox_getopt_start");
+
+ return (struct sandbox_cmdline_option **)&start;
+}
+
+static inline struct sandbox_cmdline_option **
+__u_boot_sandbox_option_end(void)
+{
+ static char end[0] __aligned(4) __attribute__((unused))
+ __section(".u_boot_sandbox_getopt_end");
+
+ return (struct sandbox_cmdline_option **)&end;
+}
static inline size_t __u_boot_sandbox_option_count(void)
{
- return __u_boot_sandbox_option_end - __u_boot_sandbox_option_start;
+ return __u_boot_sandbox_option_end() - __u_boot_sandbox_option_start();
}
#endif