diff options
author | H. Peter Anvin <hpa@zytor.com> | 2008-08-20 15:15:34 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-08-20 15:15:34 -0700 |
commit | bd09a6d828fa492aed4406adde6c412e0e5c640d (patch) | |
tree | 660a4813999ba273afb26fd3e137399cb0a57a97 /memdisk | |
parent | 6aa3a1c8380276387430684eb39650e958b0030a (diff) | |
download | syslinux-bd09a6d828fa492aed4406adde6c412e0e5c640d.tar.gz |
Major Makefile cleanups; gcc 4.3.0 compatiblity
Cleanup and centralize the Makefile system even more.
Fix a gcc 4.3 incompatibility in memdisk (definition of strlen).
Diffstat (limited to 'memdisk')
-rw-r--r-- | memdisk/Makefile | 34 | ||||
-rw-r--r-- | memdisk/memdisk.h | 15 | ||||
-rw-r--r-- | memdisk/setup.c | 8 |
3 files changed, 32 insertions, 25 deletions
diff --git a/memdisk/Makefile b/memdisk/Makefile index 529d4a6d..66a6e51a 100644 --- a/memdisk/Makefile +++ b/memdisk/Makefile @@ -11,26 +11,22 @@ ## ----------------------------------------------------------------------- topdir = .. +include $(topdir)/MCONFIG -include $(topdir)/version.mk -TMPFILE = $(shell mktemp /tmp/gcc_ok.XXXXXX) - -CC = gcc - -gcc_ok = $(shell tmpf=$(TMPFILE); if $(CC) $(1) -c -x c /dev/null -o $$tmpf 2>/dev/null; \ - then echo $(1); else echo $(2); fi; rm -f $$tmpf) - -M32 := $(call gcc_ok,-m32,) -ALIGN := $(call gcc_ok,-falign-functions=0 -falign-jumps=0 -falign-loops=0,-malign-functions=0 -malign-jumps=0 -malign-loops=0) -FREE := $(call gcc_ok,-ffreestanding,) $(call gcc_ok,-fno-stack-protector,) - -CFLAGS = $(M32) $(FREE) -g -W -Wall -Wno-sign-compare \ - -Os -fomit-frame-pointer -march=i386 -mregparm=3 $(ALIGN) \ - -DDATE='"$(DATE)"' -SFLAGS = $(M32) -march=i386 -D__ASSEMBLY__ -LDFLAGS = $(M32) -g -INCLUDE = -I../com32/include -LD = ld -m elf_i386 +GCCOPT := $(call gcc_ok,-m32,) \ + $(call gcc_ok,-ffreestanding,) \ + $(call gcc_ok,-fno-stack-protector) \ + $(call gcc_ok,-falign-functions=0,-malign-functions=0) \ + $(call gcc_ok,-falign-jumps=0,-malign-jumps=0) \ + $(call gcc_ok,-falign-loops=0,-malign-loops=0) \ + -march=i386 -Os -fomit-frame-pointer -mregparm=3 -DREGPARM=3 + +CFLAGS = $(GCCOPT) -g -W -Wall -Wno-sign-compare -DDATE='"$(DATE)"' +SFLAGS = $(GCCOPT) -D__ASSEMBLY__ +LDFLAGS = $(GCCOPT) -g +INCLUDE = -I$(topdir)/com32/include +LD += -m elf_i386 NASM = nasm NASMOPT = -O9999 NFLAGS = -dDATE='"$(DATE)"' -dWITH_EDD @@ -63,7 +59,7 @@ all: memdisk # e820test # tidy, clean removes everything except the final binary tidy dist: - rm -f *.o *.s *.o16 *.s16 *.bin *.lst *.elf e820test + rm -f *.o *.s *.tmp *.o16 *.s16 *.bin *.lst *.elf e820test clean: tidy diff --git a/memdisk/memdisk.h b/memdisk/memdisk.h index 615e3d1e..9d4a4297 100644 --- a/memdisk/memdisk.h +++ b/memdisk/memdisk.h @@ -40,11 +40,22 @@ extern void __attribute__((noreturn)) die(void); #define memcpy(a,b,c) __builtin_memcpy(a,b,c) #define memset(a,b,c) __builtin_memset(a,b,c) #define strcpy(a,b) __builtin_strcpy(a,b) -#define strlen(a) __builtin_strlen(a) + +static inline size_t strlen(const char *__a) +{ + const char *__D; + size_t __c; + + asm("repne;scasb" + : "=D" (__D), "=c" (__c) + : "D" (__a), "c" (-1), "a" (0), "m" (*__a)); + + return __D - __a - 1; +} /* memcpy() but returns a pointer to end of buffer */ static inline void * -memcpy_endptr(void *__d, const void *__s, unsigned int __n) +mempcpy(void *__d, const void *__s, unsigned int __n) { memcpy(__d, __s, __n); return (void *)((char *)__d + __n); diff --git a/memdisk/setup.c b/memdisk/setup.c index b9466335..583570ea 100644 --- a/memdisk/setup.c +++ b/memdisk/setup.c @@ -751,7 +751,7 @@ __cdecl void setup(__cdecl syscall_t cs_syscall, void *cs_bounce) map -- 12 bytes per range; we may need as many as 2 additional ranges (each insertrange() can worst-case turn 1 area into 3) plus the terminating range, over what nranges currently show. */ - cmdlinelen = strlen(shdr->cmdline)+1; + cmdlinelen = strlen(shdr->cmdline)+1; total_size = hptr->total_size; /* Actual memdisk code */ total_size += (nranges+3)*sizeof(ranges[0]); /* E820 memory ranges */ total_size += cmdlinelen; /* Command line */ @@ -873,9 +873,9 @@ __cdecl void setup(__cdecl syscall_t cs_syscall, void *cs_bounce) hptr = (struct memdisk_header *)dpp; /* Actually copy to low memory */ - dpp = memcpy_endptr(dpp, &_binary_memdisk_bin_start, bin_size); - dpp = memcpy_endptr(dpp, ranges, (nranges+1)*sizeof(ranges[0])); - dpp = memcpy_endptr(dpp, shdr->cmdline, cmdlinelen+1); + dpp = mempcpy(dpp, &_binary_memdisk_bin_start, bin_size); + dpp = mempcpy(dpp, ranges, (nranges+1)*sizeof(ranges[0])); + dpp = mempcpy(dpp, shdr->cmdline, cmdlinelen+1); } /* Update various BIOS magic data areas (gotta love this shit) */ |