From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17199 invoked by alias); 12 Jul 2005 00:37:42 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 17169 invoked by uid 22791); 12 Jul 2005 00:37:36 -0000 Received: from mail-out4.apple.com (HELO mail-out4.apple.com) (17.254.13.23) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Tue, 12 Jul 2005 00:37:35 +0000 Received: from mailgate2.apple.com (a17-128-100-204.apple.com [17.128.100.204]) by mail-out4.apple.com (8.12.11/8.12.11) with ESMTP id j6C0bXVL029706 for ; Mon, 11 Jul 2005 17:37:33 -0700 (PDT) Received: from relay3.apple.com (relay3.apple.com) by mailgate2.apple.com (Content Technologies SMTPRS 4.3.17) with ESMTP id for ; Mon, 11 Jul 2005 17:37:33 -0700 Received: from [17.201.26.150] (il0102b-dhcp100.apple.com [17.201.26.150]) by relay3.apple.com (8.12.11/8.12.11) with ESMTP id j6C0bXFP004024 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for ; Mon, 11 Jul 2005 17:37:33 -0700 (PDT) Mime-Version: 1.0 (Apple Message framework v730) Content-Transfer-Encoding: 7bit Message-Id: Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed To: GCC Development From: Devang Patel Subject: Reducing debug info for C++ ctors/dtors Date: Tue, 12 Jul 2005 00:37:00 -0000 X-SW-Source: 2005-07/txt/msg00473.txt.bz2 Our analysis suggests that reducing certain stabs info for C++ ctors/ dtors can lead to significant final size reduction without noticeable change in quality of debugging (in STABS world, at least). For example, class Base1 { public: int x; Base1(int i) { x = i; } int getx (void) { return x; } }; int main () { Base1 myobj(5); return myobj.getx(); } will emit a class definition LSYM of .stabs "Base1:Tt(0,41)=s4x:(0,9),0,32;__base_ctor ::(0,42)=# (0,41),(0,36),(0,43)=*(0,41),(0,9),(0,36);:_ZN5Base1C2Ei; 2A.;__comp_ctor ::(0,42):_ZN5Base1C1Ei;2A.;getx::(0,44)=#(0,41),(0,9), (0,43),(0,36);:_ZN5Base14getxEv;2A.;;",128,0,1,0 However, it is good enough to have .stabs "Base1:Tt(0,41)=s4x:(0,9),0,32;getx::(0,44)=#(0,41), (0,9),(0,43)=*(0,41),(0,36);:_ZN5Base14getxEv;2A.;;",128,0,1,0 and keep the stabs for the cdtors in other contexts, most obviously the FUN stab where the function is defined. e.g. __ZN5Base1C1Ei: .stabd 46,0,0 .stabd 68,0,3 LFB4: stmw r30,-8(r1) [...] lmw r30,-8(r1) blr LFE4: .stabs "_ZN5Base1C1Ei:F(0,36)",36,0,3,__ZN5Base1C1Ei .stabs "this:p(0,45)=k(0,43)",160,0,3,72 .stabs "i:p(0,9)",160,0,3,76 Lscope0: .stabs "",36,0,0,Lscope0-__ZN5Base1C1Ei .stabd 78,0,0 Our GDB folks are still analyzing compiler output with included patch. Initial response is - it looks good. I'd like to get your feedback on this. Is it a good idea in general for other debugging formats also ? If peopler thinks this is a good idea then I can prepare patch for mainline. Do we need a switch to control this ? I do not know. If you can think of better name for this switch, feel free to suggest. - Devang [ I am intentionally including this patch to make it easier to read. This patch is against apple-local branch so it may not apply cleanly to FSF mainline. As I said, if this looks good then I'll prepare actual patch. ] Index: c-common.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-common.c,v retrieving revision 1.604.2.12 diff -Idpatel.pbxuser -c -3 -p -r1.604.2.12 c-common.c *** c-common.c 15 Jun 2005 16:18:32 -0000 1.604.2.12 --- c-common.c 11 Jul 2005 21:34:24 -0000 *************** int flag_access_control = 1; *** 454,459 **** --- 454,463 ---- int flag_check_new; + /* APPLE LOCAL begin 4167759 */ + /* Nonzero if we want to omit debug info for certain constructors and + destructors. */ + int flag_compact_debug_info; /* Nonzero if we want the new ISO rules for pushing a new scope for `for' initialization variables. 0: Old rules, set by -fno-for-scope. Index: c-common.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-common.h,v retrieving revision 1.276.6.9 diff -Idpatel.pbxuser -c -3 -p -r1.276.6.9 c-common.h *** c-common.h 23 Jun 2005 01:30:09 -0000 1.276.6.9 --- c-common.h 11 Jul 2005 21:34:24 -0000 *************** extern int flag_access_control; *** 579,584 **** --- 579,589 ---- extern int flag_check_new; + /* APPLE LOCAL begin 4167759 */ + /* Nonzero if we want to omit debug info for certain constructors and + destructors. */ + extern int flag_compact_debug_info; + /* APPLE LOCAL end 4167759 */ /* Nonzero if we want the new ISO rules for pushing a new scope for `for' initialization variables. 0: Old rules, set by -fno-for-scope. Index: c-opts.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/c-opts.c,v retrieving revision 1.135.6.8 diff -Idpatel.pbxuser -c -3 -p -r1.135.6.8 c-opts.c *** c-opts.c 1 Jul 2005 00:01:07 -0000 1.135.6.8 --- c-opts.c 11 Jul 2005 21:34:24 -0000 *************** c_common_handle_option (size_t scode, co *** 688,693 **** --- 688,698 ---- flag_check_new = value; break; + /* APPLE LOCAL begin 4167759 */ + case OPT_fcompact_debug_info: + flag_compact_debug_info = value; + break; + /* APPLE LOCAL end 4167759 */ case OPT_fconserve_space: flag_conserve_space = value; break; Index: c.opt =================================================================== RCS file: /cvs/gcc/gcc/gcc/c.opt,v retrieving revision 1.34.6.8 diff -Idpatel.pbxuser -c -3 -p -r1.34.6.8 c.opt *** c.opt 1 Jul 2005 00:01:08 -0000 1.34.6.8 --- c.opt 11 Jul 2005 21:34:24 -0000 *************** fcheck-new *** 572,577 **** --- 572,583 ---- C++ ObjC++ Check the return value of new + ; APPLE LOCAL begin 4167759 + fcompact-debug-info + C ObjC C++ ObjC++ + Avoid verbose debug info related to constructors and destructors + ; APPLE LOCAL end 4167759 + ; APPLE LOCAL begin structor decloning fclone-structors C++ ObjC++ Index: cp/class.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/class.c,v retrieving revision 1.705.2.4 diff -Idpatel.pbxuser -c -3 -p -r1.705.2.4 class.c *** cp/class.c 10 Jun 2005 18:46:07 -0000 1.705.2.4 --- cp/class.c 11 Jul 2005 21:34:25 -0000 *************** build_clone (tree fn, tree name) *** 3768,3773 **** --- 3768,3785 ---- DECL_VINDEX (clone) = NULL_TREE; } + /* APPLE LOCAL begin 4167759 */ + if (flag_compact_debug_info) + { + if (name == base_ctor_identifier + || name == complete_ctor_identifier + || name == complete_dtor_identifier + || name == base_dtor_identifier + || name == deleting_dtor_identifier) + DECL_IGNORED_P (clone) = 1; + } + /* APPLE LOCAL end 4167759 */ + /* If there was an in-charge parameter, drop it from the function type. */ if (DECL_HAS_IN_CHARGE_PARM_P (clone)) Index: cp/semantics.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/semantics.c,v retrieving revision 1.460.4.7 diff -Idpatel.pbxuser -c -3 -p -r1.460.4.7 semantics.c *** cp/semantics.c 10 Jun 2005 18:46:22 -0000 1.460.4.7 --- cp/semantics.c 11 Jul 2005 21:34:26 -0000 *************** expand_body (tree fn) *** 3015,3020 **** --- 3015,3026 ---- generating trees for a function. */ gcc_assert (function_depth == 0); + /* APPLE LOCAL begin 4167759 */ + if (DECL_NAME (fn) == complete_ctor_identifier + || DECL_NAME (fn) == complete_dtor_identifier) + DECL_IGNORED_P (fn) = 0; + /* APPLE LOCAL end 4167759 */ + tree_rest_of_compilation (fn); current_function_decl = saved_function;