Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 215 → Rev 216

/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; do
for a in drivers bios interrupt.c; do
ln -sf ../../../arch/ia32/src/$a ../arch/amd64/src/
done
 
/SPARTAN/trunk/arch/mips/_link.ld
27,6 → 27,12
*(.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 */
33,20 → 39,4
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,6 → 131,15
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/Makefile.inc
26,5 → 26,5
arch/supplib.c \
arch/delay.S \
arch/amd64.c \
arch/bios/bios.c
 
arch/bios/bios.c \
arch/interrupt.c
/SPARTAN/trunk/arch/amd64/src/dummy.s
42,39 → 42,16
.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 trap_virtual_disable_irqs
.global enable_irqs_function
.global disable_irqs_function
.global eoi_function
.global syscall
.global reset_TS_flag
.global fpu_init
.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:
89,8 → 66,13
cpu_halt:
page_arch_init:
frame_arch_init:
memcpy:
 
reset_TS_flag:
fpu_init:
dummy:
0:
ret
 
.global memcpy
memcpy:
jmp _memcpy
/SPARTAN/trunk/arch/amd64/_link.ld
31,13 → 31,15
*(.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));
*(.eh_frame);
*(.bss); /* uninitialized static variables */
*(.eh_frame);
*(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,10 → 66,6
 
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, __u32 stack[])
void trap_dispatcher(__u8 n, __native stack[])
{
ASSERT(n < IVT_ITEMS);
70,7 → 70,7
ivt[n](n, stack);
}
 
void null_interrupt(__u8 n, __u32 stack[])
void null_interrupt(__u8 n, __native 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, __u32 stack[])
void gp_fault(__u8 n, __native 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, __u32 stack[])
void ss_fault(__u8 n, __native 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, __u32 stack[])
void nm_fault(__u8 n, __native stack[])
{
reset_TS_flag();
if ((CPU->fpu_owner)!=NULL) {
109,7 → 109,7
 
 
 
void page_fault(__u8 n, __u32 stack[])
void page_fault(__u8 n, __native 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, __u32 stack[])
void syscall(__u8 n, __native stack[])
{
printf("cpu%d: syscall\n", CPU->id);
thread_usleep(1000);
}
 
void tlb_shootdown_ipi(__u8 n, __u32 stack[])
void tlb_shootdown_ipi(__u8 n, __native stack[])
{
trap_virtual_eoi();
tlb_shootdown_ipi_recv();
}
 
void wakeup_ipi(__u8 n, __u32 stack[])
void wakeup_ipi(__u8 n, __native stack[])
{
trap_virtual_eoi();
}
/SPARTAN/trunk/arch/ia32/_link.ld
31,13 → 31,14
*(.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;
 
}