run so that this locore0.o is always at the start of the executable.
But randomize the link order of all other .o files in the kernel, so
that their exec/rodata/data/bss segments land all over the place.
I haven't worked on the unmap/smashing of the startup code yet.
-# $OpenBSD: Makefile.landisk,v 1.62 2017/06/03 22:21:33 deraadt Exp $
+# $OpenBSD: Makefile.landisk,v 1.63 2017/06/08 05:35:23 deraadt Exp $
# For instructions on building kernels consult the config(8) and options(4)
# manual pages.
CMACHFLAGS+= -fno-builtin-printf -fno-builtin-snprintf \
-fno-builtin-vsnprintf -fno-builtin-log \
-fno-builtin-log2 -fno-builtin-malloc ${NOPIE_FLAGS}
+SORTR= sort -R
.if ${IDENT:M-DNO_PROPOLICE}
CMACHFLAGS+= -fno-stack-protector
.endif
+.if ${IDENT:M-DSMALL_KERNEL}
+SORTR= cat
+.endif
DEBUG?= -g
COPTS?= -O2
# ${SYSTEM_LD_HEAD}
# ${SYSTEM_LD} swapxxx.o
# ${SYSTEM_LD_TAIL}
-SYSTEM_HEAD= locore.o param.o ioconf.o
-SYSTEM_OBJ= ${SYSTEM_HEAD} ${OBJS}
+SYSTEM_HEAD= locore0.o gap.o
+SYSTEM_OBJ= ${SYSTEM_HEAD} ${OBJS} param.o ioconf.o
SYSTEM_DEP= Makefile ${SYSTEM_OBJ}
SYSTEM_LD_HEAD= @rm -f $@
SYSTEM_LD= @echo ${LD} ${LINKFLAGS} -o $@ '$${SYSTEM_HEAD} vers.o $${OBJS}'; \
umask 007; \
- ${LD} ${LINKFLAGS} -o $@ ${SYSTEM_HEAD} vers.o ${OBJS}
+ echo ${OBJS} param.o ioconf.o vers.o | tr " " "\n" | ${SORTR} > lorder; \
+ ${LD} ${LINKFLAGS} -o $@ ${SYSTEM_HEAD} `cat lorder`
SYSTEM_LD_TAIL= @${SIZE} $@
.if ${DEBUG} == "-g"
sh $S/conf/newvers.sh
${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
+gap.S: ${SYSTEM_SWAP_DEP} Makefile
+ umask 007; sh $S/conf/makegap.sh 0xc3 > gap.S
+
+gap.o: gap.S
+ umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
+
clean:
- rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} param.c
+ rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
+ gap.S lorder param.c
cleandir: clean
rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
rm -f db_structinfo.o
locore.o: ${_machdir}/${_mach}/locore.S assym.h
+locore0.o: ${_machdir}/${_mach}/locore0.S assym.h
locore_subr.o vectors.o in_cksum.o: assym.h
# The install target can be redefined by putting a
-# $OpenBSD: files.landisk,v 1.12 2016/01/08 15:54:13 jcs Exp $
+# $OpenBSD: files.landisk,v 1.13 2017/06/08 05:35:23 deraadt Exp $
# $NetBSD: files.landisk,v 1.2 2006/09/07 01:55:02 uwe Exp $
# maxpartitions must be first item in files.${MACHINE}
file arch/landisk/landisk/disksubr.c disk
file arch/landisk/landisk/intr.c
file arch/landisk/landisk/machdep.c
+file arch/landisk/landisk/locore.S
#
# System bus types
-/* $OpenBSD: locore.S,v 1.3 2008/06/26 05:42:11 ray Exp $ */
+/* $OpenBSD: locore.S,v 1.4 2017/06/08 05:35:25 deraadt Exp $ */
/* $NetBSD: locore.S,v 1.1 2006/09/01 21:26:18 uwe Exp $ */
/*-
#include <sh/trap.h>
#include <sh/mmu_sh4.h>
-/*
- * void start(int howto, void *bootinfo);
- * Kernel entry point.
- */
-NENTRY(start)
-ALTENTRY(kernel_text)
- /* Set bootstrap stack pointer */
- mov.l _L.bootstrap_stack, r15
-
- /* Mask all interrupt */
- __INTR_MASK(r0, r1)
-
- /* MMU off */
- mov.l _L.MMUCR, r0
- xor r1, r1
- mov.l r1, @r0
-
- /* Make sure to change register bank 0 */
- mov #0x20, r1
- stc sr, r0
- swap.b r1, r1
- swap.w r1, r1
- not r1, r1
- and r1, r0
- ldc r0, sr /* SR.RB = 0 */
-
- /* Go! */
- mov.l _L.landisk_startup, r0
- jmp @r0
- nop
-
- /* NOTREACHED */
- .align 2
-_L.landisk_startup: .long _C_LABEL(landisk_startup)
-_L.bootstrap_stack: .long _C_LABEL(start)
-_L.MMUCR: .long SH4_MMUCR
-
ENTRY(getramsize)
mov #4, r0
trapa #0x3f
--- /dev/null
+/* $OpenBSD: locore0.S,v 1.1 2017/06/08 05:35:25 deraadt Exp $ */
+/* $NetBSD: locore.S,v 1.1 2006/09/01 21:26:18 uwe Exp $ */
+
+/*-
+ * Copyright (c) 2002 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "assym.h"
+
+#include <sh/asm.h>
+#include <sh/locore.h>
+#include <sh/trap.h>
+#include <sh/mmu_sh4.h>
+
+/*
+ * void start(int howto, void *bootinfo);
+ * Kernel entry point.
+ */
+NENTRY(start)
+ALTENTRY(kernel_text)
+ /* Set bootstrap stack pointer */
+ mov.l _L.bootstrap_stack, r15
+
+ /* Mask all interrupt */
+ __INTR_MASK(r0, r1)
+
+ /* MMU off */
+ mov.l _L.MMUCR, r0
+ xor r1, r1
+ mov.l r1, @r0
+
+ /* Make sure to change register bank 0 */
+ mov #0x20, r1
+ stc sr, r0
+ swap.b r1, r1
+ swap.w r1, r1
+ not r1, r1
+ and r1, r0
+ ldc r0, sr /* SR.RB = 0 */
+
+ /* Go! */
+ mov.l _L.landisk_startup, r0
+ jmp @r0
+ nop
+
+ /* NOTREACHED */
+ .align 2
+_L.landisk_startup: .long _C_LABEL(landisk_startup)
+_L.bootstrap_stack: .long _C_LABEL(start)
+_L.MMUCR: .long SH4_MMUCR