On Fri, Jun 04, 2010 at 01:44:02PM +0000, Art Haas wrote:
> This morning's i386 build fails with the following error:
>
> libbackend.a(sol2.o): In function `solaris_output_init_fini':
> /home/ahaas/gnu/gcc.git/gcc/config/sol2.c:109: undefined reference to
> `print_operand'
> /home/ahaas/gnu/gcc.git/gcc/config/sol2.c:116: undefined reference to
> `print_operand'
> collect2: ld returned 1 exit status
> make[3]: *** [cc1-dummy] Error 1
>
> The sparc build fails like so:
>
> libbackend.a(targhooks.o): In function `default_print_operand_address':
> /export/home/arth/src/gcc.git/gcc/targhooks.c:349: undefined reference to
> `output_operand'
> /export/home/arth/src/gcc.git/gcc/targhooks.c:349: undefined reference to
> `output_operand'
> collect2: ld returned 1 exit status
> gmake[3]: *** [cc1-dummy] Error 1
Whoops, sorry about that. This patch fixes at least the sparc error
(successfully built a cross to sparc-solaris) and I'm in the process of
building a cross to i686-solaris.
OK to commit if compilation succeeds?
-Nathan
* config/i386/i386-protos.h (ix86_print_operand): Declare.
* config/i386/i386.c (ix86_print_operand): Make non-static.
* config/i386/sol2.h (ASM_OUTPUT_CALL): Call ix86_print_operand.
* rtl.h (output_operand): Declare.
* final.c (output_operand): Make non-static.
Index: final.c
===================================================================
--- final.c (revision 160266)
+++ final.c (working copy)
@@ -220,7 +220,6 @@ static void output_asm_name (void);
static void output_alternate_entry_point (FILE *, rtx);
static tree get_mem_expr_from_op (rtx, int *);
static void output_asm_operand_names (rtx *, int *, int);
-static void output_operand (rtx, int);
#ifdef LEAF_REGISTERS
static void leaf_renumber_regs (rtx);
#endif
@@ -3478,7 +3477,7 @@ mark_symbol_refs_as_used (rtx x)
The meanings of the letters are machine-dependent and controlled
by TARGET_PRINT_OPERAND. */
-static void
+void
output_operand (rtx x, int code ATTRIBUTE_UNUSED)
{
if (x && GET_CODE (x) == SUBREG)
Index: ChangeLog
===================================================================
Index: rtl.h
===================================================================
--- rtl.h (revision 160266)
+++ rtl.h (working copy)
@@ -2417,6 +2417,7 @@ extern void simplify_using_condition (rt
/* In final.c */
extern unsigned int compute_alignments (void);
extern int asm_str_count (const char *templ);
+extern void output_operand (rtx, int);
struct rtl_hooks
{
Index: config/i386/sol2.h
===================================================================
--- config/i386/sol2.h (revision 160266)
+++ config/i386/sol2.h (working copy)
@@ -145,7 +145,7 @@ along with GCC; see the file COPYING3.
do \
{ \
fprintf (FILE, "\tcall\t"); \
- print_operand (FILE, XEXP (DECL_RTL (FN), 0), 'P'); \
+ ix86_print_operand (FILE, XEXP (DECL_RTL (FN), 0), 'P'); \
fprintf (FILE, "\n"); \
} \
while (0)
Index: config/i386/i386-protos.h
===================================================================
--- config/i386/i386-protos.h (revision 160266)
+++ config/i386/i386-protos.h (working copy)
@@ -60,6 +60,7 @@ extern bool legitimate_pic_operand_p (rt
extern int legitimate_pic_address_disp_p (rtx);
extern void print_reg (rtx, int, FILE*);
+extern void ix86_print_operand (FILE *, rtx, int);
extern bool output_addr_const_extra (FILE*, rtx);
extern void split_di (rtx[], int, rtx[], rtx[]);
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c (revision 160266)
+++ config/i386/i386.c (working copy)
@@ -11579,7 +11579,7 @@ get_some_local_dynamic_name (void)
; -- print a semicolon (after prefixes due to bug in older gas).
*/
-static void
+void
ix86_print_operand (FILE *file, rtx x, int code)
{
if (code)