Commit 73e1414c by Martin Sebor Committed by Martin Sebor

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
parent 9563bfcd
2016-10-05 Martin Sebor <msebor@redhat.com>
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 <kyrylo.tkachov@arm.com>
* fold-const.c (native_encode_real): Fix logic for selecting offset
......
......@@ -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";
}
......@@ -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
......@@ -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))
{
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment