summaryrefslogtreecommitdiffstats
path: root/sys/conf/Makefile.i386
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1998-09-30 12:14:39 +0000
committerpeter <peter@FreeBSD.org>1998-09-30 12:14:39 +0000
commit7c3b6382f171bc75d7db493218dd136b77da0668 (patch)
tree62afe5df7a64ca32ba34ce059e1b72e289d107db /sys/conf/Makefile.i386
parent529bc17dcb7eefbe6e270a3bbfda6e90331a8d2f (diff)
downloadFreeBSD-src-7c3b6382f171bc75d7db493218dd136b77da0668.zip
FreeBSD-src-7c3b6382f171bc75d7db493218dd136b77da0668.tar.gz
Make the ELF kernel build produce a dynamic executable (!). This enables
the in-kernel linker to access the _DYNAMIC data for doing loadable elf modules. The alpha kernel is already done this way, I've borrowed some of the hacks from there. This is primarily aimed at the 3-stage boot process which is intended to be able to do pre-loading of kernel modules. Note that the entry point isn't 0xf0100000 any more, it'll be a little further on - but this value is stored in the headers. I don't think this will be a problem, but I'm sure somebody will tell me if it is. :-) I'm not sure if btxboot is going to like this, it doesn't do proper ELF header checking and assumes that there are exactly two program header entries and that they are both PT_LOAD entries - a bad assumption.
Diffstat (limited to 'sys/conf/Makefile.i386')
-rw-r--r--sys/conf/Makefile.i38619
1 files changed, 16 insertions, 3 deletions
diff --git a/sys/conf/Makefile.i386 b/sys/conf/Makefile.i386
index 6ccbee4..d76c3b4 100644
--- a/sys/conf/Makefile.i386
+++ b/sys/conf/Makefile.i386
@@ -1,7 +1,7 @@
# Makefile.i386 -- with config changes.
# Copyright 1990 W. Jolitz
# from: @(#)Makefile.i386 7.1 5/10/91
-# $Id: Makefile.i386,v 1.123 1998/09/15 21:07:07 gibbs Exp $
+# $Id: Makefile.i386,v 1.124 1998/09/21 06:39:11 bde Exp $
#
# Makefile for FreeBSD
#
@@ -101,11 +101,14 @@ SYSTEM_LD_TAIL= @echo rearranging symbols; \
size -aout ${.TARGET} ; chmod 755 ${.TARGET}
.endif
.if ${KERNFORMAT} == elf
+# kld compatable export of symbols.
SYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \
- setdef1.o
-SYSTEM_LD= @${LD} -elf -Bstatic -Ttext ${LOAD_ADDRESS} -e btext -defsym _DYNAMIC=0 \
+ setdef1.o hack.so
+SYSTEM_LD= @${LD} -elf -Bdynamic -T $S/i386/conf/kernel.script \
+ -export-dynamic -dynamic-linker /red/herring \
-o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
SYSTEM_LD_TAIL= @size -elf ${.TARGET} ; chmod 755 ${.TARGET}
+SYSTEM_DEP+= $S/i386/conf/kernel.script
.endif
%BEFORE_DEPEND
@@ -144,6 +147,16 @@ symbols.sort: ${I386}/i386/symbols.raw
locore.o: ${I386}/i386/locore.s assym.s
${NORMAL_S}
+.if ${KERNFORMAT} == elf
+# This is a hack. BFD "optimizes" away dynamic mode if there are no
+# dynamic references. We could probably do a '-Bforcedynamic' mode like
+# in the a.out ld. For now, this works.
+hack.so: Makefile
+ touch hack.c
+ ${CC} -elf -shared -nostdlib hack.c -o hack.so
+ rm -f hack.c
+.endif
+
setdef0.o: ${I386}/i386/setdef0.c setdefs.h
${NORMAL_C}
OpenPOWER on IntegriCloud