Improve crtbegin.o Lookup for Linux Targets (#1975)

* refactor linux crtbegin lookup to use architecture-specific glob paths
* Fixed incorrect function call to `get_linux_crt_begin_glob_path` (`get_linux_crt_begin_arch_glob`)
* Formatting

---------

Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
This commit is contained in:
Mateo Acuña
2025-02-17 20:30:54 -03:00
committed by GitHub
parent e77d1fb646
commit 26362d5068

View File

@@ -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/*/*/");