[syslinux:firmware] efi: Mark global BIOS-only symbols as __weak

syslinux-bot for Matt Fleming matt.fleming at intel.com
Thu Jun 20 06:51:08 PDT 2013


Commit-ID:  9b8f1d3f3bfa72e8375c16137cc15eac579ed256
Gitweb:     http://www.syslinux.org/commit/9b8f1d3f3bfa72e8375c16137cc15eac579ed256
Author:     Matt Fleming <matt.fleming at intel.com>
AuthorDate: Wed, 19 Jun 2013 13:44:25 +0100
Committer:  Matt Fleming <matt.fleming at intel.com>
CommitDate: Wed, 19 Jun 2013 14:26:19 +0100

efi: Mark global BIOS-only symbols as __weak

Unfortunately, there are still some references in generic code to
symbols that only make sense under BIOS. Use the __weak tag to allow
building for EFI without having to declare these symbols. Accessing
these __weak symbols under EFI will generate an error at runtime,
indicating to the user that they're executing a BIOS code path.

The long-term solution is to move these BIOS-specific symbols into
core/bios.c or somewhere equally BIOS-centric so that these symbols are
no longer global.

Signed-off-by: Matt Fleming <matt.fleming at intel.com>

---
 core/include/core.h | 14 ++++++++++----
 efi/main.c          |  4 ----
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/core/include/core.h b/core/include/core.h
index 1d20040..3a63aac 100644
--- a/core/include/core.h
+++ b/core/include/core.h
@@ -22,14 +22,20 @@ extern char CurrentDirName[];
 extern char SubvolName[];
 extern char ConfigName[];
 extern char config_cwd[];
-extern char KernelName[];
 extern char cmd_line[];
 extern char ConfigFile[];
 extern char syslinux_banner[];
 extern char copyright_str[];
-extern uint16_t BIOSName;
-extern char StackBuf[];
-extern unsigned int __bcopyxx_len;
+
+/*
+ * Mark symbols that are only used by BIOS as __weak until we can move
+ * all references out of the generic (EFI + BIOS) code and into
+ * BIOS-specific code.
+ */
+extern __weak uint16_t BIOSName;
+extern __weak char KernelName[];
+extern __weak char StackBuf[];
+extern __weak unsigned int __bcopyxx_len;
 
 extern uint8_t KbdMap[256];
 
diff --git a/efi/main.c b/efi/main.c
index 27e7f8f..81a84a4 100644
--- a/efi/main.c
+++ b/efi/main.c
@@ -10,7 +10,6 @@
 #include "efi.h"
 #include "fio.h"
 
-char KernelName[FILENAME_MAX];
 uint16_t PXERetry;
 char copyright_str[] = "Copyright (C) 2011\n";
 uint8_t SerialNotice = 1;
@@ -24,7 +23,6 @@ uint32_t BIOS_timer_next;
 uint32_t timer_irq;
 uint8_t KbdMap[256];
 char aux_seg[256];
-uint16_t BIOSName;
 
 static inline EFI_STATUS
 efi_close_protocol(EFI_HANDLE handle, EFI_GUID *guid, EFI_HANDLE agent,
@@ -156,9 +154,7 @@ size_t numIPAppends = 0;
 const uint16_t IPAppends[32];
 uint16_t BIOS_fbm = 1;
 far_ptr_t InitStack;
-char StackBuf[4096];
 far_ptr_t PXEEntry;
-unsigned int __bcopyxx_len = 0;
 
 void gpxe_unload(void)
 {


More information about the Syslinux-commits mailing list