Index: trunk/i386/boot2/Makefile =================================================================== --- trunk/i386/boot2/Makefile (revision 2089) +++ trunk/i386/boot2/Makefile (revision 2090) @@ -21,9 +21,8 @@ OPTIM = -Os -Oz CFLAGS = $(RC_CFLAGS) $(OPTIM) $(MORECPP) -arch i386 -g -Wmost -Werror \ - -fno-builtin -DSAIO_INTERNAL_USER -static $(OMIT_FRAME_POINTER_CFLAG) \ - -mpreferred-stack-boundary=2 -fno-align-functions -fno-stack-protector \ - -march=pentium4 -msse2 -mfpmath=sse -msoft-float -nostdinc -include $(SRCROOT)/autoconf.h + -fno-builtin -DSAIO_INTERNAL_USER -static $(OMIT_FRAME_POINTER_CFLAG) -fno-stack-protector \ + -march=pentium4 -msse2 -msoft-float -nostdinc -include $(SRCROOT)/autoconf.h CPPFLAGS := $(CPPFLAGS) -nostdinc++ -include $(SRCROOT)/autoconf.h @@ -65,6 +64,8 @@ DATA_ADDR = $(shell printf "%d" `otool -l $(SYMROOT)/boot.sys | grep __data -A 4 | grep __DATA -A 3 | head -n 2 | tail -n 1 | cut -f 8 -d " "`) PATCH_ADDR = $(shell echo ${SYMBOL_ADDR}-${DATA_ADDR}+${DATA_OFFSET} | bc) +#### NOTE #### This value is currently *not* calculated and *should* be. It is currently determined experimentally… +DATA_PAD = 3582 all: $(DIRS_NEEDED) boot all-recursive @@ -78,13 +79,29 @@ endif - @${MKDIRS} $(OBJROOT)/../boot2_modules/ + + @### First pass, don't worry abount segment alignment. @echo "\t[LD] boot.sys" - @$(BINROOT)/ld_classic -static -segalign 20 -segaddr __INIT $(BOOT2ADDR) -preload \ - -arch i386 -e boot2 \ - -o $(SYMROOT)/boot.sys $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) `find /usr/llvm-gcc-*/lib/gcc/*/*/ -name \libcc_kext.a` + @$(CC) -Wl,-preload -Wl,-alias,boot2,start \ + -nostdlib -arch i386 -Wl,-pie \ + -Wl,-read_only_relocs,suppress \ + -lcc_kext \ + $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ + -o ${SYMROOT}/$@.sys + @echo "\t[LD] boot.sys" + @$(CC) -Wl,-preload -Wl,-alias,boot2,start \ + -nostdlib -arch i386 -Wl,-pie \ + -Wl,-segaddr,__INIT,`echo obase=16\; $$((0x${BOOT2ADDR})) | bc` \ + -Wl,-segaddr,__TEXT,`echo obase=16\; $$((0x${BOOT2ADDR})) + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` | bc` \ + -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + 3582 + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ + -Wl,-read_only_relocs,suppress \ + -lcc_kext \ + $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ + -o ${SYMROOT}/$@.sys + + ifeq (${CONFIG_MODULES}, y) @cp $(SYMROOT)/boot.sys $(SYMROOT)/boot2.sys @@ -94,11 +111,18 @@ @$(SYMROOT)/dyldsymboltool $(SYMROOT)/boot.sys $(SYMROOT)/${SYMBOLS_MODULE} @echo "\t[LD] boot.sys" - @$(BINROOT)/ld_classic -static -segalign 20 -segaddr __INIT $(BOOT2ADDR) -preload \ - -arch i386 -e boot2\ - -sectcreate __DATA __Symbols $(SYMROOT)/Symbols.dylib \ - -o $(SYMROOT)/boot.sys $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) `find /usr/llvm-gcc-*/lib/gcc/*/*/ -name \libcc_kext.a` + @$(CC) -Wl,-preload -Wl,-alias,boot2,start \ + -nostdlib -arch i386 -Wl,-pie \ + -Wl,-sectcreate,__DATA,__Symbols,$(SYMROOT)/Symbols.dylib \ + -Wl,-segaddr,__INIT,`echo obase=16\; $$((0x${BOOT2ADDR})) | bc` \ + -Wl,-segaddr,__TEXT,`echo obase=16\; $$((0x${BOOT2ADDR})) + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` | bc` \ + -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + 3582 + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ + -Wl,-read_only_relocs,suppress \ + -lcc_kext \ + $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ + -o ${SYMROOT}/$@.sys + @# Second pass, fixup global var locations @${RM} $(SYMROOT)/${SYMBOLS_MODULE} @@ -106,12 +130,17 @@ @echo "\t[dyldsymboltool] Symbols.dylib" @$(SYMROOT)/dyldsymboltool $(SYMROOT)/boot.sys $(SYMROOT)/${SYMBOLS_MODULE} - @${RM} $(SYMROOT)/boot.sys @echo "\t[LD] boot.sys" - @$(BINROOT)/ld_classic -static -segalign 20 -segaddr __INIT $(BOOT2ADDR) -preload \ - -arch i386 \ - -sectcreate __DATA __Symbols $(SYMROOT)/Symbols.dylib \ - -o $(SYMROOT)/boot.sys $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) `find /usr/llvm-gcc-*/lib/gcc/*/*/ -name \libcc_kext.a` + @$(CC) -Wl,-preload -Wl,-alias,boot2,start \ + -nostdlib -arch i386 -Wl,-pie \ + -Wl,-sectcreate,__DATA,__Symbols,$(SYMROOT)/Symbols.dylib \ + -Wl,-segaddr,__INIT,`echo obase=16\; $$((0x${BOOT2ADDR})) | bc` \ + -Wl,-segaddr,__TEXT,`echo obase=16\; $$((0x${BOOT2ADDR})) + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` | bc` \ + -Wl,-segaddr,__DATA,`echo obase=16\; $$((0x${BOOT2ADDR})) + 3582 + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __INIT\` + \`${SYMROOT}/segsize ${SYMROOT}/$@.sys __TEXT\` | bc` \ + -Wl,-read_only_relocs,suppress \ + -lcc_kext \ + $(filter %.o,$^) `find $(OBJROOT)/../boot2_modules/ -name \*.o` $(LIBS) \ + -o ${SYMROOT}/$@.sys @${RM} $(SYMROOT)/${SYMBOLS_MODULE} Index: trunk/i386/Cconfig =================================================================== --- trunk/i386/Cconfig (revision 2089) +++ trunk/i386/Cconfig (revision 2090) @@ -8,17 +8,6 @@ ---help--- Specify the level to compile chameleon with. -config USE_GCC - bool "Use GCC" - default y - help - Say Y here if you want to compile the project with gcc (if available). - Set this to N, can be usefull to debug the project with the clang-static-analizer, - or simply to use the default compiler. - When in doubt, say "Y". - -source "i386/md/Cconfig" - source "i386/util/Cconfig" source "i386/boot0/Cconfig" Index: trunk/i386/modules/MakeInc.dir =================================================================== --- trunk/i386/modules/MakeInc.dir (revision 2089) +++ trunk/i386/modules/MakeInc.dir (revision 2090) @@ -21,7 +21,7 @@ -fno-builtin -DSAIO_INTERNAL_USER -static $(OMIT_FRAME_POINTER_CFLAG) -fno-stack-protector \ -march=pentium4 -msse2 -msoft-float -nostdinc -include $(SRCROOT)/autoconf.h -CPPFLAGS := $(CPPFLAGS) -arch i386 -static -nostdinc++ -Wmost -Werror \ +CPPFLAGS := $(CPPFLAGS) -arch i386 -static -nostdinc -Wmost -Werror \ -fno-builtin -fno-stack-protector \ -march=pentium4 -msse2 -msoft-float \ -arch i386 -include $(SRCROOT)/autoconf.h @@ -33,7 +33,7 @@ -march=pentium4 -msse2 -msoft-float \ -arch i386 -include $(SRCROOT)/autoconf.h -CPPFLAGS := $(CPPFLAGS) -nostdinc++ -Wmost -Werror \ +CPPFLAGS := $(CPPFLAGS) -nostdinc -Wmost -Werror \ -fno-builtin -fno-stack-protector \ -march=pentium4 -msse2 -msoft-float \ -arch i386 -include $(SRCROOT)/autoconf.h Index: trunk/i386/modules/Keylayout/layouts/Makefile =================================================================== --- trunk/i386/modules/Keylayout/layouts/Makefile (revision 2089) +++ trunk/i386/modules/Keylayout/layouts/Makefile (revision 2090) @@ -8,7 +8,7 @@ INC = -I$(SRCROOT)/i386/libsaio/ -I. -I.. -OBJS = cham-mklayout.o32_nodep cham-mklayout.o64_nodep #in case we use our own md, we can't make these files with the standard rules, it too early, md doesn't even exist +OBJS = cham-mklayout.o32 cham-mklayout.o64 OBJS := $(addprefix $(OBJROOT)/, $(OBJS)) @@ -30,10 +30,10 @@ $(PROGRAMS): $(OBJS) @echo "\t[LD32] $(@F)_32" @$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -arch i386 \ - -o $(SYMROOT)/$(@F)_32 $(OBJROOT)/$(@F).o32_nodep + -o $(SYMROOT)/$(@F)_32 $(OBJROOT)/$(@F).o32 @echo "\t[LD64] $(@F)_64" @$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(INCLUDES) -arch x86_64 \ - -o $(SYMROOT)/$(@F)_64 $(OBJROOT)/$(@F).o64_nodep + -o $(SYMROOT)/$(@F)_64 $(OBJROOT)/$(@F).o64 @echo "\t[LIPO] $(@F)" @lipo -create -arch i386 $(SYMROOT)/$(@F)_32 -arch x86_64 $(SYMROOT)/$(@F)_64 \ -output $(SYMROOT)/$(@F) Index: trunk/i386/Makefile =================================================================== --- trunk/i386/Makefile (revision 2089) +++ trunk/i386/Makefile (revision 2090) @@ -18,10 +18,6 @@ # The order of building is important. SUBDIRS_PRE = -ifeq ($(CONFIG_MD),y) -SUBDIRS_PRE += md -endif - SUBDIRS_PRE += util SUBDIRS = $(SUBDIRS_PRE) klibc libsa libsaio boot0 boot1 boot2 cdboot modules Index: trunk/Make.rules =================================================================== --- trunk/Make.rules (revision 2089) +++ trunk/Make.rules (revision 2090) @@ -10,10 +10,9 @@ endif AS = as LD = ld -ifeq ($(CONFIG_USE_GCC),y) -CC = gcc -CPP = g++ -endif +CC = cc +CPP = c++ + PAX = /bin/pax NASM = $(shell which nasm) -p $(SRCROOT)/autoconf.inc @@ -41,91 +40,44 @@ #OMIT_FRAME_POINTER_CFLAG=-fomit-frame-pointer OMIT_FRAME_POINTER_CFLAG= -$(OBJROOT)/%.o32_nodep: %.c - @echo "\t[CC32] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch i386 $< -o $@ +-include $(OBJROOT)/*.Makedep -$(OBJROOT)/%.o64_nodep: %.c - @echo "\t[CC64] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch x86_64 $< -o $@ - - -ifeq ($(CONFIG_MD),y) - -$(OBJROOT)/%.o: %.c - @echo "\t[CC] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) $< -o $@ \ - -MD -dependency-file $(OBJROOT)/$*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $(OBJROOT)/$*.d - $(OBJROOT)/%.o32: %.c @echo "\t[CC32] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch i386 $< -o $@ \ - -MD -dependency-file $(OBJROOT)/$*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $(OBJROOT)/$*.d + @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch i386 $< -MM -M -o $@.Makedep + @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch i386 $< -o $@ $(OBJROOT)/%.o64: %.c @echo "\t[CC64] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch x86_64 $< -o $@ \ - -MD -dependency-file $(OBJROOT)/$*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $(OBJROOT)/$*.d + @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch x86_64 $< -MM -M -o $@.Makedep + @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch x86_64 $< -o $@ -$(OBJROOT)/%.o: %.m - @echo "\t[M] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) $< -o $@ \ - -MD -dependency-file $(OBJROOT)/$*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $(OBJROOT)/$*.d -$(OBJROOT)/%.o: %.cpp - @echo "\t[CPP] $<" - @$(CPP) $(CPPFLAGS) $(CFLAGS) -c "$<" $(INC) -o $@ \ - -MD -dependency-file $(OBJROOT)/$*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $(OBJROOT)/$*.d - -$(OBJROOT)/boot2.o: - @echo "\t[AS] boot2.s" - @$(CC) -Wa,-n -c $(INC) -arch i386 -o $(OBJROOT)/$(@F) boot2.s \ - -MD -dependency-file $*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $*.d - -$(OBJROOT)/%.o: %.s - @echo "\t[AS] $<" - @$(CC) $(CPPFLAGS) -c $(INC) -arch i386 -o $@ $< \ - -MD -dependency-file $*.d - @$(SYMROOT)/md -u $(OBJROOT)/Makedep -f -d $*.d - -else - $(OBJROOT)/%.o: %.c @echo "\t[CC] $<" + @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) $< -MM -M -o $@.Makedep @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) $< -o $@ -$(OBJROOT)/%.o32: %.c - @echo "\t[CC32] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch i386 $< -o $@ - -$(OBJROOT)/%.o64: %.c - @echo "\t[CC64] $<" - @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) -arch x86_64 $< -o $@ - $(OBJROOT)/%.o: %.m @echo "\t[M] $<" + @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) $< -MM -M -o $@.Makedep @$(CC) $(CFLAGS) $(DEFINES) -c $(INC) $< -o $@ $(OBJROOT)/%.o: %.cpp @echo "\t[CPP] $<" + @$(CPP) $(CPPFLAGS) $(CFLAGS) -c "$<" $(INC) -MM -M -o $@.Makedep @$(CPP) $(CPPFLAGS) $(CFLAGS) -c "$<" $(INC) -o $@ $(OBJROOT)/boot2.o: @echo "\t[AS] boot2.s" - @$(CC) -Wa,-n -c $(INC) -arch i386 -o $(OBJROOT)/$(@F) boot2.s + @$(CC) -Wa,-n -c $(INC) -arch i386 boot2.s -MM -M -o $@.Makedep + @$(CC) -Wa,-n -c $(INC) -arch i386 boot2.s -o $(OBJROOT)/$(@F) $(OBJROOT)/%.o: %.s @echo "\t[AS] $<" - @$(CC) $(CPPFLAGS) -c $(INC) -arch i386 -o $@ $< + @$(CC) $(CPPFLAGS) -c $(INC) -arch i386 $< -MM -M -o $@.Makedep + @$(CC) $(CPPFLAGS) -c $(INC) -arch i386 $< -o $@ -endif - CONFIG_FILES=$(SRCROOT)/auto.conf $(SRCROOT)/autoconf.h $(SRCROOT)/autoconf.inc $(SRCROOT)/.config $(CONFIG_FILES): $(SRCROOT)/.config @echo "\t[MAKE] config"