From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1021 invoked by alias); 17 Aug 2003 23:16:01 -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 993 invoked from network); 17 Aug 2003 23:15:53 -0000 Received: from unknown (HELO walton.kettenis.dyndns.org) (213.93.115.144) by sources.redhat.com with SMTP; 17 Aug 2003 23:15:53 -0000 Received: from elgar.kettenis.dyndns.org (elgar.kettenis.dyndns.org [192.168.0.2]) by walton.kettenis.dyndns.org (8.12.6p2/8.12.5) with ESMTP id h7HNFeCH009662; Mon, 18 Aug 2003 01:15:40 +0200 (CEST) (envelope-from kettenis@elgar.kettenis.dyndns.org) Received: from elgar.kettenis.dyndns.org (localhost [127.0.0.1]) by elgar.kettenis.dyndns.org (8.12.6p2/8.12.6) with ESMTP id h7HNFeF7040963; Mon, 18 Aug 2003 01:15:40 +0200 (CEST) (envelope-from kettenis@elgar.kettenis.dyndns.org) Received: (from kettenis@localhost) by elgar.kettenis.dyndns.org (8.12.6p2/8.12.6/Submit) id h7HNFeFT040960; Mon, 18 Aug 2003 01:15:40 +0200 (CEST) Date: Sun, 17 Aug 2003 23:16:00 -0000 Message-Id: <200308172315.h7HNFeFT040960@elgar.kettenis.dyndns.org> From: Mark Kettenis To: gdb-patches@sources.redhat.com CC: mec@shout.net Subject: [PATCH] Improve i386 prologue analyzer X-SW-Source: 2003-08/txt/msg00283.txt.bz2 Picking some low-hanging fruit :-). This probably fixes PR backtrace/1338. I'll be checking this in on the branch if Michael confirms that this fixes the bug. I'll add a testcase shortly. Mark Index: ChangeLog from Mark Kettenis * i386-tdep.c (i386_analyze_register_saves): Handle register saves at the start of a frameless function. This probably fixes PR backtrace/1338. Index: i386-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/i386-tdep.c,v retrieving revision 1.165 diff -u -p -r1.165 i386-tdep.c --- i386-tdep.c 12 Aug 2003 16:12:33 -0000 1.165 +++ i386-tdep.c 17 Aug 2003 23:11:19 -0000 @@ -571,23 +571,22 @@ static CORE_ADDR i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache) { - if (cache->locals >= 0) - { - CORE_ADDR offset; - unsigned char op; - int i; + CORE_ADDR offset = 0; + unsigned char op; + int i; - offset = - 4 - cache->locals; - for (i = 0; i < 8 && pc < current_pc; i++) - { - op = read_memory_unsigned_integer (pc, 1); - if (op < 0x50 || op > 0x57) - break; + if (cache->locals > 0) + offset -= cache->locals; + for (i = 0; i < 8 && pc < current_pc; i++) + { + op = read_memory_unsigned_integer (pc, 1); + if (op < 0x50 || op > 0x57) + break; - cache->saved_regs[op - 0x50] = offset; - offset -= 4; - pc++; - } + offset -= 4; + cache->saved_regs[op - 0x50] = offset; + cache->sp_offset += 4; + pc++; } return pc;