From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6102 invoked by alias); 26 Apr 2002 14:54:50 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 6029 invoked from network); 26 Apr 2002 14:54:47 -0000 Received: from unknown (HELO kerberos.suse.cz) (195.47.106.10) by sources.redhat.com with SMTP; 26 Apr 2002 14:54:47 -0000 Received: from chimera.suse.cz (chimera.suse.cz [10.20.0.2]) by kerberos.suse.cz (SuSE SMTP server) with ESMTP id 92C3059D35E for ; Fri, 26 Apr 2002 16:54:46 +0200 (CEST) Received: from suse.cz (leviathan.suse.cz [10.20.1.56]) by chimera.suse.cz (8.11.0/8.11.0/SuSE Linux 8.11.0-0.4) with ESMTP id g3QEskf07991 for ; Fri, 26 Apr 2002 16:54:46 +0200 X-Authentication-Warning: chimera.suse.cz: Host leviathan.suse.cz [10.20.1.56] claimed to be suse.cz Message-ID: <3CC96A2D.5000203@suse.cz> Date: Fri, 26 Apr 2002 07:54:00 -0000 From: Michal Ludvig Organization: SuSE CR User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0rc1) Gecko/20020417 X-Accept-Language: cs, cz, en MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [RFA] Simple patch for x86-64 (can go to 5.2?) Content-Type: multipart/mixed; boundary="------------090406040707070809050808" X-SW-Source: 2002-04/txt/msg01083.txt.bz2 This is a multi-part message in MIME format. --------------090406040707070809050808 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 996 This patch is a really simple one without any side-effects. The problem is, that gcc for x86-64 by default has -fomit-frame-pointer switched on when optimalization is requested. People don't know it and are complaining that (diplomaticaly said) "gdb doesn't work" (depending on their attitude :-). The only thing this patch does is, that it prints a note, when x86_64_skip_prologue doesn't see "push %rbp" as the very first instruction of a given function. The note is printed only once. That's all. I'd like to see it in 5.2 to teach people that they should explicitly use -fno-omit-frame-pointer when compiling a code for debugging. Can I commit? I'll remove this note as soon as I fix dwarf2 reader to handle even optimized code. 2002-04-26 Michal Ludvig * x86-64-tdep.c (x86_64_skip_prologue): Print note when debugging code without frame pointers. Michal Ludvig -- * SuSE CR, s.r.o * mludvig@suse.cz * +420 2 9654 5373 * http://www.suse.cz --------------090406040707070809050808 Content-Type: text/plain; name="omitfp1.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="omitfp1.diff" Content-length: 1861 Index: x86-64-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/x86-64-tdep.c,v retrieving revision 1.13 diff -c -3 -p -r1.13 x86-64-tdep.c *** x86-64-tdep.c 6 Apr 2002 00:02:50 -0000 1.13 --- x86-64-tdep.c 26 Apr 2002 14:06:54 -0000 *************** static struct register_info x86_64_regis *** 116,121 **** --- 116,124 ---- int x86_64_num_regs = X86_64_NUM_REGS; int x86_64_num_gregs = X86_64_NUM_GREGS; + /* Did we already print a note about frame pointer? */ + int omit_fp_note_printed = 0; + /* Number of bytes of storage in the actual machine representation for register REGNO. */ int *************** x86_64_skip_prologue (CORE_ADDR pc) *** 811,820 **** read_memory (pc, (char *) prolog_buf, PROLOG_BUFSIZE); ! /* First check, whether pc points to pushq %rbp, movq %rsp,%rbp. */ ! for (i = 0; i < PROLOG_BUFSIZE; i++) ! if (prolog_expect[i] != prolog_buf[i]) return pc; v_function = find_pc_function (pc); v_sal = find_pc_line (pc, 0); --- 814,836 ---- read_memory (pc, (char *) prolog_buf, PROLOG_BUFSIZE); ! /* First check, whether pc points to pushq %rbp. If not, ! * print a recommendation to enable frame pointer. */ ! if (prolog_expect[0] != prolog_buf[0]) ! { ! if (!omit_fp_note_printed) ! { ! printf_filtered ! ("NOTE: This function doesn't seem to have a valid prologue.\n" ! " Try to add -fno-omit-frame-pointer tou your gcc's CFLAGS.\n"); ! omit_fp_note_printed++; ! } return pc; + } + /* Valid prolog continues with movq %rsp,%rbp. */ + for (i = 1; i < PROLOG_BUFSIZE; i++) + if (prolog_expect[i] != prolog_buf[i]) + return pc + 1; /* First instruction after pushq %rbp. */ v_function = find_pc_function (pc); v_sal = find_pc_line (pc, 0); --------------090406040707070809050808--