From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 128979 invoked by alias); 26 Jan 2016 19:26:20 -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 128961 invoked by uid 89); 26 Jan 2016 19:26:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=undocumented, 0x80000000, 24bit, 24-bit X-HELO: xyzzy.0x04.net Received: from xyzzy.0x04.net (HELO xyzzy.0x04.net) (109.74.193.254) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 26 Jan 2016 19:26:16 +0000 Received: from hogfather.0x04.net (89-65-66-135.dynamic.chello.pl [89.65.66.135]) by xyzzy.0x04.net (Postfix) with ESMTPS id 285533FE60; Tue, 26 Jan 2016 20:26:59 +0100 (CET) Received: from [192.168.13.108] (unknown [192.168.13.108]) by hogfather.0x04.net (Postfix) with ESMTPSA id D81E8580088; Tue, 26 Jan 2016 20:26:13 +0100 (CET) Subject: Re: [PATCH 2/8] gdb/s390: Fill write_guessed_tracepoint_pc hook. To: Andreas Arnez References: <1453637529-26972-1-git-send-email-koriakin@0x04.net> <1453637529-26972-3-git-send-email-koriakin@0x04.net> Cc: gdb-patches@sourceware.org From: =?UTF-8?Q?Marcin_Ko=c5=9bcielnicki?= Message-ID: <56A7C855.6090806@0x04.net> Date: Tue, 26 Jan 2016 19:26:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2016-01/txt/msg00663.txt.bz2 On 26/01/16 19:12, Andreas Arnez wrote: > On Sun, Jan 24 2016, Marcin Kościelnicki wrote: > >> diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c >> index e827684..c4d25d2 100644 >> --- a/gdb/s390-linux-tdep.c >> +++ b/gdb/s390-linux-tdep.c >> @@ -167,6 +167,22 @@ s390_write_pc (struct regcache *regcache, CORE_ADDR pc) >> regcache_cooked_write_unsigned (regcache, S390_SYSTEM_CALL_REGNUM, 0); >> } >> >> +static void >> +s390_write_guessed_tracepoint_pc (struct regcache *regcache, CORE_ADDR pc) > > Please add documentation for this function, as described here: > > https://sourceware.org/gdb/wiki/Internals%20GDB-C-Coding-Standards#Document_Every_Subprogram > > Note that this was not always done in the past; thus there are still > many undocumented functions in this file. But for new functions we > should stick to it. OK, will do. > >> +{ >> + struct gdbarch *gdbarch = get_regcache_arch (regcache); >> + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); >> + int sz = register_size (gdbarch, S390_PSWA_REGNUM); >> + gdb_byte *reg = (gdb_byte *) alloca (sz); >> + >> + /* 31-bit PSWA needs high bit set. */ >> + if (tdep->abi == ABI_LINUX_S390) >> + pc |= 0x80000000; > > This is done differently in s390_pseudo_register_write: the high bit is > copied from the original PSWA. Of course, this only makes a difference > if a program ever switches to 24-bit mode (yikes). I just wonder > whether both cases should be treated the same, or whether there's good > reason not to. If write_guessed_tracepoint_pc is called, we explicitely have no registers data other than PC itself - there's no original PSWA to speak of. The state of PSWA high bit probably doesn't matter all that much, but since we want to mark PSWA as known, we'd better write the reasonable value to it. > >> + >> + store_unsigned_integer (reg, sz, gdbarch_byte_order (gdbarch), pc); >> + regcache_raw_supply (regcache, S390_PSWA_REGNUM, reg); >> +} >> + >> >> /* DWARF Register Mapping. */ >> >> @@ -7857,6 +7873,7 @@ s390_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) >> s390_iterate_over_regset_sections); >> set_gdbarch_cannot_store_register (gdbarch, s390_cannot_store_register); >> set_gdbarch_write_pc (gdbarch, s390_write_pc); >> + set_gdbarch_write_guessed_tracepoint_pc (gdbarch, s390_write_guessed_tracepoint_pc); >> set_gdbarch_pseudo_register_read (gdbarch, s390_pseudo_register_read); >> set_gdbarch_pseudo_register_write (gdbarch, s390_pseudo_register_write); >> set_tdesc_pseudo_register_name (gdbarch, s390_pseudo_register_name); >