diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-04-12 19:54:39 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-04-12 19:54:39 +0200 |
| commit | 8529228d532fffedf20fc892467c7676121f219a (patch) | |
| tree | 472d86a454ba9402affdf0e8edd8cc3c47b0f4c1 | |
| parent | 28424105e255f0a4c887b6e6a83afd6dce372709 (diff) | |
| parent | 94d61d8aaee7a3df0dc1f055e27e0f4484cb3ffa (diff) | |
| download | libasm-linux.tar.gz libasm-linux.tar.bz2 libasm-linux.zip | |
Added change in ft_write, ft_readlinux
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 15 | ||||
| -rw-r--r-- | ft_atoi_base.s | 14 | ||||
| -rw-r--r-- | ft_list_push_front.s | 4 | ||||
| -rw-r--r-- | ft_list_remove_if.s | 10 | ||||
| -rw-r--r-- | ft_list_size.s | 4 | ||||
| -rw-r--r-- | ft_list_sort.s | 8 | ||||
| -rw-r--r-- | ft_read.s | 6 | ||||
| -rw-r--r-- | ft_strcmp.s | 4 | ||||
| -rw-r--r-- | ft_strcpy.s | 4 | ||||
| -rw-r--r-- | ft_strdup.s | 16 | ||||
| -rw-r--r-- | ft_strlen.s | 4 | ||||
| -rw-r--r-- | ft_write.s | 6 | ||||
| -rw-r--r-- | main.c | 6 |
14 files changed, 55 insertions, 47 deletions
@@ -6,3 +6,4 @@ test.s test.c t.c t.s +runtest @@ -6,18 +6,23 @@ # By: cacharle <marvin@42.fr> +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2019/11/22 02:56:22 by cacharle #+# #+# # -# Updated: 2020/02/08 20:55:14 by cacharle ### ########.fr # +# Updated: 2020/04/12 19:53:58 by charles ### ########.fr # # # # **************************************************************************** # RM = rm -f LIB = ar rcs +UNAME = $(shell uname) CC = gcc -CCFLAGS = -g -Wall -Wextra -fomit-frame-pointer +CCFLAGS = -Wall -Wextra -fomit-frame-pointer -fPIC NASM = nasm -NASMFLAGS = -f macho64 +ifeq ($(UNAME),Linux) + NASMFLAGS = -f elf64 +else + NASMFLAGS = -f macho64 +endif NAME = libasm.a ASMSRC = ft_strlen.s ft_strcpy.s ft_strcmp.s ft_write.s ft_read.s \ @@ -25,13 +30,15 @@ ASMSRC = ft_strlen.s ft_strcpy.s ft_strcmp.s ft_write.s ft_read.s \ ft_list_size.s ft_list_sort.s ft_list_remove_if.s ASMOBJ = $(ASMSRC:.s=.o) +TESTNAME = runtest + all: $(NAME) $(NAME): $(ASMOBJ) $(LIB) $(NAME) $(ASMOBJ) test: all - $(CC) main.c $(NAME) + $(CC) main.c $(NAME) -o $(TESTNAME) %.o: %.s $(NASM) $(NASMFLAGS) -o $@ $< diff --git a/ft_atoi_base.s b/ft_atoi_base.s index 663b399..5a8d4c1 100644 --- a/ft_atoi_base.s +++ b/ft_atoi_base.s @@ -19,7 +19,7 @@ ; 2. pass param with regs rdi, rsi, rdx, rcx, r8, r9 ; if there is more pass them onto the stack in reverse order ; 3. use call -; 4. restore stack state by removing passed on the stack param +; 4. restore stack state by removing passed on the stack param ; 5. return value of callee in rax ; 6. restore the caller-saved register and saved passed params ; We can assume that no other register has been altered. @@ -38,12 +38,12 @@ ; 6. use ret -extern _ft_strlen +extern ft_strlen -global _ft_atoi_base +global ft_atoi_base ; int ft_atoi_base(const char *str, const char *base); -_ft_atoi_base: +ft_atoi_base: ; ===prolog=== ; long int nb (8) ; int radix (4) @@ -95,9 +95,9 @@ FT_ATOI_BASE_SIGN_LOOP: ; base radix push rdi mov rdi, rsi - call _ft_strlen + call ft_strlen pop rdi - mov dword [rsp + 8], eax + mov dword [rsp + 8], eax ; main loop FT_ATOI_BASE_LOOP: @@ -163,7 +163,7 @@ _check_base: mov dword [rsp], 0 ; check for empty or size 1 base push rdi - call _ft_strlen + call ft_strlen pop rdi cmp rax, 2 jl CHECK_BASE_FALSE diff --git a/ft_list_push_front.s b/ft_list_push_front.s index 6a95909..320c49c 100644 --- a/ft_list_push_front.s +++ b/ft_list_push_front.s @@ -12,10 +12,10 @@ extern _malloc -global _ft_list_push_front +global ft_list_push_front ; void ft_list_push_front(t_list **begin_list, void *data); -_ft_list_push_front: +ft_list_push_front: cmp rdi, 0 je FT_LIST_PUSH_FRONT_END diff --git a/ft_list_remove_if.s b/ft_list_remove_if.s index 5a2fd8b..40e2415 100644 --- a/ft_list_remove_if.s +++ b/ft_list_remove_if.s @@ -10,7 +10,7 @@ ; ; ; **************************************************************************** ; -global _ft_list_remove_if +global ft_list_remove_if extern _free @@ -33,7 +33,7 @@ extern _free ; ft_list_remove_if(t_list **begin_list, void *data_ref, ; int (*cmp)(void *data, void *data_ref), ; void (*free_fct)(void *)) -_ft_list_remove_if: +ft_list_remove_if: ; t_list *saved_next ; === prolog === @@ -50,7 +50,7 @@ _ft_list_remove_if: ; === compare (*begin_list)->data and data_ref EXTERN_FUNCTION_SAVE mov rdi, [rdi] - mov rdi, [rdi + 0] + mov rdi, [rdi + 0] call rdx ; cmp((*begin_list)->data, data_ref) EXTERN_FUNCTION_SAVE_END cmp rax, 0 @@ -60,7 +60,7 @@ _ft_list_remove_if: push rdi mov rdi, [rdi] lea rdi, [rdi + 8] - call _ft_list_remove_if + call ft_list_remove_if pop rdi jmp FT_LIST_REMOVE_IF_END @@ -85,7 +85,7 @@ FT_LIST_REMOVE_IF_REMOVE: mov rax, [rbp - 8] mov [rdi], rax - call _ft_list_remove_if + call ft_list_remove_if FT_LIST_REMOVE_IF_END: ; === epilog === diff --git a/ft_list_size.s b/ft_list_size.s index b41cfb4..5367a17 100644 --- a/ft_list_size.s +++ b/ft_list_size.s @@ -10,10 +10,10 @@ ; ; ; **************************************************************************** ; -global _ft_list_size +global ft_list_size ; int ft_list_size(t_list *begin_list); -_ft_list_size: +ft_list_size: xor eax, eax FT_LIST_SIZE_LOOP: cmp rdi, 0 diff --git a/ft_list_sort.s b/ft_list_sort.s index a541bd8..b077b89 100644 --- a/ft_list_sort.s +++ b/ft_list_sort.s @@ -10,12 +10,12 @@ ; ; ; **************************************************************************** ; -global _ft_list_sort +global ft_list_sort %define NULL 0x0 ; void ft_list_sort(t_list **begin_list, int (*cmp)(void*, void*)); -_ft_list_sort: +ft_list_sort: ; t_list *slow : rax = *begin_list ; t_list *fast : rbx = (*begin_list)->next ; t_list *middle : rsp + 0 @@ -54,9 +54,9 @@ FT_LIST_SORT_MIDDLE_LOOP_END: ; === sorting both child list === push rdi push rsi - call _ft_list_sort ; ft_list_sort(begin_list, cmp) + call ft_list_sort ; ft_list_sort(begin_list, cmp) lea rdi, [rbp - 8] - call _ft_list_sort ; ft_list_sort(&middle, cmp) + call ft_list_sort ; ft_list_sort(&middle, cmp) pop rsi pop rdi @@ -10,14 +10,14 @@ ; ; ; **************************************************************************** ; -global _ft_read +global ft_read %define F_GETFD 1 %define SYSCALL_READ 0x2000003 %define SYSCALL_FCNTL 0x200005c ; int ft_read(int, void*, size_t); -_ft_read: +ft_read: cmp rdx, 0 je FT_READ_NO_SIZE cmp rdi, 0 @@ -29,7 +29,7 @@ _ft_read: push rsi xor rsi, rsi mov esi, F_GETFD - mov rax, SYSCALL_FCNTL + mov rax, SYSCALL_FCNTL syscall pop rsi pop rdx diff --git a/ft_strcmp.s b/ft_strcmp.s index 7704aa5..03e8d9e 100644 --- a/ft_strcmp.s +++ b/ft_strcmp.s @@ -10,10 +10,10 @@ ; ; ; **************************************************************************** ; -global _ft_strcmp +global ft_strcmp ; int ft_strcmp(const char *s1, const char *s2); -_ft_strcmp: +ft_strcmp: push r12 push r13 push rcx diff --git a/ft_strcpy.s b/ft_strcpy.s index 3789283..a1aa4a8 100644 --- a/ft_strcpy.s +++ b/ft_strcpy.s @@ -10,10 +10,10 @@ ; ; ; **************************************************************************** ; -global _ft_strcpy +global ft_strcpy ; char *ft_strcpy(char *dst, const char *src); -_ft_strcpy: +ft_strcpy: push rbx push rcx mov rax, rdi ; dst diff --git a/ft_strdup.s b/ft_strdup.s index a31f36f..b5420ac 100644 --- a/ft_strdup.s +++ b/ft_strdup.s @@ -10,27 +10,27 @@ ; ; ; **************************************************************************** ; -extern _ft_strlen -extern _ft_strcpy -extern _malloc +extern ft_strlen +extern ft_strcpy +extern malloc -global _ft_strdup +global ft_strdup ; char *ft_strdup(const char *str); -_ft_strdup: +ft_strdup: push rdi ; save rdi because it will be overwrite for malloc - call _ft_strlen ; rdi is still == str + call ft_strlen ; rdi is still == str inc rax ; len++ for '\0' mov rdi, rax ; size to malloc - call _malloc + call malloc cmp rax, 0 je FT_STRDUP_ERROR pop rsi ; original str as src mov rdi, rax ; allocated as dest - call _ft_strcpy + call ft_strcpy ret FT_STRDUP_ERROR: pop rdi diff --git a/ft_strlen.s b/ft_strlen.s index 2f2dd26..42cba09 100644 --- a/ft_strlen.s +++ b/ft_strlen.s @@ -10,10 +10,10 @@ ; ; ; **************************************************************************** ; -global _ft_strlen +global ft_strlen ; int ft_strlen(char *); -_ft_strlen: +ft_strlen: mov eax, -1 FT_STRLEN_LOOP: inc eax @@ -10,14 +10,14 @@ ; ; ; **************************************************************************** ; -global _ft_write +global ft_write %define F_GETFD 1 %define SYSCALL_WRITE 0x2000004 %define SYSCALL_FCNTL 0x200005c ; int ft_write(int rdi, const void *rsi, size_t rdx); -_ft_write: +ft_write: cmp rdx, 0 je FT_WRITE_NO_SIZE cmp rdi, 0 @@ -29,7 +29,7 @@ _ft_write: push rsi xor rsi, rsi mov esi, F_GETFD - mov rax, SYSCALL_FCNTL + mov rax, SYSCALL_FCNTL syscall pop rsi pop rdx @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/11/22 02:02:24 by cacharle #+# #+# */ -/* Updated: 2020/02/08 20:36:59 by cacharle ### ########.fr */ +/* Updated: 2020/04/12 19:51:04 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -172,7 +172,7 @@ int main() /* printf("%d\n", ft_strlen(a)); */ /* printf("%d\n", ft_strlen(b)); */ /* printf("%d\n", ft_strlen("bonjour")); */ - + /* */ /* char c[32] = "bon"; */ /* char *d = "b"; */ /* */ @@ -196,7 +196,7 @@ int main() /* printf("%d\n", h); */ /* printf("%s\n", h); */ /* free(h); */ - + /* printf("%d\n", check_base("01")); */ |
