From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28792 invoked by alias); 14 Feb 2004 19:46:23 -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 28785 invoked from network); 14 Feb 2004 19:46:21 -0000 Received: from unknown (HELO localhost.redhat.com) (24.157.170.238) by sources.redhat.com with SMTP; 14 Feb 2004 19:46:21 -0000 Received: from gnu.org (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id A364E2B97; Sat, 14 Feb 2004 14:46:20 -0500 (EST) Message-ID: <402E7B0C.8030409@gnu.org> Date: Sat, 14 Feb 2004 19:46:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030820 MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [patch/rfc] Move skip_prologue_using_sal to symtab.c Content-Type: multipart/mixed; boundary="------------060100010409040908010801" X-SW-Source: 2004-02/txt/msg00369.txt.bz2 This is a multi-part message in MIME format. --------------060100010409040908010801 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 321 Hello, This patch moves the two identical versions of skip_prologue_using_sal, found in both mips-tdep and frv-tdep, into symtab.c (just after in_prologue). I've also added comments to the two refine_prologue_limit variants (found in ia64-tdep and rs6000-tdep) pointing at the new code. comments? symtab ok? Andrew --------------060100010409040908010801 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 9401 2004-02-14 Andrew Cagney * symtab.c (skip_prologue_using_sal): New function. * symtab.h (skip_prologue_using_sal): Declare. * frv-tdep.c (skip_prologue_using_sal): Delete function. * mips-tdep.c (skip_prologue_using_sal): Delete function. * rs6000-tdep.c (refine_prologue_limit): Mention skip_prologue_using_sal. * ia64-tdep.c (refine_prologue_limit): Ditto. Index: frv-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/frv-tdep.c,v retrieving revision 1.70 diff -u -r1.70 frv-tdep.c --- frv-tdep.c 14 Feb 2004 15:46:33 -0000 1.70 +++ frv-tdep.c 14 Feb 2004 19:28:42 -0000 @@ -414,62 +414,6 @@ return (8 <= reg && reg <= 13); } -/* Given PC at the function's start address, attempt to find the - prologue end using SAL information. Return zero if the skip fails. - - A non-optimized prologue traditionally has one SAL for the function - and a second for the function body. A single line function has - them both pointing at the same line. - - An optimized prologue is similar but the prologue may contain - instructions (SALs) from the instruction body. Need to skip those - while not getting into the function body. - - The functions end point and an increasing SAL line are used as - indicators of the prologue's endpoint. - - This code is based on the function refine_prologue_limit (versions - found in both ia64 and ppc). */ - -static CORE_ADDR -skip_prologue_using_sal (CORE_ADDR func_addr) -{ - struct symtab_and_line prologue_sal; - CORE_ADDR start_pc; - CORE_ADDR end_pc; - - /* Get an initial range for the function. */ - find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc); - start_pc += FUNCTION_START_OFFSET; - - prologue_sal = find_pc_line (start_pc, 0); - if (prologue_sal.line != 0) - { - while (prologue_sal.end < end_pc) - { - struct symtab_and_line sal; - - sal = find_pc_line (prologue_sal.end, 0); - if (sal.line == 0) - break; - /* Assume that a consecutive SAL for the same (or larger) - line mark the prologue -> body transition. */ - if (sal.line >= prologue_sal.line) - break; - /* The case in which compiler's optimizer/scheduler has - moved instructions into the prologue. We look ahead in - the function looking for address ranges whose - corresponding line number is less the first one that we - found for the function. This is more conservative then - refine_prologue_limit which scans a large number of SALs - looking for any in the prologue */ - prologue_sal = sal; - } - } - return prologue_sal.end; -} - - /* Scan an FR-V prologue, starting at PC, until frame->PC. If FRAME is non-zero, fill in its saved_regs with appropriate addresses. We assume FRAME's saved_regs array has already been allocated and cleared. Index: ia64-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/ia64-tdep.c,v retrieving revision 1.114 diff -u -r1.114 ia64-tdep.c --- ia64-tdep.c 14 Feb 2004 15:46:33 -0000 1.114 +++ ia64-tdep.c 14 Feb 2004 19:28:47 -0000 @@ -930,6 +930,9 @@ used with no further scanning in the event that the function is frameless. */ +/* FIXME: cagney/2004-02-14: This function and logic have largely been + superseeded by skip_prologue_using_sal. */ + static CORE_ADDR refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit) { Index: mips-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/mips-tdep.c,v retrieving revision 1.282 diff -u -r1.282 mips-tdep.c --- mips-tdep.c 11 Feb 2004 18:47:26 -0000 1.282 +++ mips-tdep.c 14 Feb 2004 19:28:52 -0000 @@ -4564,62 +4564,6 @@ extract_unsigned_integer (buf, MIPS_INSTLEN)); } - -/* Given PC at the function's start address, attempt to find the - prologue end using SAL information. Return zero if the skip fails. - - A non-optimized prologue traditionally has one SAL for the function - and a second for the function body. A single line function has - them both pointing at the same line. - - An optimized prologue is similar but the prologue may contain - instructions (SALs) from the instruction body. Need to skip those - while not getting into the function body. - - The functions end point and an increasing SAL line are used as - indicators of the prologue's endpoint. - - This code is based on the function refine_prologue_limit (versions - found in both ia64 and ppc). */ - -static CORE_ADDR -skip_prologue_using_sal (CORE_ADDR func_addr) -{ - struct symtab_and_line prologue_sal; - CORE_ADDR start_pc; - CORE_ADDR end_pc; - - /* Get an initial range for the function. */ - find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc); - start_pc += FUNCTION_START_OFFSET; - - prologue_sal = find_pc_line (start_pc, 0); - if (prologue_sal.line != 0) - { - while (prologue_sal.end < end_pc) - { - struct symtab_and_line sal; - - sal = find_pc_line (prologue_sal.end, 0); - if (sal.line == 0) - break; - /* Assume that a consecutive SAL for the same (or larger) - line mark the prologue -> body transition. */ - if (sal.line >= prologue_sal.line) - break; - /* The case in which compiler's optimizer/scheduler has - moved instructions into the prologue. We look ahead in - the function looking for address ranges whose - corresponding line number is less the first one that we - found for the function. This is more conservative then - refine_prologue_limit which scans a large number of SALs - looking for any in the prologue */ - prologue_sal = sal; - } - } - return prologue_sal.end; -} - /* Skip the PC past function prologue instructions (32-bit version). This is a helper function for mips_skip_prologue. */ Index: rs6000-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v retrieving revision 1.179 diff -u -r1.179 rs6000-tdep.c --- rs6000-tdep.c 14 Feb 2004 15:46:33 -0000 1.179 +++ rs6000-tdep.c 14 Feb 2004 19:29:07 -0000 @@ -425,6 +425,10 @@ the line data in the symbol table. If successful, a better guess on where the prologue ends is returned, otherwise the previous value of lim_pc is returned. */ + +/* FIXME: cagney/2004-02-14: This function and logic have largely been + superseeded by skip_prologue_using_sal. */ + static CORE_ADDR refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc) { Index: symtab.c =================================================================== RCS file: /cvs/src/src/gdb/symtab.c,v retrieving revision 1.126 diff -u -r1.126 symtab.c --- symtab.c 7 Feb 2004 23:13:47 -0000 1.126 +++ symtab.c 14 Feb 2004 19:29:11 -0000 @@ -3860,6 +3860,60 @@ return func_addr <= pc && pc < sal.end; } +/* Given PC at the function's start address, attempt to find the + prologue end using SAL information. Return zero if the skip fails. + + A non-optimized prologue traditionally has one SAL for the function + and a second for the function body. A single line function has + them both pointing at the same line. + + An optimized prologue is similar but the prologue may contain + instructions (SALs) from the instruction body. Need to skip those + while not getting into the function body. + + The functions end point and an increasing SAL line are used as + indicators of the prologue's endpoint. + + This code is based on the function refine_prologue_limit (versions + found in both ia64 and ppc). */ + +CORE_ADDR +skip_prologue_using_sal (CORE_ADDR func_addr) +{ + struct symtab_and_line prologue_sal; + CORE_ADDR start_pc; + CORE_ADDR end_pc; + + /* Get an initial range for the function. */ + find_pc_partial_function (func_addr, NULL, &start_pc, &end_pc); + start_pc += FUNCTION_START_OFFSET; + + prologue_sal = find_pc_line (start_pc, 0); + if (prologue_sal.line != 0) + { + while (prologue_sal.end < end_pc) + { + struct symtab_and_line sal; + + sal = find_pc_line (prologue_sal.end, 0); + if (sal.line == 0) + break; + /* Assume that a consecutive SAL for the same (or larger) + line mark the prologue -> body transition. */ + if (sal.line >= prologue_sal.line) + break; + /* The case in which compiler's optimizer/scheduler has + moved instructions into the prologue. We look ahead in + the function looking for address ranges whose + corresponding line number is less the first one that we + found for the function. This is more conservative then + refine_prologue_limit which scans a large number of SALs + looking for any in the prologue */ + prologue_sal = sal; + } + } + return prologue_sal.end; +} struct symtabs_and_lines decode_line_spec (char *string, int funfirstline) Index: symtab.h =================================================================== RCS file: /cvs/src/src/gdb/symtab.h,v retrieving revision 1.87 diff -u -r1.87 symtab.h --- symtab.h 7 Feb 2004 23:13:47 -0000 1.87 +++ symtab.h 14 Feb 2004 19:29:33 -0000 @@ -1318,6 +1318,8 @@ extern int in_prologue (CORE_ADDR pc, CORE_ADDR func_start); +extern CORE_ADDR skip_prologue_using_sal (CORE_ADDR func_addr); + extern struct symbol *fixup_symbol_section (struct symbol *, struct objfile *); --------------060100010409040908010801--