Index: c/src/lib/libbsp/powerpc/virtex/Makefile.am
===================================================================
--- c/src/lib/libbsp/powerpc/virtex/Makefile.am	(revision 509e0f3ff3f83b40dc7d38e32f98225361d4f49f)
+++ c/src/lib/libbsp/powerpc/virtex/Makefile.am	(revision 546c105646b3748f55c1cdfc5a6047db7ad1a416)
@@ -23,8 +23,9 @@
 
 noinst_LIBRARIES = libbspstart.a
-libbspstart_a_SOURCES = ../../powerpc/shared/start/rtems_crti.S
-project_lib_DATA = rtems_crti.$(OBJEXT)
+libbspstart_a_SOURCES = start/start.S
+project_lib_DATA = start.$(OBJEXT)
 
-dist_project_lib_DATA += startup/linkcmds
+libbspstart_a_SOURCES += ../../powerpc/shared/start/rtems_crti.S
+project_lib_DATA += rtems_crti.$(OBJEXT)
 
 noinst_LIBRARIES += libbsp.a
@@ -37,6 +38,4 @@
     ../../shared/bsppredriverhook.c ../../shared/bsppretaskinghook.c \
     ../../shared/sbrk.c ../../shared/gnatinstallhandler.c
-# dlentry
-libbsp_a_SOURCES += dlentry/dlentry.S
 # bspconsole
 libbsp_a_SOURCES += console/consolelite.c ../../shared/console.c \
Index: c/src/lib/libbsp/powerpc/virtex/bsp_specs
===================================================================
--- c/src/lib/libbsp/powerpc/virtex/bsp_specs	(revision 509e0f3ff3f83b40dc7d38e32f98225361d4f49f)
+++ c/src/lib/libbsp/powerpc/virtex/bsp_specs	(revision 546c105646b3748f55c1cdfc5a6047db7ad1a416)
@@ -4,7 +4,6 @@
 
 *startfile:
-%{!qrtems: %(old_startfile)} %{!nostdlib: \
-%{qrtems:  ecrti%O%s rtems_crti%O%s  crtbegin.o%s \
-  -u __vectors -u download_entry}}
+%{!qrtems: %(old_startfile)} \
+%{!nostdlib: %{qrtems: ecrti%O%s rtems_crti%O%s  crtbegin.o%s start.o%s}}
 
 *endfile:
@@ -12,4 +11,4 @@
 
 *link:
-%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
+%{!qrtems: %(old_link)} %{qrtems: -dc -dp -u __vectors -N}
 
