public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: Ulrich Drepper <drepper@redhat.com>
Cc: Glibc hackers <libc-hacker@sources.redhat.com>
Subject: [PATCH] Fix strtol_l.c for GCC 4.2
Date: Tue, 08 Aug 2006 13:22:00 -0000	[thread overview]
Message-ID: <20060808132217.GD4556@sunsite.mff.cuni.cz> (raw)

Hi!

GCC 4.2 is very upset if a variable is made linkonce behind its back
(particularly the var anchoring code).
This patch changes it, so that the arrays are only defined in one of
the .o{,s} files they are used and all the others use it.

2006-08-08  Jakub Jelinek  <jakub@redhat.com>

	* stdlib/strtol_l.c (__strtol_ul_max_tab, __strtol_ul_rem_tab,
	__strtol_ull_max_tab, __strtol_ull_rem_tab): Declare.
	(DEF): Don't put the var into .gnu.linkonce.r.* section.
	Only provide var definitions in strtol_l (or for *ull*
	in strtoll_l).

--- libc/stdlib/strtol_l.c.jj	2005-12-14 12:13:59.000000000 +0100
+++ libc/stdlib/strtol_l.c	2006-08-08 14:21:19.000000000 +0200
@@ -1,5 +1,5 @@
 /* Convert string representing a number to integer value, using given locale.
-   Copyright (C) 1997, 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2002, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -168,10 +168,15 @@
 /* Define tables of maximum values and remainders in order to detect
    overflow.  Do this at compile-time in order to avoid the runtime
    overhead of the division.  */
+extern const unsigned long __strtol_ul_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ul_rem_tab[] attribute_hidden;
+#if defined(QUAD) && __WORDSIZE == 32
+extern const unsigned long long __strtol_ull_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ull_rem_tab[] attribute_hidden;
+#endif
 
 #define DEF(TYPE, NAME)							   \
-  const TYPE NAME[] attribute_hidden					   \
-	__attribute__((section(".gnu.linkonce.r." #NAME))) =		   \
+  const TYPE NAME[] attribute_hidden =					   \
   {									   \
     F(2), F(3), F(4), F(5), F(6), F(7), F(8), F(9), F(10), 		   \
     F(11), F(12), F(13), F(14), F(15), F(16), F(17), F(18), F(19), F(20),  \
@@ -179,20 +184,22 @@
     F(31), F(32), F(33), F(34), F(35), F(36)				   \
   }
 
-#define F(X)	ULONG_MAX / X
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && !defined (QUAD)
+# define F(X)	ULONG_MAX / X
   DEF (unsigned long, __strtol_ul_max_tab);
-#undef F
-#if defined(QUAD) && __WORDSIZE == 32
+# undef F
+# define F(X)	ULONG_MAX % X
+  DEF (unsigned char, __strtol_ul_rem_tab);
+# undef F
+#endif
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && defined (QUAD) \
+    && __WORDSIZE == 32
 # define F(X)	ULONG_LONG_MAX / X
   DEF (unsigned long long, __strtol_ull_max_tab);
 # undef F
 # define F(X)	ULONG_LONG_MAX % X
   DEF (unsigned char, __strtol_ull_rem_tab);
 # undef F
-#else
-# define F(X)	ULONG_MAX % X
-  DEF (unsigned char, __strtol_ul_rem_tab);
-# undef F
 #endif
 #undef DEF
 

	Jakub

             reply	other threads:[~2006-08-08 13:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-08 13:22 Jakub Jelinek [this message]
2006-08-08 15:53 ` Ulrich Drepper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060808132217.GD4556@sunsite.mff.cuni.cz \
    --to=jakub@redhat.com \
    --cc=drepper@redhat.com \
    --cc=libc-hacker@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).