From 746a1ad2ad98d5827a30b827d1dfa7edb178cb1f Mon Sep 17 00:00:00 2001 From: Maix0 Date: Wed, 8 May 2024 23:27:43 +0200 Subject: [PATCH] Update... --- Minishell.mk | 4 +-- flake.nix | 5 +-- includes/app/signal_handler.h | 5 +-- stdme/src/alloc/get_arena.c | 4 +-- stdme/src/os/abort.c | 58 ++++++++++++++++++++--------------- 5 files changed, 42 insertions(+), 34 deletions(-) diff --git a/Minishell.mk b/Minishell.mk index ff96b317..930fa900 100644 --- a/Minishell.mk +++ b/Minishell.mk @@ -6,7 +6,7 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/04/28 17:28:30 by maiboyer #+# #+# # -# Updated: 2024/05/08 15:03:15 by maiboyer ### ########.fr # +# Updated: 2024/05/08 22:15:45 by maiboyer ### ########.fr # # # # **************************************************************************** # @@ -15,7 +15,7 @@ OBJDIRNAME ?= # Flags -CFLAGS = -Werror -Wextra -Wall -Wno-unused-command-line-argument -g3 -MMD -lreadline -I./includes -I./output/include -I./stdme/output/include -rdynamic +CFLAGS = -Werror -Wextra -Wall -Wno-unused-command-line-argument -g3 -MMD -lreadline -I./includes -I./output/include -I./stdme/output/include -rdynamic -Wl,-E # Sources LIB = ./libft/ft_bzero.c \ ./libft/ft_calloc.c \ diff --git a/flake.nix b/flake.nix index 351bb4e9..30fce86b 100644 --- a/flake.nix +++ b/flake.nix @@ -15,10 +15,7 @@ pkgs = nixpkgs.legacyPackages.${system}; in { devShell = pkgs.mkShell { - packages = with pkgs; [clang valgrind gnumake readline.out readline.dev generic_c.packages.${system}.default]; - shellHook = '' - alias 'valgrind'='valgrind --supressions=${./valgrind_readline_leaks_ignore.txt}'; - ''; + packages = with pkgs; [clang valgrind gnumake readline.out readline.dev generic_c.packages.${system}.default llvmPackages.bintools]; }; } ); diff --git a/includes/app/signal_handler.h b/includes/app/signal_handler.h index 22004527..c5455f06 100644 --- a/includes/app/signal_handler.h +++ b/includes/app/signal_handler.h @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/02 13:20:25 by maiboyer #+# #+# */ -/* Updated: 2024/05/08 18:20:53 by maiboyer ### ########.fr */ +/* Updated: 2024/05/08 21:52:34 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,10 +14,11 @@ #define SIGNAL_HANDLER_H #include "me/types.h" -#include #include #include +#include + typedef t_i32 t_signal; t_error install_signal(void); diff --git a/stdme/src/alloc/get_arena.c b/stdme/src/alloc/get_arena.c index 705db40f..ed2ed318 100644 --- a/stdme/src/alloc/get_arena.c +++ b/stdme/src/alloc/get_arena.c @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/07 09:47:50 by maiboyer #+# #+# */ -/* Updated: 2024/05/08 19:24:47 by maiboyer ### ########.fr */ +/* Updated: 2024/05/08 22:05:36 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,7 +41,7 @@ t_error alloc_arena_page(t_usize min_size, t_arena_page **out) { t_arena_block *block; - printf("Allocating page with size %zu", min_size); + printf("Allocating page with size %zu\n", min_size); min_size = usize_round_up_to(min_size, ARENA_SIZE_DEFAULT); if (out == NULL) return (ERROR); diff --git a/stdme/src/os/abort.c b/stdme/src/os/abort.c index 5d857bc7..894a7cc4 100644 --- a/stdme/src/os/abort.c +++ b/stdme/src/os/abort.c @@ -6,57 +6,67 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/07 11:08:03 by maiboyer #+# #+# */ -/* Updated: 2024/05/08 19:39:37 by maiboyer ### ########.fr */ +/* Updated: 2024/05/08 23:26:22 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ -#include "me/fs/putstr_fd.h" +#define _GNU_SOURCE + +#include "me/alloc/alloc_internal.h" #include "me/fs/putendl_fd.h" +#include "me/fs/putstr_fd.h" #include "me/types.h" +#include #include +#include #include #include -#include "me/alloc/alloc_internal.h" #ifndef BASE_PATH # define BASE_PATH "/no_base_path_defined/" #endif -#if defined(PRINT_BACKTRACE) || defined(BACKTRACE_DEEP) +#if defined(PRINT_BACKTRACE) || defined(BACKTRACE_DEEP) || true # ifndef BACKTRACE_DEEP # define BACKTRACE_DEEP 256 # endif -static void print_trace_inner(void **trace, t_str *messages, t_usize i) +static size_t convert_to_vma(t_usize addr) { - char syscom[1024]; - t_i32 p; + Dl_info info; + struct link_map *link_map; + + dladdr1((void *)addr, &info, (void **)&link_map, RTLD_DL_LINKMAP); + return (addr - link_map->l_addr); +} + +static void print_trace_inner(void **trace, t_str *messages, t_usize i) +{ + char syscom[1024]; + t_i32 p; p = 0; fprintf(stderr, "[bt] #%-4zu\t", i); - while (messages[i][p] != '(' && messages[i][p] != ' ' - && messages[i][p] != 0) + while (messages[i][p] != '(' && messages[i][p] != ' ' && + messages[i][p] != 0) ++p; fflush(stderr); - snprintf(syscom, \ - 1024, \ - "addr2line %p -e %.*s -ipf | 1>&2 rg \"^(.*) at %s(.*)\"'$' " \ - "--replace '$1 at $2' --color never", \ - trace[i], \ - p, \ - messages[i], \ - BASE_PATH); + snprintf( + syscom, sizeof(syscom) / sizeof(syscom[0]), + "addr2line %#x -e %.*s -ipfa" + "| 1>&2 rg \"^(.*) at %s(.*)\"'$' --replace '$1 at $2' --color never", + (t_u32)(convert_to_vma((t_usize)trace[i])), p, messages[i], BASE_PATH); if (system(syscom)) fprintf(stderr, "%s\n", messages[i]); } -void print_trace(void) +void print_trace(void) { - void *trace[BACKTRACE_DEEP]; - t_str *messages; - t_i32 size; - t_i32 i; + void *trace[BACKTRACE_DEEP]; + t_str *messages; + t_i32 size; + t_i32 i; size = backtrace(trace, BACKTRACE_DEEP); messages = backtrace_symbols(trace, size); @@ -70,13 +80,13 @@ void print_trace(void) } #else -void print_trace(void) +void print_trace(void) { } #endif -void me_abort(t_str msg) +void me_abort(t_str msg) { if (msg == NULL) msg = "No message (msg was NULL)";