From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23569 invoked by alias); 12 May 2011 16:31:40 -0000 Received: (qmail 23535 invoked by uid 22791); 12 May 2011 16:31:36 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 12 May 2011 16:31:22 +0000 Received: (qmail 31376 invoked from network); 12 May 2011 16:31:20 -0000 Received: from unknown (HELO ?84.152.214.7?) (bernds@127.0.0.2) by mail.codesourcery.com with ESMTPA; 12 May 2011 16:31:20 -0000 Message-ID: <4DCC0B2F.6050104@codesourcery.com> Date: Thu, 12 May 2011 20:33:00 -0000 From: Bernd Schmidt User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110505 Lightning/1.0b3pre Thunderbird/3.1.10 MIME-Version: 1.0 To: "Joseph S. Myers" CC: GCC Patches Subject: Re: C6X port 7/11: Cope with odd section names References: <4DC95CDA.3000909@codesourcery.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------010704020209010402070108" Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-05/txt/msg00919.txt.bz2 This is a multi-part message in MIME format. --------------010704020209010402070108 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 1055 On 05/10/2011 06:55 PM, Joseph S. Myers wrote: > > Unless the documentation is based on pre-existing GFDL-only documentation > in tm.texi.in, it's preferable for the documentation of a new hook to go > in the doc string in target.def and get to tm.texi that way, rather than > putting it directly in tm.texi.in. (So you'd put the @hook in tm.texi.in, > but not the main body of the documentation for the hook.) Changed. > A default of ".rodata" instead of NULL would seem to simplify the rest of > the patch. Changed. >> - char name[30]; >> + char name[80]; > > There seems to be some undocumented requirement on the maximum length of > the string named by the hook, to avoid buffer overruns with these > fixed-size buffers. Consider using alloca (or asprintf to avoid needing > to work out manually how much to add to the length of the string, but then > you need to free things before returning) to avoid such an undocumented > bound. Changed. New version below; tests running now on i686-linux after a bootstrap. Bernd --------------010704020209010402070108 Content-Type: text/plain; name="mrp.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mrp.diff" Content-length: 3633 * doc/tm.texi.in (TARGET_ASM_MERGEABLE_RODATA_PREFIX): Add hook. * doc/tm.texi: Regenerate. * target.def (mergeable_rodata_prefix: New defhookpod. * varasm.c (mergeable_string_section, mergeable_constant_section): Use it. Allocate name with alloca. Index: gcc/doc/tm.texi =================================================================== --- gcc/doc/tm.texi.orig +++ gcc/doc/tm.texi @@ -7030,6 +7030,12 @@ if function is in @code{.text.name}, and otherwise. @end deftypefn +@deftypevr {Target Hook} {const char *} TARGET_ASM_MERGEABLE_RODATA_PREFIX +Usually, the compiler uses the prefix @code{".rodata"} to construct +section names for mergeable constant data. Define this macro to override +the string if a different section name should be used. +@end deftypevr + @deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_RTX_SECTION (enum machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align}) Return the section into which a constant @var{x}, of mode @var{mode}, should be placed. You can assume that @var{x} is some kind of Index: gcc/doc/tm.texi.in =================================================================== --- gcc/doc/tm.texi.in.orig +++ gcc/doc/tm.texi.in @@ -6978,6 +6978,8 @@ if function is in @code{.text.name}, and otherwise. @end deftypefn +@hook TARGET_ASM_MERGEABLE_RODATA_PREFIX + @hook TARGET_ASM_SELECT_RTX_SECTION Return the section into which a constant @var{x}, of mode @var{mode}, should be placed. You can assume that @var{x} is some kind of Index: gcc/target.def =================================================================== --- gcc/target.def.orig +++ gcc/target.def @@ -296,6 +296,15 @@ DEFHOOK section *, (tree decl), default_function_rodata_section) +/* Nonnull if the target wants to override the default ".rodata" prefix + for mergeable data sections. */ +DEFHOOKPOD +(mergeable_rodata_prefix, + "Usually, the compiler uses the prefix @code{\".rodata\"} to construct\n\ +section names for mergeable constant data. Define this macro to override\n\ +the string if a different section name should be used.", + const char *, ".rodata") + /* Output a constructor for a symbol with a given priority. */ DEFHOOK (constructor, Index: gcc/varasm.c =================================================================== --- gcc/varasm.c.orig +++ gcc/varasm.c @@ -737,7 +737,8 @@ mergeable_string_section (tree decl ATTR const char *str; HOST_WIDE_INT i; int j, unit; - char name[30]; + const char *prefix = targetm.asm_out.mergeable_rodata_prefix; + char *name = (char *) alloca (strlen (prefix) + 30); mode = TYPE_MODE (TREE_TYPE (TREE_TYPE (decl))); modesize = GET_MODE_BITSIZE (mode); @@ -761,8 +762,8 @@ mergeable_string_section (tree decl ATTR } if (i == len - unit) { - sprintf (name, ".rodata.str%d.%d", modesize / 8, - (int) (align / 8)); + sprintf (name, "%s.str%d.%d", prefix, + modesize / 8, (int) (align / 8)); flags |= (modesize / 8) | SECTION_MERGE | SECTION_STRINGS; return get_section (name, flags, NULL); } @@ -789,9 +790,10 @@ mergeable_constant_section (enum machine && align <= 256 && (align & (align - 1)) == 0) { - char name[24]; + const char *prefix = targetm.asm_out.mergeable_rodata_prefix; + char *name = (char *) alloca (strlen (prefix) + 30); - sprintf (name, ".rodata.cst%d", (int) (align / 8)); + sprintf (name, "%s.cst%d", prefix, (int) (align / 8)); flags |= (align / 8) | SECTION_MERGE; return get_section (name, flags, NULL); } --------------010704020209010402070108--