From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5210 invoked by alias); 10 Jan 2002 12:26:51 -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 5167 invoked from network); 10 Jan 2002 12:26:47 -0000 Received: from unknown (HELO prospero.cambridge.redhat.com) (62.30.164.150) by sources.redhat.com with SMTP; 10 Jan 2002 12:26:47 -0000 Received: (from jason@localhost) by prospero.cambridge.redhat.com (8.11.6/8.11.6) id g0ACQYJ07797; Thu, 10 Jan 2002 12:26:34 GMT X-Authentication-Warning: localhost.localdomain: jason set sender to jason@redhat.com using -f To: gdb-patches@sources.redhat.com Cc: Jason Merrill Subject: PATCH to dwarf2read.c:decode_locdesc From: Jason Merrill Date: Thu, 10 Jan 2002 04:26:00 -0000 Message-ID: User-Agent: Gnus/5.090004 (Oort Gnus v0.04) Emacs/21.1 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-SW-Source: 2002-01/txt/msg00221.txt.bz2 --=-=-= Content-length: 924 I noticed that even with Daniel's recent C++ improvements (thanks!), vbase handling was still broken with dwarf2 because dwarf2read.c still didn't grok the complex location expression gcc now emits. As it happens, by a fluke simply adding support for the missing opcodes causes decode_locdesc to produce the answer gdb wants. The dwarf2 output expects the stack to start with the address of the object and produce the address of the base, whereas in the current gdb the stack starts with 0 and produces the negation of whatever constant is provided, which matches the stabs output. Of course, gdb tries to complain about the derefs twice in the process, but is currently muffled. So, it's not a complete solution, but it's entirely correct and fixes gdb.c++/inherit.exp. OK to commit? 2002-01-10 Jason Merrill * dwarf2read.c (decode_locdesc): Implement DW_OP_litn, DW_OP_dup. Fix DW_OP_minus. --=-=-= Content-Type: text/x-patch Content-Disposition: inline Content-length: 1634 *** dwarf2read.c.~1~ Tue Jan 8 14:17:30 2002 --- dwarf2read.c Thu Jan 10 11:54:45 2002 *************** decode_locdesc (struct dwarf_block *blk, *** 5807,5812 **** --- 5807,5847 ---- op = data[i++]; switch (op) { + case DW_OP_lit0: + case DW_OP_lit1: + case DW_OP_lit2: + case DW_OP_lit3: + case DW_OP_lit4: + case DW_OP_lit5: + case DW_OP_lit6: + case DW_OP_lit7: + case DW_OP_lit8: + case DW_OP_lit9: + case DW_OP_lit10: + case DW_OP_lit11: + case DW_OP_lit12: + case DW_OP_lit13: + case DW_OP_lit14: + case DW_OP_lit15: + case DW_OP_lit16: + case DW_OP_lit17: + case DW_OP_lit18: + case DW_OP_lit19: + case DW_OP_lit20: + case DW_OP_lit21: + case DW_OP_lit22: + case DW_OP_lit23: + case DW_OP_lit24: + case DW_OP_lit25: + case DW_OP_lit26: + case DW_OP_lit27: + case DW_OP_lit28: + case DW_OP_lit29: + case DW_OP_lit30: + case DW_OP_lit31: + stack[++stacki] = op - DW_OP_lit0; + break; + case DW_OP_reg0: case DW_OP_reg1: case DW_OP_reg2: *************** decode_locdesc (struct dwarf_block *blk, *** 5965,5970 **** --- 6000,6010 ---- i += bytes_read; break; + case DW_OP_dup: + stack[stacki + 1] = stack[stacki]; + stacki++; + break; + case DW_OP_plus: stack[stacki - 1] += stack[stacki]; stacki--; *************** decode_locdesc (struct dwarf_block *blk, *** 5976,5982 **** break; case DW_OP_minus: ! stack[stacki - 1] = stack[stacki] - stack[stacki - 1]; stacki--; break; --- 6016,6022 ---- break; case DW_OP_minus: ! stack[stacki - 1] -= stack[stacki]; stacki--; break; --=-=-=--