diff --git a/src/compiler/linker.c b/src/compiler/linker.c index 1e6f12db0..a65b64bdd 100644 --- a/src/compiler/linker.c +++ b/src/compiler/linker.c @@ -327,6 +327,24 @@ static const char *find_arch_glob_path(const char *glob_path, int file_len) #endif return NULL; } + +static const char *get_linux_crt_begin_arch_glob(void) +{ + switch (compiler.build.arch_os_target) + { + case LINUX_X64: + return "/usr/lib/gcc/x86_64*linux*/*/crtbegin.o"; + case LINUX_X86: + return "/usr/lib/gcc/i686*linux*/*/crtbegin.o"; + case LINUX_AARCH64: + return "/usr/lib/gcc/aarch64*linux*/*/crtbegin.o"; + case LINUX_RISCV32: + case LINUX_RISCV64: + default: + return "/usr/lib/gcc/*/*/crtbegin.o"; + } +} + static const char *find_linux_crt(void) { if (compiler.build.linuxpaths.crt) return compiler.build.linuxpaths.crt; @@ -350,7 +368,8 @@ static const char *find_linux_crt(void) static const char *find_linux_crt_begin(void) { if (compiler.build.linuxpaths.crtbegin) return compiler.build.linuxpaths.crtbegin; - const char *path = find_arch_glob_path("/usr/lib/gcc/*/*/crtbegin.o", 10); + const char *arch_glob_path = get_linux_crt_begin_arch_glob(); + const char *path = find_arch_glob_path(arch_glob_path, 10); if (!path) { INFO_LOG("No crtbegin in /usr/lib/gcc/*/*/");