Index: src/lib/libbsp/powerpc/virtex/dlentry/dlentry.S
===================================================================
--- c/src/lib/libbsp/powerpc/virtex/dlentry/dlentry.S	(revision 509e0f3ff3f83b40dc7d38e32f98225361d4f49f)
+++ 	(revision )
@@ -1,157 +1,0 @@
-/*  dlentry.s
- *
- *  This file contains the entry code for RTEMS programs starting
- *  after download to RAM
- *
- *  Author:	Thomas Doerfler <td@imd.m.isar.de>
- *              IMD Ingenieurbuero fuer Microcomputertechnik
- *
- *  COPYRIGHT (c) 1998 by IMD
- *
- *  Changes from IMD are covered by the original distributions terms.
- *  This file has been derived from the papyrus BSP:
- *
- *  This file contains the entry veneer for RTEMS programs
- *  downloaded to Papyrus.
- *
- *  Author:	Andrew Bray <andy@i-cubed.co.uk>
- *
- *  COPYRIGHT (c) 1995 by i-cubed ltd.
- *
- *  To anyone who acknowledges that this file is provided "AS IS"
- *  without any express or implied warranty:
- *      permission to use, copy, modify, and distribute this file
- *      for any purpose is hereby granted without fee, provided that
- *      the above copyright notice and this notice appears in all
- *      copies, and that the name of i-cubed limited not be used in
- *      advertising or publicity pertaining to distribution of the
- *      software without specific, written prior permission.
- *      i-cubed limited makes no representations about the suitability
- *      of this software for any purpose.
- *
- *  derived from "helas403/dlentry.S":
- *  Id: dlentry.S,v 1.2 2000/08/02 16:30:57 joel Exp
- */
-
-#include <rtems/asm.h>
-
-/*
- *  The virtex ELF link scripts support three special sections:
- *    .entry    The actual entry point
- *    .vectors  The section containing the interrupt entry veneers.
- */
-
-/*
- *  Downloaded code loads the vectors separately to 0x00000100,
- *  so .entry can be over 256 bytes.
- *
- *  The other sections are linked in the following order:
- *    .entry
- *    .text
- *    .data
- *    .bss
- * see linker command file for section placement
- *
- *  The initial stack is set to stack.end
- *
- *  All the entry veneer has to do is to clear the BSS.
- */
-
-/*
- *  GDB likes to have debugging information for the entry veneer.
- *  Here was some DWARF information. IMD removed it, because we
- *  could not check, whether it was still correct. Sorry.
-
- */
-
-        .section .entry
-
-	PUBLIC_VAR (start)
-	PUBLIC_VAR (download_entry)
-	PUBLIC_VAR (__rtems_entry_point)
-SYM(start):
-SYM(download_entry):
-SYM(__rtems_entry_point):
-	bl	.startup
-base_addr:
-
-/*---------------------------------------------------------------------------
- * Parameters from linker
- *--------------------------------------------------------------------------*/
-toc_pointer:
-	.long	s.got
-bss_length:
-	.long	bss.size
-bss_addr:
-	.long	bss.start
-stack_top:
-	.long	stack.end
-PUBLIC_VAR (text_addr)
-text_addr:
-        .long   text.start
-
-PUBLIC_VAR (text_length)
-text_length:
-        .long   text.size
-/*---------------------------------------------------------------------------
- * Reset_entry.
- *--------------------------------------------------------------------------*/
-.startup:
-	/* Get start address, stack grows down from here... */
-	mflr	r1
-
-	/* Assume Bank regs set up..., cache etc. */
-        bl      bssclr
-
-#if 0
-	.extern SYM(__vectors)
-
-	lis	r2,__vectors@h          /* set EVPR exc. vector prefix */
-#else
-	lis	r2,0
-#endif
-	mtspr	evpr,r2
-
-        /*-------------------------------------------------------------------
-         * C_setup.
-         *------------------------------------------------------------------*/
-        lwz     r2,toc_pointer-base_addr(r1)       /* set r2 to toc */
-        lwz     r1,stack_top-base_addr(r1)         /* set r1 to stack_top */
-
-        addi    r1,r1,-56-4              /* start stack at text_addr - 56 */
-        addi    r3,r0,0x0                /* clear r3 */
-	stw	r3, 0(r1)		 /* Clear stack chain */
-	stw	r3, 4(r1)
-	stw	r3, 8(r1)
-	stw	r3, 12(r1)
-        lis	r5,environ@ha
-        la	r5,environ@l(r5)	/* environp */
-	li	r4, 0			/* argv */
-	li	r3, 0			/* argc */
-	.extern SYM(_SDA_BASE_)
-	lis r13,SYM(_SDA_BASE_)@h
-	ori r13,r13,SYM(_SDA_BASE_)@l
-        .extern SYM (boot_card)
-        b       SYM (boot_card) 	 /* call the first C routine */
-
-/*---------------------------------------------------------------------------
- * bssclr.
- *--------------------------------------------------------------------------*/
-bssclr:
-        /*-------------------------------------------------------------------
-         * Data move finished, zero out bss.
-         *------------------------------------------------------------------*/
-        lwz     r2,bss_addr-base_addr(r1)   /* start of bss set by loader */
-        lwz     r3,bss_length-base_addr(r1) /* bss length */
-        rlwinm. r3,r3,30,0x3FFFFFFF     /* form length/4 */
-        beqlr                           /* no bss */
-        mtctr   r3                      /* set ctr reg */
-        xor     r6,r6,r6                /* r6 = 0 */
-clear_bss:
-        stswi   r6,r2,0x4               /* store r6 */
-        addi    r2,r2,0x4               /* update r2 */
-        bdnz    clear_bss               /* decrement counter and loop */
-        blr                             /* return */
-.L_text_e:
-
-	.comm	environ,4,4
Index: c/src/lib/libbsp/powerpc/virtex/preinstall.am
===================================================================
--- c/src/lib/libbsp/powerpc/virtex/preinstall.am	(revision 509e0f3ff3f83b40dc7d38e32f98225361d4f49f)
+++ c/src/lib/libbsp/powerpc/virtex/preinstall.am	(revision 546c105646b3748f55c1cdfc5a6047db7ad1a416)
@@ -67,4 +67,8 @@
 PREINSTALL_FILES += $(PROJECT_INCLUDE)/coverhd.h
 
