Adapted make-exe rules of testsuites to the patmos-clang compiler toolchain.

Improved startup code.
This commit is contained in:
afpr
2013-07-05 13:54:09 +01:00
parent 40d91e9d2d
commit f6962ce139
15 changed files with 266 additions and 199 deletions

2
.gitignore vendored Normal file → Executable file
View File

@@ -7,3 +7,5 @@ config.sub
install-sh
Makefile.in
missing
.project
patmos.sh

8
c/src/aclocal/prog-cc.m4 Normal file → Executable file
View File

@@ -32,8 +32,8 @@ dnl check if the compiler supports --specs
RTEMS_GCC_SPECS
AS_IF([test x"$rtems_cv_gcc_specs" = xyes],[
AS_IF([ test "$CC" = patmos-unknown-rtems-clang --pipe], [
GCCSPECS="-L\$(PROJECT_ROOT)/lib/ -L\$(PROJECT_ROOT)/$RTEMS_BSP/lib/"
AS_IF([ test "$CC" = "patmos-unknown-rtems-clang --pipe"], [
GCCSPECS="-L=\$(PROJECT_ROOT)/lib/ -L=\$(PROJECT_ROOT)/$RTEMS_BSP/lib/"
], [GCCSPECS="-B\$(PROJECT_ROOT)/lib/ -B\$(PROJECT_ROOT)/$RTEMS_BSP/lib/"
GCCSPECS="${GCCSPECS} -specs bsp_specs -qrtems"])])
AC_SUBST(GCCSPECS)
@@ -44,8 +44,8 @@ AS_IF([test x"$rtems_cv_gcc_isystem" = xyes],[
])
AC_SUBST(RTEMS_CPPFLAGS)
AS_IF([test "$GCC" = yes],[
AS_IF([ test "$CC" = patmos-unknown-rtems-clang --pipe], [
AS_IF([test "$GCC" = yes],[
AS_IF([ test "$CC" = "patmos-unknown-rtems-clang --pipe"], [
RTEMS_RELLDFLAGS="-fpatmos-link-object"
], [RTEMS_RELLDFLAGS="-qnolinkcmds -nostdlib -Wl,-r"])])
AC_SUBST(RTEMS_RELLDFLAGS)

View File

@@ -32,8 +32,8 @@ libbsp_a_SOURCES =
# startup
libbsp_a_SOURCES += ../../shared/bspclean.c ../../shared/bsplibc.c \
../../shared/bsppost.c ../../shared/bootcard.c startup/bspstart.c \
../../patmos/shared/bsppretaskinghook.c ../../shared/bsppredriverhook.c \
../../patmos/shared/bspgetworkarea.c ../../shared/sbrk.c
../../shared/bsppretaskinghook.c ../../shared/bsppredriverhook.c \
../../shared/bspgetworkarea.c ../../shared/sbrk.c
# console
libbsp_a_SOURCES += console/console.c
# debugio
@@ -41,8 +41,5 @@ libbsp_a_SOURCES += console/debugputs.c
# clock
libbsp_a_SOURCES += clock/ckinit.c ../../../shared/clockdrv_shell.h
# timer
libbsp_a_SOURCES += timer/timer.c
include $(srcdir)/preinstall.am
include $(top_srcdir)/../../../../automake/local.am

View File

@@ -28,7 +28,7 @@ void console_outbyte_polled(
unsigned char ch
)
{
if (file == STDOUT_FILENO || file == STDERR_FILENO)
if (port == STDOUT_FILENO || port == STDERR_FILENO)
{
int s;

View File

@@ -11,7 +11,9 @@ RTEMS_CPU_MODEL=pasim
# This contains the compiler options necessary to select the CPU model
# and (hopefully) optimize for it.
CPU_CFLAGS = -msoft-float -Xllc -trap-func=abort_trap
CPU_CFLAGS = -msoft-float
# optimize flag: typically -O2
CFLAGS_OPTIMIZE_V = -O2 -g
CFLAGS_OPTIMIZE_V = -O2 -g -Xllc -trap-func=abort_trap
LD_LIBS += $(MANAGERS_NOT_WANTED:%=-lno_%$(LIB_VARIANT)) -l=c -l=rtemscpu -l=rtemsbsp $(PROJECT_RELEASE)/lib/start.o -nostartfiles -Xgold -Map -Xgold map.map -Xgold --script=$(PROJECT_RELEASE)/lib/linkcmds -Xgold -entry=hard_reset

View File

@@ -30,7 +30,7 @@ SYM(hard_reset):
*/
li %r29 = PASIM_SHADOW_STACK_BASE /* Initialize shadow stack pointer */
li %r9 = PASIM_STACK_CACHE_BASE
mts %s5 = %r9 /* Initialize the stack cache's spill bottom pointer */
mts %s5 = %r9 /* Initialize the stack cache's top pointer */
mts %s6 = %r9 /* Initialize the stack cache's spill top pointer */
/*
@@ -46,7 +46,7 @@ SYM(hard_reset):
li %r11 = _bss_start /* r11 = end of initialized data in RAM */
cmplt %p2 = %r10, %r11 /* Is the pointer past the end of dest? */
(!%p2)br clear_bss
(!$p2) br clear_bss
nop
nop
nop
@@ -57,7 +57,7 @@ copy_data:
add %r9 = %r9, 4 /* bump the source pointer */
add %r10 = %r10, 4 /* bump the destination pointer */
cmplt %p2 = %r10, %r11 /* Is the pointer past the end of dest? */
(%p2)br copy_data
($p2) br copy_data
nop
nop
nop
@@ -67,7 +67,7 @@ clear_bss: /* clear the bss */
li %r10 = _end /* r10 = end of bss */
cmple %p2 = %r9, %r10
(!%p2)br call_boot
(!$p2) br call_boot
nop
nop
nop
@@ -76,7 +76,7 @@ zero_bss:
swc [ %r9 + 0 ] = %r0 /* zero the bss */
add %r9 = %r9, 4 /* bump the bss pointer */
cmple %p2 = %r9, %r10
(%p2)br zero_bss
($p2) br zero_bss
nop
nop
@@ -85,7 +85,7 @@ zero_bss:
*/
call_boot:
li %r30 = hard_reset /* set function base */
li %r30 = hard_reset /* set function return address */
call SYM(boot_card) /* invoke boot_card function */
li %r3 = 0 /* pass argument argc */
li %r4 = 0 /* pass argument argv */

View File

@@ -31,7 +31,7 @@ ASFLAGS = $(CPU_ASFLAGS) $(XASFLAGS)
GCCSPECS_OPTIMIZE_V =
GCCSPECS_DEBUG_V = -qrtems_debug
GCCSPECS = -I$(PROJECT_RELEASE)/lib/include L=$(PROJECT_RELEASE)/lib/
GCCSPECS = -I$(PROJECT_RELEASE)/lib/include -L=$(PROJECT_RELEASE)/lib/
GCCSPECS += $(GCCSPECS_$(VARIANT_V)_V)
CC += $(GCCSPECS)

5
cpukit/aclocal/prog-cc.m4 Normal file → Executable file
View File

@@ -36,7 +36,8 @@ RTEMS_CPPFLAGS="-I\$(top_builddir) -I\$(PROJECT_INCLUDE)"
AC_SUBST(RTEMS_CPPFLAGS)
AS_IF([test "$GCC" = yes],[
RTEMS_RELLDFLAGS="-qnolinkcmds -nostdlib -r"
])
AS_IF([ test "$CC" = "patmos-unknown-rtems-clang --pipe"], [
RTEMS_RELLDFLAGS="-fpatmos-link-object"
], [RTEMS_RELLDFLAGS="-qnolinkcmds -nostdlib -Wl,-r"])])
AC_SUBST(RTEMS_RELLDFLAGS)
])

View File

@@ -150,40 +150,39 @@ void _CPU_Context_switch(
* save general-purpose registers (skip r0 which is always 0)
* address of the previous task is passed as function argument in register r3
*/
asm volatile("and $r0 = $r0, 0x0 \n\t" //reset r0 to 0
"sres %0 \n\t" /* reserve space in cache (1) reserve space for entire stack or just for current context? (2) if we reserve space, do we alter the address of the next context? */
"swc [ $r3 + %1 ] = $r1 \n\t" //save r1
"swc [ $r3 + %2 ] = $r2 \n\t" //save r2
"swc [ $r3 + %3 ] = $r3 \n\t" //save r3
"swc [ $r3 + %4 ] = $r4 \n\t" //save r4
"swc [ $r3 + %5 ] = $r5 \n\t" //save r5
"swc [ $r3 + %6 ] = $r6 \n\t" //save r6
"swc [ $r3 + %7 ] = $r7 \n\t" //save r7
"swc [ $r3 + %8 ] = $r8 \n\t" //save r8
"swc [ $r3 + %9 ] = $r9 \n\t" //save r9
"swc [ $r3 + %10 ] = $r10 \n\t" //save r10
"swc [ $r3 + %11 ] = $r11 \n\t" //save r11
"swc [ $r3 + %12 ] = $r12 \n\t" //save r12
"swc [ $r3 + %13 ] = $r13 \n\t" //save r13
"swc [ $r3 + %14 ] = $r14 \n\t" //save r14
"swc [ $r3 + %15 ] = $r15 \n\t" //save r15
"swc [ $r3 + %16 ] = $r16 \n\t" //save r16
"swc [ $r3 + %17 ] = $r17 \n\t" //save r17
"swc [ $r3 + %18 ] = $r18 \n\t" //save r18
"swc [ $r3 + %19 ] = $r19 \n\t" //save r19
"swc [ $r3 + %20 ] = $r20 \n\t" //save r20
"swc [ $r3 + %21 ] = $r21 \n\t" //save r21
"swc [ $r3 + %22 ] = $r22 \n\t" //save r22
"swc [ $r3 + %23 ] = $r23 \n\t" //save r23
"swc [ $r3 + %24 ] = $r24 \n\t" //save r24
"swc [ $r3 + %25 ] = $r25 \n\t" //save r25
"swc [ $r3 + %26 ] = $r26 \n\t" //save r26
"swc [ $r3 + %27 ] = $r27 \n\t" //save r27
"swc [ $r3 + %28 ] = $r28 \n\t" //save r28
"swc [ $r3 + %29 ] = $r29 \n\t" //save r29
"swc [ $r3 + %30 ] = $r30 \n\t" //save r30
"swc [ $r3 + %31 ] = $r31 \n\t" //save r31
: : "i" (CONTEXT_CONTROL_SIZE), "i" (r1_OFFSET),"i" (r2_OFFSET), "i" (r3_OFFSET),
asm volatile("and $r0 = $r0, 0x0 \n\t" //reset r0 to 0
"swc [ $r3 + %0 ] = $r1 \n\t" //save r1
"swc [ $r3 + %1 ] = $r2 \n\t" //save r2
"swc [ $r3 + %2 ] = $r3 \n\t" //save r3
"swc [ $r3 + %3 ] = $r4 \n\t" //save r4
"swc [ $r3 + %4 ] = $r5 \n\t" //save r5
"swc [ $r3 + %5 ] = $r6 \n\t" //save r6
"swc [ $r3 + %6 ] = $r7 \n\t" //save r7
"swc [ $r3 + %7 ] = $r8 \n\t" //save r8
"swc [ $r3 + %8 ] = $r9 \n\t" //save r9
"swc [ $r3 + %9 ] = $r10 \n\t" //save r10
"swc [ $r3 + %10 ] = $r11 \n\t" //save r11
"swc [ $r3 + %11 ] = $r12 \n\t" //save r12
"swc [ $r3 + %12 ] = $r13 \n\t" //save r13
"swc [ $r3 + %13 ] = $r14 \n\t" //save r14
"swc [ $r3 + %14 ] = $r15 \n\t" //save r15
"swc [ $r3 + %15 ] = $r16 \n\t" //save r16
"swc [ $r3 + %16 ] = $r17 \n\t" //save r17
"swc [ $r3 + %17 ] = $r18 \n\t" //save r18
"swc [ $r3 + %18 ] = $r19 \n\t" //save r19
"swc [ $r3 + %19 ] = $r20 \n\t" //save r20
"swc [ $r3 + %20 ] = $r21 \n\t" //save r21
"swc [ $r3 + %21 ] = $r22 \n\t" //save r22
"swc [ $r3 + %22 ] = $r23 \n\t" //save r23
"swc [ $r3 + %23 ] = $r24 \n\t" //save r24
"swc [ $r3 + %24 ] = $r25 \n\t" //save r25
"swc [ $r3 + %25 ] = $r26 \n\t" //save r26
"swc [ $r3 + %26 ] = $r27 \n\t" //save r27
"swc [ $r3 + %27 ] = $r28 \n\t" //save r28
"swc [ $r3 + %28 ] = $r29 \n\t" //save r29
"swc [ $r3 + %29 ] = $r30 \n\t" //save r30
"swc [ $r3 + %30 ] = $r31 \n\t" //save r31
: : "i" (r1_OFFSET),"i" (r2_OFFSET), "i" (r3_OFFSET),
"i" (r4_OFFSET), "i" (r5_OFFSET), "i" (r6_OFFSET), "i" (r7_OFFSET), "i" (r8_OFFSET),
"i" (r9_OFFSET), "i" (r10_OFFSET), "i" (r11_OFFSET), "i" (r12_OFFSET), "i" (r13_OFFSET),
"i" (r14_OFFSET), "i" (r15_OFFSET), "i" (r16_OFFSET), "i" (r17_OFFSET), "i" (r18_OFFSET),
@@ -232,41 +231,48 @@ void _CPU_Context_switch(
"i" (s8_OFFSET), "i" (s9_OFFSET), "i" (s10_OFFSET),"i" (s11_OFFSET),
"i" (s12_OFFSET), "i" (s13_OFFSET), "i" (s14_OFFSET), "i" (s15_OFFSET));
/*
* Spill everything from the stack cache (clear stack cache)
* Copy the current stack to memory
*/
asm volatile("sres %0 \n\t" //reserve space in cache
"sfree %0 \n\t" //free space in cache
: : "i" (MAX_STACK_CACHE_SIZE));
/*
* load general-purpose registers (skip r0 which is always 0)
* address of the current task is passed as function argument in register r4
* r4 is the last register to be loaded so that the memory address of the current task is not lost
* r1, r2 and r3 will be used as auxiliary registers, so they are not loaded yet
*/
asm volatile("lwc $r2 = [ $r4 + %0 ] \n\t" //load r2
"lwc $r3 = [ $r4 + %1 ] \n\t" //load r3
"lwc $r5 = [ $r4 + %2 ] \n\t" //load r5
"lwc $r6 = [ $r4 + %3 ] \n\t" //load r6
"lwc $r7 = [ $r4 + %4 ] \n\t" //load r7
"lwc $r8 = [ $r4 + %5 ] \n\t" //load r8
"lwc $r9 = [ $r4 + %6 ] \n\t" //load r9
"lwc $r10 = [ $r4 + %7 ] \n\t" //load r10
"lwc $r11 = [ $r4 + %8 ] \n\t" //load r11
"lwc $r12 = [ $r4 + %9 ] \n\t" //load r12
"lwc $r13 = [ $r4 + %10 ] \n\t" //load r13
"lwc $r14 = [ $r4 + %11 ] \n\t" //load r14
"lwc $r15 = [ $r4 + %12 ] \n\t" //load r15
"lwc $r16 = [ $r4 + %13 ] \n\t" //load r16
"lwc $r17 = [ $r4 + %14 ] \n\t" //load r17
"lwc $r18 = [ $r4 + %15 ] \n\t" //load r18
"lwc $r19 = [ $r4 + %16 ] \n\t" //load r19
"lwc $r20 = [ $r4 + %17 ] \n\t" //load r20
"lwc $r21 = [ $r4 + %18 ] \n\t" //load r21
"lwc $r22 = [ $r4 + %19 ] \n\t" //load r22
"lwc $r23 = [ $r4 + %20 ] \n\t" //load r23
"lwc $r24 = [ $r4 + %21 ] \n\t" //load r24
"lwc $r25 = [ $r4 + %22 ] \n\t" //load r25
"lwc $r26 = [ $r4 + %23 ] \n\t" //load r26
"lwc $r27 = [ $r4 + %24 ] \n\t" //load r27
"lwc $r28 = [ $r4 + %25 ] \n\t" //load r28
"lwc $r29 = [ $r4 + %26 ] \n\t" //load r29
"lwc $r30 = [ $r4 + %27 ] \n\t" //load r30
"lwc $r31 = [ $r4 + %28 ] \n\t" //load r31
: : "i" (r2_OFFSET), "i" (r3_OFFSET), "i" (r5_OFFSET), "i" (r6_OFFSET), "i" (r7_OFFSET),
asm volatile("lwc $r5 = [ $r4 + %0 ] \n\t" //load r5
"lwc $r6 = [ $r4 + %1 ] \n\t" //load r6
"lwc $r7 = [ $r4 + %2 ] \n\t" //load r7
"lwc $r8 = [ $r4 + %3 ] \n\t" //load r8
"lwc $r9 = [ $r4 + %4 ] \n\t" //load r9
"lwc $r10 = [ $r4 + %5 ] \n\t" //load r10
"lwc $r11 = [ $r4 + %6 ] \n\t" //load r11
"lwc $r12 = [ $r4 + %7 ] \n\t" //load r12
"lwc $r13 = [ $r4 + %8 ] \n\t" //load r13
"lwc $r14 = [ $r4 + %9 ] \n\t" //load r14
"lwc $r15 = [ $r4 + %10 ] \n\t" //load r15
"lwc $r16 = [ $r4 + %11 ] \n\t" //load r16
"lwc $r17 = [ $r4 + %12 ] \n\t" //load r17
"lwc $r18 = [ $r4 + %13 ] \n\t" //load r18
"lwc $r19 = [ $r4 + %14 ] \n\t" //load r19
"lwc $r20 = [ $r4 + %15 ] \n\t" //load r20
"lwc $r21 = [ $r4 + %16 ] \n\t" //load r21
"lwc $r22 = [ $r4 + %17 ] \n\t" //load r22
"lwc $r23 = [ $r4 + %18 ] \n\t" //load r23
"lwc $r24 = [ $r4 + %19 ] \n\t" //load r24
"lwc $r25 = [ $r4 + %20 ] \n\t" //load r25
"lwc $r26 = [ $r4 + %21 ] \n\t" //load r26
"lwc $r27 = [ $r4 + %22 ] \n\t" //load r27
"lwc $r28 = [ $r4 + %23 ] \n\t" //load r28
"lwc $r29 = [ $r4 + %24 ] \n\t" //load r29
"lwc $r30 = [ $r4 + %25 ] \n\t" //load r30
"lwc $r31 = [ $r4 + %26 ] \n\t" //load r31
: : "i" (r5_OFFSET), "i" (r6_OFFSET), "i" (r7_OFFSET),
"i" (r8_OFFSET), "i" (r9_OFFSET), "i" (r10_OFFSET), "i" (r11_OFFSET), "i" (r12_OFFSET),
"i" (r13_OFFSET), "i" (r14_OFFSET), "i" (r15_OFFSET), "i" (r16_OFFSET), "i" (r17_OFFSET),
"i" (r18_OFFSET), "i" (r19_OFFSET), "i" (r20_OFFSET), "i" (r21_OFFSET), "i" (r22_OFFSET),
@@ -308,14 +314,28 @@ void _CPU_Context_switch(
"lwc $r1 = [ $r4 + %14 ] \n\t" //load s14
"mts $s14 = $r1 \n\t" //move r1 to s14
"lwc $r1 = [ $r4 + %15 ] \n\t" //load s15
"mts $s15 = $r1 \n\t" //move r1 to s15
"lwc $r1 = [ $r4 + %16 ] \n\t" //load r1
"lwc $r4 = [ $r4 + %17] \n\t" //load r4
"sfree %18 \n\t" //free space in cache
"mts $s15 = $r1 \n\t" //move r1 to s15
: : "i" (s0_OFFSET), "i" (s1_OFFSET), "i" (s2_OFFSET), "i" (s3_OFFSET), "i" (s4_OFFSET),
"i" (s5_OFFSET), "i" (s6_OFFSET), "i" (s7_OFFSET), "i" (s8_OFFSET), "i" (s9_OFFSET),
"i" (s10_OFFSET), "i" (s11_OFFSET), "i" (s12_OFFSET), "i" (s13_OFFSET), "i" (s14_OFFSET),
"i" (s15_OFFSET), "i" (r1_OFFSET), "i" (r4_OFFSET), "i" (CONTEXT_CONTROL_SIZE));
"i" (s15_OFFSET));
/*
* restore the thread's stack into the stack cache
* use r1 to store the size of the thread's stack
* use r2 and r3 as intermediate registers to load special-purpose registers (no instruction to do it directly)
*/
asm volatile("mfs $r2 = $s6 \n\t" //store the stack cache's top pointer in auxiliary register r2
"mfs $r3 = $s5 \n\t" //store the stack cache's bottom pointer in auxiliary register r3
"sub $r1 = $r2, $r3 \n\t" //store the size of the thread's stack
"mts $s6 = $r3 \n\t" //make stack cache's bottom and top pointers equal to each other
"sens $r1 \n\t" //restores the thread's stack into the stack cache
//"mts $s6 = $r2 \n\t" //restore the stack cache's top pointer from auxiliary register r2
"lwc $r1 = [ $r4 + %0 ] \n\t" //load r1
"lwc $r2 = [ $r4 + %1 ] \n\t" //load r2
"lwc $r3 = [ $r4 + %2 ] \n\t" //load r3
"lwc $r4 = [ $r4 + %3 ] \n\t" //load r4
: : "i" (r1_OFFSET), "i" (r2_OFFSET), "i" (r3_OFFSET), "i" (r4_OFFSET));
/* Return from the function */
asm volatile("ret $r30, $r31 \n\t"
@@ -333,49 +353,40 @@ void _CPU_Context_restore(
* address of the current task is passed as function argument in register r3
* r3 is the last register to be loaded so that the memory address of the current task is not lost
*/
asm volatile("and $r0 = $r0, 0x0 \n\t" //reset r0 to 0
"lwc $r2 = [ $r3 + %0 ] \n\t" //load r2
"lwc $r4 = [ $r3 + %1 ] \n\t" //load r4
"lwc $r5 = [ $r3 + %2 ] \n\t" //load r5
"lwc $r6 = [ $r3 + %3 ] \n\t" //load r6
"lwc $r7 = [ $r3 + %4 ] \n\t" //load r7
"lwc $r8 = [ $r3 + %5 ] \n\t" //load r8
"lwc $r9 = [ $r3 + %6 ] \n\t" //load r9
"lwc $r10 = [ $r3 + %7 ] \n\t" //load r10
"lwc $r11 = [ $r3 + %8 ] \n\t" //load r11
"lwc $r12 = [ $r3 + %9 ] \n\t" //load r12
"lwc $r13 = [ $r3 + %10 ] \n\t" //load r13
"lwc $r14 = [ $r3 + %11 ] \n\t" //load r14
"lwc $r15 = [ $r3 + %12 ] \n\t" //load r15
"lwc $r16 = [ $r3 + %13 ] \n\t" //load r16
"lwc $r17 = [ $r3 + %14 ] \n\t" //load r17
"lwc $r18 = [ $r3 + %15 ] \n\t" //load r18
"lwc $r19 = [ $r3 + %16 ] \n\t" //load r19
"lwc $r20 = [ $r3 + %17 ] \n\t" //load r20
"lwc $r21 = [ $r3 + %18 ] \n\t" //load r21
"lwc $r22 = [ $r3 + %19 ] \n\t" //load r22
"lwc $r23 = [ $r3 + %20 ] \n\t" //load r23
"lwc $r24 = [ $r3 + %21 ] \n\t" //load r24
"lwc $r25 = [ $r3 + %22 ] \n\t" //load r25
"lwc $r26 = [ $r3 + %23 ] \n\t" //load r26
"lwc $r27 = [ $r3 + %24 ] \n\t" //load r27
"lwc $r28 = [ $r3 + %25 ] \n\t" //load r28
"lwc $r29 = [ $r3 + %26 ] \n\t" //load r29
"lwc $r30 = [ $r3 + %27 ] \n\t" //load r30
"lwc $r31 = [ $r3 + %28 ] \n\t" //load r31
: : "i" (r2_OFFSET), "i" (r4_OFFSET), "i" (r5_OFFSET), "i" (r6_OFFSET), "i" (r7_OFFSET),
asm volatile("and $r0 = $r0, 0x0 \n\t" //reset r0 to 0
"lwc $r5 = [ $r3 + %0 ] \n\t" //load r5
"lwc $r6 = [ $r3 + %1 ] \n\t" //load r6
"lwc $r7 = [ $r3 + %2 ] \n\t" //load r7
"lwc $r8 = [ $r3 + %3 ] \n\t" //load r8
"lwc $r9 = [ $r3 + %4 ] \n\t" //load r9
"lwc $r10 = [ $r3 + %5 ] \n\t" //load r10
"lwc $r11 = [ $r3 + %6 ] \n\t" //load r11
"lwc $r12 = [ $r3 + %7 ] \n\t" //load r12
"lwc $r13 = [ $r3 + %8 ] \n\t" //load r13
"lwc $r14 = [ $r3 + %9 ] \n\t" //load r14
"lwc $r15 = [ $r3 + %10 ] \n\t" //load r15
"lwc $r16 = [ $r3 + %11 ] \n\t" //load r16
"lwc $r17 = [ $r3 + %12 ] \n\t" //load r17
"lwc $r18 = [ $r3 + %13 ] \n\t" //load r18
"lwc $r19 = [ $r3 + %14 ] \n\t" //load r19
"lwc $r20 = [ $r3 + %15 ] \n\t" //load r20
"lwc $r21 = [ $r3 + %16 ] \n\t" //load r21
"lwc $r22 = [ $r3 + %17 ] \n\t" //load r22
"lwc $r23 = [ $r3 + %18 ] \n\t" //load r23
"lwc $r24 = [ $r3 + %19 ] \n\t" //load r24
"lwc $r25 = [ $r3 + %20 ] \n\t" //load r25
"lwc $r26 = [ $r3 + %21 ] \n\t" //load r26
"lwc $r27 = [ $r3 + %22 ] \n\t" //load r27
"lwc $r28 = [ $r3 + %23 ] \n\t" //load r28
"lwc $r29 = [ $r3 + %24 ] \n\t" //load r29
"lwc $r30 = [ $r3 + %25 ] \n\t" //load r30
"lwc $r31 = [ $r3 + %26 ] \n\t" //load r31
: : "i" (r5_OFFSET), "i" (r6_OFFSET), "i" (r7_OFFSET),
"i" (r8_OFFSET), "i" (r9_OFFSET), "i" (r10_OFFSET), "i" (r11_OFFSET), "i" (r12_OFFSET),
"i" (r13_OFFSET), "i" (r14_OFFSET), "i" (r15_OFFSET), "i" (r16_OFFSET), "i" (r17_OFFSET),
"i" (r18_OFFSET), "i" (r19_OFFSET), "i" (r20_OFFSET), "i" (r21_OFFSET), "i" (r22_OFFSET),
"i" (r23_OFFSET), "i" (r23_OFFSET), "i" (r24_OFFSET), "i" (r25_OFFSET), "i" (r26_OFFSET),
"i" (r27_OFFSET), "i" (r28_OFFSET), "i" (r29_OFFSET), "i" (r30_OFFSET), "i" (r31_OFFSET));
/*
* Spill everything from the stack cache (why? why here and not at the end?)
*/
asm volatile("sres %0 \n\t" //reserve space in cache
"sfree %0 \n\t" //free space in cache
: : "i" (MAX_STACK_CACHE_SIZE));
"i" (r27_OFFSET), "i" (r28_OFFSET), "i" (r29_OFFSET), "i" (r30_OFFSET), "i" (r31_OFFSET));
/*
* load special-purpose registers
@@ -412,14 +423,30 @@ void _CPU_Context_restore(
"lwc $r1 = [ $r3 + %14 ] \n\t" //load s14
"mts $s14 = $r1 \n\t" //move r1 to s14
"lwc $r1 = [ $r3 + %15 ] \n\t" //load s15
"mts $s15 = $r1 \n\t" //move r1 to s15
"lwc $r1 = [ $r3 + %16 ] \n\t" //load r1
"lwc $r3 = [ $r3 + %17] \n\t" //load r3
"mts $s15 = $r1 \n\t" //move r1 to s15
: : "i" (s0_OFFSET), "i" (s1_OFFSET), "i" (s2_OFFSET), "i" (s3_OFFSET), "i" (s4_OFFSET),
"i" (s5_OFFSET), "i" (s6_OFFSET), "i" (s7_OFFSET), "i" (s8_OFFSET), "i" (s9_OFFSET),
"i" (s10_OFFSET), "i" (s11_OFFSET), "i" (s12_OFFSET), "i" (s13_OFFSET), "i" (s14_OFFSET),
"i" (s15_OFFSET), "i" (r1_OFFSET), "i" (r3_OFFSET));
"i" (s15_OFFSET));
/*
* Spill everything from the stack cache (only way to copy the current stack to memory)
* Restore the thread's stack into the stack cache
*/
asm volatile("sres %0 \n\t" //reserve space in cache
"sfree %0 \n\t" //free space in cache
"mfs $r2 = $s6 \n\t" //store the stack cache's top pointer in auxiliary register r2
"mfs $r4 = $s5 \n\t" //store the stack cache's bottom pointer in auxiliary register r4
"sub $r1 = $r2, $r4 \n\t" //store the size of the thread's stack
"mts $s6 = $r4 \n\t" //make stack cache's bottom and top pointers equal to each other
"sens $r1 \n\t" //restores the thread's stack into the stack cache
//"mts $s6 = $r2 \n\t" //restore the stack cache's top pointer from auxiliary register r2
"lwc $r1 = [ $r3 + %1 ] \n\t" //load r1
"lwc $r2 = [ $r3 + %2 ] \n\t" //load r2
"lwc $r4 = [ $r3 + %3 ] \n\t" //load r4
"lwc $r3 = [ $r3 + %4 ] \n\t" //load r3
: : "i" (MAX_STACK_CACHE_SIZE), "i" (r1_OFFSET), "i" (r2_OFFSET), "i" (r4_OFFSET), "i" (r3_OFFSET));
/* Return from the function */
asm volatile("ret $r30, $r31 \n\t"
: : );

View File

@@ -1,62 +0,0 @@
pwd=$(pwd)
mkdir -p $pwd/c/src/lib/libbsp/patmos/pasim/clock
mkdir -p $pwd/c/src/lib/libbsp/patmos/pasim/console
mkdir -p $pwd/c/src/lib/libbsp/patmos/pasim/include
mkdir -p $pwd/c/src/lib/libbsp/patmos/pasim/make/custom
mkdir -p $pwd/c/src/lib/libbsp/patmos/pasim/startup
mkdir -p $pwd/c/src/lib/libbsp/patmos/shared/startup
mkdir -p $pwd/c/src/lib/libbsp/patmos/tcrest
mkdir -p $pwd/c/src/lib/libcpu/patmos/cache
mkdir -p $pwd/cpukit/score/cpu/patmos/rtems/score
cp -f $pwd/c/src/make/compilers/gcc-target-default.cfg $pwd/c/src/make/compilers/patmos-clang.cfg
cp -f $pwd/c/src/lib/libbsp/sparc/acinclude.m4 $pwd/c/src/lib/libbsp/patmos/acinclude.m4
cp -f $pwd/c/src/lib/libbsp/sparc/aclocal.m4 $pwd/c/src/lib/libbsp/patmos/aclocal.m4
cp -f $pwd/c/src/lib/libbsp/sparc/configure $pwd/c/src/lib/libbsp/patmos/configure
cp -f $pwd/c/src/lib/libbsp/sparc/configure.ac $pwd/c/src/lib/libbsp/patmos/configure.ac
cp -f $pwd/c/src/lib/libbsp/sparc/Makefile.am $pwd/c/src/lib/libbsp/patmos/Makefile.am
cp -f $pwd/c/src/lib/libbsp/sparc/Makefile.in $pwd/c/src/lib/libbsp/patmos/Makefile.in
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/clock/ckinit.c $pwd/c/src/lib/libbsp/patmos/pasim/clock/ckinit.c
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/console/console.c $pwd/c/src/lib/libbsp/patmos/pasim/console/console.c
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/console/debugputs.c $pwd/c/src/lib/libbsp/patmos/pasim/console/debugputs.c
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/include/bsp.h $pwd/c/src/lib/libbsp/patmos/pasim/include/bsp.h
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/include/bspopts.h.in $pwd/c/src/lib/libbsp/patmos/pasim/include/bspopts.h.in
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/include/leon.h $pwd/c/src/lib/libbsp/patmos/pasim/include/pasim.h
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/make/custom/leon3.cfg $pwd/c/src/lib/libbsp/patmos/pasim/make/custom/pasim.cfg
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c $pwd/c/src/lib/libbsp/patmos/pasim/startup/bspstart.c
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/startup/linkcmds $pwd/c/src/lib/libbsp/patmos/pasim/startup/linkcmds
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/aclocal.m4 $pwd/c/src/lib/libbsp/patmos/pasim/aclocal.m4
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/bsp_specs $pwd/c/src/lib/libbsp/patmos/pasim/bsp_specs
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/configure $pwd/c/src/lib/libbsp/patmos/pasim/configure
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/configure.ac $pwd/c/src/lib/libbsp/patmos/pasim/configure.ac
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/Makefile.am $pwd/c/src/lib/libbsp/patmos/pasim/Makefile.am
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/Makefile.in $pwd/c/src/lib/libbsp/patmos/pasim/Makefile.in
cp -f $pwd/c/src/lib/libbsp/sparc/leon3/preinstall.am $pwd/c/src/lib/libbsp/patmos/pasim/preinstall.am
cp -f $pwd/c/src/lib/libbsp/sparc/shared/startup/linkcmds.base $pwd/c/src/lib/libbsp/patmos/shared/startup/linkcmds.base
cp -f $pwd/c/src/lib/libbsp/sparc/shared/start.S $pwd/c/src/lib/libbsp/patmos/shared/start.S
cp -f $pwd/c/src/lib/libcpu/sparc/aclocal.m4 $pwd/c/src/lib/libcpu/patmos/aclocal.m4
cp -f $pwd/c/src/lib/libcpu/sparc/configure $pwd/c/src/lib/libcpu/patmos/configure
cp -f $pwd/c/src/lib/libcpu/sparc/configure.ac $pwd/c/src/lib/libcpu/patmos/configure.ac
cp -f $pwd/c/src/lib/libcpu/sparc/Makefile.am $pwd/c/src/lib/libcpu/patmos/Makefile.am
cp -f $pwd/c/src/lib/libcpu/sparc/Makefile.in $pwd/c/src/lib/libcpu/patmos/Makefile.in
cp -f $pwd/c/src/lib/libcpu/sparc/preinstall.am $pwd/c/src/lib/libcpu/patmos/preinstall.am
cp -f $pwd/c/src/lib/libcpu/sparc/cache/cache.c $pwd/c/src/lib/libcpu/patmos/cache/cache.c
cp -f $pwd/c/src/lib/libcpu/sparc/cache/cache_.h $pwd/c/src/lib/libcpu/patmos/cache/cache_.h
cp -f $pwd/cpukit/score/cpu/sparc/cpu.c $pwd/cpukit/score/cpu/patmos/cpu.c
cp -f $pwd/cpukit/score/cpu/sparc/cpu_asm.S $pwd/cpukit/score/cpu/patmos/cpu_asm.S
cp -f $pwd/cpukit/score/cpu/sparc/Makefile.am $pwd/cpukit/score/cpu/patmos/Makefile.am
cp -f $pwd/cpukit/score/cpu/sparc/Makefile.in $pwd/cpukit/score/cpu/patmos/Makefile.in
cp -f $pwd/cpukit/score/cpu/sparc/preinstall.am $pwd/cpukit/score/cpu/patmos/preinstall.am
cp -f $pwd/cpukit/score/cpu/sparc/rtems/asm.h $pwd/cpukit/score/cpu/patmos/rtems/asm.h
cp -f $pwd/cpukit/score/cpu/sparc/rtems/score/cpu.h $pwd/cpukit/score/cpu/patmos/rtems/score/cpu.h
cp -f $pwd/cpukit/score/cpu/sparc/rtems/score/sparc.h $pwd/cpukit/score/cpu/patmos/rtems/score/patmos.h
cp -f $pwd/cpukit/score/cpu/sparc/rtems/score/types.h $pwd/cpukit/score/cpu/patmos/rtems/score/types.h
cp -f $pwd/doc/cpu_supplement/sparc.t $pwd/doc/cpu_supplement/patmos.t
cp -f $pwd/make/compilers/gcc-no_bsp.cfg $pwd/make/compilers/patmos-clang.cfg

View File

@@ -50,7 +50,7 @@ renamed to patmos-unknown-rtems-clang:
'cp patmos-clang patmos-unknown-rtems-clang'
In this folder there is a script to be placed in the misc directory, that
In this folder there is a script ('target-change.sh') to be placed in the misc directory, that
copies all the patmos tools to the required nomenclature.
Finally, the Patmos executables must be added to the path environment variable

95
target-change.sh Executable file
View File

@@ -0,0 +1,95 @@
#!/bin/bash
###############################################################################
#
#script for changing the patmos target to patmos-unkwnown-rtems
#
###############################################################################
function abspath() {
local path=$1
local pwd_restore="$(pwd)"
# readlink -f does not work on OSX, so we do this manually
cd $(dirname "$path")
path=$(basename "$path")
# follow chain of symlinks
while [ -L "$path" ]; do
path=$(readlink "$path")
cd $(dirname "$path")
path=$(basename "$path")
done
echo "$(pwd -P)/$path"
cd "$pwd_restore"
}
# physical location of this script, and the config
self=$(abspath $0)
CFGFILE=$(dirname $self)/build.cfg
if [ -f $CFGFILE ]; then
source $CFGFILE
fi
cd $ROOT_DIR/local/bin
echo 'Changing names of executables...'
ln -s patmos-addr2line patmos-unknown-rtems-addr2line
ln -s patmos-llc patmos-unknown-rtems-llc
ln -s patmos-llvm-readobj patmos-unknown-rtems-llvm-readobj
ln -s patmos-ar patmos-unknown-rtems-ar
ln -s patmos-lli patmos-unknown-rtems-lli
ln -s patmos-llvm-rtdyld patmos-unknown-rtems-llvm-rtdyld
ln -s patmos-arcmt-test patmos-unknown-rtems-arcmt-test
ln -s patmos-llvm-ar patmos-unknown-rtems-llvm-ar
ln -s patmos-llvm-size patmos-unknown-rtems-llvm-size
ln -s patmos-bugpoint patmos-unknown-rtems-bugpoint
ln -s patmos-llvm-as patmos-unknown-rtems-llvm-as
ln -s patmos-llvm-as patmos-unknown-rtems-as
ln -s patmos-llvm-stress patmos-unknown-rtems-llvm-stress
ln -s patmos-c-arcmt-test patmos-unknown-rtems-c-arcmt-test
ln -s patmos-llvm-bcanalyzer patmos-unknown-rtems-llvm-bcanalyzer
ln -s patmos-llvm-tblgen patmos-unknown-rtems-llvm-tblgen
ln -s patmos-c++filt patmos-unknown-rtems-c++filt
ln -s patmos-llvm-config patmos-unknown-rtems-llvm-config
ln -s patmos-macho-dump patmos-unknown-rtems-macho-dump
ln -s patmos-c-index-test patmos-unknown-rtems-c-index-test
ln -s patmos-llvm-cov patmos-unknown-rtems-llvm-cov
ln -s patmos-nm patmos-unknown-rtems-nm
ln -s patmos-clang patmos-unknown-rtems-clang
ln -s patmos-llvm-diff patmos-unknown-rtems-llvm-diff
ln -s patmos-not patmos-unknown-rtems-not
ln -s patmos-clang++ patmos-unknown-rtems-clang++
ln -s patmos-llvm-dis patmos-unknown-rtems-llvm-dis
ln -s patmos-obj2yaml patmos-unknown-rtems-obj2yaml
ln -s patmos-clang-3.2 patmos-unknown-rtems-clang-3.2
ln -s patmos-llvm-dwarfdump patmos-unknown-rtems-llvm-dwarfdump
ln -s patmos-objcopy patmos-unknown-rtems-objcopy
ln -s patmos-clang-check patmos-unknown-rtems-clang-check
ln -s patmos-llvm-extract patmos-unknown-rtems-llvm-extract
ln -s patmos-objdump patmos-unknown-rtems-objdump
ln -s patmos-clang-tblgen patmos-unknown-rtems-clang-tblgen
ln -s patmos-llvm-link patmos-unknown-rtems-llvm-link
ln -s patmos-opt patmos-unknown-rtems-opt
ln -s patmos-count patmos-unknown-rtems-count
ln -s patmos-llvm-lit patmos-unknown-rtems-llvm-lit
ln -s patmos-ranlib patmos-unknown-rtems-ranlib
ln -s patmos-diagtool patmos-unknown-rtems-diagtool
ln -s patmos-llvm-mc patmos-unknown-rtems-llvm-mc
ln -s patmos-readelf patmos-unknown-rtems-readelf
ln -s patmos-elfedit patmos-unknown-rtems-elfedit
ln -s patmos-llvm-mcmarkup patmos-unknown-rtems-llvm-mcmarkup
ln -s patmos-size patmos-unknown-rtems-size
ln -s patmos-FileCheck patmos-unknown-rtems-FileCheck
ln -s patmos-llvm-nm patmos-unknown-rtems-llvm-nm
ln -s patmos-strings patmos-unknown-rtems-strings
ln -s patmos-FileUpdate patmos-unknown-rtems-FileUpdate
ln -s patmos-llvm-objdump patmos-unknown-rtems-llvm-objdump
ln -s patmos-strip patmos-unknown-rtems-strip
ln -s patmos-ld patmos-unknown-rtems-ld
ln -s patmos-llvm-prof patmos-unknown-rtems-llvm-prof
ln -s patmos-yaml2obj patmos-unknown-rtems-yaml2obj
ln -s patmos-ld.gold patmos-unknown-rtems-ld.gold
ln -s patmos-llvm-ranlib patmos-unknown-rtems-llvm-ranlib
ln -s patmos-yaml-bench patmos-unknown-rtems-yaml-bench
echo '...finished'

0
testsuites/aclocal/check-cpuopts.m4 Normal file → Executable file
View File

11
testsuites/aclocal/prog-cc.m4 Normal file → Executable file
View File

@@ -14,6 +14,7 @@ case "$host" in
*-*-rtems*) ac_cv_exeext=.exe;;
esac
RTEMS_CHECK_TOOL(CC,clang)
RTEMS_CHECK_TOOL(CC,gcc)
test -z "$CC" && \
AC_MSG_ERROR([no acceptable cc found in \$PATH])
@@ -28,9 +29,13 @@ RTEMS_PROG_CC
AS_IF([test x"$GCC" = xyes],[
AS_IF([test "${enable_cpukit_root+set}"],[
GCCSPECS="-B\$(CPUKIT_ROOT)/lib/"])
AS_IF([ test "$CC" = "patmos-unknown-rtems-clang"],[
GCCSPECS="-L=\$(CPUKIT_ROOT)/lib/ -I\$(CPUKIT_ROOT)/lib/include"
], [GCCSPECS="-B\$(CPUKIT_ROOT)/lib/"])])
AS_IF([test "${enable_project_root+set}"],[
GCCSPECS="$GCCSPECS -B\$(PROJECT_ROOT)/lib/"])
GCCSPECS="${GCCSPECS} -specs bsp_specs -qrtems"])
AS_IF([ test "$CC" = "patmos-unknown-rtems-clang"],[
GCCSPECS="$GCCSPECS -L=\$(PROJECT_ROOT)/lib/ -I\$(PROJECT_ROOT)/lib/include"
], [GCCSPECS="$GCCSPECS -B\$(PROJECT_ROOT)/lib/"
GCCSPECS="${GCCSPECS} -specs bsp_specs -qrtems"])])])
AC_SUBST(GCCSPECS)
])

0
testsuites/samples/configure.ac Normal file → Executable file
View File