aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-12 19:54:39 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-12 19:54:39 +0200
commit8529228d532fffedf20fc892467c7676121f219a (patch)
tree472d86a454ba9402affdf0e8edd8cc3c47b0f4c1
parent28424105e255f0a4c887b6e6a83afd6dce372709 (diff)
parent94d61d8aaee7a3df0dc1f055e27e0f4484cb3ffa (diff)
downloadlibasm-8529228d532fffedf20fc892467c7676121f219a.tar.gz
libasm-8529228d532fffedf20fc892467c7676121f219a.tar.bz2
libasm-8529228d532fffedf20fc892467c7676121f219a.zip
Added change in ft_write, ft_readlinux
-rw-r--r--.gitignore1
-rw-r--r--Makefile15
-rw-r--r--ft_atoi_base.s14
-rw-r--r--ft_list_push_front.s4
-rw-r--r--ft_list_remove_if.s10
-rw-r--r--ft_list_size.s4
-rw-r--r--ft_list_sort.s8
-rw-r--r--ft_read.s6
-rw-r--r--ft_strcmp.s4
-rw-r--r--ft_strcpy.s4
-rw-r--r--ft_strdup.s16
-rw-r--r--ft_strlen.s4
-rw-r--r--ft_write.s6
-rw-r--r--main.c6
14 files changed, 55 insertions, 47 deletions
diff --git a/.gitignore b/.gitignore
index 0291a3f..90fed4c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ test.s
test.c
t.c
t.s
+runtest
diff --git a/Makefile b/Makefile
index 3bf5764..881ccc6 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/ft_read.s b/ft_read.s
index f65ade3..a94cece 100644
--- a/ft_read.s
+++ b/ft_read.s
@@ -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
diff --git a/ft_write.s b/ft_write.s
index 62616c5..0761329 100644
--- a/ft_write.s
+++ b/ft_write.s
@@ -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
diff --git a/main.c b/main.c
index 5c165b8..dec671b 100644
--- a/main.c
+++ b/main.c
@@ -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")); */