This commit is contained in:
Maieul BOYER 2024-05-08 15:30:34 +02:00
parent 27eb1f10b1
commit 99f1e58812
No known key found for this signature in database
6 changed files with 57 additions and 17 deletions

View file

@ -6,7 +6,7 @@
# By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ # # By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/04/28 17:28:30 by maiboyer #+# #+# # # Created: 2024/04/28 17:28:30 by maiboyer #+# #+# #
# Updated: 2024/05/07 22:23:08 by maiboyer ### ########.fr # # Updated: 2024/05/08 15:03:15 by maiboyer ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -15,7 +15,7 @@
OBJDIRNAME ?= OBJDIRNAME ?=
# Flags # Flags
CFLAGS = -Werror -Wextra -Wall -Wno-unused-command-line-argument -g3 -MMD -lreadline -I./includes -I./output/include -I./stdme/output/include -Wl,-E CFLAGS = -Werror -Wextra -Wall -Wno-unused-command-line-argument -g3 -MMD -lreadline -I./includes -I./output/include -I./stdme/output/include -rdynamic
# Sources # Sources
LIB = ./libft/ft_bzero.c \ LIB = ./libft/ft_bzero.c \
./libft/ft_calloc.c \ ./libft/ft_calloc.c \

View file

@ -6,7 +6,7 @@
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */ /* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */ /* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */
/* Updated: 2024/05/07 13:08:24 by maiboyer ### ########.fr */ /* Updated: 2024/05/08 15:27:45 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -164,6 +164,7 @@ t_i32 main(t_i32 argc, t_str argv[], t_str envp[])
if (install_signal()) if (install_signal())
return (1); return (1);
utils = (t_utils){}; utils = (t_utils){};
*(t_u8 volatile *)NULL = 5;
utils.env = create_env_map(); utils.env = create_env_map();
utils.parser = create_myparser(); utils.parser = create_myparser();
utils.name_shell = "\001\x1B[93m\002" utils.name_shell = "\001\x1B[93m\002"

View file

@ -6,7 +6,7 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */ /* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/02 13:22:14 by maiboyer #+# #+# */ /* Created: 2024/05/02 13:22:14 by maiboyer #+# #+# */
/* Updated: 2024/05/03 12:23:44 by maiboyer ### ########.fr */ /* Updated: 2024/05/08 15:28:15 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -50,6 +50,16 @@ void sigquit_handle(int sig, siginfo_t *info, void *ucontext)
} }
} }
void sigsegv_handle(int sig, siginfo_t *info, void *ucontext)
{
(void)(sig);
(void)(info);
(void)(ucontext);
printf("SEGFAULT!!!\n");
print_trace();
exit(139);
}
t_error install_signal(void) t_error install_signal(void)
{ {
struct sigaction data; struct sigaction data;
@ -63,6 +73,9 @@ t_error install_signal(void)
data.sa_sigaction = sigquit_handle; data.sa_sigaction = sigquit_handle;
if (sigaction(SIGQUIT, &data, NULL)) if (sigaction(SIGQUIT, &data, NULL))
return (ERROR); return (ERROR);
data.sa_sigaction = sigsegv_handle;
if (sigaction(SIGSEGV, &data, NULL))
return (ERROR);
return (NO_ERROR); return (NO_ERROR);
} }

View file

@ -6,7 +6,7 @@
# By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ # # By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2023/11/03 13:20:01 by maiboyer #+# #+# # # Created: 2023/11/03 13:20:01 by maiboyer #+# #+# #
# Updated: 2024/05/07 22:24:22 by maiboyer ### ########.fr # # Updated: 2024/05/08 15:01:24 by maiboyer ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -21,7 +21,7 @@ NAME = libme.a
LIB_NAME ?= LIB_NAME ?=
TARGET = $(BUILD_DIR)/$(NAME) TARGET = $(BUILD_DIR)/$(NAME)
CC ?= clang CC ?= clang
CFLAGS = -Wno-unused-command-line-argument -Wall -Werror -Wextra -g3 -L$(BUILD_DIR) -MMD CFLAGS = -Wno-unused-command-line-argument -Wall -Werror -Wextra -g3 -L$(BUILD_DIR) -MMD -rdynamic
BONUS_FILES = BONUS_FILES =
LIBS_NAME = LIBS_NAME =
SUBJECT_URL = SUBJECT_URL =

View file

@ -6,7 +6,7 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */ /* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/03 14:31:12 by maiboyer #+# #+# */ /* Created: 2023/11/03 14:31:12 by maiboyer #+# #+# */
/* Updated: 2024/05/07 14:52:32 by maiboyer ### ########.fr */ /* Updated: 2024/05/08 15:19:25 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -47,6 +47,7 @@ typedef bool t_error;
void me_abort(void); void me_abort(void);
void me_exit(t_i32 code); void me_exit(t_i32 code);
void me_free(void *ptr); void me_free(void *ptr);
void print_trace(void);
#define ERROR 1 #define ERROR 1
#define NO_ERROR 0 #define NO_ERROR 0

View file

@ -6,11 +6,13 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */ /* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/07 11:08:03 by maiboyer #+# #+# */ /* Created: 2024/05/07 11:08:03 by maiboyer #+# #+# */
/* Updated: 2024/05/07 22:26:15 by maiboyer ### ########.fr */ /* Updated: 2024/05/08 15:22:04 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "me/types.h" #include "me/types.h"
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#define PRINT_BACKTRACE #define PRINT_BACKTRACE
@ -20,22 +22,45 @@
# ifndef BACKTRACE_DEEP # ifndef BACKTRACE_DEEP
# define BACKTRACE_DEEP 256 # define BACKTRACE_DEEP 256
# endif # endif
# include "me/fs/putendl_fd.h"
# include <execinfo.h>
static void print_trace(void) static void print_trace_inner(void **trace, t_str *messages, t_usize i)
{ {
void *array[BACKTRACE_DEEP]; char syscom[1024];
t_i32 size; t_i32 p;
size = backtrace(array, BACKTRACE_DEEP); p = 0;
backtrace_symbols_fd(array, size, 2); printf("[bt] #%zu\t", i);
while (messages[i][p] != '(' && messages[i][p] != ' '
&& messages[i][p] != 0)
++p;
fflush(stdout);
snprintf(syscom, 1024, "addr2line %p -e %.*s -sipf", trace[i], p,
messages[i]);
(void)system(syscom);
}
void print_trace(void)
{
void *trace[BACKTRACE_DEEP];
t_str *messages;
t_i32 size;
t_i32 i;
size = backtrace(trace, BACKTRACE_DEEP);
messages = backtrace_symbols(trace, size);
i = 1;
printf("[bt] Execution path:\n");
if (size >= 3)
size -= 3;
while (i < size)
print_trace_inner(trace, messages, i++);
} }
#else #else
static void print_trace(void) static void print_trace(void)
{ {
} }
#endif #endif
void me_abort(void) void me_abort(void)