+$(PROJECT_LIB)/start.$(OBJEXT): start.$(OBJEXT) $(PROJECT_LIB)/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_LIB)/start.$(OBJEXT)
+TMPINSTALL_FILES += $(PROJECT_LIB)/start.$(OBJEXT)
+
 $(PROJECT_LIB)/rtems_crti.$(OBJEXT): rtems_crti.$(OBJEXT) $(PROJECT_LIB)/$(dirstamp)
 	$(INSTALL_DATA) $< $(PROJECT_LIB)/rtems_crti.$(OBJEXT)
Index: c/src/lib/libbsp/powerpc/virtex/start/start.S
===================================================================
--- c/src/lib/libbsp/powerpc/virtex/start/start.S	(revision 546c105646b3748f55c1cdfc5a6047db7ad1a416)
+++ c/src/lib/libbsp/powerpc/virtex/start/start.S	(revision 546c105646b3748f55c1cdfc5a6047db7ad1a416)
@@ -0,0 +1,156 @@
+/*
+ *  This file contains the entry code for RTEMS programs starting
+ *  after download to RAM
+ *
+ *  Author:	Thomas Doerfler <td@imd.m.isar.de>
+ *              IMD Ingenieurbuero fuer Microcomputertechnik
+ *
+ *  COPYRIGHT (c) 1998 by IMD
+ *
+ *  Changes from IMD are covered by the original distributions terms.
+ *  This file has been derived from the papyrus BSP:
+ *
+ *  This file contains the entry veneer for RTEMS programs
+ *  downloaded to Papyrus.
+ *
+ *  Author:	Andrew Bray <andy@i-cubed.co.uk>
+ *
+ *  COPYRIGHT (c) 1995 by i-cubed ltd.
+ *
+ *  To anyone who acknowledges that this file is provided "AS IS"
+ *  without any express or implied warranty:
+ *      permission to use, copy, modify, and distribute this file
+ *      for any purpose is hereby granted without fee, provided that
+ *      the above copyright notice and this notice appears in all
+ *      copies, and that the name of i-cubed limited not be used in
+ *      advertising or publicity pertaining to distribution of the
+ *      software without specific, written prior permission.
+ *      i-cubed limited makes no representations about the suitability
+ *      of this software for any purpose.
+ *
+ *  derived from "helas403/dlentry.S":
+ *  Id: dlentry.S,v 1.2 2000/08/02 16:30:57 joel Exp
+ */
+
+#include <rtems/asm.h>
+
+/*
+ *  The virtex ELF link scripts support three special sections:
+ *    .entry    The actual entry point
+ *    .vectors  The section containing the interrupt entry veneers.
+ */
+
+/*
+ *  Downloaded code loads the vectors separately to 0x00000100,
+ *  so .entry can be over 256 bytes.
+ *
+ *  The other sections are linked in the following order:
+ *    .entry
+ *    .text
+ *    .data
+ *    .bss
+ * see linker command file for section placement
+ *
+ *  The initial stack is set to stack.end
+ *
+ *  All the entry veneer has to do is to clear the BSS.
+ */
+
+/*
+ *  GDB likes to have debugging information for the entry veneer.
+ *  Here was some DWARF information. IMD removed it, because we
+ *  could not check, whether it was still correct. Sorry.
+
+ */
+
+        .section .entry
+
+	PUBLIC_VAR (start)
+	PUBLIC_VAR (download_entry)
+	PUBLIC_VAR (__rtems_entry_point)
+SYM(start):
+SYM(download_entry):
+SYM(__rtems_entry_point):
+	bl	.startup
+base_addr:
+
+/*---------------------------------------------------------------------------
+ * Parameters from linker
+ *--------------------------------------------------------------------------*/
+toc_pointer:
+	.long	s.got
+bss_length:
+	.long	bss.size
+bss_addr:
+	.long	bss.start
+stack_top:
+	.long	stack.end
+PUBLIC_VAR (text_addr)
+text_addr:
+        .long   text.start
+
+PUBLIC_VAR (text_length)
+text_length:
+        .long   text.size
+/*---------------------------------------------------------------------------
+ * Reset_entry.
+ *--------------------------------------------------------------------------*/
+.startup:
+	/* Get start address, stack grows down from here... */
+	mflr	r1
+
+	/* Assume Bank regs set up..., cache etc. */
+        bl      bssclr
+
+#if 0
+	.extern SYM(__vectors)
+
+	lis	r2,__vectors@h          /* set EVPR exc. vector prefix */
+#else
+	lis	r2,0
+#endif
+	mtspr	evpr,r2
+
+        /*-------------------------------------------------------------------
+         * C_setup.
+         *------------------------------------------------------------------*/
+        lwz     r2,toc_pointer-base_addr(r1)       /* set r2 to toc */
+        lwz     r1,stack_top-base_addr(r1)         /* set r1 to stack_top */
+
+        addi    r1,r1,-56-4              /* start stack at text_addr - 56 */
+        addi    r3,r0,0x0                /* clear r3 */
+	stw	r3, 0(r1)		 /* Clear stack chain */
+	stw	r3, 4(r1)
+	stw	r3, 8(r1)
+	stw	r3, 12(r1)
+        lis	r5,environ@ha
+        la	r5,environ@l(r5)	/* environp */
+	li	r4, 0			/* argv */
+	li	r3, 0			/* argc */
+	.extern SYM(_SDA_BASE_)
+	lis r13,SYM(_SDA_BASE_)@h
+	ori r13,r13,SYM(_SDA_BASE_)@l
+        .extern SYM (boot_card)
+        b       SYM (boot_card) 	 /* call the first C routine */
+
+/*---------------------------------------------------------------------------
+ * bssclr.
+ *--------------------------------------------------------------------------*/
+bssclr:
+        /*-------------------------------------------------------------------
+         * Data move finished, zero out bss.
+         *------------------------------------------------------------------*/
+        lwz     r2,bss_addr-base_addr(r1)   /* start of bss set by loader */
+        lwz     r3,bss_length-base_addr(r1) /* bss length */
+        rlwinm. r3,r3,30,0x3FFFFFFF     /* form length/4 */
+        beqlr                           /* no bss */
+        mtctr   r3                      /* set ctr reg */
+        xor     r6,r6,r6                /* r6 = 0 */
+clear_bss:
+        stswi   r6,r2,0x4               /* store r6 */
+        addi    r2,r2,0x4               /* update r2 */
+        bdnz    clear_bss               /* decrement counter and loop */
+        blr                             /* return */
+.L_text_e:
+
+	.comm	environ,4,4
