From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14301 invoked by alias); 16 Mar 2007 18:59:12 -0000 Received: (qmail 14281 invoked by uid 22791); 16 Mar 2007 18:59:11 -0000 X-Spam-Check-By: sourceware.org Received: from sunsite.ms.mff.cuni.cz (HELO sunsite.mff.cuni.cz) (195.113.15.26) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 16 Mar 2007 18:59:03 +0000 Received: from sunsite.mff.cuni.cz (localhost.localdomain [127.0.0.1]) by sunsite.mff.cuni.cz (8.13.8/8.13.8) with ESMTP id l2GJ2q99030385; Fri, 16 Mar 2007 20:02:52 +0100 Received: (from jakub@localhost) by sunsite.mff.cuni.cz (8.13.8/8.13.8/Submit) id l2GJ2qCA030376; Fri, 16 Mar 2007 20:02:52 +0100 Date: Fri, 16 Mar 2007 18:59:00 -0000 From: Jakub Jelinek To: Ulrich Drepper Cc: Glibc hackers Subject: [PATCH] Small glibc fixes Message-ID: <20070316190251.GS1826@sunsite.mff.cuni.cz> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.2i Mailing-List: contact libc-hacker-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sourceware.org X-SW-Source: 2007-03/txt/msg00027.txt.bz2 Hi! While building glibc with gcc 4.3 I looked at a few warnings (some new with 4.3, some older). dl_open_worker reported an uninitialized variable, because DL_DST_REQ_STATIC used l var, but that wasn't passed through as macro argument. All other users of DL_DST_REQUIRED passed l as first argument to it, so it made no difference, but dl_open_worker does not. I have rearranged the code so that without dl-dst.h fix it actually errored out - l was used independently in 2 different scopes. include/dlfcn.h is included with #define link_map link_map_public and that struct isn't declared yet, so gcc was warning. gcc 4.3 now complains about (socklen_t) (((struct sockaddr_un *) NULL)->sun_path) claiming a pointer on 64-bit target is truncated to 32-bit int. It was a fancy way of writing offsetof anyway. tst-mktime2.c actually got killed when compiled with gcc 4.3, which assumed the loop will never wrap and so after calling the function with INT_MAX/2+1 it called it with INT_MIN and then forever with 0. _itoa is now a macro, so when vfwprintf wants to redefine to _itowa, it should undef it first. And lastly, strerror_l was using free, but didn't have a prototype for that. 2007-03-16 Jakub Jelinek * elf/dl-open.c (dl_open_worker): Declare l in 2 different smaller scopes. * elf/dl-dst.h (DL_DST_REQ_STATIC): Add l as macro argument. (DL_DST_REQUIRED): Adjust user. * include/dlfcn.h (struct link_map): New forward decl. * inet/getnameinfo.c: Include stddef.h. (getnameinfo): Use offsetof. * time/tst-mktime2.c (do_test): Don't rely on signed wrap. * stdio-common/vfprintf.c (_itoa): Undef before redefining. * string/strerror_l.c: Include stdlib.h. --- libc/elf/dl-open.c.jj 2007-03-16 18:26:45.000000000 +0100 +++ libc/elf/dl-open.c 2007-03-16 18:26:45.000000000 +0100 @@ -161,7 +161,7 @@ dl_open_worker (void *a) struct dl_open_args *args = a; const char *file = args->file; int mode = args->mode; - struct link_map *new, *l; + struct link_map *new; int lazy; unsigned int i; bool any_tls = false; @@ -186,6 +186,7 @@ dl_open_worker (void *a) By default we assume this is the main application. */ call_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded; + struct link_map *l; for (Lmid_t ns = 0; ns < DL_NNS; ++ns) for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next) if (caller_dlopen >= (const void *) l->l_map_start @@ -325,7 +326,7 @@ dl_open_worker (void *a) /* Relocate the objects loaded. We do this in reverse order so that copy relocs of earlier objects overwrite the data written by later objects. */ - l = new; + struct link_map *l = new; while (l->l_next) l = l->l_next; while (1) --- libc/elf/dl-dst.h.jj 2006-10-19 17:28:02.000000000 +0200 +++ libc/elf/dl-dst.h 2007-03-16 19:21:29.000000000 +0100 @@ -1,5 +1,6 @@ /* Handling of dynamic sring tokens. - Copyright (C) 1999,2001,2002,2003,2004,2006 Free Software Foundation, Inc. + Copyright (C) 1999,2001,2002,2003,2004,2006,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -50,7 +51,7 @@ \ First get the origin string if it is not available yet. \ This can only happen for the map of the executable. */ \ - DL_DST_REQ_STATIC \ + DL_DST_REQ_STATIC (l) \ if ((l)->l_origin == NULL) \ { \ assert ((l)->l_name[0] == '\0'); \ @@ -68,9 +69,9 @@ __len; }) #ifdef SHARED -# define DL_DST_REQ_STATIC /* nothing */ +# define DL_DST_REQ_STATIC(l) /* nothing */ #else -# define DL_DST_REQ_STATIC \ +# define DL_DST_REQ_STATIC(l) \ if ((l) == NULL) \ { \ const char *origin = _dl_get_origin (); \ --- libc/include/dlfcn.h.jj 2006-10-31 23:05:31.000000000 +0100 +++ libc/include/dlfcn.h 2007-03-16 18:30:41.000000000 +0100 @@ -45,6 +45,8 @@ extern int _dl_addr (const void *address libc_hidden_proto (_dl_addr) #endif +struct link_map; + /* Close an object previously opened by _dl_open. */ extern void _dl_close (void *map) attribute_hidden; /* Same as above, but without locking and safety checks for user --- libc/inet/getnameinfo.c.jj 2006-08-28 18:23:18.000000000 +0200 +++ libc/inet/getnameinfo.c 2007-03-16 18:24:16.000000000 +0100 @@ -38,6 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI #include #include #include +#include #include #include #include @@ -180,7 +181,7 @@ getnameinfo (const struct sockaddr *sa, switch (sa->sa_family) { case AF_LOCAL: - if (addrlen < (socklen_t) (((struct sockaddr_un *) NULL)->sun_path)) + if (addrlen < (socklen_t) offsetof (struct sockaddr_un, sun_path)) return EAI_FAMILY; break; case AF_INET: --- libc/time/tst-mktime2.c.jj 2004-12-01 20:55:52.000000000 +0100 +++ libc/time/tst-mktime2.c 2007-03-16 17:42:27.000000000 +0100 @@ -102,7 +102,8 @@ static int do_test (void) { time_t t, delta; - int i, j; + int i; + unsigned int j; setenv ("TZ", "America/Sao_Paulo", 1); /* This test makes some buggy mktime implementations loop. @@ -128,7 +129,7 @@ do_test (void) mktime_test ((time_t) (60 * 60)); mktime_test ((time_t) (60 * 60 * 24)); - for (j = 1; 0 < j; j *= 2) + for (j = 1; j <= INT_MAX; j *= 2) bigtime_test (j); bigtime_test (j - 1); } --- libc/stdio-common/vfprintf.c.jj 2007-01-22 16:47:39.000000000 +0100 +++ libc/stdio-common/vfprintf.c 2007-03-16 18:15:18.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006 +/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -99,6 +99,7 @@ # define PUTC(C, F) _IO_putwc_unlocked (C, F) # define ORIENT if (_IO_fwide (s, 1) != 1) return -1 +# undef _itoa # define _itoa(Val, Buf, Base, Case) _itowa (Val, Buf, Base, Case) # define _itoa_word(Val, Buf, Base, Case) _itowa_word (Val, Buf, Base, Case) # undef EOF --- libc/string/strerror_l.c.jj 2007-02-01 17:08:31.000000000 +0100 +++ libc/string/strerror_l.c 2007-03-16 18:17:33.000000000 +0100 @@ -19,6 +19,7 @@ #include #include #include +#include #include #include Jakub