]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
ldbl-128ibm-compat: Add local aliases for printf family symbols
authorSachin Monga <smonga@linux.ibm.com>
Mon, 12 Jan 2026 17:40:15 +0000 (12:40 -0500)
committerSachin Monga <smonga@linux.ibm.com>
Mon, 12 Jan 2026 17:40:29 +0000 (12:40 -0500)
When the compiler selects IEEE-128 long double ABI(-mabi=ieeelongdouble),
calls to printf, fprintf, sprintf and snprintf are redirected to the
__printfieee128, __fprintfieee128, __sprintfieee128 and __snprintfieee128
symbols respectively.  This causes "break printf" (and others) in
GDB to fail because the original symbol names do not exist as global
symbols in libc.so.6.

Fix this by adding local symbol aliases in the ieee128 compatibility
files so that the original symbol names are present in the symbol table
again.  This restores the expected GDB behavior ("break printf" works)
without requiring dynamic symbols or versioned compatibility symbols.

Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-fprintf.c
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-printf.c
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-snprintf.c
sysdeps/ieee754/ldbl-128ibm-compat/ieee128-sprintf.c

index 1a2d6646b23051d9d6d046251ca29db4bed9894a..52260a2a540599ae2815cda0ec2862c5ecebed27 100644 (file)
@@ -33,3 +33,4 @@ ___ieee128_fprintf (FILE *fp, const char *format, ...)
 }
 strong_alias (___ieee128_fprintf, __fprintfieee128)
 hidden_def (___ieee128_fprintf)
+asm (".local fprintf\n" ".set fprintf, __fprintfieee128");
index 4c5bbaf601bd7014c08ed14908017eeabf3c0b73..3e180ae2b9505fdeff771bf947b09e2cdc483c19 100644 (file)
@@ -33,3 +33,4 @@ ___ieee128_printf (const char *format, ...)
   return done;
 }
 strong_alias (___ieee128_printf, __printfieee128)
+asm (".local printf\n" ".set printf, __printfieee128");
index 82d2bc1f1dc795a827f47592f4f679c1ddb066c5..1aeaca86a7ad80c3b23f79408a7f2a9acefcf210 100644 (file)
@@ -37,3 +37,4 @@ ldbl_hidden_def (___ieee128_snprintf, ___ieee128_snprintf)
 #ifdef SHARED
 strong_alias (___ieee128_snprintf, __GI____ieee128___snprintf)
 #endif
+asm (".local snprintf\n" ".set snprintf, __snprintfieee128");
index 4ac35134e9815353f12c4729713223bc13eab485..7683d69352fe09d0aa66c7ba66a7a86a93988ecc 100644 (file)
@@ -34,3 +34,4 @@ ___ieee128_sprintf (char *s, const char *format, ...)
 }
 strong_alias (___ieee128_sprintf, __sprintfieee128)
 hidden_def (___ieee128_sprintf)
+asm (".local sprintf\n" ".set sprintf, __sprintfieee128");