diff --git a/sys/arch/i386/stand/mbr/Makefile.mbr b/sys/arch/i386/stand/mbr/Makefile.mbr index 5dc35ab1c..0e8f2b946 100644 --- a/sys/arch/i386/stand/mbr/Makefile.mbr +++ b/sys/arch/i386/stand/mbr/Makefile.mbr @@ -1,6 +1,9 @@ -# $NetBSD: Makefile.mbr,v 1.18 2011/05/20 15:05:02 joerg Exp $ +# $NetBSD: Makefile.mbr,v 1.17 2009/11/20 17:28:19 dsl Exp $ -S= ${.CURDIR}/../../../../.. +.if !defined(COMPILER_TYPE) || ${COMPILER_TYPE} != "gnu" +CC:=clang +COMPILER_TYPE:=gnu +.endif NOMAN= # defined @@ -16,6 +19,8 @@ PIE_AFLAGS= .include STRIPFLAG= # override +TOOL_SED?= sed +NM?= nm SRCS?= mbr.S @@ -24,30 +29,33 @@ BINMODE= 444 .PATH: ${.CURDIR}/.. +LOADADDR= 0x8800 + LDFLAGS+= -nostdlib -Wl,-e,start -CPPFLAGS+= -I. -I${.CURDIR}/../../lib -I${S} +CPPFLAGS+= -I. -I${.CURDIR}/../../lib -DLOADADDR=${LOADADDR} .if ${MACHINE_ARCH} == "x86_64" LDFLAGS+= -Wl,-m,elf_i386 AFLAGS+= -m32 .endif -BUILDSYMLINKS+= $S/arch/i386/include machine \ - $S/arch/x86/include x86 +AFLAGS+= "-Wa,--divide" -DPSRCS+= machine x86 +# NetBSD can be compiled from a foreign host, MINIX do not. So commented out. +# Make sys/ a local thing for benefit of cross-compilers +#S= ${.CURDIR}/../../../../.. +#CPPFLAGS+= -I${S} +# And same for machine/; need a bit more work because of symlink +#BUILDSYMLINKS+= $S/arch/i386/include machine \ +# $S/arch/x86/include x86 +#DPSRCS+= machine x86 CLEANFILES+= ${PROG}.tmp -LOADADDR= 0x8800 - -AFLAGS.mbr.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} -AFLAGS.gpt.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} - ${PROG}: ${OBJS} ${_MKTARGET_LINK} ${CC} -o ${PROG}.tmp ${LDFLAGS} -Wl,-Ttext,${LOADADDR} ${OBJS} - @ set -- $$( ${NM} -t d ${PROG}.tmp | grep '\' \ + @ set -- $$( ${NM} -t d ${PROG}.tmp | grep 'mbr_space' \ | ${TOOL_SED} 's/^0*//' ); \ echo "#### There are $$1 free bytes in ${PROG}" ${OBJCOPY} -O binary ${PROG}.tmp ${PROG} diff --git a/sys/arch/i386/stand/mbr/gptmbr/Makefile b/sys/arch/i386/stand/mbr/gptmbr/Makefile index 7273c96f0..5839cbcc9 100644 --- a/sys/arch/i386/stand/mbr/gptmbr/Makefile +++ b/sys/arch/i386/stand/mbr/gptmbr/Makefile @@ -4,6 +4,7 @@ PROG= gptmbr.bin SRCS= gptmbr.S AFLAGS.gptmbr.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} +AFLAGS+= "-Wa,--divide" .include <../Makefile.mbr> diff --git a/sys/arch/i386/stand/mbr/mbr.S b/sys/arch/i386/stand/mbr/mbr.S index 05be7aec3..43281ce3d 100644 --- a/sys/arch/i386/stand/mbr/mbr.S +++ b/sys/arch/i386/stand/mbr/mbr.S @@ -515,7 +515,14 @@ do_read: */ movl %ebp, %esi pop %dx /* recover drive # */ +#ifdef __minix + /* There some bug in MINIX tools, which causes to + * generate wrong code for "jmp BOOTADDR" (relocation issue). + */ + jmp start - LOADADDR + BOOTADDR +#else jmp BOOTADDR +#endif #ifndef NO_CHS diff --git a/sys/arch/i386/stand/mbr/mbr_com0_9600/Makefile b/sys/arch/i386/stand/mbr/mbr_com0_9600/Makefile index bb3a8a618..1007c8d91 100644 --- a/sys/arch/i386/stand/mbr/mbr_com0_9600/Makefile +++ b/sys/arch/i386/stand/mbr/mbr_com0_9600/Makefile @@ -5,4 +5,6 @@ AFLAGS+= -DBOOTSEL -DBOOT_EXTENDED -DCOM_PORT=0 -DCOM_BAUD=9600 AFLAGS+= -DTERSE_ERROR -DNO_CHS AFLAGS+= "-DBOOTSEL_FLAGS=MBR_BS_ACTIVE|MBR_BS_EXTLBA|MBR_BS_ASCII" +AFLAGS+= "-Wa,--divide" + .include <../Makefile.mbr>