diff --git a/libc/startup/gpu/nvptx/start.cpp b/libc/startup/gpu/nvptx/start.cpp index 1ff187a577789..554c2ac385f01 100644 --- a/libc/startup/gpu/nvptx/start.cpp +++ b/libc/startup/gpu/nvptx/start.cpp @@ -24,13 +24,15 @@ uintptr_t *__fini_array_start [[gnu::visibility("protected")]]; uintptr_t *__fini_array_end [[gnu::visibility("protected")]]; } -using InitCallback = void(int, char **, char **); +// Nvidia requires that the signature of the function pointers match. This means +// we cannot support the extended constructor arguments. +using InitCallback = void(void); using FiniCallback = void(void); -static void call_init_array_callbacks(int argc, char **argv, char **env) { +static void call_init_array_callbacks(int, char **, char **) { size_t init_array_size = __init_array_end - __init_array_start; for (size_t i = 0; i < init_array_size; ++i) - reinterpret_cast(__init_array_start[i])(argc, argv, env); + reinterpret_cast(__init_array_start[i])(); } static void call_fini_array_callbacks() { diff --git a/libc/test/integration/startup/gpu/init_fini_array_test.cpp b/libc/test/integration/startup/gpu/init_fini_array_test.cpp index ead05f0240585..ceedd5fc81358 100644 --- a/libc/test/integration/startup/gpu/init_fini_array_test.cpp +++ b/libc/test/integration/startup/gpu/init_fini_array_test.cpp @@ -37,11 +37,11 @@ A global(GLOBAL_INDEX, INITVAL_INITIALIZER); int initval = 0; int before = 0; -__attribute__((constructor(101))) void run_before(int, char **, char **) { +__attribute__((constructor(101))) void run_before() { before = BEFORE_INITIALIZER; } -__attribute__((constructor(65535))) void run_after(int, char **, char **) { +__attribute__((constructor(65535))) void run_after() { ASSERT_EQ(before, BEFORE_INITIALIZER); }