diff --git a/src/an b/src/an new file mode 100755 index 0000000000000000000000000000000000000000..825b356e932aa58b4cac226748f102973b37aa8f --- /dev/null +++ b/src/an @@ -0,0 +1,3 @@ +#! /bin/bash + +cp main.elf /u/cs452/tftp/ARM/temp/ diff --git a/src/developing/first.map b/src/developing/first.map index 5b042774e9fea21007334ce74308d67e923233a8..4c18731b7d0929b2f1980d48e107b4876c22e01a 100644 --- a/src/developing/first.map +++ b/src/developing/first.map @@ -1,6 +1,6 @@ Archive member included because of file (symbol) -../../lib/libbwio.a(bwio.o) main.o (bwprintf) +../../lib/libbwio.a(bwio.o) main.o (bwputr) /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) ../../lib/libbwio.a(bwio.o) (__udivsi3) /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) @@ -28,46 +28,40 @@ bss 0x0000000000000000 0x0 *(.bss) 0x0000000000000000 _BssEnd = . -text 0x0000000000000000 0xff8 +text 0x0000000000000000 0xe58 *(.text) - .text 0x0000000000000000 0x15c main.o - 0x0000000000000000 test - 0x00000000000000f4 main - .text 0x000000000000015c 0xc54 ../../lib/libbwio.a(bwio.o) - 0x00000000000004d4 bwputr - 0x0000000000000a40 bwi2a - 0x000000000000015c bwsetfifo - 0x0000000000000330 bwputc - 0x0000000000000790 bwa2d - 0x0000000000000224 bwsetspeed - 0x00000000000003f4 c2x - 0x0000000000000838 bwa2i - 0x00000000000006d8 bwgetc - 0x00000000000008fc bwui2a - 0x0000000000000aa4 bwformat - 0x00000000000005d0 bwputw - 0x0000000000000d78 bwprintf - 0x0000000000000454 bwputx - 0x0000000000000554 bwputstr - .text 0x0000000000000db0 0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) - 0x0000000000000db0 __udivsi3 - 0x0000000000000ea8 __aeabi_uidivmod - .text 0x0000000000000ec0 0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) - 0x0000000000000ec0 __umodsi3 - .text 0x0000000000000f8c 0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) - 0x0000000000000f8c __aeabi_ldiv0 - 0x0000000000000f8c __div0 - 0x0000000000000f8c __aeabi_idiv0 + .text 0x0000000000000000 0x24 main.o + 0x0000000000000000 main + .text 0x0000000000000024 0xc54 ../../lib/libbwio.a(bwio.o) + 0x000000000000039c bwputr + 0x0000000000000908 bwi2a + 0x0000000000000024 bwsetfifo + 0x00000000000001f8 bwputc + 0x0000000000000658 bwa2d + 0x00000000000000ec bwsetspeed + 0x00000000000002bc c2x + 0x0000000000000700 bwa2i + 0x00000000000005a0 bwgetc + 0x00000000000007c4 bwui2a + 0x000000000000096c bwformat + 0x0000000000000498 bwputw + 0x0000000000000c40 bwprintf + 0x000000000000031c bwputx + 0x000000000000041c bwputstr + .text 0x0000000000000c78 0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o) + 0x0000000000000c78 __udivsi3 + 0x0000000000000d70 __aeabi_uidivmod + .text 0x0000000000000d88 0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o) + 0x0000000000000d88 __umodsi3 + .text 0x0000000000000e54 0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o) + 0x0000000000000e54 __aeabi_ldiv0 + 0x0000000000000e54 __div0 + 0x0000000000000e54 __aeabi_idiv0 *(.got) *(.got.plt) - .got.plt 0x0000000000000f90 0xc main.o - 0x0000000000000f90 _GLOBAL_OFFSET_TABLE_ *(.rodata) - .rodata 0x0000000000000f9c 0x5c main.o *(.glue_7) *(.glue_7t) - -.rel.dyn LOAD main.o LOAD ../../lib/libbwio.a LOAD /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a diff --git a/src/developing/main.c b/src/developing/main.c index d11389f226d1523c37955b4e4ff0f6f14735d610..68fea9314b09da50015e08795e9b972dd558cb06 100644 --- a/src/developing/main.c +++ b/src/developing/main.c @@ -1,6 +1,6 @@ #include <types.h> #include <bwio.h> - +/* void test(TD* T){ asm volatile(//"mov r0, #0\n\t" "mov r1, #11\n\t" @@ -34,8 +34,9 @@ void test(TD* T){ bwprintf(COM2,"sp:%d, lr:%d, spsr:%d, retval:%d, args:%d\n\r",T->sp,T->lr,T->spsr,T->RetVal,T->Args); bwprintf(COM2,"r4:%d, r5:%d, r6:%d, r7:%d, r8:%d\n\r",four,five,six,seven,eight); } - +*/ int main(){ +/* //TD T; //T.sp = 0x1e000000; //T.lr = 222; @@ -57,5 +58,6 @@ int main(){ register int r3 asm("r3"); int three = r3; bwprintf(COM2,"r3: %d\n\r",three); - return 0; +*/ +return 0; } diff --git a/src/developing/main.elf b/src/developing/main.elf index 4c9afe2fb40d46f2d382f5f2b2e6b60aee982c80..68c107d859ce077751ba32c66ef4eb663a3b30ef 100755 Binary files a/src/developing/main.elf and b/src/developing/main.elf differ diff --git a/src/developing/main.o b/src/developing/main.o index 9b4a0d9ffc8f15617e2c4cb2c4162a9212aaf51b..36edf06a140130581d35d11051df71b807955346 100644 Binary files a/src/developing/main.o and b/src/developing/main.o differ diff --git a/src/developing/main.s b/src/developing/main.s index a6e53988a53ef4974cb01d4d1aa8829e9db93990..8743442f4300d63816235e220a2b59110081a0e6 100644 --- a/src/developing/main.s +++ b/src/developing/main.s @@ -1,127 +1,20 @@ .file "main.c" - .section .rodata - .align 2 -.LC0: - .ascii "sp:%d, lr:%d, spsr:%d, retval:%d, args:%d\012\015\000" - .align 2 -.LC1: - .ascii "r4:%d, r5:%d, r6:%d, r7:%d, r8:%d\012\015\000" - .text - .align 2 - .global test - .type test, %function -test: - @ args = 0, pretend = 0, frame = 28 - @ frame_needed = 1, uses_anonymous_args = 0 - mov ip, sp - stmfd sp!, {r4, r5, r6, r7, r8, sl, fp, ip, lr, pc} - sub fp, ip, #4 - sub sp, sp, #40 - ldr sl, .L4 -.L3: - add sl, pc, sl - str r0, [fp, #-64] - mov r1, #11 - mov r2, #22 - mov r3, #33 - mov r4, #44 - mov r5, #55 - add r0, r0,#20 - stmfd r0!, {r1-r5} - - ldmfd r0!,{r4} - ldmfd r0!,{r5-r8} - - str r4, [fp, #-60] - ldr r3, [fp, #-64] - str r3, [fp, #-56] - str r5, [fp, #-52] - str r6, [fp, #-48] - str r7, [fp, #-44] - str r8, [fp, #-40] - ldr r3, [fp, #-64] - ldr ip, [r3, #0] - ldr r3, [fp, #-64] - ldr lr, [r3, #4] - ldr r3, [fp, #-64] - ldr r2, [r3, #8] - ldr r3, [fp, #-64] - ldr r1, [r3, #12] - ldr r3, [fp, #-64] - ldr r3, [r3, #16] - str r2, [sp, #0] - str r1, [sp, #4] - str r3, [sp, #8] - mov r0, #1 - ldr r3, .L4+4 - add r3, sl, r3 - mov r1, r3 - mov r2, ip - mov r3, lr - bl bwprintf(PLT) - ldr r3, [fp, #-48] - str r3, [sp, #0] - ldr r3, [fp, #-44] - str r3, [sp, #4] - ldr r3, [fp, #-40] - str r3, [sp, #8] - mov r0, #1 - ldr r3, .L4+8 - add r3, sl, r3 - mov r1, r3 - ldr r2, [fp, #-60] - ldr r3, [fp, #-52] - bl bwprintf(PLT) - sub sp, fp, #36 - ldmfd sp, {r4, r5, r6, r7, r8, sl, fp, sp, pc} -.L5: - .align 2 -.L4: - .word _GLOBAL_OFFSET_TABLE_-(.L3+8) - .word .LC0(GOTOFF) - .word .LC1(GOTOFF) - .size test, .-test - .section .rodata - .align 2 -.LC2: - .ascii "r3: %d\012\015\000" .text .align 2 .global main .type main, %function main: - @ args = 0, pretend = 0, frame = 4 + @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 mov ip, sp - stmfd sp!, {sl, fp, ip, lr, pc} + stmfd sp!, {fp, ip, lr, pc} sub fp, ip, #4 - sub sp, sp, #4 - ldr sl, .L9 -.L8: - add sl, pc, sl - mov r0, #10 - mov r1, #11 - mov r2, #22 - mov r3, #33 - mov r4, #44 - mov r5, #55 - stmfd sp!, {r0-r5} - ldmfd sp!, {r3} - - str r3, [fp, #-20] - mov r0, #1 - ldr r3, .L9+4 - add r3, sl, r3 - mov r1, r3 - ldr r2, [fp, #-20] - bl bwprintf(PLT) mov r3, #0 mov r0, r3 - ldmfd sp, {r3, sl, fp, sp, pc} -.L10: - .align 2 -.L9: - .word _GLOBAL_OFFSET_TABLE_-(.L8+8) - .word .LC2(GOTOFF) + + mov r0, #1 + mov r1, #5 + bl bwputr(PLT) + ldmfd sp, {fp, sp, pc} .size main, .-main .ident "GCC: (GNU) 4.0.2" diff --git a/src/main.c b/src/main.c index 44fb95afd0aec4558b1ef9802c37662ed746b812..93caf47e6b04e77be4054e2afb53de58f8bba9dc 100644 --- a/src/main.c +++ b/src/main.c @@ -14,39 +14,41 @@ int main() { - - KernelStruct Colonel; - int i, Status, req; - TD* Next; - - //int* kernelEntry = (int *)(0x28); - //*kernelEntry = (int)&kerent; - InitSwi(); - //SetUpRegs(); - //kerent(); - kernelInit(&Colonel); - //schedulerInit(); - // First User Task - TD* FirstUserTask= CreateTask(&Colonel, Prio4, (void *) (&firstUserTaskChildren)); - //bwprintf(COM2,"main function ptr: %d\n\r",(&firstUserTaskChildren)); - pushToScheduler(&Colonel, FirstUserTask); - TD* Task; - int ReturnValue = 0; - FOREVER { - if(Colonel.Active == NULL){ - ReturnValue = 0; - Task = getNextTaskScheduler(&Colonel); - }else{ - Task = Colonel.Active; - ReturnValue = Task->RetVal; - } - //bwprintf(COM2,"Kernel Loop Task = %d\n\r",Task); - if(Task == NULL) break; - req = Activate(&Colonel,Task); - //register int r0 asm("r0"); - //req = r0; - //bwprintf(COM2,"req= %d\n\r",req); - Handle(&Colonel, req); - } - return 0; + + KernelStruct Colonel; + int i, Status, req; + TD* Next; + + InitSwi(); + kernelInit(&Colonel); + // First User Task +// bwprintf(COM2, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\r"); +// bwprintf(COM2, "main: before calling create first task \n\r"); + TD* FirstUserTask= CreateTask(&Colonel, Prio4, (void *) (&firstUserTaskChildren)); + +// bwprintf(COM2,"main function ptr: %d\n\r",(&firstUserTaskChildren)); + pushToScheduler(&Colonel, FirstUserTask); + TD* Task; + int ReturnValue = 0; + FOREVER { + if(Colonel.Active == NULL){ +// bwprintf(COM2, "main: Active == NULL\n\r"); + ReturnValue = 0; + Task = getNextTaskScheduler(&Colonel); + } + else{ +// bwprintf(COM2, "main: Active not NULL\n\r"); + Task = Colonel.Active; + ReturnValue = Task->RetVal; + } + if(Task == NULL) break; + bwprintf(COM2,"main: Active->Priority: %d\n\r", Task->TaskPriority); + req = Activate(&Colonel,Task); +// bwprintf(COM2,"main: after Activates finished req= %d\n\r",req); +// bwprintf(COM2,"main: before Handle\n\r"); + Handle(&Colonel, req); +// bwprintf(COM2, "main: done with one loop\n\r"); +// bwprintf(COM2,"==================================================================\n\r"); + } + return 0; } diff --git a/src/main.elf b/src/main.elf new file mode 100755 index 0000000000000000000000000000000000000000..a05424ee0b37637a3b08e7773911504458f7927d Binary files /dev/null and b/src/main.elf differ diff --git a/src/main.o b/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..b1d698ffb67943d59d446e587535ebe4179162bf Binary files /dev/null and b/src/main.o differ diff --git a/src/main.s b/src/main.s new file mode 100644 index 0000000000000000000000000000000000000000..fda61f51c9188b5fd81ccb074275247bb0ce1a8a --- /dev/null +++ b/src/main.s @@ -0,0 +1,98 @@ + .file "main.c" + .section .rodata + .align 2 +.LC0: + .ascii "main: Active->Priority: %d\012\015\000" + .text + .align 2 + .global main + .type main, %function +main: + @ args = 0, pretend = 0, frame = 2780 + @ frame_needed = 1, uses_anonymous_args = 0 + mov ip, sp + stmfd sp!, {sl, fp, ip, lr, pc} + sub fp, ip, #4 + sub sp, sp, #2768 + sub sp, sp, #12 + ldr sl, .L10 +.L9: + add sl, pc, sl + bl InitSwi(PLT) + sub r3, fp, #2784 + sub r3, r3, #12 + mov r0, r3 + bl kernelInit(PLT) + sub r3, fp, #2784 + sub r3, r3, #12 + mov r0, r3 + mov r1, #4 + ldr r3, .L10+4 + ldr r3, [sl, r3] + mov r2, r3 + bl CreateTask(PLT) + mov r3, r0 + str r3, [fp, #-28] + sub r3, fp, #2784 + sub r3, r3, #12 + mov r0, r3 + ldr r1, [fp, #-28] + bl pushToScheduler(PLT) + mov r3, #0 + str r3, [fp, #-20] +.L2: + ldr r3, [fp, #-2796] + cmp r3, #0 + bne .L3 + mov r3, #0 + str r3, [fp, #-20] + sub r3, fp, #2784 + sub r3, r3, #12 + mov r0, r3 + bl getNextTaskScheduler(PLT) + mov r3, r0 + str r3, [fp, #-24] + b .L5 +.L3: + ldr r3, [fp, #-2796] + str r3, [fp, #-24] + ldr r3, [fp, #-24] + ldr r3, [r3, #12] + str r3, [fp, #-20] +.L5: + ldr r3, [fp, #-24] + cmp r3, #0 + beq .L6 + ldr r3, [fp, #-24] + ldr r2, [r3, #32] + mov r0, #1 + ldr r3, .L10+8 + add r3, sl, r3 + mov r1, r3 + bl bwprintf(PLT) + sub r3, fp, #2784 + sub r3, r3, #12 + mov r0, r3 + ldr r1, [fp, #-24] + bl Activate(PLT) + mov r3, r0 + str r3, [fp, #-36] + sub r3, fp, #2784 + sub r3, r3, #12 + mov r0, r3 + ldr r1, [fp, #-36] + bl Handle(PLT) + b .L2 +.L6: + mov r3, #0 + mov r0, r3 + sub sp, fp, #16 + ldmfd sp, {sl, fp, sp, pc} +.L11: + .align 2 +.L10: + .word _GLOBAL_OFFSET_TABLE_-(.L9+8) + .word firstUserTaskChildren(GOT) + .word .LC0(GOTOFF) + .size main, .-main + .ident "GCC: (GNU) 4.0.2" diff --git a/src/sketch b/src/sketch index 5dc31aa918ad083fa439ecb40ef28528fae984d0..8ea26d8d906e8910249f1c3626c77f14c31a6092 100644 --- a/src/sketch +++ b/src/sketch @@ -1 +1 @@ -K.Active(0)->T0(Create(someFunc))->SWI->K.Active(return 0)->K.Handle(0)->handelCreate()->Activate(T0)->(probably kerxit) \ No newline at end of file +K.Active(0)->T0(Create(someFunc))->SWI->K.Active(return 0)->K.Handle(0)->handelCreate()->Activate(T0)->(probably kerxit)