From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22097 invoked by alias); 13 Dec 2012 01:33:08 -0000 Received: (qmail 22072 invoked by uid 22791); 13 Dec 2012 01:33:06 -0000 X-SWARE-Spam-Status: No, hits=-4.6 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 13 Dec 2012 01:33:00 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1TixfX-0003ud-5R from Yao_Qi@mentor.com ; Wed, 12 Dec 2012 17:32:59 -0800 Received: from SVR-ORW-FEM-05.mgc.mentorg.com ([147.34.97.43]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Wed, 12 Dec 2012 17:32:58 -0800 Received: from qiyao.dyndns.org (147.34.91.1) by svr-orw-fem-05.mgc.mentorg.com (147.34.97.43) with Microsoft SMTP Server id 14.1.289.1; Wed, 12 Dec 2012 17:32:58 -0800 Message-ID: <50C93022.5000402@codesourcery.com> Date: Thu, 13 Dec 2012 01:33:00 -0000 From: Yao Qi User-Agent: Mozilla/5.0 (X11; Linux i686; rv:15.0) Gecko/20120911 Thunderbird/15.0.1 MIME-Version: 1.0 To: Aleksandar Ristovski CC: "gdb-patches@sourceware.org" Subject: Re: [patch] gdbarch_syscall_pc_increment References: <50C8937A.1090905@qnx.com> <50C8A2FA.5000105@codesourcery.com> <50C8A5FF.9090902@qnx.com> In-Reply-To: <50C8A5FF.9090902@qnx.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit 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: 2012-12/txt/msg00426.txt.bz2 On 12/12/2012 11:42 PM, Aleksandar Ristovski wrote: > > This is generic for a given OS that happens to increment instruction > pointer to allow user code to e.g. set errno. > > I provided only arm implementation, but other target cpus would need the > same if they implement software single stepping. > > Increment is cpu specific for a given architecture. > 'software single step' is implemented differently in the backend of each port and your 'syscall_pc_increment' depends on the arch as well, so a gdbarch hook is not needed here. 'gdbarch' stands for a certain general architecture, such as arm, mips, and etc. 'gdbarch_tdep' contains the details of the cpus under this architecture. > >> > >> >If I understand your problem correctly, you have to define your own >> >function 'arm_neutrino_syscall_next_pc' in your file >> >arm-neutrino-tdep.c, and install it on function pointer >> >'syscall_next_pc' (in 'struct gdbarch_tdep' in arm-tdep.h) in >> >'arm_neutrino_init_abi'. Please have a look on how 'syscall_next_pc' is >> >set in arm-linux-tdep.c. Then you can compute the pc for your own os in >> >'arm_neutrino_syscall_next_pc'. Hope it helps. > > No, the destination is not a single address as we do not know the > outcome of the syscall. It may come back with the instruction pointer of > the next instruction after 'svc' but also 4 bytes later (4 bytes in our > case, some other kernel may implement it differently). You may need a specified field in 'struct gdbarch_tdep', for example, /* Do a post fix of a software single step. */ void (*software_single_step_fixup) (struct frame_info *frame); In arm_software_single_step, @@ -5242,6 +5242,31 @@ arm_software_single_step (struct frame_i next_pc = arm_get_next_pc (frame, get_frame_pc (frame)); arm_insert_single_step_breakpoint (gdbarch, aspace, next_pc); + tdep = gdbarch_tdep (gdbarch); + if (tdep->software_single_step_fixup) + tdep->software_single_step_fixup (frame); + and you need to initialize field 'software_single_step_fixup' somewhere, and do what you need in it. b.t.w, I don't see how 'set_gdbarch_syscall_pc_increment' is called in your patch. -- Yao (齐尧)