Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
Hi. 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 This patch is the likely culprit: 2010-06-03 Nathan Froyd * final.c (output_asm_insn): Call targetm.asm_out.print_operand_punct_valid_p. Update comments. (output_operand): Call targetm.asm_out.print_operand. Update comments. (output_address): Call targetm.asm_out.print_operand_address. Update comments. * target.h (struct gcc_target): Add print_operand, print_operand_address, and print_operand_punct_valid_p fields. { ... snip ... } My builds from yesterday morning both completed without problems. Art Haas
Re: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
On Fri, Jun 04, 2010 at 01:44:02PM +, 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)
Re: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
Nathan Froyd writes: > * 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. The changes in config/i386 are OK. I don't understand the point of the changes to rtl.h and final.c. Thanks. Ian
Re: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
On Fri, Jun 04, 2010 at 07:45:20AM -0700, Ian Lance Taylor wrote: > Nathan Froyd writes: > > * 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. > > The changes in config/i386 are OK. > > I don't understand the point of the changes to rtl.h and final.c. The changes to rtl.h and final.c are necessary because PRINT_OPERAND* on some platforms freely calls output_operand. But now that PRINT_OPERAND* has been hookized, that call to output_operand no longer appears textually in final.c, but somewhere else (targhooks.c if the port has not done the conversion PRINT_OPERAND* -> TARGET_PRINT_OPERAND*, config/$PORT/$PORT.c if the port has), output_operand needs to be exported. Looking at things a little more closely, output_address is exported in output.h. I suppose output_operand should be exported there as well? -Nathan
Re: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
Nathan Froyd writes: > On Fri, Jun 04, 2010 at 07:45:20AM -0700, Ian Lance Taylor wrote: >> Nathan Froyd writes: >> >* 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. >> >> The changes in config/i386 are OK. >> >> I don't understand the point of the changes to rtl.h and final.c. > > The changes to rtl.h and final.c are necessary because PRINT_OPERAND* on > some platforms freely calls output_operand. But now that PRINT_OPERAND* > has been hookized, that call to output_operand no longer appears > textually in final.c, but somewhere else (targhooks.c if the port has > not done the conversion PRINT_OPERAND* -> TARGET_PRINT_OPERAND*, > config/$PORT/$PORT.c if the port has), output_operand needs to be > exported. I get it. > Looking at things a little more closely, output_address is exported in > output.h. I suppose output_operand should be exported there as well? Yes, put the declaration there, by output_operand_lossage. Thanks. Ian
Re: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
On Fri, Jun 04, 2010 at 08:32:26AM -0700, Ian Lance Taylor wrote: > Nathan Froyd writes: > > Looking at things a little more closely, output_address is exported in > > output.h. I suppose output_operand should be exported there as well? > > Yes, put the declaration there, by output_operand_lossage. This is what I committed. -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. * output.h (output_operand): Declare. * final.c (output_operand): Make non-static. Index: final.c === --- final.c (revision 160285) +++ 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: output.h === --- output.h(revision 160285) +++ output.h(working copy) @@ -77,6 +77,9 @@ extern rtx final_scan_insn (rtx, FILE *, subreg of. */ extern rtx alter_subreg (rtx *); +/* Print an operand using machine-dependent assembler syntax. */ +extern void output_operand (rtx, int); + /* Report inconsistency between the assembler template and the operands. In an `asm', it's the user's fault; otherwise, the compiler's fault. */ extern void output_operand_lossage (const char *, ...) ATTRIBUTE_PRINTF_1; Index: config/i386/sol2.h === --- config/i386/sol2.h (revision 160285) +++ 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 160285) +++ 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 160285) +++ 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)
RE: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10
Hi. The patch resolves the build failures. Thanks. Art Haas -Original Message- From: Nathan Froyd [mailto:froy...@codesourcery.com] Sent: Friday, June 04, 2010 12:29 PM To: Ian Lance Taylor Cc: Arthur Haas; gcc@gcc.gnu.org Subject: Re: Bootstrap failed for i386-pc-solaris2.10 and sparc-sun-solaris2.10 On Fri, Jun 04, 2010 at 08:32:26AM -0700, Ian Lance Taylor wrote: > Nathan Froyd writes: > > Looking at things a little more closely, output_address is exported in > > output.h. I suppose output_operand should be exported there as well? > > Yes, put the declaration there, by output_operand_lossage. This is what I committed. -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. * output.h (output_operand): Declare. * final.c (output_operand): Make non-static. Index: final.c === --- final.c (revision 160285) +++ 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: output.h === --- output.h(revision 160285) +++ output.h(working copy) @@ -77,6 +77,9 @@ extern rtx final_scan_insn (rtx, FILE *, subreg of. */ extern rtx alter_subreg (rtx *); +/* Print an operand using machine-dependent assembler syntax. */ +extern void output_operand (rtx, int); + /* Report inconsistency between the assembler template and the operands. In an `asm', it's the user's fault; otherwise, the compiler's fault. */ extern void output_operand_lossage (const char *, ...) ATTRIBUTE_PRINTF_1; Index: config/i386/sol2.h === --- config/i386/sol2.h (revision 160285) +++ 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 160285) +++ 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 160285) +++ 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)