diff options
Diffstat (limited to 'dos')
-rwxr-xr-x | dos/Makefile | 4 | ||||
-rwxr-xr-x | dos/dosexe.ld | 10 | ||||
-rw-r--r-- | dos/getsetsl.c | 2 |
3 files changed, 9 insertions, 7 deletions
diff --git a/dos/Makefile b/dos/Makefile index 3d19ff29..9f48962b 100755 --- a/dos/Makefile +++ b/dos/Makefile @@ -31,10 +31,10 @@ SRCS = syslinux.c \ ../libinstaller/syslxopt.c \ ../libinstaller/setadv.c \ ../libinstaller/bootsect_bin.c \ - ../libinstaller/ldlinux_bin.c \ ../libinstaller/mbr_bin.c \ $(wildcard ../libfat/*.c) -OBJS = header.o crt0.o $(patsubst %.c,%.o,$(notdir $(SRCS))) +OBJS = header.o crt0.o ldlinux.o \ + $(patsubst %.c,%.o,$(notdir $(SRCS))) LIBOBJS = int2526.o conio.o memcpy.o memset.o memmove.o skipatou.o atou.o \ malloc.o free.o getopt_long.o getsetsl.o strchr.o strtoul.o \ strntoumax.o argv.o printf.o __divdi3.o __udivmoddi4.o diff --git a/dos/dosexe.ld b/dos/dosexe.ld index 4612b30a..c67c5060 100755 --- a/dos/dosexe.ld +++ b/dos/dosexe.ld @@ -26,20 +26,22 @@ SECTIONS __header_size = .; __payload_lma = .; - . = 0; + . = 0x100000000 - syslinux_ldlinux_size; .payload : AT (__payload_lma) { __payload_start = .; - ldlinux_bin.o(.data) + *(.payload) __payload_end = .; } __payload_len = __payload_end - __payload_start; __payload_dwords = __payload_len >> 2; - . = ALIGN(16); - __text_lma = __payload_lma + .; + __text_lma = __payload_lma + syslinux_ldlinux_size; __payload_sseg = (__payload_lma - __text_lma) >> 4; _exe_text_seg = (__text_lma - __header_size) >> 4; + __assert1 = ASSERT((__payload_len == syslinux_ldlinux_size), + "syslinux_ldlinux_size must equal the size of .payload"); + . = 0; .text : AT (__text_lma) { *(.text .stub .text.* .gnu.linkonce.t.*) diff --git a/dos/getsetsl.c b/dos/getsetsl.c index a48f3df2..5c1dbbda 100644 --- a/dos/getsetsl.c +++ b/dos/getsetsl.c @@ -87,7 +87,7 @@ void memcpy_to_sl(void *dst, const void *src, size_t len) uint16_t seg; uint16_t off; - seg = ldlinux_seg + ((size_t)dst >> 4); + seg = ds() + ((size_t)dst >> 4); off = (size_t)dst & 15; asm volatile("pushw %%es ; " |