Skip to content

Instantly share code, notes, and snippets.

@andrewrk
Created May 16, 2020 20:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewrk/0bbfea98203041af14de07b0957bcfb0 to your computer and use it in GitHub Desktop.
Save andrewrk/0bbfea98203041af14de07b0957bcfb0 to your computer and use it in GitHub Desktop.
@noreturn = primitive(noreturn)
@void = primitive(void)
@usize = primitive(usize)
@0 = int(0)
@1 = int(1)
@2 = int(2)
@3 = int(3)
@syscall_array = str("syscall")
@sysoutreg_array = str("={rax}")
@rax_array = str("{rax}")
@rdi_array = str("{rdi}")
@rcx_array = str("rcx")
@r11_array = str("r11")
@rdx_array = str("{rdx}")
@rsi_array = str("{rsi}")
@memory_array = str("memory")
@len_array = str("len")
@msg = str("Hello, world!\n")
@start_fnty = fntype([], @noreturn, cc=Naked)
@start = fn(@start_fnty, {
%SYS_exit_group = int(231)
%exit_code = as(@usize, @0)
%syscall = ref(@syscall_array)
%sysoutreg = ref(@sysoutreg_array)
%rax = ref(@rax_array)
%rdi = ref(@rdi_array)
%rcx = ref(@rcx_array)
%rdx = ref(@rdx_array)
%rsi = ref(@rsi_array)
%r11 = ref(@r11_array)
%memory = ref(@memory_array)
%SYS_write = as(@usize, @1)
%STDOUT_FILENO = as(@usize, @1)
%msg_ptr = ref(@msg)
%msg_addr = ptrtoint(%msg_ptr)
%len_name = ref(@len_array)
%msg_len_ptr = fieldptr(%msg_ptr, %len_name)
%msg_len = deref(%msg_len_ptr)
%rc_write = asm(%syscall, @usize,
volatile=1,
output=%sysoutreg,
inputs=[%rax, %rdi, %rsi, %rdx],
clobbers=[%rcx, %r11, %memory],
args=[%SYS_write, %STDOUT_FILENO, %msg_addr, %msg_len])
%rc_exit = asm(%syscall, @usize,
volatile=1,
output=%sysoutreg,
inputs=[%rax, %rdi],
clobbers=[%rcx, %r11, %memory],
args=[%SYS_exit_group, %exit_code])
%99 = unreachable()
});
@9 = str("_start")
@10 = ref(@9)
@11 = export(@10, @start)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment