liblinux++

A hosted C++ runtime without any libc.
git clone git://henryandlizzy.uk/liblinux++
Log | Files | Refs

x86_64.s (1805B)


      1 # Syscall numbers https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#x86_64-64-bit
      2 
      3 .intel_syntax noprefix
      4 
      5 .global start
      6 
      7 .text
      8 
      9 start:	# start is the entry point known to the linker
     10 	mov	edi,	[rsp]		# get argc from the stack
     11 	lea	rsi,	[rsp+8]		# take the address of argv from the stack
     12 	lea	rdx,	[rsp+16]	# take the address of envp from the stack
     13 	call	main			# %edi, %rsi, %rdx are the three args (of which first two are C standard) to main
     14 	mov	rdi,	rax
     15 	jmp exit
     16 
     17 .macro extern_alias, name
     18 .global \name
     19 \name:
     20 .endm
     21 
     22 .macro extern, name
     23 .section .text.\name
     24 extern_alias \name
     25 .endm
     26 
     27 .macro _syscall, num, impl
     28 	mov	rax,	\num
     29 	jmp \impl
     30 .endm
     31 
     32 .section .text.syscall3
     33 syscall3:
     34 	push	r11
     35 	push	rcx
     36 	syscall
     37 	pop	rcx
     38 	pop	r11
     39 	ret
     40 
     41 .section .text.syscall6
     42 syscall6:
     43 	push	r11
     44 	mov	r10,	rcx
     45 	syscall
     46 	pop	r11
     47 	ret
     48 
     49 extern read
     50 extern_alias _Z4read4filePcm
     51 extern_alias _Z4read4file4spanIcE
     52 _syscall	0	syscall3
     53 
     54 extern write
     55 extern_alias _Z5write4filePKcm
     56 extern_alias _Z5write4file4spanIKcE
     57 _syscall	1	syscall3
     58 
     59 extern close
     60 extern_alias _Z5close4file
     61 _syscall	3	syscall3
     62 
     63 extern mmap
     64 extern_alias _Z4mmapPvmmm4filem
     65 _syscall	9	syscall6
     66 
     67 extern munmap
     68 extern_alias _Z6munmapPvm
     69 _syscall	11	syscall3
     70 
     71 extern writev
     72 extern_alias _Z5write4file4spanIKS0_IKcEE
     73 _syscall	20	syscall3
     74 
     75 extern nanosleep
     76 extern_alias _Z9nanosleepRK8timespecPS_
     77 _syscall	35	syscall3
     78 
     79 extern exit
     80 extern_alias _Z4exiti
     81 _syscall	60	syscall3
     82 
     83 extern getdents64
     84 extern_alias _Z10getdents644fileP14linux_dirent64m
     85 _syscall	217	syscall3
     86 
     87 extern openat
     88 extern_alias _Z6openat4file5c_strii
     89 _syscall	257	syscall6
     90 
     91 extern unlinkat
     92 extern_alias _Z8unlinkat4file5c_str12unlink_flags
     93 _syscall	263	syscall3
     94 
     95 extern renameat
     96 extern_alias _Z9renameat24file5c_strS_S0_12rename_flags
     97 _syscall	316	syscall6