u-boot-brain/arch/sandbox/include/asm/sections.h
Marek Behún d1f81fd015 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>
2021-05-24 14:21:30 -04:00

40 lines
895 B
C

/*
* decls for symbols defined in the linker script
*
* Copyright (c) 2012 The Chromium OS Authors.
*
* Licensed under the GPL-2 or later.
*/
#ifndef __SANDBOX_SECTIONS_H
#define __SANDBOX_SECTIONS_H
#include <asm-generic/sections.h>
struct sandbox_cmdline_option;
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();
}
#endif