EMILE/second/head.S

137 lines
2.3 KiB
ArmAsm
Raw Normal View History

2004-02-15 20:46:45 +00:00
/*
*
* (c) 2004 Laurent Vivier <LaurentVivier@wanadoo.fr>
*
*/
.macro SysError
.short 0xA9C9
.endm
2004-05-25 20:12:52 +00:00
.macro NewPtr
.short 0xA11E
.endm
2004-05-19 00:09:58 +00:00
.equ cmdline_length, 256 /* see CL_SIZE in bootinfo.c */
2004-05-26 23:05:35 +00:00
/***************************************************************************
*
* second level arguments
*
***************************************************************************/
_start: bra setup
_signature: .dc.b 'E','M','0','4'
/* kernel image information */
#ifdef SCSI_SUPPORT
_kernel_image_offset: .long scsi_container - _start
#else
_kernel_image_offset: .long 0
#endif
_kernel_image_size: .long 0
_kernel_size: .long 0
/* ramdisk image information */
_ramdisk_offset: .long 0
_ramdisk_size: .long 0
_command_line: .skip cmdline_length, 0
/* console management: display, serial modem or printer */
_console_mask: .long 1
_serial0_bitrate: .long 9600
_serial0_datasize: .byte 8
_serial0_parity: .byte 0
_serial0_stopbits: .byte 1
_pad0: .byte 0
_serial1_bitrate: .long 9600
_serial1_datasize: .byte 8
_serial1_parity: .byte 0
_serial1_stopbits: .byte 1
_pad1: .byte 0
/* Force gestalt for Mystic macintosh */
2004-10-07 09:14:06 +00:00
_gestaltID: .long 0
2004-05-19 00:09:58 +00:00
.align 4
setup:
2004-05-25 20:12:52 +00:00
/* relocate C code, need to be compiled with -fpic */
bsr relocate
/* initialize console, so we can debug ;-) */
2004-05-25 20:12:52 +00:00
lea _start(%pc), %a0
move.l %a0, -(%sp)
bsr console_init@PLTPC
2004-05-25 20:12:52 +00:00
2004-02-15 20:46:45 +00:00
/* begin to work */
lea _start(%pc), %a0
2004-06-03 19:30:26 +00:00
move.l %a0, -(%sp)
bsr start@PLTPC
2004-02-15 20:46:45 +00:00
/* We guess to never come here */
loop:
bra loop
relocate:
2004-05-25 20:12:52 +00:00
/* Allocate BSS section */
move.l #__bss_size, %d0 /* size */
NewPtr /* result in %a0 */
move.l %a0, %d0
bne malloc_ok
SysError
malloc_ok:
2004-05-25 20:12:52 +00:00
move.l %a0,%d3
move.l #__bss_start, %d0
sub.l %d0,%d3 /* %d3 is the offset to add for BSS */
/* real address of GOT */
lea (%pc, _GLOBAL_OFFSET_TABLE_@GOTPC), %a0
/* linked address of GOT */
move.l #_GLOBAL_OFFSET_TABLE_, %d0
2004-05-25 20:12:52 +00:00
/* %d2 is the offset to add for all other sections */
move.l %a0,%d2
sub.l %d0,%d2
2004-05-25 20:12:52 +00:00
/* relocate BSS section */
move.l #__got_size, %d0
beq exit_relocate
got_loop:
move.l (%a0), %d1
2004-05-25 20:12:52 +00:00
cmp.l #__bss_start.l, %d1
2004-05-25 20:12:52 +00:00
blt other_section
cmp.l #_end.l, %d1
2004-05-25 20:12:52 +00:00
bgt other_section
/* symbol in section BSS */
add.l %d3, %d1
bra got_store
other_section:
add.l %d2, %d1
2004-05-25 20:12:52 +00:00
got_store:
move.l %d1, (%a0)+
2004-05-25 20:12:52 +00:00
subq.l #4, %d0
bgt got_loop
exit_relocate:
rts