vtn_bindgen2: use anonymous namespace to avoid name collisions
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

All vtn_bindgen2-generated files use the same 'vtn_bindgen_dummy' struct
name. When linking more than one file (like in panfrost), the
constructor and destructor symbols collide and every instance ends up
running the same initialization. In panfrost, this results in us
dropping any printf format strings that don't occur in v6.

Signed-off-by: Olivia Lee <olivia.lee@collabora.com>
Fixes: b7447a94c8 ("vtn: add vtn_bindgen2 tool")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37798>
This commit is contained in:
Olivia Lee 2025-10-09 01:09:49 -07:00 committed by Marge Bot
parent 3a124ac82a
commit d600cd4c91

View file

@ -409,14 +409,15 @@ main(int argc, char **argv)
fprintf(fp, "#endif\n");
}
fprintf(fp_c, "struct vtn_bindgen_dummy {\n");
fprintf(fp_c, " vtn_bindgen_dummy() {\n");
fprintf(fp_c, " /* Format strings:\n");
fprintf(fp_c, " *\n");
fprintf(fp_c, "namespace {\n");
fprintf(fp_c, " struct vtn_bindgen_dummy {\n");
fprintf(fp_c, " vtn_bindgen_dummy() {\n");
fprintf(fp_c, " /* Format strings:\n");
fprintf(fp_c, " *\n");
for (unsigned i = 0; i < nir->printf_info_count; ++i) {
u_printf_info *info = &nir->printf_info[i];
const char *str = info->strings;
fprintf(fp_c, " * ");
fprintf(fp_c, " * ");
for (unsigned j = 0; j < strlen(str); ++j) {
char c = str[j];
@ -430,7 +431,7 @@ main(int argc, char **argv)
fprintf(fp_c, "\n");
}
fprintf(fp_c, " */\n");
fprintf(fp_c, " */\n");
/* Stuff printf info into Mesa's singleton */
struct blob blob;
@ -440,19 +441,20 @@ main(int argc, char **argv)
(const uint32_t *)blob.data, blob.size, false);
blob_finish(&blob);
fprintf(fp_c, " u_printf_singleton_init_or_ref();\n");
fprintf(fp_c, " u_printf_singleton_init_or_ref();\n");
fprintf(
fp_c,
" u_printf_singleton_add_serialized((const void*)printf_0_blob, sizeof(printf_0_blob));\n");
" u_printf_singleton_add_serialized((const void*)printf_0_blob, sizeof(printf_0_blob));\n");
fprintf(fp_c, " }\n");
fprintf(fp_c, " }\n");
fprintf(fp_c, "\n");
fprintf(fp_c, " ~vtn_bindgen_dummy() {\n");
fprintf(fp_c, " u_printf_singleton_decref();\n");
fprintf(fp_c, " }\n");
fprintf(fp_c, "};\n");
fprintf(fp_c, " ~vtn_bindgen_dummy() {\n");
fprintf(fp_c, " u_printf_singleton_decref();\n");
fprintf(fp_c, " }\n");
fprintf(fp_c, " };\n");
fprintf(fp_c, "\n");
fprintf(fp_c, "static vtn_bindgen_dummy vtn_bindgen_dummy_instance;\n");
fprintf(fp_c, " static vtn_bindgen_dummy vtn_bindgen_dummy_instance;\n");
fprintf(fp_c, "}\n");
glsl_type_singleton_decref();
fclose(fp_c);