From a8ed4fdd098b4be27ead8fc14d40c8dc7ef77491 Mon Sep 17 00:00:00 2001 From: Brett Jia Date: Wed, 12 Mar 2025 20:37:46 -0400 Subject: [PATCH] Add NetBSD evbarm and fix segfault (#1384) This change fixes a segmentation fault when comparing loaders that don't have a target kernel set. Additionally, adds evbarm, which is the output of uname -m on NetBSD on aarch64. --- tool/build/apelink.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tool/build/apelink.c b/tool/build/apelink.c index bc46e5691..f84b50ef2 100644 --- a/tool/build/apelink.c +++ b/tool/build/apelink.c @@ -1653,7 +1653,7 @@ static char *GenerateScriptIfLoaderMachine(char *p, struct Loader *loader) { if (loader->machine == EM_NEXGEN32E) { p = stpcpy(p, "if [ \"$m\" = x86_64 ] || [ \"$m\" = amd64 ]"); } else if (loader->machine == EM_AARCH64) { - p = stpcpy(p, "if [ \"$m\" = aarch64 ] || [ \"$m\" = arm64 ]"); + p = stpcpy(p, "if [ \"$m\" = aarch64 ] || [ \"$m\" = arm64 ] || [ \"$m\" = evbarm ]"); } else if (loader->machine == EM_PPC64) { p = stpcpy(p, "if [ \"$m\" = ppc64le ]"); } else if (loader->machine == EM_MIPS) { @@ -1919,9 +1919,16 @@ int main(int argc, char *argv[]) { for (i = 0; i < loaders.n; ++i) { for (j = i + 1; j < loaders.n; ++j) { if (loaders.p[i].os == loaders.p[j].os && - loaders.p[i].machine == loaders.p[j].machine && - strcmp(loaders.p[i].kernel, loaders.p[j].kernel) == 0) { - Die(prog, "multiple ape loaders specified for the same platform"); + loaders.p[i].machine == loaders.p[j].machine) { + if (!loaders.p[i].kernel && !loaders.p[j].kernel) { + Die(prog, "multiple ape loaders specified for the same platform"); + } + if (loaders.p[i].kernel != NULL && + loaders.p[j].kernel != NULL && + strcmp(loaders.p[i].kernel, loaders.p[j].kernel) == 0) { + Die(prog, "multiple ape loaders specified for the same platform " + "with matching kernels"); + } } } }