/SPARTAN/trunk/src/build.amd64 |
---|
4,7 → 4,7 |
# Generate context_offset.h |
(cd ../arch/amd64/src;make gencontext;./gencontext) |
# Create links to ia32 architecture |
for a in drivers bios interrupt.c; do |
for a in drivers bios; do |
ln -sf ../../../arch/ia32/src/$a ../arch/amd64/src/ |
done |
/SPARTAN/trunk/arch/mips/_link.ld |
---|
27,12 → 27,6 |
*(.lit4); |
*(.sdata); |
*(.sbss); |
hardcoded_ktext_size = .; |
LONG(ktext_end - ktext_start); |
hardcoded_kdata_size = .; |
LONG(kdata_end - kdata_start); |
hardcoded_load_address = .; |
LONG(0x80000000); |
*(.bss); /* uninitialized static variables */ |
*(.scommon); |
*(COMMON); /* global variables */ |
39,4 → 33,20 |
kdata_end = .; |
} = 0x00000000 |
. = ABSOLUTE(hardcoded_ktext_size); |
.patch_1 : { |
LONG(ktext_end - ktext_start); |
} |
. = ABSOLUTE(hardcoded_kdata_size); |
.patch_2 : { |
LONG(kdata_end - kdata_start); |
} |
. = ABSOLUTE(hardcoded_load_address); |
.patch_3 : { |
LONG(0x80000000); |
} |
} |
/SPARTAN/trunk/arch/amd64/include/asm.h |
---|
131,15 → 131,6 |
return v; |
} |
/** Read CR2 |
* |
* Return value in CR2 |
* |
* @return Value read. |
*/ |
static inline __u32 read_cr2(void) { __u64 v; __asm__ volatile ("movq %%cr2,%0" : "=r" (v)); return v; } |
extern size_t interrupt_handler_size; |
extern void interrupt_handlers(void); |
/SPARTAN/trunk/arch/amd64/src/dummy.s |
---|
42,16 → 42,39 |
.global page_arch_init |
.global frame_arch_init |
.global dummy |
.global trap_register |
.global trap_virtual_eoi |
.global trap_virtual_enable_irqs |
.global rdtsc |
.global reset_TS_flag |
.global fpu_init |
.global trap_virtual_disable_irqs |
.global enable_irqs_function |
.global disable_irqs_function |
.global eoi_function |
.global syscall |
.global null_interrupt |
.global interrupt_handler_size |
.global gp_fault |
.global nm_fault |
.global ss_fault |
.global interrupt_handlers |
.global memcpy |
null_interrupt: |
interrupt_handler_size: |
interrupt_handlers: |
gp_fault: |
nm_fault: |
ss_fault: |
eoi_function: |
syscall: |
enable_irqs_function: |
disable_irqs_function: |
rdtsc: |
trap_virtual_eoi: |
trap_virtual_enable_irqs: |
trap_virtual_disable_irqs: |
trap_register: |
before_thread_runs_arch: |
userspace: |
calibrate_delay_loop: |
66,13 → 89,8 |
cpu_halt: |
page_arch_init: |
frame_arch_init: |
reset_TS_flag: |
fpu_init: |
memcpy: |
dummy: |
0: |
ret |
.global memcpy |
memcpy: |
jmp _memcpy |
/SPARTAN/trunk/arch/amd64/Makefile.inc |
---|
26,5 → 26,5 |
arch/supplib.c \ |
arch/delay.S \ |
arch/amd64.c \ |
arch/bios/bios.c \ |
arch/interrupt.c |
arch/bios/bios.c |
/SPARTAN/trunk/arch/amd64/_link.ld |
---|
31,15 → 31,13 |
*(.data); /* initialized data */ |
*(.rodata*); /* string literals */ |
*(COMMON); /* global variables */ |
hardcoded_load_address = .; |
QUAD(0xffffffff80008000); |
hardcoded_ktext_size = .; |
QUAD(ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start)); |
hardcoded_kdata_size = .; |
QUAD(kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start)); |
*(.bss); /* uninitialized static variables */ |
*(.eh_frame); |
*(.bss); /* uninitialized static variables */ |
*(K_DATA_END); |
kdata_end = .; |
} |
_hardcoded_ktext_size = ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start); |
_hardcoded_kdata_size = kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start); |
_hardcoded_load_address = 0xffffffff80008000; |
} |
/SPARTAN/trunk/arch/ia32/src/boot/boot.S |
---|
66,6 → 66,10 |
call map_kernel # map kernel and turn paging on |
movl $_hardcoded_ktext_size, hardcoded_ktext_size |
movl $_hardcoded_kdata_size, hardcoded_kdata_size |
movl $_hardcoded_load_address, hardcoded_load_address |
call main_bsp # never returns |
cli |
/SPARTAN/trunk/arch/ia32/src/interrupt.c |
---|
63,7 → 63,7 |
* Called directly from the assembler code. |
* CPU is cpu_priority_high(). |
*/ |
void trap_dispatcher(__u8 n, __native stack[]) |
void trap_dispatcher(__u8 n, __u32 stack[]) |
{ |
ASSERT(n < IVT_ITEMS); |
70,7 → 70,7 |
ivt[n](n, stack); |
} |
void null_interrupt(__u8 n, __native stack[]) |
void null_interrupt(__u8 n, __u32 stack[]) |
{ |
printf("int %d: null_interrupt\n", n); |
printf("stack: %L, %L, %L, %L\n", stack[0], stack[1], stack[2], stack[3]); |
77,7 → 77,7 |
panic("unserviced interrupt\n"); |
} |
void gp_fault(__u8 n, __native stack[]) |
void gp_fault(__u8 n, __u32 stack[]) |
{ |
printf("ERROR_WORD=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]); |
printf("%%eax=%L, %%ebx=%L, %%ecx=%L, %%edx=%L,\n%%edi=%L, %%esi=%L, %%ebp=%L, %%esp=%L\n", stack[-2], stack[-5], stack[-3], stack[-4], stack[-9], stack[-8], stack[-1], stack); |
86,7 → 86,7 |
stack[1]++; |
} |
void ss_fault(__u8 n, __native stack[]) |
void ss_fault(__u8 n, __u32 stack[]) |
{ |
printf("ERROR_WORD=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]); |
printf("%%eax=%L, %%ebx=%L, %%ecx=%L, %%edx=%L,\n%%edi=%L, %%esi=%L, %%ebp=%L, %%esp=%L\n", stack[-2], stack[-5], stack[-3], stack[-4], stack[-9], stack[-8], stack[-1], stack); |
95,7 → 95,7 |
} |
void nm_fault(__u8 n, __native stack[]) |
void nm_fault(__u8 n, __u32 stack[]) |
{ |
reset_TS_flag(); |
if ((CPU->fpu_owner)!=NULL) { |
109,7 → 109,7 |
void page_fault(__u8 n, __native stack[]) |
void page_fault(__u8 n, __u32 stack[]) |
{ |
printf("page fault address: %X\n", read_cr2()); |
printf("ERROR_WORD=%X, %%eip=%X, %%cs=%X, flags=%X\n", stack[0], stack[1], stack[2], stack[3]); |
118,19 → 118,19 |
panic("page fault\n"); |
} |
void syscall(__u8 n, __native stack[]) |
void syscall(__u8 n, __u32 stack[]) |
{ |
printf("cpu%d: syscall\n", CPU->id); |
thread_usleep(1000); |
} |
void tlb_shootdown_ipi(__u8 n, __native stack[]) |
void tlb_shootdown_ipi(__u8 n, __u32 stack[]) |
{ |
trap_virtual_eoi(); |
tlb_shootdown_ipi_recv(); |
} |
void wakeup_ipi(__u8 n, __native stack[]) |
void wakeup_ipi(__u8 n, __u32 stack[]) |
{ |
trap_virtual_eoi(); |
} |
/SPARTAN/trunk/arch/ia32/_link.ld |
---|
31,14 → 31,13 |
*(.data); /* initialized data */ |
*(.rodata*); /* string literals */ |
*(COMMON); /* global variables */ |
hardcoded_load_address = .; |
LONG(0xffffffff80008000); |
hardcoded_ktext_size = .; |
LONG(ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start)); |
hardcoded_kdata_size = .; |
LONG(kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start)); |
*(.bss); /* uninitialized static variables */ |
*(K_DATA_END); |
kdata_end = .; |
} |
_hardcoded_ktext_size = ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start); |
_hardcoded_kdata_size = kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start); |
_hardcoded_load_address = 0x80008000; |
} |