mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-21 05:51:47 +02:00
224 lines
4.2 KiB
ActionScript
224 lines
4.2 KiB
ActionScript
.file "cprt0.s"
|
|
.data
|
|
.align 4
|
|
default_environ:
|
|
.long 0
|
|
.text
|
|
.globl _start
|
|
.type _start,@function
|
|
_start:
|
|
pushl %ebp
|
|
movl %esp,%ebp
|
|
subl $4,%esp
|
|
pushl %ebx
|
|
call .L6
|
|
.L6:
|
|
popl %ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_+[.-.L6],%ebx
|
|
movl argv_save@GOT(%ebx),%eax
|
|
movl 12(%ebp),%edi
|
|
movl %edi,(%eax)
|
|
movl environ@GOT(%ebx),%eax
|
|
movl 16(%ebp),%esi
|
|
movl %esi,(%eax)
|
|
test %esi,%esi
|
|
jnz .L4
|
|
movl environ@GOT(%ebx),%eax
|
|
movl %ebx,%ecx
|
|
addl $default_environ@GOTOFF,%ecx
|
|
movl %ecx,%edx
|
|
movl %edx,(%eax)
|
|
.L4:
|
|
/* movl %fs:0x4,%eax this doesn't work on BeOS 4.0, let's use find_thread instead */
|
|
pushl $0x0
|
|
call find_thread
|
|
movl __main_thread_id@GOT(%ebx),%edx
|
|
movl %eax,(%edx)
|
|
pushl %esi
|
|
pushl %edi
|
|
movl 8(%ebp),%eax
|
|
pushl %eax
|
|
call _init_c_library_
|
|
call _call_init_routines_
|
|
movl 8(%ebp),%eax
|
|
movl %eax,operatingsystem_parameter_argc
|
|
movl %edi,operatingsystem_parameter_argv
|
|
movl %esi,operatingsystem_parameter_envp
|
|
xorl %ebp,%ebp
|
|
call PASCALMAIN
|
|
|
|
.globl _haltproc
|
|
.type _haltproc,@function
|
|
_haltproc:
|
|
call _thread_do_exit_notification
|
|
xorl %ebx,%ebx
|
|
movw operatingsystem_result,%bx
|
|
pushl %ebx
|
|
call exit
|
|
|
|
|
|
/* int sys_open (int=0xFF000000, char * name, int mode, int=0, int close_on_exec=0); */
|
|
.globl sys_open
|
|
.type sys_open,@function
|
|
sys_open:
|
|
xorl %eax,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_close (int handle) */
|
|
.globl sys_close
|
|
.type sys_close,@function
|
|
sys_close:
|
|
mov $0x01,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_read (int handle, void * buffer, int length) */
|
|
.globl sys_read
|
|
.type sys_read,@function
|
|
sys_read:
|
|
movl $0x02,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_write (int handle, void * buffer, int length) */
|
|
.globl sys_write
|
|
.type sys_write,@function
|
|
sys_write:
|
|
movl $0x3,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_lseek (int handle, long long pos, int whence) */
|
|
.globl sys_lseek
|
|
.type sys_lseek,@function
|
|
sys_lseek:
|
|
movl $0x5,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_time(void) */
|
|
.globl sys_time
|
|
.type sys_time,@function
|
|
sys_time:
|
|
movl $0x7,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_resize_area */
|
|
.globl sys_resize_area
|
|
.type sys_resize_area,@function
|
|
sys_resize_area:
|
|
movl $0x8,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_opendir (0xFF000000, chra * name, 0) */
|
|
.globl sys_opendir
|
|
.type sys_opendir,@function
|
|
sys_opendir:
|
|
movl $0xC,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
|
|
/* int sys_create_area */
|
|
.globl sys_create_area
|
|
.type sys_create_area,@function
|
|
sys_create_area:
|
|
movl $0x14,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_readdir (int handle, void * dirent, 0x11C, 0x01000000) */
|
|
.globl sys_readdir
|
|
.type sys_readdir,@function
|
|
sys_readdir:
|
|
movl $0x1C,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_mkdir (char=0xFF, char * name, int mode) */
|
|
.globl sys_mkdir
|
|
.type sys_mkdir,@function
|
|
sys_mkdir:
|
|
movl $0x1E,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_wait_for_thread */
|
|
.globl sys_wait_for_thread
|
|
.type sys_wait_for_thread,@function
|
|
sys_wait_for_thread:
|
|
movl $0x22,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_rename (int=0xFF000000, char * name, int=0xFF000000, char * newname) */
|
|
.globl sys_rename
|
|
.type sys_rename,@function
|
|
sys_rename:
|
|
movl $0x26,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_unlink (int=0xFF000000, char * name) */
|
|
.globl sys_unlink
|
|
.type sys_unlink,@function
|
|
sys_unlink:
|
|
movl $0x27,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_stat (int=0xFF000000, char * name, struct stat * s, int=0) */
|
|
.globl sys_stat
|
|
.type sys_stat,@function
|
|
sys_stat:
|
|
movl $0x30,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* int sys_load_image */
|
|
.globl sys_load_image
|
|
.type sys_load_image,@function
|
|
sys_load_image:
|
|
movl $0x34,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* void sys_exit (int exitcode) */
|
|
.globl sys_exit
|
|
.type sys_exit,@function
|
|
sys_exit:
|
|
movl $0x3F,%eax
|
|
int $0x25
|
|
|
|
/* void sys_chdir (char 0xFF, char * name) */
|
|
.globl sys_chdir
|
|
.type sys_chdir,@function
|
|
sys_chdir:
|
|
movl $0x57,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* void sys_rmdir (char 0xFF, char * name) */
|
|
.globl sys_rmdir
|
|
.type sys_rmdir,@function
|
|
sys_rmdir:
|
|
movl $0x60,%eax
|
|
int $0x25
|
|
ret
|
|
|
|
/* actual syscall */
|
|
.globl sys_call
|
|
.type sys_call,@function
|
|
sys_call:
|
|
int $0x25
|
|
ret
|
|
|
|
.bss
|
|
.comm operatingsystem_parameter_envp,4
|
|
.comm operatingsystem_parameter_argc,4
|
|
.comm operatingsystem_parameter_argv,4
|
|
|