diff -Ncwr utkernel_source.prev/config/sysdepend/app_h8s2212/utk_config_depend.h utkernel_source.curr/config/sysdepend/app_h8s2212/utk_config_depend.h *** utkernel_source.prev/config/sysdepend/app_h8s2212/utk_config_depend.h 2007-03-12 20:27:04.000000000 +0900 --- utkernel_source.curr/config/sysdepend/app_h8s2212/utk_config_depend.h 2007-09-02 11:00:39.000000000 +0900 *************** *** 13,53 **** */ /* ! * utk_config_depend.h (h8s2212) * System Configuration Definition */ /* ROMINFO */ ! #define SYSTEMAREA_TOP 0x00ffc000 /* RAM system area top */ ! #define SYSTEMAREA_END 0x00ffef00 /* RAM system area end */ /* User definition */ ! #define RI_USERAREA_TOP 0x00ffefc0 /* RAM user area top */ #define RI_USERINIT NULL /* User initialization program */ /* Stacks */ ! #define RI_INTSTACK 0x00ffefc0 /* Interrupt stack top(internal RAM end) */ /* SYSCONF */ ! #define CFN_TIMER_PERIOD 10 ! #define CFN_MAX_TSKID 32 ! #define CFN_MAX_SEMID 16 ! #define CFN_MAX_FLGID 16 ! #define CFN_MAX_MBXID 8 #define CFN_MAX_MTXID 2 ! #define CFN_MAX_MBFID 8 ! #define CFN_MAX_PORID 4 #define CFN_MAX_MPLID 2 ! #define CFN_MAX_MPFID 8 ! #define CFN_MAX_CYCID 4 ! #define CFN_MAX_ALMID 8 ! #define CFN_MAX_SSYID 4 ! #define CFN_MAX_SSYPRI 16 ! ! #define CFN_MAX_REGDEV (8) ! #define CFN_MAX_OPNDEV (16) ! #define CFN_MAX_REQDEV (16) #define CFN_DEVT_MBFSZ0 (-1) #define CFN_DEVT_MBFSZ1 (-1) --- 13,53 ---- */ /* ! * utk_config_depend.h (h83664) * System Configuration Definition */ /* ROMINFO */ ! #define SYSTEMAREA_TOP 0x0000f780 /* RAM system area top */ ! #define SYSTEMAREA_END 0x0000fec0 /* RAM system area end */ /* User definition */ ! #define RI_USERAREA_TOP 0x0000ff80 /* RAM user area top */ #define RI_USERINIT NULL /* User initialization program */ /* Stacks */ ! #define RI_INTSTACK 0x0000ff80 /* Interrupt stack top(internal RAM end) */ /* SYSCONF */ ! #define CFN_TIMER_PERIOD 250 ! #define CFN_MAX_TSKID 2 ! #define CFN_MAX_SEMID 2 ! #define CFN_MAX_FLGID 2 ! #define CFN_MAX_MBXID 2 #define CFN_MAX_MTXID 2 ! #define CFN_MAX_MBFID 2 ! #define CFN_MAX_PORID 2 #define CFN_MAX_MPLID 2 ! #define CFN_MAX_MPFID 2 ! #define CFN_MAX_CYCID 2 ! #define CFN_MAX_ALMID 2 ! #define CFN_MAX_SSYID 2 ! #define CFN_MAX_SSYPRI 2 ! ! #define CFN_MAX_REGDEV (2) ! #define CFN_MAX_OPNDEV (2) ! #define CFN_MAX_REQDEV (2) #define CFN_DEVT_MBFSZ0 (-1) #define CFN_DEVT_MBFSZ1 (-1) *************** *** 60,66 **** #define CFN_VER_PRNO3 0 #define CFN_VER_PRNO4 0 ! #define CFN_REALMEMEND ((VP)0x00ffefc0) /* * Initial task priority --- 60,66 ---- #define CFN_VER_PRNO3 0 #define CFN_VER_PRNO4 0 ! #define CFN_REALMEMEND ((VP)0xff80) /* * Initial task priority diff -Ncwr utkernel_source.prev/etc/sysdepend/app_h8s2212/makerules.sysdepend utkernel_source.curr/etc/sysdepend/app_h8s2212/makerules.sysdepend *** utkernel_source.prev/etc/sysdepend/app_h8s2212/makerules.sysdepend 2007-03-12 20:25:50.000000000 +0900 --- utkernel_source.curr/etc/sysdepend/app_h8s2212/makerules.sysdepend 2007-09-02 11:05:53.000000000 +0900 *************** *** 16,25 **** # makerules # for GNU make # ! # default rules - system-dependent (h8s2212) # # MACHINE target CPU ! # h8s2212 : H8S/2212 # # TETYPE target T-Engine type # app : T-Engine Appliance --- 16,25 ---- # makerules # for GNU make # ! # default rules - system-dependent (h83664) # # MACHINE target CPU ! # h83664 : H8/Tiny(H8/3664) # # TETYPE target T-Engine type # app : T-Engine Appliance *************** *** 39,53 **** PATH := $(PATH):/usr/local/bin:/bin:/usr/bin endif ! # ----- T-Engine Appliance H8S/2212 --------------------------------- # GCC environment TARGET_ARCH = # target type ! _CPUTYPE_FLAGS = -mrelax -ms -fomit-frame-pointer _CPUTYPE_FLAGS_AS = ! _TE_SYSTEM_NAME_ = _APP_H8S2212_ # code set _CODESET_FLAGS = --- 39,53 ---- PATH := $(PATH):/usr/local/bin:/bin:/usr/bin endif ! # ----- T-Engine Appliance H8/3664 --------------------------------- # GCC environment TARGET_ARCH = # target type ! _CPUTYPE_FLAGS = -mrelax -mh -mn -fomit-frame-pointer -Wall -Werror _CPUTYPE_FLAGS_AS = ! _TE_SYSTEM_NAME_ = _APP_H8S2212_ # XXX # code set _CODESET_FLAGS = diff -Ncwr utkernel_source.prev/include/sys/sysdepend/app_h8s2212/sysinfo_depend.h utkernel_source.curr/include/sys/sysdepend/app_h8s2212/sysinfo_depend.h *** utkernel_source.prev/include/sys/sysdepend/app_h8s2212/sysinfo_depend.h 2007-03-12 20:25:52.000000000 +0900 --- utkernel_source.curr/include/sys/sysdepend/app_h8s2212/sysinfo_depend.h 2007-09-02 13:27:02.000000000 +0900 *************** *** 13,19 **** */ /* ! * @(#)sysinfo_depend.h (sys/H8S2212) * * System common information */ --- 13,19 ---- */ /* ! * @(#)sysinfo_depend.h (sys/h83664) * * System common information */ *************** *** 30,39 **** /* * System common area info */ ! #define N_INTVEC 128 IMPORT FP knl_intvec[]; ! IMPORT W knl_taskindp; #endif /* _in_asm_source_ */ --- 30,39 ---- /* * System common area info */ ! #define N_INTVEC 26 IMPORT FP knl_intvec[]; ! IMPORT INT knl_taskindp; #endif /* _in_asm_source_ */ diff -Ncwr utkernel_source.prev/include/tk/sysdepend/app_h8s2212/asm_depend.h utkernel_source.curr/include/tk/sysdepend/app_h8s2212/asm_depend.h *** utkernel_source.prev/include/tk/sysdepend/app_h8s2212/asm_depend.h 2007-03-12 20:25:53.000000000 +0900 --- utkernel_source.curr/include/tk/sysdepend/app_h8s2212/asm_depend.h 2007-09-02 13:14:50.000000000 +0900 *************** *** 13,21 **** */ /* ! * @(#)asm_depend.h (tk/H8S2212) * ! * Assembler Macro for H8S */ #ifndef __TK_ASM_DEPEND_H__ --- 13,21 ---- */ /* ! * @(#)asm_depend.h (tk/h8300hn) * ! * Assembler Macro for h8300hn */ #ifndef __TK_ASM_DEPEND_H__ *************** *** 29,37 **** knl_inthdr_entry\vecno: stm.l (er0-er1), @-er7 // ER0, ER1 save ! mov.l #\vecno, er0 ! mov.l #Csym(knl_intvec), er1 ! mov.l @(\vecno * 4, er1), er1 jmp @er1 .endm --- 29,38 ---- knl_inthdr_entry\vecno: stm.l (er0-er1), @-er7 // ER0, ER1 save ! sub.l er0, er0 ! mov.b #\vecno, r0l ! mov.w #Csym(knl_intvec), r1 ! mov.w @(\vecno * 2, r1), r1 jmp @er1 .endm diff -Ncwr utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_init.c utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_init.c *** utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_init.c 2007-03-12 20:25:55.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_init.c 2007-09-02 13:25:24.000000000 +0900 *************** *** 13,19 **** */ /* ! * cpu_init.c (H8S2212) * CPU-Dependent Initialization/Finalization */ --- 13,19 ---- */ /* ! * cpu_init.c (h8300hn) * CPU-Dependent Initialization/Finalization */ *************** *** 23,29 **** #include "tkdev_conf.h" ! EXPORT W knl_taskindp = 0; #if USE_DYNAMIC_INTHDR Noinit(EXPORT FP knl_intvec[N_INTVEC]); --- 23,29 ---- #include "tkdev_conf.h" ! EXPORT INT knl_taskindp = 0; #if USE_DYNAMIC_INTHDR Noinit(EXPORT FP knl_intvec[N_INTVEC]); diff -Ncwr utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_insn.h utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_insn.h *** utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_insn.h 2007-03-12 20:25:55.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_insn.h 2007-09-02 20:55:47.000000000 +0900 *************** *** 13,20 **** */ /* ! * cpu_insn.h (H8S2212) ! * H8S2212-Dependent Operation */ #ifndef _CPU_INSN_ --- 13,20 ---- */ /* ! * cpu_insn.h (h8300hn) ! * h8300hn-Dependent Operation */ #ifndef _CPU_INSN_ *************** *** 22,28 **** #include ! IMPORT W knl_taskindp; /* ------------------------------------------------------------------------ */ /* --- 22,28 ---- #include ! IMPORT INT knl_taskindp; /* ------------------------------------------------------------------------ */ /* diff -Ncwr utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_support.S utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_support.S *** utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_support.S 2007-03-12 20:25:55.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_support.S 2007-09-23 18:44:45.000000000 +0900 *************** *** 13,19 **** */ /* ! * cpu_support.S (H8S2212) * Device-Dependent CPU Operation */ --- 13,19 ---- */ /* ! * cpu_support.S (h8300hn) * Device-Dependent CPU Operation */ *************** *** 31,37 **** #include "isysconf.h" #endif #include "tkdev_conf.h" ! #include "offset.h" /* ------------------------------------------------------------------------ */ /* --- 31,40 ---- #include "isysconf.h" #endif #include "tkdev_conf.h" ! ! #if !USE_TRAP | USE_DBGSPT | USE_HOOK_TRACE ! #error ouch! ! #endif /* ------------------------------------------------------------------------ */ /* *************** *** 67,73 **** /* Temporal stack used when 'dispatch_to_schedtsk' is called */ ! .h8300s .text --- 70,76 ---- /* Temporal stack used when 'dispatch_to_schedtsk' is called */ ! .h8300hn .text *************** *** 79,94 **** /* During interrupt disable SR.I=15 BL=0 RB=0 */ mov.l #(Csym(knl_tmp_stack) + TMP_STACK_SZ), er7 // Set temporal stack ! sub.l er0, er0 ! inc.l #1, er0 // er0 := 1 ! mov.l er0, @Csym(knl_dispatch_disabled) // Dispatch disable ! ! mov.l #Csym(knl_ctxtsk), er6 // er6 := &ctxtsk ! #if USE_DBGSPT ! mov.l @er6, er1 // er1 := ctxtsk ! #endif ! sub.l er0, er0 ! mov.l er0, @er6 // ctxtsk = NULL andc #CCR_EI_MASK, ccr // Interrupt enable bra l_dispatch0 --- 82,94 ---- /* During interrupt disable SR.I=15 BL=0 RB=0 */ mov.l #(Csym(knl_tmp_stack) + TMP_STACK_SZ), er7 // Set temporal stack ! sub.w r0, r0 ! inc.w #1, r0 // r0 := 1 ! mov.w r0, @Csym(knl_dispatch_disabled) // Dispatch disable ! ! mov.w #Csym(knl_ctxtsk), r6 // r6 := &ctxtsk ! sub.w r0, r0 ! mov.w r0, @er6 // ctxtsk = NULL andc #CCR_EI_MASK, ccr // Interrupt enable bra l_dispatch0 *************** *** 99,143 **** mov.w @er7, r0 and.b #CCR_EI_MASK, r0h mov.w r0, @er7 // SSR compensation (I=0) - #else - mov.w @er7, r0 - stc ccr, r0h - and.b #CCR_EI_MASK, r0h - mov.w r0, @er7 #endif _ret_int_dispatch: /* During interrupt disable SR.I=15 BL=0 RB=1 */ ! sub.l er0, er0 ! inc.l #1, er0 // er0 := 1 ! mov.l er0, @Csym(knl_dispatch_disabled) // Dispatch disable andc #CCR_EI_MASK, ccr // Interrupt enable stm.l (er0-er3), @-er7 // Context save stm.l (er4-er6), @-er7 ! mov.l #Csym(knl_ctxtsk), er6 // er6 := &ctxtsk ! mov.l @er6, er1 ! mov.l er7, @(TCB_tskctxb + CTXB_ssp, er1) // Save SSP to TCB l_dispatch0: /* During interrupt enable CPSR.I=0 F=0 */ - #if USE_DBGSPT & USE_HOOK_TRACE - mov.l @hook_stop_jmp, er0 // Hook processing - jmp @er0 - ret_hook_stop: - #endif l_dispatch1: orc #CCR_I, ccr // Interrupt disable ! mov.l @Csym(knl_schedtsk), er5 // ER5 = schedtsk // Is there 'schedtsk'? bne l_dispatch2 /* Because there is no task that should be executed, move to the power-saving mode */ ! mov.l @Csym(knl_lowpow_discnt), er0 // Is 'low_pow' disabled? bne l_dispatch11 jsr @Csym(knl_low_pow) // call low_pow() --- 99,135 ---- mov.w @er7, r0 and.b #CCR_EI_MASK, r0h mov.w r0, @er7 // SSR compensation (I=0) #endif _ret_int_dispatch: /* During interrupt disable SR.I=15 BL=0 RB=1 */ ! sub.w r0, r0 ! inc.w #1, r0 // r0 := 1 ! mov.w r0, @Csym(knl_dispatch_disabled) // Dispatch disable andc #CCR_EI_MASK, ccr // Interrupt enable stm.l (er0-er3), @-er7 // Context save stm.l (er4-er6), @-er7 ! mov.w #Csym(knl_ctxtsk), r6 // r6 := &ctxtsk ! mov.w @er6, r1 ! mov.w @Csym(CTXB_ssp), e1 ! add.w e1, r1 // er1 = &ctxtsk.ssp ! mov.l er7, @er1 // Save SSP to TCB l_dispatch0: /* During interrupt enable CPSR.I=0 F=0 */ l_dispatch1: orc #CCR_I, ccr // Interrupt disable ! mov.w @Csym(knl_schedtsk), r5 // ER5 = schedtsk // Is there 'schedtsk'? bne l_dispatch2 /* Because there is no task that should be executed, move to the power-saving mode */ ! mov.w @Csym(knl_lowpow_discnt), r0 // Is 'low_pow' disabled? bne l_dispatch11 jsr @Csym(knl_low_pow) // call low_pow() *************** *** 148,236 **** l_dispatch2: // Switch to 'schedtsk' /* During interrupt disable SR.I=15 BL=0 RB=1 SH3:DSP=1 */ ! mov.l er5, @er6 // ctxtsk = schedtsk ! mov.l @(TCB_tskctxb + CTXB_ssp, er5), er7 // Restore SSP from TCB ! ! #if USE_DBGSPT & USE_HOOK_TRACE ! mov.l @hook_exec_jmp, er0 // Hook processing ! jmp @er0 ! ret_hook_exec: ! #endif ! sub.l er1, er1 ! mov.l er1, @Csym(knl_dispatch_disabled) // Dispatch enable ldm.l @er7+, (er4-er6) // Context restore ldm.l @er7+, (er0-er3) rte - #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 - .balign 2 - hook_stop: - mov.l er1, er1 // er1 = ctxtsk - beq ret_hook_stop // no task - - mov.b @(TCB_state, er1), r2l // tskstat - shll.b r2l - extu.w r2 - - mov.w @(TCB_tskid, er1), r0 // tskid - - mov.l @Csym(knl_hook_stopfn), er3 - jsr @er3 // call stop(tskid, lsid, tskstat) - - jmp ret_hook_stop - - hook_exec: - stc ccr, r4l // SR save - andc #CCR_EI_MASK, ccr - /* SR.I=0 BL=0 RB=0 */ - - mov.l @er6, er1 // er1 = ctxtsk - mov.w @(TCB_tskid, er1), r0 // tskid - - mov.l @Csym(knl_hook_execfn), er3 - jsr @er3 // call exec(tskid, lsid) - - ldc r4l, ccr // SR restore - jmp ret_hook_exec - - - /* - * Set/Free task dispatcher hook routine - */ - .text - .balign 2 - .globl Csym(knl_hook_dsp) - Csym(knl_hook_dsp): - mov.l #hook_exec, er2 - mov.l #hook_stop, er3 - mov.l er2, @hook_exec_jmp - mov.l er3, @hook_stop_jmp - rts - - .globl Csym(knl_unhook_dsp) - Csym(knl_unhook_dsp): - mov.l #ret_hook_exec, er2 - mov.l #ret_hook_stop, er3 - mov.l er2, @hook_exec_jmp - mov.l er3, @hook_stop_jmp - rts - - .data - .balign 4 - hook_exec_jmp: .long ret_hook_exec - hook_stop_jmp: .long ret_hook_stop - - #endif /* USE_DBGSPT & USE_HOOK_TRACE */ - #if USE_HLL_INTHDR /* ------------------------------------------------------------------------ */ /* --- 140,158 ---- l_dispatch2: // Switch to 'schedtsk' /* During interrupt disable SR.I=15 BL=0 RB=1 SH3:DSP=1 */ ! mov.w r5, @er6 // ctxtsk = schedtsk ! mov.w @Csym(CTXB_ssp), r1 ! add.w r5, r1 ! mov.l @er1, er7 // Restore SSP from TCB ! sub.w r1, r1 ! mov.w r1, @Csym(knl_dispatch_disabled) // Dispatch enable ldm.l @er7+, (er4-er6) // Context restore ldm.l @er7+, (er0-er3) rte #if USE_HLL_INTHDR /* ------------------------------------------------------------------------ */ /* *************** *** 271,292 **** mov.l er2, @-er7 // SSP save l_no_change_sp: - #if USE_DBGSPT & USE_HOOK_TRACE - mov.l @hook_ienter_jmp, er3 - jmp @er3 - ret_hook_ienter: - #endif - shll.l #2, er0 // offset = dintno << 2 mov.l @(Csym(knl_hll_inthdr), er0), er3 // call hll_inthdr[n](dintno) jsr @er3 - #if USE_DBGSPT & USE_HOOK_TRACE - mov.l @hook_ileave_jmp, er3 - jmp @er3 - ret_hook_ileave: - #endif - orc.b #CCR_I, ccr // Interrupt disable /* During interrupt disable SR.I=15 BL=0 RB=0 */ --- 193,202 ---- *************** *** 305,365 **** #if USE_TRAP trapa #TRAP_RETINT // tk_ret_int() - #else - jmp @Csym(tk_ret_int_impl) #endif - #if USE_DBGSPT & USE_HOOK_TRACE - /* - * Interrupt handler hook routine call - */ - .text - .balign 2 - hook_ienter: - mov.l er0, @-er7 // Save dintno - - mov.l @Csym(knl_hook_ienterfn), er3 - jsr @er3 // call enter(dintno) - - mov.l @er7, er0 // er0 restore - - jmp ret_hook_ienter - - hook_ileave: - mov.l @er7+, er0 // dintno - - mov.l @Csym(knl_hook_ileavefn), er3 - jsr @er3 // call leave(dintno) - - jmp ret_hook_ileave - - /* - * Set/Free interrupt handler hook routine - */ - .text - .balign 2 - .globl Csym(knl_hook_int) - Csym(knl_hook_int): - mov.l #hook_ienter, er2 - mov.l #hook_ileave, er3 - mov.l er2, @hook_ienter_jmp - mov.l er3, @hook_ileave_jmp - rts - - .globl Csym(knl_unhook_int) - Csym(knl_unhook_int): - mov.l #ret_hook_ienter, er2 - mov.l #ret_hook_ileave, er3 - mov.l er2, @hook_ienter_jmp - mov.l er3, @hook_ileave_jmp - rts - - .data - .balign 4 - hook_ienter_jmp: .long ret_hook_ienter - hook_ileave_jmp: .long ret_hook_ileave - - #endif /* USE_DBGSPT & USE_HOOK_TRACE */ #endif /* USE_HLL_INTHDR */ /* --- 215,222 ---- *************** *** 467,497 **** #if USE_TRAP mov.w @(3*4, er7), r4 // SCCR ldc r4h, ccr - #else - #if CFN_MAX_SSYID > 0 - mov.w r0, r0 // < 0: System call - // >= 0: Extended SVC - blt l_set_retccr - - mov.w @(3*4, er7), r4 // SCCR - ldc r4h, ccr - bra l_set_end - l_set_retccr: - #endif - mov.w @(3*4, er7), r4 // SCCR - stc ccr, r4h - mov.w r4, @(3*4, er7) - l_set_end: #endif /* The interrupt disable state keeps the caller's state SR.I=? BL=0 RB=0 */ - #if USE_DBGSPT & USE_HOOK_TRACE - mov.l @hook_enter_jmp, er4 // Hook processing - jmp @er4 - ret_hook_enter: - #endif - mov.w r0, r4 // r4 := Function code bpl l_esvc_function --- 324,333 ---- *************** *** 521,532 **** #endif l_retsvc: - #if USE_DBGSPT & USE_HOOK_TRACE - mov.l @hook_leave_jmp, er4 // Hook processing - jmp @er4 - ret_hook_leave: - #endif - // Interrupt disable orc #CCR_I, ccr --- 357,362 ---- *************** *** 558,786 **** #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 - * } TD_CALINF; - */ - .text - .balign 2 - hook_enter: - stm.l (er0-er2), @-er7 // Save argument - - mov.l er7, er6 // er6 = ssp - mov.l er6, @-er7 // Create TD_CALINF - mov.l er7, er1 // er1 = &TD_CALINF - - mov.w r0, r4 // r4 := fncd function code - bpl l_nocopy_para // Extended SVC - - and.b #0x0f, r4l // Number of arguments - cmp.b #5, r4l - beq l_copy_para5 - cmp.b #4, r4l - beq l_copy_para4 - cmp.b #3, r4l - beq l_copy_para3 - cmp.b #2, r4l - beq l_copy_para2 - cmp.b #1, r4l - beq l_copy_para1 - bra l_nocopy_para - - l_copy_para5: - mov.l @(3*4 + 10 + 1*4, er5), er4 - mov.l er4, @-er7 // Fifth argument - l_copy_para4: - mov.l @(3*4 + 10, er5), er4 - mov.l er4, @-er7 // Fourth argument - l_copy_para3: - mov.l @(0*4, er6), er4 - mov.l er4, @-er7 // Third argument - l_copy_para2: - mov.l @(1*4, er6), er4 - mov.l er4, @-er7 // Second argument - l_copy_para1: - mov.l @(2*4, er6), er4 // First argument(r0 & fncd) - mov.w @(3*4 + 4, er5), r4 // First argument(lower word, original) - mov.l er4, @-er7 // First argument - - l_nocopy_para: - mov.l er1, @-er7 // push &calinf - - mov.l @Csym(knl_hook_enterfn), er4 - jsr @er4 // exinf = enter(fncd, &calinf, ...) - - l_ret_hook_enter: - mov.l er6, er7 // Restore stack position - mov.l er0, er6 // Move 'exinf' to er6 temporally - ldm.l @er7+, (er0-er2) // Restore argument - mov.l er6, @-er7 // Save 'exinf' - mov.w r0, r6 // Save fncd for hook_leave - - jmp ret_hook_enter - - l_esvc_para: - // Extended SVC - mov.l @(3*4 + 3*4 + 4 + 3*4, er6), er2 // ret-addr - mov.l @(3*4 + 3*4 + 4 + 1*4, er6), er4 // 3rd arg - mov.l er4, @(3*4 + 3*4 + 4 + 3*4, er6) // 3rd arg - mov.l er2, @(3*4 + 3*4 + 4 + 1*4, er6) // ret-addr - - mov.l @(1*4, er6), er2 // er2 = pk_para - mov.l er2, @-er7 // push pk_para - mov.l er1, @-er7 // push &calinf - - mov.l @Csym(knl_hook_enterfn), er4 - jsr @er4 // exinf = enter(fncd, &calinf, ...) - - mov.l @(3*4 + 3*4 + 4 + 3*4, er6), er2 // 3rd arg - mov.l @(3*4 + 3*4 + 4 + 1*4, er6), er4 // ret-addr - mov.l er4, @(3*4 + 3*4 + 4 + 3*4, er6) // ret-addr - mov.l er2, @(3*4 + 3*4 + 4 + 1*4, er6) // 3rd arg - - bra l_ret_hook_enter - - - hook_leave: - mov.w r0, e6 // save ret to non-destructive register - - mov.w r6, r4 // Function code - bpl l_hl1 // If fncd >= 0, extended SVC - - and.b #0x0f, r4l // Parameter count - extu.w r4 - sub.w #3, r4 - bpl l_hl2 - l_hl1: - mov.b #0, r4l - l_hl2: - mov.l #0, er2 // er2(exinf) = NULL - - shll.b #2, r4l // r4l = used stack size for args - extu.l er4 - - add.l er7, er4 // Whether 'hook_enter' is executed - // Check by stack usage - sub.l er5, er4 - beq l_hl3 - // 'hook_enter' is executed - mov.l @(-1*4, er5), er2 // er2 = exinf - - l_hl3: - mov.w r0, r1 // ret - mov.w r6, r0 // fncd - mov.l @Csym(knl_hook_leavefn), er4 - jsr @er4 // call leave(fncd, ret, exinf) - - mov.w e6, r0 // r0 = ret restore - - jmp ret_hook_leave - - /* - * Set/Free system call/extended SVC hook routine - */ - .text - .balign 2 - .globl Csym(knl_hook_svc) - Csym(knl_hook_svc): - mov.l #hook_enter, er2 - mov.l #hook_leave, er3 - mov.l er2, @hook_enter_jmp - mov.l er3, @hook_leave_jmp - rts - - .globl Csym(knl_unhook_svc) - Csym(knl_unhook_svc): - mov.l #ret_hook_enter, er2 - mov.l #ret_hook_leave, er3 - mov.l er2, @hook_enter_jmp - mov.l er3, @hook_leave_jmp - rts - - .data - .balign 4 - 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 - /* - * Debugger support function service call entry table - */ - #if USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) - .text - .balign 2 - _tdsvctbl: - .long Csym(knl_no_support) - #include - - /* - * Debugger support function service call entry - */ - .text - .balign 2 - .globl Csym(knl_call_dbgspt) - Csym(knl_call_dbgspt): - /* SVC mode/During interrupt disable CPSR.I=1 F=? */ - /* During interrupt disable SR.I=15 BL=1 RB=1 */ - - stm.l (er4-er5), @-er7 - mov.l er7, er5 - - #if USE_TRAP - mov.w @(2*4, er7), r4 // SCCR - ldc r4h, ccr - #else - mov.w @(2*4, er7), r4 // SCCR - stc ccr, r4h - mov.w r4, @(2*4, er7) - #endif - /* The interrupt disable state keeps the caller's state SR.I=? BL=0 RB=0 */ - - /* micro T-Kernel system call (DS) */ - mov.w r0, r4 - and.b #0x0f, r4l // Number of arguments(max is 4) - cmp.b #3, r4l - ble b_nocopy - mov.l @(2*4 + 10, er5), er4 // Copy fourth argument - mov.l er4, @-er7 - b_nocopy: - - and.w #0x0ff0, r0 - shlr.w #2, r0 - mov.w r0, r4 - extu.l er4 // er4 = svctbl index * 4 - mov.w @(4 + 2*4, er5), r0 // restore first argument - mov.l @(_tdsvctbl, er4), er4 - jsr @er4 // micro T-Kernel system call (DS) - - b_retsvc: - orc #CCR_I, ccr - - mov.l er5, er7 - ldm.l @er7+, (er4-er5) - rte - - b_illegal_svc: - mov.l #E_RSFN, er0 - bra b_retsvc - #endif /* USE_TRAP | (USE_DBGSPT & USE_HOOK_TRACE) */ - - - #endif /* USE_DBGSPT */ - - /* ------------------------------------------------------------------------ */ /* * High level programming language routine for timer handler */ --- 388,396 ---- *************** *** 829,835 **** #if USE_TRAP trapa #TRAP_RETINT // tk_ret_int() - #else - jmp @Csym(tk_ret_int_impl) #endif --- 439,443 ---- diff -Ncwr utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_task.h utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_task.h *** utkernel_source.prev/kernel/sysdepend/cpu/h8s2212/cpu_task.h 2007-08-29 22:19:28.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/cpu/h8s2212/cpu_task.h 2007-09-02 13:17:18.000000000 +0900 *************** *** 51,57 **** SStackFrame *ssp; UW ccr; ! ssp = (SStackFrame*)((UB*)(tcb->isstack) - (UB*)(sizeof(SStackFrame))); ccr = INIT_SR; --- 51,58 ---- SStackFrame *ssp; UW ccr; ! ssp = tcb->isstack; ! ssp--; ccr = INIT_SR; diff -Ncwr utkernel_source.prev/kernel/sysdepend/device/app_h8s2212/icrt0.S utkernel_source.curr/kernel/sysdepend/device/app_h8s2212/icrt0.S *** utkernel_source.prev/kernel/sysdepend/device/app_h8s2212/icrt0.S 2007-08-27 19:31:14.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/device/app_h8s2212/icrt0.S 2007-09-02 18:27:49.000000000 +0900 *************** *** 39,91 **** ldc.b #0xc0, ccr ! mov.l #__data_start, er2 /* dst address */ ! mov.l #__data_end, er3 ! cmp.l er2, er3 ble data_done /* if __data_start >= __data_end */ ! mov.l #__data_org, er1 /* src address */ data_loop: mov.l @er1+, er0 mov.l er0, @er2 add.l #4, er2 ! cmp.l er2, er3 bgt data_loop /* if er2 < __data_end */ data_done: #if USE_NOINIT ! mov.l #__noinit_end, er2 /* dst address */ #else /* .bss */ ! mov.l #__bss_start, er2 /* dst address */ #endif ! mov.l #__bss_end, er3 ! cmp.l er2, er3 ble bss_done /* if __bss_start >= __bss_end */ sub.l er0, er0 bss_loop: mov.l er0, @er2 add #4, er2 ! cmp.l er2, er3 bgt bss_loop /* if er2 < __bss_end */ bss_done: #if USE_IMALLOC ! mov.l #SYSTEMAREA_TOP, er5 ! cmp.l er5, er3 /* _end or RAM_TOP */ bge no_mov /* if er5 <= er3 */ ! mov.l er5, er3 no_mov: mov.w r3, @Csym(knl_lowmem_top) /* knl_lowmem_top = _end or RAM_TOP */ ! mov.l #SYSTEMAREA_END, er3 mov.w r3, @Csym(knl_lowmem_limit) /* knl_lowmem_limit = RAM_END */ #endif --- 39,91 ---- ldc.b #0xc0, ccr ! mov.w #__data_start, r2 /* dst address */ ! mov.w #__data_end, r3 ! cmp.w r2, r3 ble data_done /* if __data_start >= __data_end */ ! mov.w #__data_org, r1 /* src address */ data_loop: mov.l @er1+, er0 mov.l er0, @er2 add.l #4, er2 ! cmp.w r2, r3 bgt data_loop /* if er2 < __data_end */ data_done: #if USE_NOINIT ! mov.w #__noinit_end, r2 /* dst address */ #else /* .bss */ ! mov.w #__bss_start, r2 /* dst address */ #endif ! mov.w #__bss_end, r3 ! cmp.w r2, r3 ble bss_done /* if __bss_start >= __bss_end */ sub.l er0, er0 bss_loop: mov.l er0, @er2 add #4, er2 ! cmp.w r2, r3 bgt bss_loop /* if er2 < __bss_end */ bss_done: #if USE_IMALLOC ! mov.w #SYSTEMAREA_TOP, r5 ! cmp.w r5, r3 /* _end or RAM_TOP */ bge no_mov /* if er5 <= er3 */ ! mov.w r5, r3 no_mov: mov.w r3, @Csym(knl_lowmem_top) /* knl_lowmem_top = _end or RAM_TOP */ ! mov.w #SYSTEMAREA_END, r3 mov.w r3, @Csym(knl_lowmem_limit) /* knl_lowmem_limit = RAM_END */ #endif diff -Ncwr utkernel_source.prev/kernel/sysdepend/device/app_h8s2212/inthdr_startup.S utkernel_source.curr/kernel/sysdepend/device/app_h8s2212/inthdr_startup.S *** utkernel_source.prev/kernel/sysdepend/device/app_h8s2212/inthdr_startup.S 2007-08-27 19:31:14.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/device/app_h8s2212/inthdr_startup.S 2007-09-23 17:26:21.000000000 +0900 *************** *** 36,43 **** #endif #if !USE_TRAP INT_ENTRY 10 - INT_ENTRY 11 #endif INT_ENTRY 12 INT_ENTRY 13 INT_ENTRY 14 --- 36,43 ---- #endif #if !USE_TRAP INT_ENTRY 10 #endif + INT_ENTRY 11 INT_ENTRY 12 INT_ENTRY 13 INT_ENTRY 14 diff -Ncwr utkernel_source.prev/kernel/sysdepend/device/app_h8s2212/vector.S utkernel_source.curr/kernel/sysdepend/device/app_h8s2212/vector.S *** utkernel_source.prev/kernel/sysdepend/device/app_h8s2212/vector.S 2007-08-27 19:31:14.000000000 +0900 --- utkernel_source.curr/kernel/sysdepend/device/app_h8s2212/vector.S 2007-09-23 17:22:48.000000000 +0900 *************** *** 48,58 **** #endif #if USE_TRAP .word Csym(tk_ret_int_impl) /* 10: trap (#2) */ - .word Csym(knl_call_dbgspt) /* 11: trap (#3) */ #else .word int_ill /* 10: trap (#2) */ - .word int_ill /* 11: trap (#3) */ #endif .word int_ill /* 12: address break */ .word int_ill /* 13: direct transition */ .word int_ill /* 14: IRQ0 */ --- 48,57 ---- #endif #if USE_TRAP .word Csym(tk_ret_int_impl) /* 10: trap (#2) */ #else .word int_ill /* 10: trap (#2) */ #endif + .word int_ill /* 11: trap (#3) */ .word int_ill /* 12: address break */ .word int_ill /* 13: direct transition */ .word int_ill /* 14: IRQ0 */ *************** *** 91,101 **** #endif #if USE_TRAP .word Csym(tk_ret_int_impl) /* 10: trap (#2) */ - .word Csym(knl_call_dbgspt) /* 11: trap (#3) */ #else .word knl_inthdr_entry10 /* 10: trap (#2) */ - .word knl_inthdr_entry11 /* 11: trap (#3) */ #endif .word knl_inthdr_entry12 /* 12: address break */ .word knl_inthdr_entry13 /* 13: direct transition */ .word knl_inthdr_entry14 /* 14: IRQ0 */ --- 90,99 ---- #endif #if USE_TRAP .word Csym(tk_ret_int_impl) /* 10: trap (#2) */ #else .word knl_inthdr_entry10 /* 10: trap (#2) */ #endif + .word knl_inthdr_entry11 /* 11: trap (#3) */ .word knl_inthdr_entry12 /* 12: address break */ .word knl_inthdr_entry13 /* 13: direct transition */ .word knl_inthdr_entry14 /* 14: IRQ0 */ diff -Ncwr utkernel_source.prev/kernel/tkernel/src/task.c utkernel_source.curr/kernel/tkernel/src/task.c *** utkernel_source.prev/kernel/tkernel/src/task.c 2007-03-12 20:26:01.000000000 +0900 --- utkernel_source.curr/kernel/tkernel/src/task.c 2007-09-22 12:07:01.000000000 +0900 *************** *** 39,44 **** --- 39,52 ---- Noinit(EXPORT TCB *knl_ctxtsk); /* Task in execution */ Noinit(EXPORT TCB *knl_schedtsk); /* Task which should be executed */ Noinit(EXPORT RDYQUE knl_ready_queue); /* Ready queue */ + + /* + * TCB Offset Definition (for cpu_support.S) + */ + LOCAL const TCB *DummyTCB = NULL; + EXPORT const UH TCB_tskid = (UH)&DummyTCB->tskid - (UH)DummyTCB; + EXPORT const UH TCB_state = (UH)&DummyTCB->state - (UH)DummyTCB; + EXPORT const UH CTXB_ssp = (UH)&DummyTCB->tskctxb.ssp - (UH)DummyTCB; #endif /* USE_FUNC_CTXTSK */ #ifdef USE_FUNC_TCB_TABLE