Commits

Paweł Wieczorek committed c4cba3e Draft

initial

  • Participants

Comments (0)

Files changed (7)

+# Copyright (C) 2012 Pawel Wieczorek <wieczyk gmail>
+# All rights reserved.
+AS=as
+ASFLAGS=-Iabi
+CC=cc
+CFLAGS=
+LD=cc
+LDFLAGS=
+PROGRAM=hs64
+.SUFFIXES: .c .o .s .s.o
+OBJS=${SRCS:%.s=%.o}
+SRCS=\
+    src/main.s\
+	src/sock.s\
+	src/mem.s\
+
+INLINE_SRCS=\
+	abi/abi.s\
+
+all: ${PROGRAM}
+
+${PROGRAM}: ${OBJS}
+	${LD} ${LDFLAGS} -o ${PROGRAM} ${OBJS} ${LIBS}
+
+.s.o: $< ${INLINE_SRCS}
+	${AS} ${ASFLAGS} -o $@ $<
+
+clean:
+	rm -f ${PROGRAM} ${OBJS}
+# Copyright (C) 2012 Pawel Wieczorek <wieczyk gmail>
+# All rights reserved.
+
+
+.macro FRAME_ENTER size=0
+    push    %rbp
+    mov     %rsp, %rbp
+.if \size
+    sub     $\size, %rsp
+.endif
+    push    %rbx
+    push    %r12
+    push    %r13
+    push    %r14
+    push    %r15
+.endm
+
+.macro FRAME_LEAVE
+    pop     %r15
+    pop     %r14
+    pop     %r13
+    pop     %r12
+    pop     %rbx
+    leave
+    ret
+.endm
+
+.macro GLOBAL_PROC name
+.global \name
+\name:
+.endm
+
+.macro LOCAL_PROC name
+\name:
+.endm

runtime/exception.s

+.include "abi.s"
+
+
+GLOBAL_PROC exception_throw
+	ret
+
+GLOBAL_PROC exception_register_handler
+	ret
+
+/*
+proof of concept
+
+LOCAL_PROC some_func_1
+	FRAME_ENTER
+	REGISTER_EXCEPTION $SYSTEM_ERROR some_func_1
+	call some_func_2
+	FRAME_LEAVE
+
+EXCEPTION_HANDLER some_func_1 // generate some_func_1.exception_handler
+	dsdsa
+	FRAME_LEAVE
+
+LOCAL_PROC some_func_2
+	
+
+ */
+
+.macro FRAME_ENTER size=0
+    push    %rbp
+    mov     %rsp, %rbp
+.if \size
+    sub     $\size, %rsp
+.endif
+    push    %rbx
+    push    %r12
+    push    %r13
+    push    %r14
+    push    %r15
+.endm
+
+.macro FRAME_LEAVE
+    pop     %r15
+    pop     %r14
+    pop     %r13
+    pop     %r12
+    pop     %rbx
+    leave
+    ret
+.endm
+
+.macro GLOBAL_PROC name
+.global \name
+\name:
+.endm
+
+.macro LOCAL_PROC name
+\name:
+.endm
+# Copyright (C) 2012 Pawel Wieczorek <wieczyk gmail>
+# All rights reserved.
+
+##########################################################################
+# Environment
+##########################################################################
+
+.include "abi.s"
+
+##########################################################################
+# TEXT
+##########################################################################
+
+.text
+
+GLOBAL_PROC main
+    FRAME_ENTER
+    mov $0x40, %rdi
+    call mem_alloc
+    mov %rax, %rdi
+    call mem_release
+    mov $0x0, %rax
+    FRAME_LEAVE
+
+
+LOCAL_PROC print_int
+    FRAME_ENTER
+    mov %rdi, %rsi
+    mov %rdi, %rdx
+    mov $print_int_fmt, %rdi
+    call printf
+    FRAME_LEAVE
+
+##########################################################################
+# DATA 
+##########################################################################
+
+.data
+
+print_int_fmt: .asciz "integer: %i [hex: 0x%x]\n"
+# Copyright (C) 2012 Pawel Wieczorek <wieczyk gmail>
+# All rights reserved.
+
+##########################################################################
+# ENVIRONMENT 
+##########################################################################
+
+.include "abi.s"
+
+##########################################################################
+# SECTION TEXT
+##########################################################################
+
+.text
+
+# Allocated data:
+#
+# [internal header]  <- ptr allocated by malloc
+# [user data      ]  <- ptr returned by mem_alloc
+#
+
+GLOBAL_PROC mem_alloc
+    FRAME_ENTER
+    # r15 - original size requested by user
+    # r14 - original pointer
+    mov %rdi, %r15
+    add $8,   %rdi
+    call malloc
+    mov %r15, (%rax)
+    add $8,   %rax
+    mov %rax, %r14
+
+    mov $debug_msg_alloc, %rdi
+    mov %r14,             %rsi
+    mov %r15,             %rdx
+    call printf
+
+    mov %r14, %rax
+    FRAME_LEAVE
+
+GLOBAL_PROC mem_release
+    FRAME_ENTER
+    # r14 - original pointer
+    mov %rdi, %r14
+    sub $8,   %r14
+
+    mov %rdi,            %rsi
+    mov $debug_msg_free, %rdi
+    mov (%r14),          %rdx
+    call printf
+
+    FRAME_LEAVE
+
+##########################################################################
+# SECTION DATA
+##########################################################################
+
+.data
+
+debug_msg_alloc:
+    .asciz "@MEM: allocated memory %p (%u bytes)\n"
+
+debug_msg_free:
+    .asciz "@MEM: freed memory at %p  (%u bytes)\n"
+# Copyright (C) 2012 Pawel Wieczorek <wieczyk gmail>
+# All rights reserved.
+
+##########################################################################
+# ENVIRONMENT
+##########################################################################
+.include "abi.s"
+
+##########################################################################
+# SECTION TEXT
+##########################################################################
+.text
+
+# SOCKET_T
+# [int sock] - 4bytes
+
+
+# sock_create(SOCKET_T &sock)
+GLOBAL_PROC sock_create
+    FRAME_ENTER
+    mov %rdi,         %r15
+    mov $PF_INET,     %rdi
+    mov $SOCK_STREAM, %rsi
+    mov $IPPROTO_TCP, %rdx
+    call socket
+    mov %rax, (%r15)
+    FRAME_LEAVE
+
+GLOBAL_PROC sock_destroy
+    FRAME_ENTER
+    mov (%rdi),       %rdi
+    call close
+    FRAME_LEAVE
+
+GLOBAL_PROC sock_recv
+    ret
+
+GLOBAL_PROC sock_send
+    ret
+
+GLOBAL_PROC sock_accept
+    ret
+
+GLOBAL_PROC sock_bind
+    ret
+
+GLOBAL_PROC sock_listen
+    ret
+
+##########################################################################
+# SECTION TEXT
+##########################################################################
+.data
+
+# Linux
+.set PF_INET, 2
+.set SOCK_STREAM, 1
+.set IPPROTO_TCP, 6