From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 60574 invoked by alias); 8 Feb 2017 12:06:45 -0000 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 Received: (qmail 60553 invoked by uid 89); 8 Feb 2017 12:06:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.4 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=Alan.Hayward@arm.com, sk:alan.ha, alanhaywardarmcom, sk:AlanHa X-HELO: mail-qk0-f196.google.com Received: from mail-qk0-f196.google.com (HELO mail-qk0-f196.google.com) (209.85.220.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 08 Feb 2017 12:06:34 +0000 Received: by mail-qk0-f196.google.com with SMTP id u25so17347325qki.2 for ; Wed, 08 Feb 2017 04:06:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=vzenT7hdf0HIGIqAM2OaVkZ7f88in93SzbYAs7i0RA0=; b=kjU520E+w3+hvsoInz232uFEa/Kie+gRsKd3OxHTY+HjwqrRZsVBsqXNjH4yZyAs1s bVUOpVlC9V2QjWimyDYlqPvBgPUF1DIkOJ0TujZEz2vQrbct2j2x7h9XmVwGcd1IAwFG JopK5uVLAUeOiNuJ3OVVlFNZbQ6WFwkwfmfb03qFNMLnuQTohpKsrBqIopMlBD8Bxqkc GjYuFTEygQ3x1VXym1GViRvs2HPAShxF7ykeeyH+wUzJVUMl+5rMKu01qhg0o1awDq68 c1zr8yrWMZQDVgM9sPj2o3h8+LYSP/AIJsicd2ugbPmed/hUvbyDJdBm6KhuLkIY7u3e rs0A== X-Gm-Message-State: AMke39mvOY1dSUB5uLtXqIyll66TGqwBN5VEu5fh4ALOUlKTUiPFv2AjXvWULaSZIkuoIYVhq8X5ZIk0FrSIzg== X-Received: by 10.55.137.7 with SMTP id l7mr20999675qkd.11.1486555592767; Wed, 08 Feb 2017 04:06:32 -0800 (PST) MIME-Version: 1.0 Received: by 10.12.140.194 with HTTP; Wed, 8 Feb 2017 04:06:32 -0800 (PST) In-Reply-To: <5F3D30AE-9A53-493A-B6DC-DF594C2FAB18@arm.com> References: <45e3a5e1-a9aa-1bc0-5d08-526b89fc458e@redhat.com> <20170201124123.GA27498@E107787-LIN> <20170202094012.dge4r6rsl2skdrii@adacore.com> <20170203102819.GA11916@E107787-LIN> <25716edf-096e-20c5-4170-fb8ca04d897b@redhat.com> <0C6A0D51-4C49-4400-8C46-E77DD512DF56@arm.com> <20170203165022.GB11916@E107787-LIN> <1E0030CE-FB37-4821-AA53-9C6D1CC285C9@arm.com> <20170206152635.GE11916@E107787-LIN> <5F3D30AE-9A53-493A-B6DC-DF594C2FAB18@arm.com> From: Yao Qi Date: Wed, 08 Feb 2017 12:06:00 -0000 Message-ID: Subject: Re: [PATCH] Removal of uses of MAX_REGISTER_SIZE To: Alan Hayward Cc: Pedro Alves , Joel Brobecker , "gdb-patches@sourceware.org" , nd Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg00181.txt.bz2 On Tue, Feb 7, 2017 at 4:33 PM, Alan Hayward wrote: > diff --git a/gdb/stack.c b/gdb/stack.c > index e00e2972cf20bc63917af19f86bf57f1c6b0b5b0..7ba7d68bde8d83ea1e700faa4= 66c6951979e0f76 100644 > --- a/gdb/stack.c > +++ b/gdb/stack.c > @@ -1650,33 +1650,35 @@ frame_info (char *addr_exp, int from_tty) > int count; > int i; > int need_nl =3D 1; > + int sp_regnum =3D gdbarch_sp_regnum (gdbarch); > > /* The sp is special; what's displayed isn't the save address, but > the value of the previous frame's sp. This is a legacy thing, > at one stage the frame cached the previous frame's SP instead > of its address, hence it was easiest to just display the cached > value. */ > - if (gdbarch_sp_regnum (gdbarch) >=3D 0) > + if (sp_regnum >=3D 0) > { > /* Find out the location of the saved stack pointer with out > actually evaluating it. */ > - frame_register_unwind (fi, gdbarch_sp_regnum (gdbarch), > - &optimized, &unavailable, &lval, &addr, > - &realnum, NULL); > + frame_register_unwind (fi, sp_regnum, &optimized, &unavailable, &= lval, > + &addr, &realnum, NULL); > if (!optimized && !unavailable && lval =3D=3D not_lval) > { > enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); > - int sp_size =3D register_size (gdbarch, gdbarch_sp_regnum (gd= barch)); > - gdb_byte value[MAX_REGISTER_SIZE]; > + int sp_size =3D register_size (gdbarch, sp_regnum); > CORE_ADDR sp; > + struct value *value =3D frame_unwind_register_value (fi, sp_r= egnum); > Why don't you hoist frame_unwind_register_value above?, so the frame_register_unwind call is no longer needed, struct value *value =3D frame_unwind_register_value (fi, sp_regnum); gdb_assert (value !=3D NULL); if (!value_optimized_out (value) && value_entirely_available (value)) { if (VALUE_LVAL (value) =3D=3D not_lval) { sp =3D extract_unsigned_integer (value_contents_all (value), sp_size, byte_order); } else if (VALUE_LVAL (value) =3D=3D lval_memory) { // use value_address (value); } else if (VALUE_LVAL (value) =3D=3D lval_register) { // use VALUE_REGNUM (value); } } /* else keep quiet. */ release_value (value); value_free (value); > - frame_register_unwind (fi, gdbarch_sp_regnum (gdbarch), > - &optimized, &unavailable, &lval, &addr, > - &realnum, value); > + gdb_assert (value !=3D NULL); > /* NOTE: cagney/2003-05-22: This is assuming that the > stack pointer was packed as an unsigned integer. That > may or may not be valid. */ > - sp =3D extract_unsigned_integer (value, sp_size, byte_order); > + sp =3D extract_unsigned_integer (value_contents_all (value), = sp_size, > + byte_order); > + release_value (value); > + value_free (value); > + > printf_filtered (" Previous frame's sp is "); > fputs_filtered (paddress (gdbarch, sp), gdb_stdout); > printf_filtered ("\n"); --=20 Yao (=E9=BD=90=E5=B0=A7)