Commit 8f3b9694 authored by Simon Glass's avatar Simon Glass
Browse files

x86: Allow use of global_data with EFI



On x86 the global_data pointer is provided through a somewhat-bizarre and
x86-specific mechanism: the F segment register is set to a pointer to the
start of global_data, so that accesses can use this build-in register.

When running as an EFI application we don't want to mess with the Global
Descriptor Table (GDT) and there is little advantage (in terms of code size)
to doing so.

Allow global_data to be a simple variable in this case.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Reviewed-by: default avatarBin Meng <bmeng.cn@gmail.com>
parent 53292ad9
...@@ -76,6 +76,12 @@ struct arch_global_data { ...@@ -76,6 +76,12 @@ struct arch_global_data {
#include <asm-generic/global_data.h> #include <asm-generic/global_data.h>
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
# ifdef CONFIG_EFI_APP
#define gd global_data_ptr
#define DECLARE_GLOBAL_DATA_PTR extern struct global_data *global_data_ptr
# else
static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void) static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
{ {
gd_t *gd_ptr; gd_t *gd_ptr;
...@@ -88,6 +94,7 @@ static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void) ...@@ -88,6 +94,7 @@ static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
#define gd get_fs_gd_ptr() #define gd get_fs_gd_ptr()
#define DECLARE_GLOBAL_DATA_PTR #define DECLARE_GLOBAL_DATA_PTR
# endif
#endif #endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment