From 73e1414cb829d02baef1bf241d4bdf3805f6f724 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Wed, 5 Oct 2016 15:21:40 +0000 Subject: [PATCH] PR bootstrap/77819 - undefined reference to gnu_libc_printf_pointer_format with uClibc gcc/ChangeLog: PR bootstrap/77819 * config/linux.h (TARGET_PRINTF_POINTER_FORMAT): Define macro. * config/linux.c (gnu_libc_printf_pointer_format): Remove. * targhooks.c [DEFAULT_LIBC == LIBC_UCLIBC) && SINGLE_LIBC] (default_printf_pointer_format): Define function. * targhooks.c (linux_printf_pointer_format): Define new function. * targhooks.h (linux_printf_pointer_format): Declare. (gnu_libc_printf_pointer_format): Remove declaration. From-SVN: r240793 --- gcc/ChangeLog | 11 +++++++++++ gcc/config/linux.c | 16 ---------------- gcc/config/linux.h | 5 +++-- gcc/targhooks.c | 16 ++++++++++++++++ gcc/targhooks.h | 2 +- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6b4dc9cd145..2b568782c33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2016-10-05 Martin Sebor + + PR bootstrap/77819 + * config/linux.h (TARGET_PRINTF_POINTER_FORMAT): Define macro. + * config/linux.c (gnu_libc_printf_pointer_format): Remove. + * targhooks.c [DEFAULT_LIBC == LIBC_UCLIBC) && SINGLE_LIBC] + (default_printf_pointer_format): Define function. + * targhooks.c (linux_printf_pointer_format): Define new function. + * targhooks.h (linux_printf_pointer_format): Declare. + (gnu_libc_printf_pointer_format): Remove declaration. + 2016-10-05 Kyrylo Tkachov * fold-const.c (native_encode_real): Fix logic for selecting offset diff --git a/gcc/config/linux.c b/gcc/config/linux.c index 9aac38b8658..a393d3b78ba 100644 --- a/gcc/config/linux.c +++ b/gcc/config/linux.c @@ -24,9 +24,6 @@ along with GCC; see the file COPYING3. If not see #include "tree.h" #include "linux-protos.h" -#undef TARGET_PRINTF_POINTER_FORMAT -#define TARGET_PRINTF_POINTER_FORMAT gnu_libc_printf_pointer_format - bool linux_libc_has_function (enum function_class fn_class) { @@ -40,16 +37,3 @@ linux_libc_has_function (enum function_class fn_class) return false; } - -/* Glibc formats pointers as if by "%zx" except for the null pointer - which outputs "(nil)". It ignores the pound ('#') format flag but - interprets the space and plus flags the same as in the integer - directive. */ - -const char* -gnu_libc_printf_pointer_format (tree arg, const char **flags) -{ - *flags = " +"; - - return arg && integer_zerop (arg) ? "(nil)" : "%#zx"; -} diff --git a/gcc/config/linux.h b/gcc/config/linux.h index 3ff005b90a2..7211da20089 100644 --- a/gcc/config/linux.h +++ b/gcc/config/linux.h @@ -209,6 +209,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #endif -/* The format string to which "%p" corresponds. */ +/* The format string to which "%p" corresponds (same in Glibc and + uClibc. */ #undef TARGET_PRINTF_POINTER_FORMAT -#define TARGET_PRINTF_POINTER_FORMAT gnu_libc_printf_pointer_format +#define TARGET_PRINTF_POINTER_FORMAT linux_printf_pointer_format diff --git a/gcc/targhooks.c b/gcc/targhooks.c index d75650fede3..c7977be57d4 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -1523,6 +1523,22 @@ default_printf_pointer_format (tree, const char **flags) return "%zx"; } +/* For Glibc and uClibc targets also define the hook here because + otherwise it would have to be duplicated in each target's .c file + (such as in bfin/bfin.c and c6x/c6x.c, etc.) + Glibc and uClibc format pointers as if by "%zx" except for the null + pointer which outputs "(nil)". It ignores the pound ('#') format + flag but interprets the space and plus flags the same as in the integer + directive. */ + +const char* +linux_printf_pointer_format (tree arg, const char **flags) +{ + *flags = " +"; + + return arg && integer_zerop (arg) ? "(nil)" : "%#zx"; +} + tree default_builtin_tm_load_store (tree ARG_UNUSED (type)) { diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 3356f0afe0f..afb1c00caf4 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -192,7 +192,7 @@ extern bool no_c99_libc_has_function (enum function_class); extern bool gnu_libc_has_function (enum function_class); extern const char* default_printf_pointer_format (tree, const char **); -extern const char* gnu_libc_printf_pointer_format (tree, const char **); +extern const char* linux_printf_pointer_format (tree, const char **); extern const char* solaris_printf_pointer_format (tree, const char **); extern tree default_builtin_tm_load_store (tree); -- 2.30.2