aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@linux.intel.com>2014-02-27 21:44:06 -0800
committerH. Peter Anvin <hpa@linux.intel.com>2014-02-27 21:45:44 -0800
commite01e93b0f29b6dc9e363d91175ef3f7ecb40f8bf (patch)
tree22963270f1297291a0c3906df8f4e25f3eb86639
parent929b217f46ac45cc0bf7cbbaf77575ad0a17f94f (diff)
downloadsyslinux-e01e93b0f29b6dc9e363d91175ef3f7ecb40f8bf.tar.gz
syslinux-e01e93b0f29b6dc9e363d91175ef3f7ecb40f8bf.tar.xz
syslinux-e01e93b0f29b6dc9e363d91175ef3f7ecb40f8bf.zip
shuffler: Actually get the shuffler size sanelysyslinux-6.03-pre4
Actually get the shuffler size sanely. At least for now, we are BIOS only, so stub out the functions on EFI (they shouldn't even be compiled for EFI; this stuff should be moved into some kind of BIOS-only directory.) Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r--com32/lib/syslinux/movebits.c2
-rw-r--r--com32/lib/syslinux/shuffle.c19
-rw-r--r--core/include/core.h8
-rw-r--r--core/shuffler.c8
-rw-r--r--efi/main.c1
5 files changed, 23 insertions, 15 deletions
diff --git a/com32/lib/syslinux/movebits.c b/com32/lib/syslinux/movebits.c
index 63554012..24cb74ee 100644
--- a/com32/lib/syslinux/movebits.c
+++ b/com32/lib/syslinux/movebits.c
@@ -681,7 +681,7 @@ int main(int argc, char *argv[])
return 1;
} else {
dprintf("Final move list:\n");
- syslinux_dump_movelist(stdout, moves);
+ syslinux_dump_movelist(moves);
return 0;
}
}
diff --git a/com32/lib/syslinux/shuffle.c b/com32/lib/syslinux/shuffle.c
index ce85a5c4..dcc4afa4 100644
--- a/com32/lib/syslinux/shuffle.c
+++ b/com32/lib/syslinux/shuffle.c
@@ -48,16 +48,6 @@ struct shuffle_descriptor {
uint32_t dst, src, len;
};
-static int shuffler_size;
-
-static void __syslinux_get_shuffer_size(void)
-{
- if (!shuffler_size) {
- /* +15 padding is to guarantee alignment */
- shuffler_size = __bcopyxx_len + 15;
- }
-}
-
/*
* Allocate descriptor memory in these chunks; if this is large we may
* waste memory, if it is small we may get slow convergence.
@@ -80,6 +70,11 @@ int syslinux_do_shuffle(struct syslinux_movelist *fraglist,
int nmoves, nzero;
com32sys_t ireg;
+#ifndef __FIRMWARE_BIOS__
+ errno = ENOSYS;
+ return -1; /* Not supported at this time*/
+#endif
+
descaddr = 0;
dp = dbuf = NULL;
@@ -116,14 +111,14 @@ int syslinux_do_shuffle(struct syslinux_movelist *fraglist,
if (!rxmap)
goto bail;
- __syslinux_get_shuffer_size();
desc_blocks = (nzero + DESC_BLOCK_SIZE - 1) / DESC_BLOCK_SIZE;
for (;;) {
/* We want (desc_blocks) allocation blocks, plus the terminating
descriptor, plus the shuffler safe area. */
addr_t descmem = desc_blocks *
sizeof(struct shuffle_descriptor) * DESC_BLOCK_SIZE
- + sizeof(struct shuffle_descriptor) + shuffler_size;
+ + sizeof(struct shuffle_descriptor)
+ + syslinux_shuffler_size();
descaddr = (desczone + descfree - descmem) & ~3;
diff --git a/core/include/core.h b/core/include/core.h
index 1fd283e3..f45c024d 100644
--- a/core/include/core.h
+++ b/core/include/core.h
@@ -26,7 +26,13 @@ extern char cmd_line[];
extern char ConfigFile[];
extern char syslinux_banner[];
extern char copyright_str[];
-extern unsigned int __bcopyxx_len;
+
+extern const size_t __syslinux_shuffler_size;
+
+static inline size_t syslinux_shuffler_size(void)
+{
+ return __syslinux_shuffler_size;
+}
/*
* Mark symbols that are only used by BIOS as __weak until we can move
diff --git a/core/shuffler.c b/core/shuffler.c
new file mode 100644
index 00000000..eca1b4a3
--- /dev/null
+++ b/core/shuffler.c
@@ -0,0 +1,8 @@
+#include "core.h"
+
+#ifdef __FIRMWARE_BIOS__
+
+extern const char __bcopyxx_len[]; /* Linker script absolute symbol */
+const size_t __syslinux_shuffler_size = (size_t)__bcopyxx_len;
+
+#endif /* __FIRMWARE_BIOS__ */
diff --git a/efi/main.c b/efi/main.c
index 94878f93..7c3b86b4 100644
--- a/efi/main.c
+++ b/efi/main.c
@@ -166,7 +166,6 @@ void pxenv(void)
uint16_t BIOS_fbm = 1;
far_ptr_t InitStack;
far_ptr_t PXEEntry;
-__export unsigned int __bcopyxx_len = 0;
void gpxe_unload(void)
{