From patchwork Thu Dec 2 05:33:28 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joern Rennecke X-Patchwork-Id: 73937 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 0422CB6EF0 for ; Thu, 2 Dec 2010 16:33:55 +1100 (EST) Received: (qmail 23482 invoked by alias); 2 Dec 2010 05:33:50 -0000 Received: (qmail 23463 invoked by uid 22791); 2 Dec 2010 05:33:48 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL, BAYES_00, MIME_QP_LONG_LINE, RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from c60.cesmail.net (HELO c60.cesmail.net) (216.154.195.49) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 02 Dec 2010 05:33:42 +0000 Received: from unknown (HELO delta2) ([192.168.1.50]) by c60.cesmail.net with ESMTP; 02 Dec 2010 00:33:29 -0500 Received: from 89.241.151.180 ([89.241.151.180]) by webmail.spamcop.net (Horde MIME library) with HTTP; Thu, 02 Dec 2010 00:33:28 -0500 Message-ID: <20101202003328.908hfa8ls0w88ww4-nzlynne@webmail.spamcop.net> Date: Thu, 02 Dec 2010 00:33:28 -0500 From: Joern Rennecke To: gcc-patches@gcc.gnu.org Cc: "Joseph S. Myers" Subject: Updated^2: RFA: Fix microblaze ada --enable-werror-always build References: <20101201194952.bsvkqv26m8k44osg-nzlynne@webmail.spamcop.net> <20101201224845.0swxklu4g4gsscsk-nzlynne@webmail.spamcop.net> <20101202000411.af5fdi6hxsc888ks-nzlynne@webmail.spamcop.net> In-Reply-To: <20101202000411.af5fdi6hxsc888ks-nzlynne@webmail.spamcop.net> MIME-Version: 1.0 User-Agent: Internet Messaging Program (IMP) H3 (4.1.4) Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Oops, forgot @code again... And the @var{stream} argument was not mentioned. 2010-12-02 Joern Rennecke PR46738 gcc: * targhooks.c (legacy_asm_output_ident): New function. * targhooks.h (legacy_asm_output_ident): Declare. * target.def (asm_out): New hook output_ident. * doc/tm.texi.in (TARGET_ASM_OUTPUT_IDENT): Indicate place for new hook. * doc/tm.texi: Regenerate. gcc/c-family: * c-lex.c (cb_ident): Use targetm.asm_out.output_ident. gcc/ada: * gcc-interface/Make-lang.in (ada/trans.o): Depend on $(TARGET_H). * gcc-interface/trans.c: Include target.h . (gigi): Use targetm.asm_out.output_ident . Index: doc/tm.texi =================================================================== --- doc/tm.texi (revision 167318) +++ doc/tm.texi (working copy) @@ -7323,6 +7323,10 @@ macro is not defined, nothing is output for a @samp{#ident} directive. @end defmac +@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_IDENT (FILE *@var{stream}, const char *@var{string}) +A hook to output something to the assembler file @var{stream} to handle a @samp{#ident} directive containing the text @var{string}. The default uses @code{ASM_OUTPUT_IDENT}. +@end deftypefn + @deftypefn {Target Hook} void TARGET_ASM_NAMED_SECTION (const char *@var{name}, unsigned int @var{flags}, tree @var{decl}) Output assembly directives to switch to section @var{name}. The section should have attributes as specified by @var{flags}, which is a bit mask Index: doc/tm.texi.in =================================================================== --- doc/tm.texi.in (revision 167318) +++ doc/tm.texi.in (working copy) @@ -7298,6 +7298,8 @@ macro is not defined, nothing is output for a @samp{#ident} directive. @end defmac +@hook TARGET_ASM_OUTPUT_IDENT + @hook TARGET_ASM_NAMED_SECTION Output assembly directives to switch to section @var{name}. The section should have attributes as specified by @var{flags}, which is a bit mask Index: targhooks.c =================================================================== --- targhooks.c (revision 167318) +++ targhooks.c (working copy) @@ -371,6 +371,16 @@ return false; } +/* Implementation of TARGET_ASM_OUTPUT_IDENT using the old macro. */ +void +legacy_asm_output_ident (FILE *stream ATTRIBUTE_UNUSED, + const char *string ATTRIBUTE_UNUSED) +{ +#ifdef ASM_OUTPUT_IDENT + ASM_OUTPUT_IDENT (stream, string); +#endif +} + /* True if MODE is valid for the target. By "valid", we mean able to be manipulated in non-trivial ways. In particular, this means all the arithmetic is supported. Index: targhooks.h =================================================================== --- targhooks.h (revision 167318) +++ targhooks.h (working copy) @@ -66,6 +66,7 @@ extern void default_print_operand_address (FILE *, rtx); extern bool default_print_operand_punct_valid_p (unsigned char); extern bool default_asm_output_addr_const_extra (FILE *, rtx); +extern void legacy_asm_output_ident (FILE *stream, const char *); extern bool default_scalar_mode_supported_p (enum machine_mode); extern bool targhook_words_big_endian (void); Index: c-family/c-lex.c =================================================================== --- c-family/c-lex.c (revision 167318) +++ c-family/c-lex.c (working copy) @@ -165,18 +165,16 @@ unsigned int ARG_UNUSED (line), const cpp_string * ARG_UNUSED (str)) { -#ifdef ASM_OUTPUT_IDENT if (!flag_no_ident) { /* Convert escapes in the string. */ cpp_string cstr = { 0, 0 }; if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING)) { - ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text); + targetm.asm_out.output_ident (asm_out_file, (const char *) cstr.text); free (CONST_CAST (unsigned char *, cstr.text)); } } -#endif } /* Called at the start of every non-empty line. TOKEN is the first Index: target.def =================================================================== --- target.def (revision 167318) +++ target.def (working copy) @@ -1,5 +1,6 @@ /* Target hook definitions. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it @@ -490,6 +491,18 @@ bool, (FILE *file, rtx x), default_asm_output_addr_const_extra) +/* Wrapper for ASM_OUTPUT_IDENT. When the macro is eventually compiletely + eliminated, the default should be changed to hook_void_FILEptr_constcharptr, + and the last sentence of the documentation should read: + The default is to output nothing for a @samp{#ident} directive. */ +DEFHOOK +(output_ident, +"A hook to output something to the assembler file @var{stream} to handle a\ + @samp{#ident} directive containing the text @var{string}. \ + The default uses @code{ASM_OUTPUT_IDENT}.", + void, (FILE *stream, const char *string), + legacy_asm_output_ident) + /* ??? The TARGET_PRINT_OPERAND* hooks are part of the asm_out struct, even though that is not reflected in the macro name to override their initializers. */ Index: ada/gcc-interface/Make-lang.in =================================================================== --- ada/gcc-interface/Make-lang.in (revision 167318) +++ ada/gcc-interface/Make-lang.in (working copy) @@ -1246,7 +1246,7 @@ $(COMPILER) -c $(ALL_COMPILERFLAGS) -I.. $(ALL_CPPFLAGS) $< -o $@ ada/trans.o : ada/gcc-interface/trans.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - $(TM_H) $(TREE_H) $(FLAGS_H) output.h tree-iterator.h \ + $(TM_H) $(TREE_H) $(FLAGS_H) output.h tree-iterator.h $(TARGET_H) \ $(GIMPLE_H) ada/gcc-interface/ada.h ada/adadecode.h ada/types.h \ ada/atree.h ada/elists.h ada/namet.h ada/nlists.h ada/snames.h \ ada/stringt.h ada/uintp.h ada/urealp.h ada/fe.h ada/sinfo.h ada/einfo.h \ Index: ada/gcc-interface/trans.c =================================================================== --- ada/gcc-interface/trans.c (revision 167318) +++ ada/gcc-interface/trans.c (working copy) @@ -34,6 +34,7 @@ #include "libfuncs.h" /* For set_stack_check_libfunc. */ #include "tree-iterator.h" #include "gimple.h" +#include "target.h" #include "ada.h" #include "adadecode.h" @@ -591,12 +592,10 @@ VEC_safe_push (tree, gc, gnu_program_error_label_stack, NULL_TREE); /* Process any Pragma Ident for the main unit. */ -#ifdef ASM_OUTPUT_IDENT if (Present (Ident_String (Main_Unit))) - ASM_OUTPUT_IDENT + targetm.asm_out.output_ident (asm_out_file, TREE_STRING_POINTER (gnat_to_gnu (Ident_String (Main_Unit)))); -#endif /* If we are using the GCC exception mechanism, let GCC know. */ if (Exception_Mechanism == Back_End_Exceptions)