Fixed ISR handlers, managed to finish elf loading for modules at least
This commit is contained in:
parent
f6108aaab5
commit
51af16b61e
9
makefile
9
makefile
|
|
@ -3,13 +3,14 @@ AS := nasm
|
||||||
CFLAGS:=-g -c -m32 -fno-pie -mno-sse -O3 -D __bits__=32 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types -Wno-address-of-packed-member -Wno-discarded-qualifiers -fno-stack-protector -mno-red-zone -mno-sse -mno-sse2 -ffreestanding -nostdlib -mno-mmx
|
CFLAGS:=-g -c -m32 -fno-pie -mno-sse -O3 -D __bits__=32 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types -Wno-address-of-packed-member -Wno-discarded-qualifiers -fno-stack-protector -mno-red-zone -mno-sse -mno-sse2 -ffreestanding -nostdlib -mno-mmx
|
||||||
CFLAGS_MODULE:=-g -c -m32 -fpie -pie -mno-sse -O3 -D __bits__=32 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types -Wno-address-of-packed-member -Wno-discarded-qualifiers -fno-stack-protector -mno-red-zone -mno-sse -mno-sse2 -ffreestanding -nostdlib -mno-mmx
|
CFLAGS_MODULE:=-g -c -m32 -fpie -pie -mno-sse -O3 -D __bits__=32 -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types -Wno-address-of-packed-member -Wno-discarded-qualifiers -fno-stack-protector -mno-red-zone -mno-sse -mno-sse2 -ffreestanding -nostdlib -mno-mmx
|
||||||
BL_ASFLAGS := -f bin
|
BL_ASFLAGS := -f bin
|
||||||
|
LDFLAGS_MODULE:=-melf_i386 -e init --no-dynamic-linker -static -nostdlib
|
||||||
SRCS := $(wildcard src/kernel/*/*.c)
|
SRCS := $(wildcard src/kernel/*/*.c)
|
||||||
OBJS := $(patsubst src/kernel/%.c, bin/kernel/%.o, $(SRCS))
|
OBJS := $(patsubst src/kernel/%.c, bin/kernel/%.o, $(SRCS))
|
||||||
|
|
||||||
all: bootloader tools kernel
|
all: bootloader tools kernel
|
||||||
cp bin/bootloader.bin image.bin
|
cp bin/bootloader.bin image.bin
|
||||||
qemu-img resize -f raw image.bin 512M
|
qemu-img resize -f raw image.bin 512M
|
||||||
./diskwrite -v -l idm.elf kernel.elf -o image.bin
|
./diskwrite -v -l idm.elf ifsm.elf kernel.elf -o image.bin
|
||||||
# ./diskwrite -v idm.elf -o image.bin
|
# ./diskwrite -v idm.elf -o image.bin
|
||||||
# ./diskwrite -v -l kernel.elf idm.elf -o image.bin
|
# ./diskwrite -v -l kernel.elf idm.elf -o image.bin
|
||||||
qemu-system-i386 -hda image.bin --no-reboot --no-shutdown -m 32m -smp 2 -serial mon:stdio -D intlog.txt -d int
|
qemu-system-i386 -hda image.bin --no-reboot --no-shutdown -m 32m -smp 2 -serial mon:stdio -D intlog.txt -d int
|
||||||
|
|
@ -23,12 +24,14 @@ bootloader:
|
||||||
kernel:
|
kernel:
|
||||||
nasm src/kernel/entry.s -o bin/kernel/entry.o -f elf32
|
nasm src/kernel/entry.s -o bin/kernel/entry.o -f elf32
|
||||||
gcc src/kmodules/disk_driver.c $(CFLAGS_MODULE) -o bin/modules/disk_driver.o -m32
|
gcc src/kmodules/disk_driver.c $(CFLAGS_MODULE) -o bin/modules/disk_driver.o -m32
|
||||||
|
gcc src/kmodules/fs_driver.c $(CFLAGS_MODULE) -o bin/modules/fs_driver.o -m32
|
||||||
sh c_build_helper.sh
|
sh c_build_helper.sh
|
||||||
nasm src/kernel/arch_i386/idt.s -o bin/kernel/idt.o -felf32
|
nasm src/kernel/arch_i386/idt.s -o bin/kernel/idt.o -felf32
|
||||||
# ld -T linker.ld bin/kernel/entry.o bin/kernel/*.o -melf_i386
|
# ld -T linker.ld bin/kernel/entry.o bin/kernel/*.o -melf_i386
|
||||||
ld -T linker.ld bin/kernel/*.o -melf_i386 -o kernel.elf -static
|
ld -T linker.ld bin/kernel/*.o -melf_i386 -o kernel.elf -static
|
||||||
ld -T linker.ld -o kernel_interface.elf -r -R kernel.elf -melf_i386
|
# ld -T linker.ld -o kernel_interface.elf -r -R kernel.elf -melf_i386
|
||||||
ld -pie bin/modules/disk_driver.o kernel_interface.elf -o idm.elf -melf_i386 -e main --no-dynamic-linker -static -nostdlib
|
ld -pie bin/modules/disk_driver.o -o idm.elf -melf_i386 -e init --no-dynamic-linker -static -nostdlib
|
||||||
|
ld -pie bin/modules/fs_driver.o -o ifsm.elf -melf_i386 -e init --no-dynamic-linker -static -nostdlib
|
||||||
# %.o: $(SRCS)
|
# %.o: $(SRCS)
|
||||||
# mkdir -p bin/kernel/$(shell dirname $@)
|
# mkdir -p bin/kernel/$(shell dirname $@)
|
||||||
# $(CC) $(CFLAGS) $< -o $@
|
# $(CC) $(CFLAGS) $< -o $@
|
||||||
|
|
|
||||||
|
|
@ -351,21 +351,41 @@ part_2:
|
||||||
mov ax, 0xe44
|
mov ax, 0xe44
|
||||||
int 0x10
|
int 0x10
|
||||||
.find_fs_driver:
|
.find_fs_driver:
|
||||||
|
; mov edi, fs_module_file
|
||||||
|
; call open_file
|
||||||
|
; cmp eax, -1
|
||||||
|
; je .start32_no_fs
|
||||||
|
; mov [fs_module_struct.size], edx
|
||||||
|
; mov eax, esi
|
||||||
|
; and edx, 0xfffffc00
|
||||||
|
; add edx, 0x1000
|
||||||
|
; add [kload_paddr], edx
|
||||||
|
|
||||||
|
; mov edi, [kload_paddr]
|
||||||
|
; mov [fs_module_struct.ptr], edi
|
||||||
|
; call read_file
|
||||||
|
|
||||||
|
; jc load_fail
|
||||||
|
;
|
||||||
mov edi, fs_module_file
|
mov edi, fs_module_file
|
||||||
call open_file
|
call open_file
|
||||||
|
; debug
|
||||||
cmp eax, -1
|
cmp eax, -1
|
||||||
je .start32_no_fs
|
je .start32_no_fs
|
||||||
mov [fs_module_struct.size], edx
|
mov [fs_module_struct.size], edx
|
||||||
mov eax, esi
|
mov esi, eax
|
||||||
and edx, 0xfffffc00
|
and edx, 0xfffff000
|
||||||
add edx, 0x1000
|
add edx, 0x2000
|
||||||
add [kload_paddr], edx
|
add [kload_paddr], edx
|
||||||
|
; mov eax, [kload_paddr]
|
||||||
|
; jmp $
|
||||||
|
; debug
|
||||||
mov edi, [kload_paddr]
|
mov edi, [kload_paddr]
|
||||||
mov [fs_module_struct.ptr], edi
|
mov [fs_module_struct.ptr], edi
|
||||||
call read_file
|
call read_file
|
||||||
|
|
||||||
jc load_fail
|
jc load_fail
|
||||||
|
jmp .start32
|
||||||
|
;
|
||||||
.start32_no_fs:
|
.start32_no_fs:
|
||||||
mov ax, 0xe46
|
mov ax, 0xe46
|
||||||
int 0x10
|
int 0x10
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ _isr5:
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr6:
|
_isr6:
|
||||||
cli
|
cli
|
||||||
|
xchg bx, bx
|
||||||
push dword 0
|
push dword 0
|
||||||
push dword 6
|
push dword 6
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
|
|
@ -83,7 +84,6 @@ _isr7:
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr8:
|
_isr8:
|
||||||
cli
|
cli
|
||||||
push dword 0
|
|
||||||
push dword 8
|
push dword 8
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr9:
|
_isr9:
|
||||||
|
|
@ -123,6 +123,7 @@ _isr16:
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr17:
|
_isr17:
|
||||||
cli
|
cli
|
||||||
|
push dword 0
|
||||||
push dword 17
|
push dword 17
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr18:
|
_isr18:
|
||||||
|
|
@ -142,6 +143,7 @@ _isr20:
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr21:
|
_isr21:
|
||||||
cli
|
cli
|
||||||
|
push dword 0
|
||||||
push dword 21
|
push dword 21
|
||||||
jmp _isr_common_stub
|
jmp _isr_common_stub
|
||||||
_isr22:
|
_isr22:
|
||||||
|
|
@ -197,18 +199,16 @@ extern _isr_handler
|
||||||
global _isr_common_stub
|
global _isr_common_stub
|
||||||
|
|
||||||
_isr_common_stub:
|
_isr_common_stub:
|
||||||
push eax
|
pushad
|
||||||
push ebx
|
|
||||||
push ecx
|
|
||||||
push edx
|
|
||||||
push ebp
|
|
||||||
push esi
|
|
||||||
push edi
|
|
||||||
push ds
|
push ds
|
||||||
push es
|
push es
|
||||||
push fs
|
push fs
|
||||||
push gs
|
push gs
|
||||||
|
mov ax, 0x10
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
mov fs, ax
|
||||||
|
mov gs, ax
|
||||||
push esp;push argument
|
push esp;push argument
|
||||||
call _isr_handler
|
call _isr_handler
|
||||||
pop esp
|
pop esp
|
||||||
|
|
@ -217,13 +217,7 @@ _isr_common_stub:
|
||||||
pop fs
|
pop fs
|
||||||
pop es
|
pop es
|
||||||
pop ds
|
pop ds
|
||||||
pop edi
|
popad
|
||||||
pop esi
|
|
||||||
pop ebp
|
|
||||||
pop edx
|
|
||||||
pop ecx
|
|
||||||
pop ebx
|
|
||||||
pop eax
|
|
||||||
add esp, 8
|
add esp, 8
|
||||||
iret
|
iret
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,37 @@
|
||||||
|
|
||||||
extern void _isr0();
|
extern void _isr0();
|
||||||
extern void _isr1();
|
extern void _isr1();
|
||||||
|
extern void _isr2();
|
||||||
|
extern void _isr3();
|
||||||
|
extern void _isr4();
|
||||||
|
extern void _isr5();
|
||||||
|
extern void _isr6();
|
||||||
|
extern void _isr7();
|
||||||
|
extern void _isr8();
|
||||||
|
extern void _isr9();
|
||||||
|
extern void _isr10();
|
||||||
|
extern void _isr11();
|
||||||
|
extern void _isr12();
|
||||||
|
extern void _isr13();
|
||||||
|
extern void _isr14();
|
||||||
|
extern void _isr15();
|
||||||
|
extern void _isr16();
|
||||||
|
extern void _isr17();
|
||||||
|
extern void _isr18();
|
||||||
|
extern void _isr19();
|
||||||
|
extern void _isr20();
|
||||||
|
extern void _isr21();
|
||||||
|
extern void _isr22();
|
||||||
|
extern void _isr23();
|
||||||
|
extern void _isr24();
|
||||||
|
extern void _isr25();
|
||||||
|
extern void _isr26();
|
||||||
|
extern void _isr27();
|
||||||
|
extern void _isr28();
|
||||||
|
extern void _isr29();
|
||||||
|
extern void _isr30();
|
||||||
|
extern void _isr31();
|
||||||
|
|
||||||
|
|
||||||
extern void _irq0();
|
extern void _irq0();
|
||||||
extern void _irq1();
|
extern void _irq1();
|
||||||
|
|
@ -53,12 +84,21 @@ cpu_registers_t *_irq_handler(cpu_registers_t *regs){
|
||||||
}
|
}
|
||||||
return regs;
|
return regs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *isr_error_strings[] = {"DE", "DB", "NMI", "BP", "OF", "BR", "UD", "NM", "DF", "CSO", "TS", "NP", "SS", "GP", "PF", "", "MF", "AC", "MC", "XM", "VE", "CP", ""};
|
||||||
|
|
||||||
void _isr_handler(cpu_registers_t *regs){
|
void _isr_handler(cpu_registers_t *regs){
|
||||||
printf("Kernel Panic!\n");
|
printf("Kernel Panic!\n");
|
||||||
printf("ISR: %d\n", regs->int_no);
|
printf("ISR: #%s\n", isr_error_strings[regs->int_no]);
|
||||||
printf("EAX: %x EBX: %x ECX: %x EDX: %x\n", regs->eax, regs->ebx, regs->ecx, regs->edx);
|
printf("EAX: %x EBX: %x ECX: %x EDX: %x\n", regs->eax, regs->ebx, regs->ecx, regs->edx);
|
||||||
printf("ESI: %x EDI: %x ESP: %x EBP: %x\n", regs->esi, regs->edi, regs->esp, regs->ebp);
|
printf("ESI: %x EDI: %x ESP: %x EBP: %x\n", regs->esi, regs->edi, regs->esp, regs->ebp);
|
||||||
printf("EIP: %x CS: %x DS: %x SS: %x\n", regs->eip, regs->cs, regs->ds, regs->ss);
|
printf("EIP: %x CS: %x DS: %x SS: %x\n", regs->eip, regs->cs, regs->ds, regs->ss);
|
||||||
|
printf("Error Code: %x\n", regs->pfa);
|
||||||
|
if (regs->int_no == 14){
|
||||||
|
uint32_t cr2;
|
||||||
|
asm volatile("mov %%cr3, %%eax;mov %0, %%eax": "=r"(cr2));
|
||||||
|
printf("Address: %x", cr2);
|
||||||
|
}
|
||||||
for(;;);
|
for(;;);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -81,10 +121,43 @@ void install_irq_handler(void (*handler)(), uint8_t irqno){
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_idt(){
|
void init_idt(){
|
||||||
for(uint32_t i = 0; i < 32; i++){
|
// for(uint32_t i = 0; i < 32; i++){
|
||||||
set_idt_entry(i, (_isr0 + ((_isr1 - _isr0) * i)), IDT_GATE_INT, 0x10);
|
// set_idt_entry(i, (_isr0 + ((_isr1 - _isr0) * i)), IDT_GATE_INT, 0x10);
|
||||||
// printf("int %d: address: %x\n", i, _isr0 + (_isr1 - _isr0) * i);
|
// // printf("int %d: address: %x\n", i, _isr0 + (_isr1 - _isr0) * i);
|
||||||
}
|
// }
|
||||||
|
set_idt_entry(0, _isr0, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(1, _isr1, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(2, _isr2, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(3, _isr3, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(4, _isr4, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(5, _isr5, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(6, _isr6, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(7, _isr7, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(8, _isr8, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(9, _isr9, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(10, _isr10, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(11, _isr11, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(12, _isr12, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(13, _isr13, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(14, _isr14, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(15, _isr15, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(16, _isr16, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(17, _isr17, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(18, _isr18, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(19, _isr19, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(20, _isr20, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(21, _isr21, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(22, _isr22, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(23, _isr23, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(24, _isr24, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(25, _isr25, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(26, _isr26, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(27, _isr27, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(28, _isr28, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(29, _isr29, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(30, _isr30, IDT_GATE_INT, 0x10);
|
||||||
|
set_idt_entry(31, _isr31, IDT_GATE_INT, 0x10);
|
||||||
|
|
||||||
// printf("last ")
|
// printf("last ")
|
||||||
for(uint32_t i = 0; i < 16; i++){
|
for(uint32_t i = 0; i < 16; i++){
|
||||||
set_idt_entry(i + 32, (_irq0 + ((_irq1 - _irq0) * i)), IDT_GATE_INT, 0x10);
|
set_idt_entry(i + 32, (_irq0 + ((_irq1 - _irq0) * i)), IDT_GATE_INT, 0x10);
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ void init_idt();
|
||||||
typedef struct cpu_registers{
|
typedef struct cpu_registers{
|
||||||
uint32_t gs, fs, es, ds;
|
uint32_t gs, fs, es, ds;
|
||||||
uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax;
|
uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax;
|
||||||
uint32_t int_no; uint32_t pfa;
|
uint32_t int_no, pfa;
|
||||||
uint32_t eip, cs, eflags, useresp, ss;
|
uint32_t eip, cs, eflags, useresp, ss;
|
||||||
}__attribute__((packed))cpu_registers_t;
|
}__attribute__((packed))cpu_registers_t;
|
||||||
typedef struct idt{
|
typedef struct idt{
|
||||||
|
|
|
||||||
|
|
@ -21,15 +21,23 @@ void *load_segment(program_entry_t entry, void *file_data, void *base_segment, u
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
segment = base_segment + (entry.vaddr & 0xfffff000);
|
segment = base_segment + (entry.vaddr & 0xfffff000);
|
||||||
map(segment, (void *)pm_alloc(), PT_PRESENT | map_flags);
|
uint32_t count = 1;
|
||||||
|
count += ((entry.vaddr+entry.msize) - entry.vaddr) ? 1 : 0;
|
||||||
|
count += entry.msize/4096;
|
||||||
|
printf("count: %x\n", count);
|
||||||
|
// for (;;);
|
||||||
|
for(uint32_t i = 0; i < count; i++){
|
||||||
|
map(segment + (i << 12), (void *)pm_alloc(), PT_PRESENT | map_flags);
|
||||||
|
printf("Mapping : %x\n", segment + (i << 12));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for(uint32_t i = 0; i < entry.fsize/sizeof(uint32_t) + 1; i++){
|
for(uint32_t i = 0; i < entry.fsize/sizeof(uint32_t) + 1; i++){
|
||||||
(segment)[i] = ((uint32_t *)(file_data))[i + entry.data_offset];
|
segment[i] = ((uint32_t *)(file_data))[i + entry.data_offset/sizeof(uint32_t)];
|
||||||
// printf("Writing to %x\n", (uint32_t)base_segment+i+entry.vaddr);
|
// printf("Writing to %x\n", (uint32_t)base_segment+i+entry.vaddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("dSegment: %x\n", data_offset);
|
printf("data_offset: %x\n", data_offset);
|
||||||
return base_segment;
|
return base_segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -55,10 +63,12 @@ void *load_elf(void *file_data, uint32_t map_flags){
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
base_segment = load_segment(program_header[i], file_data, base_segment, map_flags);
|
base_segment = load_segment(program_header[i], file_data, base_segment, map_flags);
|
||||||
|
|
||||||
}
|
}
|
||||||
// void (*vt)(void) = base_segment;
|
// void (*vt)(void) = base_segment;
|
||||||
uint32_t* vt = base_segment;
|
uint32_t (*vt)(uint32_t) = base_segment + 0x1000;
|
||||||
printf("%x", *vt);
|
// printf("%x", *vt);
|
||||||
|
uint32_t i = (*vt)(0);
|
||||||
|
printf("%x\n", i);
|
||||||
|
for(;;);
|
||||||
// (*vt)();
|
// (*vt)();
|
||||||
}
|
}
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
#include<stdint.h>
|
#include<stdint.h>
|
||||||
|
#include "modlib.h"
|
||||||
|
|
||||||
void main(){
|
KOS_MAPI_FP api;
|
||||||
|
|
||||||
|
uint32_t init(KOS_MAPI_FP module_api){
|
||||||
uint16_t *t = (void *)0xb8000;
|
uint16_t *t = (void *)0xb8000;
|
||||||
*t = 0x0f41;
|
*t = 0x0f41;
|
||||||
for(int i = 0; i < 1000; i++){
|
api = module_api;
|
||||||
(*t)++;
|
// for(int i = 0; i < 1000; i++){
|
||||||
asm volatile( " " );
|
// (*t)++;
|
||||||
}
|
// // asm volatile( " " );
|
||||||
|
// }
|
||||||
|
return &api;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
void init(){
|
||||||
|
uint16_t *t = (void *)0xb8002;
|
||||||
|
*t = 0x0f41;
|
||||||
|
// for(int i = 0; i < 1000; i++){
|
||||||
|
// (*t)++;
|
||||||
|
// // asm volatile( " " );
|
||||||
|
// }
|
||||||
|
for(;;);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
typedef void (*KOS_MAPI_FP)(unsigned int function, ...);
|
||||||
Loading…
Reference in New Issue