From patchwork Mon Jun 21 22:20:38 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 56356 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 0D61DB6F06 for ; Tue, 22 Jun 2010 08:20:57 +1000 (EST) Received: (qmail 18025 invoked by alias); 21 Jun 2010 22:20:54 -0000 Received: (qmail 17975 invoked by uid 22791); 21 Jun 2010 22:20:53 -0000 X-SWARE-Spam-Status: No, hits=-5.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, SPF_HELO_PASS, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 21 Jun 2010 22:20:42 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o5LMKeHs015669 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 21 Jun 2010 18:20:40 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o5LMKe8Z002937; Mon, 21 Jun 2010 18:20:40 -0400 Received: from opsy.redhat.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id o5LMKd8i012208; Mon, 21 Jun 2010 18:20:39 -0400 Received: by opsy.redhat.com (Postfix, from userid 500) id 0D24A3792C6; Mon, 21 Jun 2010 16:20:39 -0600 (MDT) From: Tom Tromey To: gcc-patches@gcc.gnu.org Subject: RFA: don't emit .debug_pub* CC: Jakub Jelinek Reply-To: Tom Tromey Date: Mon, 21 Jun 2010 16:20:38 -0600 Message-ID: MIME-Version: 1.0 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 Currently, GCC emits .debug_pubnames and .debug_pubtypes. However, they are not used, except on Darwin. GCC didn't even generate pubtypes (except on Darwin) until recently (4.5 maybe); and in any case a combination of historical bugginess, GDB semantics, and lack of name canonicalization means that GDB is unlikely to ever read these sections. Also, to the best of my knowledge, no other program reads them. (And if a program does read them, it must do so defensively, because (1) they are not required and (2) have historically been very buggy for C++). This patch removes these sections. I left them for Darwin, which does seem to use them. I don't have a way to test on Darwin, but this bootstrapped and regtested on x86-64 Linux (compile farm). Ok? Tom 2010-06-21 Tom Tromey * config/darwin.h (TARGET_WANT_DEBUG_PUB_SECTIONS): Define. * target-def.h (TARGET_INITIALIZER): Update. (TARGET_WANT_DEBUG_PUB_SECTIONS): New define. * dwarf2out.c (add_pubname_string): Check targetm.want_debug_pub_sections. (add_pubname): Likewise. (add_pubtype): Likewise. * target.h (struct gcc_target) : New field. 2010-06-21 Tom Tromey * g++.dg/debug/dwarf2/pubnames-1.C: Add dg-do compile. Index: target.h =================================================================== --- target.h (revision 160567) +++ target.h (working copy) @@ -1284,6 +1284,11 @@ */ bool arm_eabi_unwinder; + /* True if the target wants .debug_pubtypes and .debug_pubnames. In + most cases these are not interesting, as GDB and other tools do + not use them. */ + bool want_debug_pub_sections; + /* Leave the boolean fields at the end. */ }; Index: testsuite/g++.dg/debug/dwarf2/pubnames-1.C =================================================================== --- testsuite/g++.dg/debug/dwarf2/pubnames-1.C (revision 160567) +++ testsuite/g++.dg/debug/dwarf2/pubnames-1.C (working copy) @@ -1,5 +1,6 @@ // Contributed by Dodji Seketeli // Origin PR debug/39706 +// { dg-do compile { target *-*-darwin* } } // { dg-options "-g -dA -fno-merge-debug-strings" } // { dg-do compile } // Index: dwarf2out.c =================================================================== --- dwarf2out.c (revision 160567) +++ dwarf2out.c (working copy) @@ -11080,17 +11080,20 @@ static void add_pubname_string (const char *str, dw_die_ref die) { - pubname_entry e; + if (targetm.want_debug_pub_sections) + { + pubname_entry e; - e.die = die; - e.name = xstrdup (str); - VEC_safe_push (pubname_entry, gc, pubname_table, &e); + e.die = die; + e.name = xstrdup (str); + VEC_safe_push (pubname_entry, gc, pubname_table, &e); + } } static void add_pubname (tree decl, dw_die_ref die) { - if (TREE_PUBLIC (decl)) + if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl)) { const char *name = dwarf2_name (decl, 1); if (name) @@ -11105,6 +11108,9 @@ { pubname_entry e; + if (!targetm.want_debug_pub_sections) + return; + e.name = NULL; if ((TREE_PUBLIC (decl) || die->die_parent == comp_unit_die) Index: target-def.h =================================================================== --- target-def.h (revision 160567) +++ target-def.h (working copy) @@ -680,6 +680,8 @@ #define TARGET_ARM_EABI_UNWINDER false +#define TARGET_WANT_DEBUG_PUB_SECTIONS false + #define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_false @@ -1085,7 +1087,8 @@ TARGET_ASM_FILE_START_FILE_DIRECTIVE, \ TARGET_HANDLE_PRAGMA_EXTERN_PREFIX, \ TARGET_RELAXED_ORDERING, \ - TARGET_ARM_EABI_UNWINDER \ + TARGET_ARM_EABI_UNWINDER, \ + TARGET_WANT_DEBUG_PUB_SECTIONS \ } #define TARGET_HANDLE_C_OPTION default_handle_c_option Index: config/darwin.h =================================================================== --- config/darwin.h (revision 160567) +++ config/darwin.h (working copy) @@ -471,6 +471,8 @@ #define DEBUG_STR_SECTION "__DWARF,__debug_str,regular,debug" #define DEBUG_RANGES_SECTION "__DWARF,__debug_ranges,regular,debug" +#define TARGET_WANT_DEBUG_PUB_SECTIONS true + /* When generating stabs debugging, use N_BINCL entries. */ #define DBX_USE_BINCL