summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/m68k/dmv152/startup/bspstart.c4
-rw-r--r--c/src/lib/libbsp/m68k/dmv152/startup/linkcmds6
-rw-r--r--c/src/lib/libbsp/m68k/efi332/include/bsp.h2
-rw-r--r--c/src/lib/libbsp/m68k/efi332/start/start.c2
-rw-r--r--c/src/lib/libbsp/m68k/efi332/startup/bspstart.c5
-rw-r--r--c/src/lib/libbsp/m68k/efi332/startup/linkcmds5
-rw-r--r--c/src/lib/libbsp/m68k/efi68k/include/bsp.h2
-rw-r--r--c/src/lib/libbsp/m68k/efi68k/start/start.c2
-rw-r--r--c/src/lib/libbsp/m68k/efi68k/startup/bspstart.c5
-rw-r--r--c/src/lib/libbsp/m68k/efi68k/startup/linkcmds5
-rw-r--r--c/src/lib/libbsp/m68k/gen68302/start/start.S16
-rw-r--r--c/src/lib/libbsp/m68k/gen68302/startup/bspstart.c4
-rw-r--r--c/src/lib/libbsp/m68k/gen68302/startup/linkcmds3
-rw-r--r--c/src/lib/libbsp/m68k/gen68340/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/idp/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/mvme136/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/mvme147/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/mvme147s/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/mvme162/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/ods68302/startup/linkcmds2
-rw-r--r--c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c62
-rw-r--r--c/src/lib/libbsp/m68k/shared/start.S4
22 files changed, 102 insertions, 39 deletions
diff --git a/c/src/lib/libbsp/m68k/dmv152/startup/bspstart.c b/c/src/lib/libbsp/m68k/dmv152/startup/bspstart.c
index be4acce753..25e9d86629 100644
--- a/c/src/lib/libbsp/m68k/dmv152/startup/bspstart.c
+++ b/c/src/lib/libbsp/m68k/dmv152/startup/bspstart.c
@@ -57,9 +57,9 @@ void bsp_libc_init( void *, unsigned32, int );
void bsp_pretasking_hook(void)
{
extern void *_HeapStart;
- extern rtems_unsigned32 _HeapSize;
+ extern rtems_unsigned32 HeapSize;
- bsp_libc_init( &_HeapStart, _HeapSize, 0 );
+ bsp_libc_init( &_HeapStart, HeapSize, 0 );
#ifdef RTEMS_DEBUG
rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
diff --git a/c/src/lib/libbsp/m68k/dmv152/startup/linkcmds b/c/src/lib/libbsp/m68k/dmv152/startup/linkcmds
index 8372c2daee..2e6ec77838 100644
--- a/c/src/lib/libbsp/m68k/dmv152/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/dmv152/startup/linkcmds
@@ -111,9 +111,7 @@ SECTIONS
copy_end = .;
} >ram
.bss : {
- bss_start = .;
- . += (256 * 4);
- clear_start = .;
+ _clear_start = .;
*(.bss)
*(COMMON)
. = ALIGN (16);
@@ -127,7 +125,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
_WorkspaceBase = .;
} >ram
diff --git a/c/src/lib/libbsp/m68k/efi332/include/bsp.h b/c/src/lib/libbsp/m68k/efi332/include/bsp.h
index 6e5ffea7d7..284d54c27e 100644
--- a/c/src/lib/libbsp/m68k/efi332/include/bsp.h
+++ b/c/src/lib/libbsp/m68k/efi332/include/bsp.h
@@ -75,7 +75,7 @@ extern "C" {
extern char _etext[];
extern char _copy_start[];
extern char _edata[];
-extern char _bss_start[];
+extern char _clear_start[];
extern char end[];
extern char _copy_data_from_rom[];
extern char __end_of_ram[];
diff --git a/c/src/lib/libbsp/m68k/efi332/start/start.c b/c/src/lib/libbsp/m68k/efi332/start/start.c
index fa48e03ae2..4586a4c089 100644
--- a/c/src/lib/libbsp/m68k/efi332/start/start.c
+++ b/c/src/lib/libbsp/m68k/efi332/start/start.c
@@ -207,7 +207,7 @@ void dumby_start() {
*dst++ = *src++;
/* Zero bss */
- for (dst = _bss_start; dst< end; dst++)
+ for (dst = _clear_start; dst< end; dst++)
*dst = 0;
}
diff --git a/c/src/lib/libbsp/m68k/efi332/startup/bspstart.c b/c/src/lib/libbsp/m68k/efi332/startup/bspstart.c
index 45699ac0cc..23651d0736 100644
--- a/c/src/lib/libbsp/m68k/efi332/startup/bspstart.c
+++ b/c/src/lib/libbsp/m68k/efi332/startup/bspstart.c
@@ -85,6 +85,7 @@ void bsp_pretasking_hook(void)
void bsp_start( void )
{
void *vbr;
+ extern unsigned int _WorkspaceBase;
/*
* we only use a hook to get the C library initialized.
@@ -97,7 +98,11 @@ void bsp_start( void )
Cpu_table.interrupt_vector_table = vbr;
BSP_Configuration.work_space_start = (void *)
+ (((unsigned int)_WorkspaceBase + STACK_SIZE + 0x100) & 0xffffff00);
+
+#if 0
(((unsigned int)_end + STACK_SIZE + 0x100) & 0xffffff00);
+#endif
/* Clock_exit is done as an atexit() function */
}
diff --git a/c/src/lib/libbsp/m68k/efi332/startup/linkcmds b/c/src/lib/libbsp/m68k/efi332/startup/linkcmds
index ead7ebbe3e..85038ff746 100644
--- a/c/src/lib/libbsp/m68k/efi332/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/efi332/startup/linkcmds
@@ -20,7 +20,7 @@ __DYNAMIC = 0;
* | _edata |
* +--------------------+
* | .bss |
- * | __bss_start | start of bss, cleared by crt0
+ * | _clear_start| start of bss, cleared by crt0
* | _end | start of heap, used by sbrk()
* +--------------------+
* | heap space |
@@ -135,7 +135,6 @@ SECTIONS
PROVIDE (_copy_end = .);
} >ram
.bss : {
- PROVIDE (_bss_start = .);
PROVIDE (_clear_start = .);
*(.bss)
*(COMMON)
@@ -150,7 +149,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/efi68k/include/bsp.h b/c/src/lib/libbsp/m68k/efi68k/include/bsp.h
index eea1ea6348..b222fa5128 100644
--- a/c/src/lib/libbsp/m68k/efi68k/include/bsp.h
+++ b/c/src/lib/libbsp/m68k/efi68k/include/bsp.h
@@ -75,7 +75,7 @@ extern "C" {
extern char _etext[];
extern char _copy_start[];
extern char _edata[];
-extern char _bss_start[];
+extern char _clear_start[];
extern char end[];
extern char _copy_data_from_rom[];
extern char __end_of_ram[];
diff --git a/c/src/lib/libbsp/m68k/efi68k/start/start.c b/c/src/lib/libbsp/m68k/efi68k/start/start.c
index ea6973ee11..1904d34fb8 100644
--- a/c/src/lib/libbsp/m68k/efi68k/start/start.c
+++ b/c/src/lib/libbsp/m68k/efi68k/start/start.c
@@ -49,7 +49,7 @@ void boot_card();
*dst++ = *src++;
/* Zero bss */
- for (dst = _bss_start; dst< end; dst++)
+ for (dst = _clear_start; dst< end; dst++)
*dst = 0;
}
diff --git a/c/src/lib/libbsp/m68k/efi68k/startup/bspstart.c b/c/src/lib/libbsp/m68k/efi68k/startup/bspstart.c
index eb89a283cb..fdc19d1c58 100644
--- a/c/src/lib/libbsp/m68k/efi68k/startup/bspstart.c
+++ b/c/src/lib/libbsp/m68k/efi68k/startup/bspstart.c
@@ -90,6 +90,7 @@ void bsp_pretasking_hook(void)
void bsp_start( void )
{
void *vbr;
+ extern unsigned int _WorkspaceBase;
/* set_debug_traps(); */
/* breakpoint(); */
@@ -105,7 +106,11 @@ void bsp_start( void )
Cpu_table.interrupt_vector_table = vbr;
BSP_Configuration.work_space_start = (void *)
+ (((unsigned int)_WorkspaceBase + STACK_SIZE + 0x100) & 0xffffff00);
+
+#if 0
(((unsigned int)_end + STACK_SIZE + 0x100) & 0xffffff00);
+#endif
/* Clock_exit is done as an atexit() function */
}
diff --git a/c/src/lib/libbsp/m68k/efi68k/startup/linkcmds b/c/src/lib/libbsp/m68k/efi68k/startup/linkcmds
index c01b91a331..775c84d955 100644
--- a/c/src/lib/libbsp/m68k/efi68k/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/efi68k/startup/linkcmds
@@ -20,7 +20,7 @@ __DYNAMIC = 0;
* | _edata |
* +--------------------+
* | .bss |
- * | __bss_start | start of bss, cleared by crt0
+ * | _clear_start| start of bss, cleared by crt0
* | _end | start of heap, used by sbrk()
* +--------------------+
* | heap space |
@@ -144,7 +144,6 @@ SECTIONS
PROVIDE (_copy_end = .);
} >ram
.bss : {
- PROVIDE (_bss_start = .);
PROVIDE (_clear_start = .);
*(.bss)
*(COMMON)
@@ -159,7 +158,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/gen68302/start/start.S b/c/src/lib/libbsp/m68k/gen68302/start/start.S
index a3dd257fe7..98947985f4 100644
--- a/c/src/lib/libbsp/m68k/gen68302/start/start.S
+++ b/c/src/lib/libbsp/m68k/gen68302/start/start.S
@@ -197,22 +197,18 @@ cpy_Bad1: move.l d1,(a0)+
| zero out uninitialized data area
|
zerobss:
- moveal # SYM (_end),a0 | find end of .bss
- moveal # SYM (_bss_start),a1 | find beginning of .bss
+ moveal # SYM (_clear_end),a0 | find end of .bss
+ moveal # SYM (_clear_start),a1 | find beginning of .bss
moveq #0,d0
loop: movel d0,a1@+ | to zero out uninitialized
cmpal a0,a1
- jlt loop | loop until _end reached
+ jlt loop | loop until _clear_end reached
- movel # SYM (_end),d0 | d0 = end of bss/start of heap
- addl # SYM (heap_size),d0 | d0 = end of heap
- movel d0, SYM (stack_start) | Save for brk() routine
- addl # SYM (stack_size),d0 | make room for stack
- andl #0xffffffc0,d0 | align it on 16 byte boundary
+ movel d0, SYM (_stack_init) | Set Stack pointer
movw #0x3700,sr | SUPV MODE,INTERRUPTS OFF!!!
- movel d0,a7 | set master stack pointer
- movel d0,a6 | set base pointer
+ movel d0,a7 | set master stack pointer
+ movel d0,a6 | set base pointer
/*
* RTEMS should maintain a separate interrupt stack on CPUs
diff --git a/c/src/lib/libbsp/m68k/gen68302/startup/bspstart.c b/c/src/lib/libbsp/m68k/gen68302/startup/bspstart.c
index ae5f6774df..ac7666d1bd 100644
--- a/c/src/lib/libbsp/m68k/gen68302/startup/bspstart.c
+++ b/c/src/lib/libbsp/m68k/gen68302/startup/bspstart.c
@@ -56,10 +56,10 @@ void bsp_libc_init( void *, unsigned32, int );
void bsp_pretasking_hook(void)
{
- extern int _end;
+ extern int end;
rtems_unsigned32 heap_start;
- heap_start = (rtems_unsigned32) &_end;
+ heap_start = (rtems_unsigned32) &end;
if (heap_start & (CPU_ALIGNMENT-1))
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
diff --git a/c/src/lib/libbsp/m68k/gen68302/startup/linkcmds b/c/src/lib/libbsp/m68k/gen68302/startup/linkcmds
index 8937b8640d..2fd0352112 100644
--- a/c/src/lib/libbsp/m68k/gen68302/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/gen68302/startup/linkcmds
@@ -114,7 +114,6 @@ SECTIONS
PROVIDE (_copy_end = .);
} >ram
.bss : {
- PROVIDE (_bss_start = .);
PROVIDE (_clear_start = .);
*(.bss)
*(COMMON)
@@ -129,7 +128,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/gen68340/startup/linkcmds b/c/src/lib/libbsp/m68k/gen68340/startup/linkcmds
index a767a348e0..0a716924c1 100644
--- a/c/src/lib/libbsp/m68k/gen68340/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/gen68340/startup/linkcmds
@@ -172,7 +172,7 @@ SECTIONS {
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/idp/startup/linkcmds b/c/src/lib/libbsp/m68k/idp/startup/linkcmds
index 9a30f57c94..d676f6589d 100644
--- a/c/src/lib/libbsp/m68k/idp/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/idp/startup/linkcmds
@@ -126,7 +126,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/mvme136/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme136/startup/linkcmds
index f24329fdcc..486b188387 100644
--- a/c/src/lib/libbsp/m68k/mvme136/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/mvme136/startup/linkcmds
@@ -126,7 +126,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/mvme147/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme147/startup/linkcmds
index 9a3a1b705d..234232c4fc 100644
--- a/c/src/lib/libbsp/m68k/mvme147/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/mvme147/startup/linkcmds
@@ -130,7 +130,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/mvme147s/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme147s/startup/linkcmds
index f4cccbd241..773781321a 100644
--- a/c/src/lib/libbsp/m68k/mvme147s/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/mvme147s/startup/linkcmds
@@ -130,7 +130,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/mvme162/startup/linkcmds b/c/src/lib/libbsp/m68k/mvme162/startup/linkcmds
index 3037eda84d..e51d8196f0 100644
--- a/c/src/lib/libbsp/m68k/mvme162/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/mvme162/startup/linkcmds
@@ -133,7 +133,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/ods68302/startup/linkcmds b/c/src/lib/libbsp/m68k/ods68302/startup/linkcmds
index eff2edd706..89858099cf 100644
--- a/c/src/lib/libbsp/m68k/ods68302/startup/linkcmds
+++ b/c/src/lib/libbsp/m68k/ods68302/startup/linkcmds
@@ -128,7 +128,7 @@ SECTIONS
. += HeapSize;
PROVIDE (_HeapEnd = .);
- clear_end = .;
+ PROVIDE (_clear_end = .);
PROVIDE (_WorkspaceBase = .);
} >ram
diff --git a/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c b/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c
new file mode 100644
index 0000000000..b81acbb6cf
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/shared/m68kpretaskinghook.c
@@ -0,0 +1,62 @@
+/*
+ * This routine is an implementation of the bsp_pretasking_hook
+ * that can be used by all m68k BSPs following linkcmds conventions
+ * regarding heap, stack, and workspace allocation.
+ *
+ * COPYRIGHT (c) 1989-1999.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <rtems.h>
+#include <bsp.h>
+#include <libcsupport.h>
+
+/*
+ * Function: bsp_pretasking_hook
+ * Created: 95/03/10
+ *
+ * Description:
+ * BSP pretasking hook. Called just before drivers are initialized.
+ * Used to setup libc and install any BSP extensions.
+ *
+ * NOTES:
+ * Must not use libc (to do io) from here, since drivers are
+ * not yet initialized.
+ *
+ */
+
+extern void bsp_libc_init( void *, unsigned long, int );
+extern rtems_configuration_table BSP_Configuration;
+
+extern unsigned long _RamSize;
+extern void *_WorkspaceBase;
+extern void *_HeapSize;
+
+void bsp_pretasking_hook(void)
+{
+ void *heapStart;
+ unsigned long heapSize = (unsigned long)&_HeapSize;
+ unsigned long ramSpace;
+
+ heapStart = (void *)
+ ((unsigned long)&_WorkspaceBase + BSP_Configuration.work_space_size);
+ ramSpace = _RamSize - (unsigned long) heapStart;
+
+ if (heapSize == 0)
+ heapSize = ramSpace;
+ else if (heapSize > ramSpace)
+ rtems_fatal_error_occurred (('H'<<24) | ('E'<<16) | ('A'<<8) | 'P');
+
+ bsp_libc_init(heapStart, heapSize, 0);
+
+#ifdef RTEMS_DEBUG
+ rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
+#endif
+
+}
diff --git a/c/src/lib/libbsp/m68k/shared/start.S b/c/src/lib/libbsp/m68k/shared/start.S
index 2791fab91e..50099d9c43 100644
--- a/c/src/lib/libbsp/m68k/shared/start.S
+++ b/c/src/lib/libbsp/m68k/shared/start.S
@@ -68,8 +68,8 @@ SYM (start_around):
| zero out uninitialized data area
|
zerobss:
- moveal # SYM (end),a0 | find end of .bss
- moveal # SYM (_bss_start),a1 | find beginning of .bss
+ moveal # SYM (_clear_end),a0 | find end of .bss
+ moveal # SYM (_clear_start),a1 | find beginning of .bss
movel #0,d0
loop: movel #0,a1@+ | to zero out uninitialized