ldbl-128ibm-compat: Add local aliases for printf family symbols

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>
This commit is contained in:
Sachin Monga 2026-01-12 12:40:15 -05:00
parent e56b3faf8d
commit f05ab7c4a9
4 changed files with 4 additions and 0 deletions

View 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");

View File

@ -33,3 +33,4 @@ ___ieee128_printf (const char *format, ...)
return done;
}
strong_alias (___ieee128_printf, __printfieee128)
asm (".local printf\n" ".set printf, __printfieee128");

View 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");

View 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");