diff -uNpr utkernel_source.orig/config/sysdepend/app_mb9af312k/utk_config_depend.h utkernel_source/config/sysdepend/app_mb9af312k/utk_config_depend.h --- utkernel_source.orig/config/sysdepend/app_mb9af312k/utk_config_depend.h Fri May 10 10:31:26 2013 +++ utkernel_source/config/sysdepend/app_mb9af312k/utk_config_depend.h Thu Aug 29 05:19:45 2013 @@ -46,7 +46,7 @@ #define CFN_MAX_MPFID 8 #define CFN_MAX_CYCID 4 #define CFN_MAX_ALMID 8 -#define CFN_MAX_SSYID 4 +#define CFN_MAX_SSYID 0 #define CFN_MAX_SSYPRI 16 #define CFN_MAX_REGDEV (8) diff -uNpr utkernel_source.orig/etc/mkfuncfiles utkernel_source/etc/mkfuncfiles --- utkernel_source.orig/etc/mkfuncfiles Fri May 10 10:31:28 2013 +++ utkernel_source/etc/mkfuncfiles Sat Aug 24 05:40:28 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/etc/mkiflib utkernel_source/etc/mkiflib --- utkernel_source.orig/etc/mkiflib Fri May 10 10:31:28 2013 +++ utkernel_source/etc/mkiflib Sat Aug 24 05:40:08 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/etc/mktdsvc utkernel_source/etc/mktdsvc --- utkernel_source.orig/etc/mktdsvc Fri May 10 10:31:28 2013 +++ utkernel_source/etc/mktdsvc Sat Aug 24 05:40:01 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/etc/mktksvc utkernel_source/etc/mktksvc --- utkernel_source.orig/etc/mktksvc Fri May 10 10:31:29 2013 +++ utkernel_source/etc/mktksvc Sat Aug 24 05:39:43 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/etc/platform utkernel_source/etc/platform --- utkernel_source.orig/etc/platform Fri May 10 10:31:29 2013 +++ utkernel_source/etc/platform Sat Aug 24 05:41:49 2013 @@ -20,6 +20,7 @@ case $os in SunOS) platform=$os-`uname -p` ;; Linux) platform=$os-`uname -m` ;; FreeBSD) platform=$os-`uname -p` ;; + OpenBSD) platform=$os-`uname -m` ;; CYGWIN*) platform="Cygwin-`uname -m`" ;; *) platform=unknown ;; esac diff -uNpr utkernel_source.orig/etc/sysdepend/app_mb9af312k/makerules.sysdepend utkernel_source/etc/sysdepend/app_mb9af312k/makerules.sysdepend --- utkernel_source.orig/etc/sysdepend/app_mb9af312k/makerules.sysdepend Fri May 10 10:31:30 2013 +++ utkernel_source/etc/sysdepend/app_mb9af312k/makerules.sysdepend Thu Aug 29 07:31:48 2013 @@ -56,6 +56,9 @@ endif ifneq ($(filter Linux-%, $(CROSS_ARCH)), ) PATH := $(PATH):/usr/local/bin:/bin:/usr/bin endif +ifneq ($(filter OpenBSD-%, $(CROSS_ARCH)), ) + PATH := $(PATH):/usr/local/bin:/bin:/usr/bin +endif ifneq ($(filter Cygwin-%, $(CROSS_ARCH)), ) PATH := $(PATH):/usr/local/bin:/bin:/usr/bin endif @@ -66,8 +69,8 @@ endif TARGET_ARCH = # target type -_CPUTYPE_FLAGS = -mcpu=cortex-m3 -_CPUTYPE_FLAGS_AS = -mcpu=cortex-m3 +_CPUTYPE_FLAGS = -march=armv6-m +_CPUTYPE_FLAGS_AS = -march=armv6-m _TE_SYSTEM_NAME_ = _APP_MB9AF312K_ # code set @@ -80,7 +83,7 @@ ASFLAGS += LDFLAGS += ### C ### -CC := $(GNUARM_2)/bin/gcc4arm +CC := $(GNUARM_2)/bin/$(TOOL_PREFIX)gcc OUTPUT_OPTION = -o $@ ifeq ($(mode), debug) CFLAGS += -g @@ -117,7 +120,7 @@ LINK.c = $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) $( $(CC) $(TARGET_ARCH) $(CFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION) ### C++ ### -CXX := $(GNUARM_2)/bin/gcc4arm +CXX := $(GNUARM_2)/bin/$(TOOL_PREFIX)gcc CXXFLAGS = $(CFLAGS) COMPILE.cc = $(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS) -c @@ -133,7 +136,7 @@ LINK.cc = $(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS $(CXX) $(TARGET_ARCH) $(CXXFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION) ### asm ### -AS = $(GNUARM_2)/bin/as +AS = $(GNUARM_2)/bin/$(TOOL_PREFIX)as ifeq ($(mode), debug) ASFLAGS += -g else @@ -156,7 +159,7 @@ COMPILE.s = $(AS) $(ASFLAGS.s) $(CC) $(TARGET_ARCH) $(ASFLAGS) $(CPPFLAGS) -E $< $(OUTPUT_OPTION) ### linker ### -LD = $(GNUARM_2)/bin/ld +LD = $(GNUARM_2)/bin/$(TOOL_PREFIX)ld ifeq ($(mode), debug) LDFLAGS += $(LIBDIR:%=-L%) else @@ -204,15 +207,15 @@ LOCATE.o = $(CC) $(TARGET_ARCH) $(LDFLAGS) -nostdlib $ $(RM) _$@ ### library ### -AR = $(GNUARM_2)/bin/ar +AR = $(GNUARM_2)/bin/$(TOOL_PREFIX)ar ARFLAGS = rv -RANLIB = $(GNUARM_2)/bin/ranlib +RANLIB = $(GNUARM_2)/bin/$(TOOL_PREFIX)ranlib (%): % $(AR) $(ARFLAGS) $@ $% ### create name list ### -NM = $(GNUARM_2)/bin/nm +NM = $(GNUARM_2)/bin/$(TOOL_PREFIX)nm NMFLAGS = -n %.map: % @@ -252,11 +255,10 @@ DATABOX = $(DB) $(DBFLAGS) ### other ### ifndef CPP - CPP = $(GNU_BD)/bin/arm_2-unknown-tkernel-cpp + CPP = $(GNUARM_2)/bin/$(TOOL_PREFIX)cpp endif -STRIP = $(GNUARM_2)/bin/strip --strip-unneeded +STRIP = $(GNUARM_2)/bin/$(TOOL_PREFIX)strip --strip-unneeded -#OBJCOPY = $(GNU_BD)/bin/arm_2-unknown-tkernel-objcopy -OBJCOPY = $(GNU_BD)/bin/arm-none-eabi-objcopy +OBJCOPY = $(GNUARM_2)/bin/$(TOOL_PREFIX)objcopy OUTPUT_SREC = -O srec --srec-forceS3 --srec-len 32 OUTPUT_BIN = -O binary diff -uNpr utkernel_source.orig/kernel/sysdepend/cpu/mb9af312k/cpu_support.S utkernel_source/kernel/sysdepend/cpu/mb9af312k/cpu_support.S --- utkernel_source.orig/kernel/sysdepend/cpu/mb9af312k/cpu_support.S Fri May 10 10:31:53 2013 +++ utkernel_source/kernel/sysdepend/cpu/mb9af312k/cpu_support.S Thu Aug 29 07:33:03 2013 @@ -33,8 +33,8 @@ #include #include -#if USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) -#include "isysconf.h" +#if USE_TRAP | USE_DBGSPT | USE_HOOK_TRACE +#error ouch! #endif #include "tkdev_conf.h" @@ -75,24 +75,21 @@ .globl Csym(knl_dispatch_to_schedtsk) Csym(knl_dispatch_to_schedtsk): /* Interrupt is disabled(CPSR.I=1 F=1), during SVC mode */ - ldr sp, =TMP_STACK_TOP /* Set temporal stack */ + ldr r0, =TMP_STACK_TOP /* Set temporal stack */ + mov sp, r0 - ldr ip, =Csym(knl_dispatch_disabled) + ldr r3, =Csym(knl_dispatch_disabled) ldr r0, =1 - str r0, [ip] /* Dispatch disable */ + str r0, [r3] /* Dispatch disable */ ldr r4, =Csym(knl_ctxtsk) /* R4 = &ctxtsk */ ldr r0, =0 -#if USE_DBGSPT - ldr r8, [r4] -#endif - str r0, [r4] /* ctxtsk = NULL */ /* Clear the pending state from the PendSV exception */ ldr r0, =SCB_ICSR - ldr ip, =ICSR_PENDSVCLR - str ip, [r0] + ldr r3, =ICSR_PENDSVCLR + str r3, [r0] b l_dispatch0 @@ -101,35 +98,32 @@ Csym(knl_dispatch_to_schedtsk): .globl Csym(knl_dispatch_entry) Csym(knl_dispatch_entry): _ret_int_dispatch: - stmfd sp!, {lr} /* Context save (lr) */ - ldr r0, =Csym(knl_dispatch_disabled) ldr r1, =1 str r1, [r0] /* Dispatch disable */ - ldr lr, =Csym(knl_taskmode) - ldr lr, [lr] - stmfd sp!, {r4-r11, lr} + ldr r0, =Csym(knl_taskmode) + ldr r0, [r0] + push {r0, lr} /* Context save (lr) */ + mov r0, r8 + mov r1, r9 + mov r2, r10 + mov r3, r11 + push {r0-r7} + /* Context save */ ldr r4, =Csym(knl_ctxtsk) /* R4 = &ctxtsk */ ldr r0, =0 - ldr r8, [r4] - cmp r8, #0 - it ne - strne sp, [r8, #TCB_tskctxb + CTXB_ssp] /* Save 'ssp' to TCB */ + ldr r7, [r4] + cmp r7, #0 + beq 0f + mov r1, sp + str r1, [r7, #TCB_tskctxb + CTXB_ssp] /* Save 'ssp' to TCB */ +0: str r0, [r4] /* ctxtsk = NULL */ l_dispatch0: - -#if USE_DBGSPT & USE_HOOK_TRACE - ldr ip, =hook_stop_jmp /* Hook processing */ - ldr pc, [ip] - - .thumb_func -ret_hook_stop: -#endif - ldr r5, =Csym(knl_schedtsk) /* R5 = &schedtsk */ ldr r6, =Csym(knl_lowpow_discnt) /* R6 = &lowpow_discnt */ @@ -137,42 +131,41 @@ l_dispatch1: ldr r0, =MAX_EXTINT_PRI msr basepri, r0 - ldr r8, [r5] /* R8 = schedtsk */ - cmp r8, #0 /* Is there 'schedtsk'? */ + ldr r7, [r5] /* R7 = schedtsk */ + cmp r7, #0 /* Is there 'schedtsk'? */ bne l_dispatch2 /* Because there is no task that should be executed, move to the power-saving mode */ - ldr ip, [r6] /* Is 'low_pow' disabled? */ - cmp ip, #0 - it eq - bleq Csym(knl_low_pow) /* call low_pow() */ - + ldr r3, [r6] /* Is 'low_pow' disabled? */ + cmp r3, #0 + bne 1f + bl Csym(knl_low_pow) /* call low_pow() */ +1: ldr r0, =0 msr basepri, r0 b l_dispatch1 l_dispatch2: /* Switch to 'schedtsk' */ - str r8, [r4] /* ctxtsk = schedtsk */ - ldr sp, [r8, #TCB_tskctxb + CTXB_ssp] /* Restore 'ssp' from TCB */ + str r7, [r4] /* ctxtsk = schedtsk */ + ldr r1, [r7, #TCB_tskctxb + CTXB_ssp] /* Restore 'ssp' from TCB */ + mov sp, r1 -#if USE_DBGSPT & USE_HOOK_TRACE - ldr ip, =hook_exec_jmp /* Hook processing */ - ldr pc, [ip] - - .thumb_func -ret_hook_exec: -#endif - ldr r0, =Csym(knl_dispatch_disabled) ldr r1, =0 str r1, [r0] /* Dispatch enable */ - ldmfd sp!, {r4-r11, lr} + pop {r0-r7} + mov r8, r0 + mov r9, r1 + mov r10, r2 + mov r11, r3 + + pop {r0, r3} ldr r1, =Csym(knl_taskmode) - str lr, [r1] + str r0, [r1] - ldmfd sp!, {lr} /* R14_svc restore */ + mov lr, r3 /* R14_svc restore */ ldr r0, =0 msr basepri, r0 @@ -181,79 +174,6 @@ ret_hook_exec: EXC_RETURN - -#if USE_DBGSPT & USE_HOOK_TRACE -/* - * Task dispatcher hook routine call - * void stop( ID tskid, INT lsid, UINT tskstat ) - * void exec( ID tskid, INT lsid ) - */ - .text - .align 2 - .thumb_func -hook_stop: - cmp r8, #0 /* r8 = ctxtsk */ - beq l_notask - - ldrb r2, [r8, #TCB_state] /* tskstat */ - mov r2, r2, lsl #1 - ldr r0, [r8, #TCB_tskid] /* tskid */ - - ldr ip, =Csym(knl_hook_stopfn) - ldr ip, [ip] - blx ip /* call stop(tskid, lsid, tskstat) */ - -l_notask: - b ret_hook_stop - - .thumb_func -hook_exec: - /* r8 = ctxtsk */ - ldr r0, [r8, #TCB_tskid] /* tskid */ - - ldr ip, =Csym(knl_hook_execfn) - ldr ip, [ip] - blx ip /* call exec(tskid, lsid) */ - - b ret_hook_exec - -/* - * Set/Free task dispatcher hook routine - */ - .text - .align 2 - .thumb - .thumb_func - .global Csym(knl_hook_dsp) -Csym(knl_hook_dsp): - ldr r0, =hook_exec_jmp - ldr r1, =hook_stop_jmp - ldr r2, =hook_exec - ldr r3, =hook_stop - str r2, [r0] - str r3, [r1] - bx lr - - .thumb - .thumb_func - .global Csym(knl_unhook_dsp) -Csym(knl_unhook_dsp): - ldr r0, =hook_exec_jmp - ldr r1, =hook_stop_jmp - ldr r2, =ret_hook_exec - ldr r3, =ret_hook_stop - str r2, [r0] - str r3, [r1] - bx lr - - .data - .align 2 -hook_exec_jmp: .long ret_hook_exec -hook_stop_jmp: .long ret_hook_stop - -#endif /* USE_DBGSPT & USE_HOOK_TRACE */ - - #if USE_HLL_INTHDR /* ------------------------------------------------------------------------ */ /* @@ -270,112 +190,33 @@ hook_stop_jmp: .long ret_hook_stop .thumb_func .globl Csym(knl_inthdr_startup) Csym(knl_inthdr_startup): - push {lr} /* push EXC_RETURN value to stack */ + push {r2, lr} /* push EXC_RETURN value to stack */ - ldr ip, =Csym(knl_taskindp) /* Task independent part */ - ldr r1, [ip] - add r1, r1, #1 - str r1, [ip] + ldr r3, =Csym(knl_taskindp) /* Task independent part */ + ldr r1, [r3] + adds r1, r1, #1 + str r1, [r3] mrs r0, ipsr - sub r0, r0, #16 /* interrupt number (dintno) */ + subs r0, r0, #16 /* interrupt number (dintno) */ -#if USE_DBGSPT & USE_HOOK_TRACE - ldr ip, =hook_ienter_jmp - ldr pc, [ip] + ldr r3, =Csym(knl_hll_inthdr) + lsls r1, r0, #2 + ldr r3, [r3, r1] + blx r3 /* call hll_inthdr[n](dintno) */ - .thumb_func -ret_hook_ienter: -#endif + ldr r3, =Csym(knl_taskindp) + ldr r2, [r3] + subs r2, r1, #1 + str r2, [r3] - ldr ip, =Csym(knl_hll_inthdr) - lsl r1, r0, #2 - ldr ip, [ip, r1] - blx ip /* call hll_inthdr[n](dintno) */ + pop {r2, r3} /* pop EXC_RETURN value from stack */ + mov lr, r3 -#if USE_DBGSPT & USE_HOOK_TRACE - ldr ip, =hook_ileave_jmp - ldr pc, [ip] - - .thumb_func -ret_hook_ileave: -#endif - - ldr ip, =Csym(knl_taskindp) - ldr r2, [ip] - sub r2, r2, #1 - str r2, [ip] - - pop {lr} /* pop EXC_RETURN value from stack */ - EXC_RETURN - -#if USE_DBGSPT & USE_HOOK_TRACE -/* - * Interrupt handler hook routine call - */ - .text - .align 2 - .thumb_func -hook_ienter: - stmfd sp!, {r0, r1} /* Register save */ - stmfd sp!, {r3} - - ldr ip, =Csym(knl_hook_ienterfn) - ldr ip, [ip] - blx ip /* call enter(dintno, sp) */ - - ldmfd sp!, {r3} /* Register restore */ - ldmfd sp, {r0, r1} /* Leave 'dintno,' 'sp' on stack */ - b ret_hook_ienter - - .thumb_func -hook_ileave: - ldmfd sp!, {r0, r1} /* Restore 'dintno,' 'sp' */ - - ldr ip, =Csym(knl_hook_ileavefn) - ldr ip, [ip] - blx ip /* call leave(dintno, info) */ - - b ret_hook_ileave - -/* - * Set/Free interrupt handler hook routine - */ - .thumb - .thumb_func - .globl Csym(knl_hook_int) -Csym(knl_hook_int): - ldr r0, =hook_ienter_jmp - ldr r1, =hook_ileave_jmp - ldr r2, =hook_ienter - ldr r3, =hook_ileave - str r2, [r0] - str r3, [r1] - bx lr - - .thumb - .thumb_func - .globl Csym(knl_unhook_int) -Csym(knl_unhook_int): - ldr r0, =hook_ienter_jmp - ldr r1, =hook_ileave_jmp - ldr r2, =ret_hook_ienter - ldr r3, =ret_hook_ileave - str r2, [r0] - str r3, [r1] - bx lr - - .data - .align 2 -hook_ienter_jmp: .long ret_hook_ienter -hook_ileave_jmp: .long ret_hook_ileave - -#endif /* USE_DBGSPT & USE_HOOK_TRACE */ #endif /* USE_HLL_INTHDR */ - /* * tk_ret_int_impl() */ @@ -388,368 +229,7 @@ Csym(tk_ret_int_impl): EXC_RETURN /* ------------------------------------------------------------------------ */ - -#if USE_TRAP | USE_DBGSPT | (CFN_MAX_SSYID > 0) /* - * Unsupported system call - */ - .text - .align 2 - .thumb - .thumb_func - .globl Csym(knl_no_support) -Csym(knl_no_support): - ldr r0, =E_RSFN - bx lr - -/* - * System call entry table - */ -#if USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) - .text - .align 2 -_svctbl: - .int Csym(knl_no_support) -#define tk_ret_int_impl knl_no_support -#include -#undef tk_ret_int_impl -#endif /* USE_TRAP */ - -/* - * System call entry - * Do not need to save the temporary register. - * The compiler saves the permanent register. - * - * +---------------+ - * | xPSR | - * | Return Address| - * | lr | - * | ip | - * | r3 | Function code - * | r2 | - * | r1 | Addressof(svc #0) + 1 - * | r0 | - * sp -> +---------------+ - */ - .text - .align 2 - .thumb - .thumb_func - .globl Csym(knl_svcall_entry) -Csym(knl_svcall_entry): - tst lr, #0x4 /* Test EXC_RETURN number in LR bit 2 */ - ite eq - mrseq r1, msp /* Main stack */ - mrsne r1, psp /* Process stack */ - - /* Get Parameter of SVC instruction */ - ldr r2, [r1, #24] - ldrb r1, [r2, #-2] - - ldr r0, svcall_exc_ret - - cmp r1, #SVC_SYSCALL - it eq - ldreq r0, =knl_call_entry - - cmp r1, #SVC_EXTENDED_SVC - it eq - ldreq r0, =Csym(knl_call_entry) - -#if USE_DBGSPT & (USE_TRAP | USE_HOOK_TRACE) - cmp r1, #SVC_DEBUG_SUPPORT - it eq - ldreq r0, =Csym(knl_call_dbgspt) -#endif - - ldr r2, =svcall_exc_ret - cmp r0, r2 - ittt eq - ldreq r2, =E_RSFN - streq r2, [sp] - beq svcall_exc_ret - - ldr r1, [sp, #24] - orr r1, r1, #0x00000001 - str r1, [sp, #20] - - str r0, [sp, #24] - -svcall_exc_ret: - EXC_RETURN - - .thumb - .thumb_func - .globl Csym(knl_call_entry) -Csym(knl_call_entry): - - stmfd sp!, {r0-r7, ip, lr} - - /* Load func code */ - add r5, sp, #8*4 - - ldr ip, =Csym(knl_taskmode) /* Task mode flag update */ - ldr r7, [ip] - stmfd sp!, {r7} /* taskmode save */ - mov r6, sp /* Save stack pointer */ - mov lr, r7, lsl #16 - str lr, [ip] - -#if USE_DBGSPT & USE_HOOK_TRACE - ldr ip, =hook_enter_jmp /* Hook processing */ - ldr pc, [ip] - - .thumb_func -ret_hook_enter: -#endif - - ldr ip, [r5] - cmp ip, #0 /* < 0: System call */ - bge l_esvc_function /* >= 0: Extended SVC */ - -#if USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) - - /* micro T-Kernel System Call */ - mov r2, ip, asr #16 /* r2 = Function number */ - ldr r1, =N_TFN + 0xffff8000 - cmp r2, r1 - bgt l_illegal_svc - - mov ip, ip, lsr #8 - and ip, ip, #0xff /* ip = Number of arguments */ - cmp ip, #5 - bne l_nocopy - ldr ip, [r4] /* Copy fifth argument */ - stmfd sp!, {ip} -l_nocopy: - - ldr ip, =_svctbl - (0xffff8000 << 2) - add r4, ip, r2, lsl #2 - add ip, r6, #4 - ldmfd ip, {r0, r1, r2, r3} - ldr r4, [r4] /* r4 = system call address */ - blx r4 -#else - b l_illegal_svc -#endif - -l_retsvc: - -#if USE_DBGSPT & USE_HOOK_TRACE - ldr ip, =hook_leave_jmp /* Hook processing */ - ldr pc, [ip] - - .thumb_func -ret_hook_leave: -#endif - - mov sp, r6 - ldmfd sp!, {ip} /* Restore register for work */ - - ldr r4, =Csym(knl_taskmode) /* Task mode restore */ - str ip, [r4] - - add sp, sp, #16 - ldmfd sp!, {r4-r7, ip, lr} - - EXC_RETURN - -l_illegal_svc: - ldr r0, =E_RSFN - b l_retsvc - -l_esvc_function: - -#if CFN_MAX_SSYID > 0 - /* Extended SVC */ - ldr r1, [r5] /* r1 = Function code */ - bl Csym(knl_svc_ientry) /* svc_ientry(pk_para, fncd) */ - b l_retsvc -#else - ldr r0, =E_SYS - b l_retsvc -#endif /* CFN_MAX_SSYID > 0 */ - - -#if USE_DBGSPT & USE_HOOK_TRACE -/* - * System call/Extended SVC hook routine call - * VP enter( FN fncd, TD_CALINF *calinf, ... ) - * void leave( FN fncd, INT ret, VP exinf ) - * - * typedef struct td_calinf { - * VP ssp; System stack pointer - * VP r11; Flame pointer when calling - * } TD_CALINF; - */ - .text - .align 2 - - .thumb - .thumb_func -hook_enter: - stmfd sp!, {r0-r3, r8-r10} /* Save argument and register for work */ - mov r8, sp /* r8 = Keep stack position */ - - mov ip, r5 /* Create TD_CALINF */ - stmfd sp!, {r5, ip} - mov r9, sp /* r9 = &TD_CALINF */ - - ldr ip, [r5] /* ip = Function code */ - cmp ip, #0 /* < 0: System call */ - bge l_hooksvc /* >= 0: Extended SVC */ - - mov ip, ip, lsr #8 - and ip, ip, #0xff /* Number of arguments */ - - cmp ip, #5 - itt ge - ldrge r10, [r4] - stmfdge sp!, {r10} /* Fifth argument */ - cmp ip, #4 - it ge - stmfdge sp!, {r3} /* Fourth argument */ - cmp ip, #3 - it ge - stmfdge sp!, {r2} /* Third argument */ - mov r3, r1 /* Second argument */ -l_hooksvc: - mov r2, r0 /* First argument */ - mov r1, r9 /* calinf */ - ldr r0, [r5] /* fncd */ - ldr ip, =Csym(knl_hook_enterfn) - ldr ip, [ip] - blx ip /* exinf = enter(fncd, ...) */ - mov ip, r0 /* Temporarily save 'exinf' */ - - mov sp, r8 /* Return stack position */ - ldmfd sp!, {r0-r3, r8-r10} /* Restore argument and register for work */ - stmfd sp!, {ip} /* Save 'exinf' to stack */ - b ret_hook_enter - - .thumb_func -hook_leave: - mov r1, r0 /* r1 = ret */ - - mov lr, #0 - ldr r0, [r5] /* r0 = Function code */ - cmp r0, #0 /* < 0: System call */ - bge l_hooksvc2 /* >= 0: Extended SVC */ - - mov lr, r0, lsr #8 - and lr, lr, #0xff /* Number of arguments */ - subs lr, lr, #4 - it lt - movlt lr, #0 -l_hooksvc2: - - add lr, lr, #1 /* Whether 'hook_enter' is executed */ - sub ip, sp, r5 /* Check by stack usage */ - sub r7, r5, #10*4 /* Location in which 'sp = exinf' is saved */ - cmp lr, ip, lsr #2 /* If 'hook_enter' is executed, */ - ite eq - ldreq r2, =0 /* Get 'exinf' from stack */ - ldrne r2, [r7] /* If 'exinf' is not saved, 0 */ - - str r9, [r7] /* r9 save */ - mov r9, r1 /* Save 'ret' in 'r9' */ - - ldr ip, =Csym(knl_hook_leavefn) - ldr ip, [ip] - blx ip /* call leave(fncd, ret, exinf) */ - - mov r0, r9 /* r0 = ret restore */ - ldr r9, [r7] /* r9 restore */ - b ret_hook_leave - -/* - * Set/Free system call/extended SVC hook routine -*/ - .text - .align 2 - - .thumb - .thumb_func - .globl Csym(knl_hook_svc) -Csym(knl_hook_svc): - ldr r0, =hook_enter_jmp - ldr r1, =hook_leave_jmp - ldr r2, =hook_enter - ldr r3, =hook_leave - str r2, [r0] - str r3, [r1] - bx lr - - .thumb - .thumb_func - .globl Csym(knl_unhook_svc) -Csym(knl_unhook_svc): - ldr r0, =hook_enter_jmp - ldr r1, =hook_leave_jmp - ldr r2, =ret_hook_enter - ldr r3, =ret_hook_leave - str r2, [r0] - str r3, [r1] - bx lr - - .data -hook_enter_jmp: .long ret_hook_enter -hook_leave_jmp: .long ret_hook_leave - -#endif /* USE_DBGSPT & USE_HOOK_TRACE */ -#endif /* USE_TRAP | USE_DBGSPT | CFN_MAX_SSYID > 0 */ - -/* ------------------------------------------------------------------------ */ - -#if USE_DBGSPT & (USE_TRAP | USE_HOOK_TRACE) -/* - * Debugger support function service call entry table - */ - - .text - .align 2 - .thumb -_tdsvctbl: - .int Csym(knl_no_support) -#include - -/* - * Debugger support function service call entry - */ - .text - .align 2 - .thumb - .thumb_func - .globl Csym(knl_call_dbgspt) -Csym(knl_call_dbgspt): - - stmfd sp!, {r4-r6, lr} /* Save register for work */ - - mov r4, ip /* r4 -> func code */ - mov r5, r4, asr #16 /* r5 = Function number */ - ldr r6, =N_TDFN + 0xffff8000 - cmp r5, r6 - bgt b_illegal_svc - - ldr ip, =_tdsvctbl - (0xffff8000 << 2) - add r4, ip, r5, lsl #2 - ldr r4, [r4] /* r4 = system call address */ - blx r4 - -b_retsvc: - ldmfd sp!, {r4-r6, lr} /* Restore register for work */ - EXC_RETURN - - -b_illegal_svc: - ldr r0, =E_RSFN - b b_retsvc - -#endif /* USE_DBGSPT & (USE_TRAP | USE_HOOK_TRACE) */ - - -/* ------------------------------------------------------------------------ */ -/* * High level programming language routine for timer handler */ .text @@ -759,21 +239,19 @@ b_illegal_svc: .globl Csym(knl_timer_handler_startup) Csym(knl_timer_handler_startup): - stmfd sp!, {r4-r5, ip, lr} /* Register save */ + push {r3-r5, lr} /* Register save */ ldr r4, =Csym(knl_taskindp) /* Enter task independent part */ ldr r5, [r4] - add r0, r5, #1 + adds r0, r5, #1 str r0, [r4] bl Csym(knl_timer_handler) /* call timer_handler() */ str r5, [r4] /* Leave task independent part */ - ldmfd sp!, {r4-r5, ip, lr} /* Register restore */ + pop {r3-r5, pc} /* Register restore */ - bx lr - /* ------------------------------------------------------------------------ */ /* @@ -791,7 +269,7 @@ Csym(knl_force_dispatch): str r0, [r1] dsb - mov r0, #0 + movs r0, #0 bl Csym(enaint) bx lr diff -uNpr utkernel_source.orig/kernel/sysdepend/device/app_mb9af312k/icrt0.S utkernel_source/kernel/sysdepend/device/app_mb9af312k/icrt0.S --- utkernel_source.orig/kernel/sysdepend/device/app_mb9af312k/icrt0.S Fri May 10 10:32:00 2013 +++ utkernel_source/kernel/sysdepend/device/app_mb9af312k/icrt0.S Thu Aug 29 05:37:35 2013 @@ -62,8 +62,9 @@ bss_done: #if USE_IMALLOC ldr r5, =SYSTEMAREA_TOP cmp r2, r5 /* _end or RAM_TOP */ - it hi - movhi r5, r2 /* Either of High addresses */ + bls 0f + mov r5, r2 /* Either of High addresses */ +0: ldr r0, =Csym(knl_lowmem_top) str r5, [r0] /* knl_lowmem_top = _end or RAM_TOP */ ldr r5, =SYSTEMAREA_END - (EXC_STACK_SIZE + TMP_STACK_SIZE) @@ -80,7 +81,8 @@ bss_done: ldr r6, [r5] ldr r7, =0xFFFFF8FF ands r6, r6, r7 - orrs r6, r6, #0x0300 /* PRIGRP:SUBPRI = 4 : 4 */ + ldr r7, =0x0300 /* PRIGRP:SUBPRI = 4 : 4 */ + orrs r6, r6, r7 str r6, [r5] ldr r5, =SCB_SHPR2 @@ -93,19 +95,20 @@ bss_done: ldr r5, =NVIC_IPR_FORCE_DISPATCH ldr r6, [r5] - movt r6, #0xc030 /* force dispatch pri = 0xC, IRQ #94 pri = 0x3 */ + ldr r6, =0xc030 /* force dispatch pri = 0xC, IRQ #94 pri = 0x3 */ str r6, [r5] /* Enable software interrupt */ ldr r0, =INTNO_FORCE_DISPATCH bl Csym(EnableInt) - ldr r0, =INTNO_IRQ - bl Csym(EnableInt) +// ldr r0, =INTNO_IRQ +// bl Csym(EnableInt) ldr r5, =SCB_CCR ldr r6, [r5] - orrs r6, r6, #0x02 + movs r7, #0x02 + orrs r6, r6, r7 str r6, [r5] kernel_start: diff -uNpr utkernel_source.orig/kernel/sysdepend/device/app_mb9af312k/startup_rom.S utkernel_source/kernel/sysdepend/device/app_mb9af312k/startup_rom.S --- utkernel_source.orig/kernel/sysdepend/device/app_mb9af312k/startup_rom.S Fri May 10 10:32:01 2013 +++ utkernel_source/kernel/sysdepend/device/app_mb9af312k/startup_rom.S Wed Aug 28 14:03:38 2013 @@ -65,7 +65,7 @@ setup_ram_vectors: ldr r1, =__vector_org /* src address */ ldr r2, =__vector_start /* dst address */ ldr r3, =__vector_end - sub r3, r3, r2 /* r3 := r3 - r2 = vector_size */ + subs r3, r3, r2 /* r3 := r3 - r2 = vector_size */ vector_loop: ldmia r1!, {r0} diff -uNpr utkernel_source.orig/kernel/sysdepend/device/app_mb9af312k/vector.S utkernel_source/kernel/sysdepend/device/app_mb9af312k/vector.S --- utkernel_source.orig/kernel/sysdepend/device/app_mb9af312k/vector.S Fri May 10 10:32:02 2013 +++ utkernel_source/kernel/sysdepend/device/app_mb9af312k/vector.S Thu Aug 29 05:15:35 2013 @@ -53,7 +53,7 @@ __vector: .word 0 /* 8 -> Reserved */ .word 0 /* 9 -> Reserved */ .word 0 /* 10 -> Reserved */ - .word Csym(knl_svcall_entry) /* 11 -> Svcall */ + .word 0 /* 11 -> Svcall */ .word 0 /* 12 -> Debug monitor */ .word 0 /* 13 -> Reserved */ .word Csym(knl_dispatch_entry) /* 14 -> Pend SV */ @@ -106,7 +106,7 @@ __extintvec: .word Csym(DMAC5_Handler) /* 43: DMAC ch.5 */ .word Csym(DMAC6_Handler) /* 44: DMAC ch.6 */ .word Csym(DMAC7_Handler) /* 45: DMAC ch.7 */ - .word Csym(knl_call_entry) /* 46: Software Interrupt */ + .word 0 /* 46: Software Interrupt */ .word Csym(knl_dispatch_to_schedtsk) /* 47: force dispatch */ .weak Csym(knl_intvec) diff -uNpr utkernel_source.orig/lib/libsvc/build/mb9af312k/makeifex.pl utkernel_source/lib/libsvc/build/mb9af312k/makeifex.pl --- utkernel_source.orig/lib/libsvc/build/mb9af312k/makeifex.pl Fri May 10 10:32:27 2013 +++ utkernel_source/lib/libsvc/build/mb9af312k/makeifex.pl Sun Aug 25 06:52:35 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/lib/libsvc/build/mb9af312k/makeiftd.pl utkernel_source/lib/libsvc/build/mb9af312k/makeiftd.pl --- utkernel_source.orig/lib/libsvc/build/mb9af312k/makeiftd.pl Fri May 10 10:32:27 2013 +++ utkernel_source/lib/libsvc/build/mb9af312k/makeiftd.pl Sun Aug 25 06:52:29 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/lib/libsvc/build/mb9af312k/makeiftk.pl utkernel_source/lib/libsvc/build/mb9af312k/makeiftk.pl --- utkernel_source.orig/lib/libsvc/build/mb9af312k/makeiftk.pl Fri May 10 10:32:27 2013 +++ utkernel_source/lib/libsvc/build/mb9af312k/makeiftk.pl Sun Aug 25 06:52:23 2013 @@ -1,4 +1,4 @@ -#! /usr/local/bin/perl +#! /usr/bin/env perl # # ---------------------------------------------------------------------- # micro T-Kernel diff -uNpr utkernel_source.orig/lib/libsvc/src/sysdepend/mb9af312k/callsvc.S utkernel_source/lib/libsvc/src/sysdepend/mb9af312k/callsvc.S --- utkernel_source.orig/lib/libsvc/src/sysdepend/mb9af312k/callsvc.S Fri May 10 10:33:40 2013 +++ utkernel_source/lib/libsvc/src/sysdepend/mb9af312k/callsvc.S Mon Aug 26 03:25:13 2013 @@ -22,10 +22,9 @@ .globl Csym(callsvc) .type Csym(callsvc), %function Csym(callsvc): - stmfd sp!, {r1-r3} + push {r1-r3,lr} mov ip, r0 mov r0, sp - stmfd sp!, {lr} #if USE_TRAP svc SVC_EXTENDED_SVC @@ -33,7 +32,6 @@ Csym(callsvc): bl knl_call_entry #endif - ldmfd sp!, {lr} add sp, sp, #3*4 - bx lr + pop {pc}