diff --git a/bin/make-main-dist.sh b/bin/make-main-dist.sh
index d938c36e7b416f9bf1d9613d9efc0811bd2fb9c0..ace8e84ec77ae2480271b62a8e26effdadd051a8 100755
--- a/bin/make-main-dist.sh
+++ b/bin/make-main-dist.sh
@@ -96,7 +96,9 @@ install -d ${GROUP} ${OWNER} -m 0755 $DESTDIR/${MANDIR}
 install ${GROUP} ${OWNER} -m 0755 $TARGET/lisp/lisp $DESTDIR/bin/
 if [ "$EXECUTABLE" = "true" ]
 then
-    install ${GROUP} ${OWNER} -m 0755 $TARGET/lisp/lisp.a $DESTDIR/lib/cmucl/lib/
+    install ${GROUP} ${OWNER} -m 0555 $TARGET/lisp/lisp.a $DESTDIR/lib/cmucl/lib/
+    install ${GROUP} ${OWNER} -m 0555 $TARGET/lisp/exec-init.o $DESTDIR/lib/cmucl/lib/
+    install ${GROUP} ${OWNER} -m 0555 $TARGET/lisp/exec-final.o $DESTDIR/lib/cmucl/lib/
     install ${GROUP} ${OWNER} -m 0755 src/tools/linker.sh $DESTDIR/lib/cmucl/lib/
     if [ -f src/tools/$SCRIPT-cmucl-linker-script ]; then
 	install ${GROUP} ${OWNER} -m 0755 src/tools/$SCRIPT-cmucl-linker-script $DESTDIR/lib/cmucl/lib/
diff --git a/src/lisp/GNUmakefile b/src/lisp/GNUmakefile
index 29bb52ac792e69910360ba0766949e04ff5cf128..4abc3d26ba4f6e8b6e5a27da288421b7569b2374 100644
--- a/src/lisp/GNUmakefile
+++ b/src/lisp/GNUmakefile
@@ -52,21 +52,15 @@ version.o : version.c version
 	$(CC) ${CFLAGS} $(CPPFLAGS) -DVERSION=`cat version` -c $<
 
 lisp: ${OBJS} version.o
-	$(CC) -g ${OS_LINK_FLAGS} -o ,lisp \
-		${OBJS} version.o \
-		${OS_LIBS} -lm
+	$(CC) -g ${OS_LINK_FLAGS} -o ,lisp $^ ${OS_LIBS} -lm
 	mv -f ,lisp lisp
 
 # Create a library out of all the object files so we can build an
 # executable.  However, we need to remove exec-init.o from the library
-# and replace it with exec-final.o because exec-final.o sets the
-# builtin_image_flag to 1 so that the runtime knows the runtime
-# contains the core sections.
 lisp.a:	version.o ${OBJS} ${EXEC_FINAL_OBJ}
 	$(AR) crs lisp.a ${OBJS} version.o
 ifneq (${EXEC_FINAL_OBJ},)
 	$(AR) d lisp.a exec-init.o
-	$(AR) r lisp.a ${EXEC_FINAL_OBJ}
 endif
 
 version:
diff --git a/src/tools/linker.sh b/src/tools/linker.sh
index a5a99ef66d9a8a3181d6eb25e1cd9300d55d51fa..0b22890865b59a831b1b0ad49ce401b0c2029a80 100755
--- a/src/tools/linker.sh
+++ b/src/tools/linker.sh
@@ -139,5 +139,5 @@ trap 'rm -f $OUTDIR/$OPT_IFADDR $OUTDIR/CORRO.o $OUTDIR/CORSTA.o $OUTDIR/CORDYN.
 
 (cd $OUTDIR
 echo "long initial_function_addr = $IFADDR;" > $OPT_IFADDR
-$CCOMPILER -m32 -o $OUTNAME $OPT_IFADDR $OPT_ARCHIVE $OPT_CORE $RO_ADDR $STATIC_ADDR $DYN_ADDR $OPT_EXTRA $OS_LIBS -lm)
+$CCOMPILER -m32 -o $OUTNAME $OPT_IFADDR $OPT_ARCHIVE $CMUCLLIB/exec-final.o $OPT_CORE $RO_ADDR $STATIC_ADDR $DYN_ADDR $OPT_EXTRA $OS_LIBS -lm)