From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6133 invoked by alias); 20 May 2010 15:30:01 -0000 Received: (qmail 6123 invoked by uid 22791); 20 May 2010 15:29:59 -0000 X-SWARE-Spam-Status: No, hits=-5.7 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 20 May 2010 15:29:47 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o4KFTj63019573 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 20 May 2010 11:29:45 -0400 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o4KFThfQ031000 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 20 May 2010 11:29:45 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id o4KFTgqk024292; Thu, 20 May 2010 17:29:42 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id o4KFTg4P024291; Thu, 20 May 2010 17:29:42 +0200 Date: Thu, 20 May 2010 15:50:00 -0000 From: Jan Kratochvil To: Sergio Durigan Junior Cc: gdb-patches@sourceware.org Subject: Re: [PATCH] Forbid watchpoint on a constant value Message-ID: <20100520152941.GA19950@host0.dyn.jankratochvil.net> References: <201005181418.24324.sergiodj@redhat.com> <201005182043.00433.sergiodj@redhat.com> <20100519194322.GA32728@host0.dyn.jankratochvil.net> <201005200210.27056.sergiodj@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201005200210.27056.sergiodj@redhat.com> User-Agent: Mutt/1.5.20 (2009-08-17) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-05/txt/msg00417.txt.bz2 On Thu, 20 May 2010 07:10:26 +0200, Sergio Durigan Junior wrote: > I also added other constant types to that switch statement. Please take a look > and see if you agree. [...] > + /* The user could provide something like: > + > + `watch *0xdeadbeef + 4' > + > + In this case, we need to check the remaining elements > + of this expression. */ > + case BINOP_ADD: If you have overloaded operator '+' of some class cannot this operation execute an inferior function via value_x_binop()? Maybe it is not exploitable, I am not sure. > + case BINOP_ASSIGN: > + case BINOP_ASSIGN_MODIFY: > + case OP_FUNCALL: > + case OP_OBJC_MSGCALL: > + case OP_F77_UNDETERMINED_ARGLIST: > + case UNOP_PREINCREMENT: > + case UNOP_POSTINCREMENT: > + case UNOP_PREDECREMENT: > + case UNOP_POSTDECREMENT: This is not a `const'/`pure' function, it has some side-effect of the assignment. I do not thing they should be caught as constant. Offtopic here: they could be rather somehow forbidden from a watchpoint expression, moreover if it gets evaluated as a hardware watchpoint but that is already broken by incorrect/naive assumptions as filed in: PR breakpoints/11613: hardware watchpoint missed for -O2 -g inferior > + case BINOP_SUBSCRIPT: This is a regression: ./gdb -nx -ex 'p &line' -ex 'watch $0[0]' -ex r ./gdb now prints: Cannot watch constant value $0[0]. but it was a valid watchpoint, hit at: captured_main (data=0x7fffffffd1c0) at ./main.c:322 > + case BINOP_VAL: > + case BINOP_INCL: > + case BINOP_EXCL: > + case UNOP_PLUS: > + case UNOP_CAP: > + case UNOP_CHR: > + case UNOP_ORD: > + case UNOP_ABS: > + case UNOP_FLOAT: > + case UNOP_MAX: > + case UNOP_MIN: > + case UNOP_ODD: > + case UNOP_TRUNC: I do not see implemented evaluation of these, also their processing should have been probably moved to some m2-* file. > + case UNOP_LOWER: > + case UNOP_UPPER: > + case UNOP_LENGTH: > + case UNOP_CARD: > + case UNOP_CHMAX: > + case UNOP_CHMIN: I do not see implemented evaluation of these, also their processing should have been probably moved to ... the already deleted Chill support files. > + case OP_LAST: For values <=0 it will change, it is not a constant. > + case OP_INTERNALVAR: I would guess value of some of the internal variables can change. > + /* UNOP_IND and UNOP_ADDR are not in this list becase > + they can be used in expressions like: > + > + (gdb) watch *0x12345678 > + > + or > + > + (gdb) watch &some_var > + */ I do not see why UNOP_ADDR should not be listed here (but sure not a problem). > + case UNOP_SIZEOF: UNOP_SIZEOF on OP_TYPE where the type is TYPE_DYNAMIC from the VLA patchset would be a regression; but that is not in FSF GDB so it is OK now. > + case UNOP_HIGH: If it really should be here it could be moved into m2-* but this separation is already not strictly followed. Thanks, Jan