mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 04:22:07 +01:00 
			
		
		
		
	* new file belonging to previous commit
git-svn-id: trunk@31364 -
This commit is contained in:
		
							parent
							
								
									70677e3e44
								
							
						
					
					
						commit
						f671c270b1
					
				
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@ -8606,6 +8606,7 @@ rtl/haiku/classes.pp svneol=native#text/plain
 | 
			
		||||
rtl/haiku/errno.inc svneol=native#text/plain
 | 
			
		||||
rtl/haiku/errnostr.inc svneol=native#text/plain
 | 
			
		||||
rtl/haiku/i386/cprt0.as svneol=native#text/plain
 | 
			
		||||
rtl/haiku/i386/dllcprt0.as svneol=native#text/plain
 | 
			
		||||
rtl/haiku/i386/dllprt.as svneol=native#text/plain
 | 
			
		||||
rtl/haiku/i386/dllprt.cpp svneol=native#text/plain
 | 
			
		||||
rtl/haiku/i386/func.as svneol=native#text/plain
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										207
									
								
								rtl/haiku/i386/dllcprt0.as
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								rtl/haiku/i386/dllcprt0.as
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,207 @@
 | 
			
		||||
       .file   "dllcprt0.as"
 | 
			
		||||
.data
 | 
			
		||||
        .align 4
 | 
			
		||||
default_environ:
 | 
			
		||||
        .long 0
 | 
			
		||||
.text
 | 
			
		||||
.globl initialize_after
 | 
			
		||||
        .type    initialize_after,@function
 | 
			
		||||
initialize_after:
 | 
			
		||||
	.globl FPC_SHARED_LIB_START
 | 
			
		||||
	.type FPC_SHARED_LIB_START,@function
 | 
			
		||||
FPC_SHARED_LIB_START:
 | 
			
		||||
        /* We are in a library if we link something against this code */
 | 
			
		||||
        movb $1,operatingsystem_islibrary
 | 
			
		||||
        /* Initialize freepascal variables in the shared object so they 
 | 
			
		||||
           can be used as expected.
 | 
			
		||||
           
 | 
			
		||||
           As we link with libroot (our libc), just copy values from the 
 | 
			
		||||
           corresponding external variables in the Freepascal ones. 
 | 
			
		||||
           They are already initialized by libroot initialization. 
 | 
			
		||||
           
 | 
			
		||||
           Inspired by /haiku/src/system/glue/start_dyn.c 
 | 
			
		||||
           and /haiku/src/system/libroot/libroot_init.c
 | 
			
		||||
        */        
 | 
			
		||||
        movl __libc_argc,%eax
 | 
			
		||||
        movl %eax,operatingsystem_parameter_argc
 | 
			
		||||
        movl __libc_argv,%eax
 | 
			
		||||
        movl %eax,operatingsystem_parameter_argv
 | 
			
		||||
        movl environ,%eax
 | 
			
		||||
        movl %eax,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
 | 
			
		||||
	
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user