diff options
author | peter <peter@FreeBSD.org> | 1998-09-30 12:14:39 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1998-09-30 12:14:39 +0000 |
commit | 7c3b6382f171bc75d7db493218dd136b77da0668 (patch) | |
tree | 62afe5df7a64ca32ba34ce059e1b72e289d107db /sys/conf/Makefile.i386 | |
parent | 529bc17dcb7eefbe6e270a3bbfda6e90331a8d2f (diff) | |
download | FreeBSD-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.i386 | 19 |
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} |