From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 75246 invoked by alias); 1 Dec 2017 10:48:42 -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 74826 invoked by uid 89); 1 Dec 2017 10:48:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.7 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,GIT_PATCH_3,KB_WAM_FROM_NAME_SINGLEWORD,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=abused, H*RU:sk:static., Hx-spam-relays-external:sk:static., beside X-HELO: mail-wr0-f182.google.com Received: from mail-wr0-f182.google.com (HELO mail-wr0-f182.google.com) (209.85.128.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 01 Dec 2017 10:48:24 +0000 Received: by mail-wr0-f182.google.com with SMTP id h1so9589229wre.12 for ; Fri, 01 Dec 2017 02:48:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=TFrMTNpfz8IzPUMh61BItltthDbtMbxWwElMdGAXcFw=; b=HjPLTZX7KjdhdDLZWqNU/hpTFXu0+47GmHmXdxhTFIutmLi7WwmpUzOqeAgGlEGGhJ o3NCrLdlHtDckpb0CAK/aDPPNl8Jd8iMxW6SrWYvuZSQZtMRobf4do34oAb4mZbbRTQp 3KCVMB72D43Cck776mmBddH8RNFGYH+FI5NeS/sFlZcypFyRxqgpymnhSkliAZe5eFGC l8PWBwTWAnJ9KS/Pk9Qyp6yPxy+3A12hCP1JAoU3i7QuNYhCKDu/x8rzhZkCDg7MUd0x a4T5vdKuFfl/gWDr90i1OZ2PEKpQ7ytw72pMNLMjhp6ArK+hicfsw40TgpiiJu676lTo LkDw== X-Gm-Message-State: AJaThX6lavGei/kaDPbFhlYLALFuS7hC8ff90q7+++EB9BCoNio90KmR h0WIxUhmhLNDa7I6IG1D5ck94A== X-Google-Smtp-Source: AGs4zMaEgrGBG24Os5uqPJ2I3FCmNTxTU1j+EG2dBoMD49p0DJ7zexcQIl64sdx84OUNWk22A3Lvig== X-Received: by 10.223.154.105 with SMTP id z96mr4566590wrb.260.1512125292958; Fri, 01 Dec 2017 02:48:12 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id o10sm5316833wrg.5.2017.12.01.02.48.12 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 01 Dec 2017 02:48:12 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [RFC 00/15] Remove regcache::m_readonly_p Date: Fri, 01 Dec 2017 10:48:00 -0000 Message-Id: <1512125286-29788-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes X-SW-Source: 2017-12/txt/msg00014.txt.bz2 regcache is used in many places in gdb in different ways, so regcache becomes a flat and fat object. That exposes some unnecessary APIs to different part, and some APIs are misused or abused: 1) gdbarch methods pseudo_register_read and pseudo_register_read_value have a parameter 'regcache *', but these two gdbarch methods only need raw_read* and cooked_read* methods. So it is better to pass a class which only has raw_read* and cooked_read* methods, and other regcache methods are invisible to each gdbarch implementation. 2) target_ops methods to_fetch_registers and to_store_registers have a parameter 'regcache *', but these two target_ops methods only need raw_supply and raw_collect methods, because raw registers are from target layer, pseudo registers are "composed" or "created" by gdbarch. 3) jit.c uses regcache in an odd way, and record-full.c should use a simple version regcache instead of an array (see patch 11) Beside these api issues, one issue in regcache is that there is no type or class for readonly regcache. We use a flag field m_readonly_p to indicate the regcache is readonly or not, so some regcache apis have assert that this regcache is or is not readonly. The better way to do this is to create a new class for readonly regcache which doesn't have write methods at all. This patch series fixes all of the problems above except 2) (I had a patch to fix 2 in my tree, but still need more time to polish it.) by designing a class hierarchy about regcache, like this, reg_buffer ^ | ------+----- ^ | regcache_read ^ | ------+------ ^ ^ | | reg_buffer_rw regcache_readonly ^ | regcache Class reg_buffer is a simple class, having register contents and status (in patch 7). regcache_read is an abstract class only having raw_read* and cooked_read* methods (in patch 8). reg_buffer_rw is a class which has read and write methods, but it disconnects from target, IOW, the write doesn't go through. Class regcache_readonly is the readonly regcache, created from regcache::save method. This patch series is tested on {x86_64, aarch64, ppc64}-linux. It is an RFC, want to get comments. I write them in at least seven different ways, and this one is satisfying. I don't push them in until 8.1 is branched. *** BLURB HERE *** Yao Qi (15): Call cooked_read in ppu2spu_prev_register Don't call gdbarch_pseudo_register_read_value in jit.c Remove mt port Replace regcache_raw_read with regcache->raw_read regcache_cooked_read -> regcache->cooked_read regcache::cooked_write test Class reg_buffer class regcache_read and Pass regcache_read to gdbarch methods Remove regcache_save and regcache_cpy Class regcache_readonly Class reg_buffer_rw Replace regcache::dump with class register_dump No longer create readonly regcache Remove regcache::m_readonly_p Move register_dump to regcache-dump.c gdb/Makefile.in | 3 +- gdb/aarch64-tdep.c | 12 +- gdb/amd64-tdep.c | 11 +- gdb/arm-tdep.c | 12 +- gdb/avr-tdep.c | 4 +- gdb/bfin-tdep.c | 4 +- gdb/configure.tgt | 6 +- gdb/dummy-frame.c | 6 +- gdb/frame.c | 15 +- gdb/frame.h | 3 +- gdb/frv-tdep.c | 8 +- gdb/gdbarch.c | 4 +- gdb/gdbarch.h | 8 +- gdb/gdbarch.sh | 4 +- gdb/h8300-tdep.c | 8 +- gdb/hppa-tdep.c | 4 +- gdb/i386-tdep.c | 72 ++- gdb/i386-tdep.h | 2 +- gdb/ia64-tdep.c | 32 +- gdb/infcmd.c | 6 +- gdb/inferior.h | 2 +- gdb/infrun.c | 8 +- gdb/jit.c | 26 +- gdb/linux-fork.c | 20 +- gdb/m32c-tdep.c | 54 +-- gdb/m68hc11-tdep.c | 6 +- gdb/mep-tdep.c | 12 +- gdb/mi/mi-main.c | 12 +- gdb/mips-tdep.c | 8 +- gdb/msp430-tdep.c | 4 +- gdb/mt-tdep.c | 1218 ------------------------------------------------- gdb/nds32-tdep.c | 4 +- gdb/ppc-linux-tdep.c | 15 +- gdb/record-full.c | 21 +- gdb/regcache-dump.c | 335 ++++++++++++++ gdb/regcache.c | 586 ++++++++++-------------- gdb/regcache.h | 242 ++++++---- gdb/rl78-tdep.c | 29 +- gdb/rs6000-tdep.c | 88 ++-- gdb/s390-linux-tdep.c | 17 +- gdb/sh-tdep.c | 8 +- gdb/sh64-tdep.c | 12 +- gdb/sparc-tdep.c | 6 +- gdb/sparc64-tdep.c | 22 +- gdb/spu-tdep.c | 16 +- gdb/xtensa-tdep.c | 15 +- 46 files changed, 1024 insertions(+), 1986 deletions(-) delete mode 100644 gdb/mt-tdep.c create mode 100644 gdb/regcache-dump.c -- 1.9.1