From patchwork Sat Dec 6 18:00:48 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wei-cheng, Wang" X-Patchwork-Id: 4102 Received: (qmail 6165 invoked by alias); 6 Dec 2014 18:00:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 6154 invoked by uid 89); 6 Dec 2014 18:00:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL, BAYES_00, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, KAM_STOCKGEN, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-pd0-f181.google.com Received: from mail-pd0-f181.google.com (HELO mail-pd0-f181.google.com) (209.85.192.181) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Sat, 06 Dec 2014 18:00:57 +0000 Received: by mail-pd0-f181.google.com with SMTP id v10so2622977pde.40 for ; Sat, 06 Dec 2014 10:00:55 -0800 (PST) X-Received: by 10.66.66.196 with SMTP id h4mr38368697pat.127.1417888855341; Sat, 06 Dec 2014 10:00:55 -0800 (PST) Received: from [192.168.2.3] ([123.110.214.155]) by mx.google.com with ESMTPSA id xg4sm32423076pab.8.2014.12.06.10.00.52 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 06 Dec 2014 10:00:54 -0800 (PST) Message-ID: <54834450.3020506@gmail.com> Date: Sun, 07 Dec 2014 02:00:48 +0800 From: Wei-cheng Wang User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: uweigand@de.ibm.com, gdb-patches@sourceware.org Subject: Re: [PATCH 3/3 v2] Process record support for PowerPC 2014-12-06 Wei-cheng Wang * ppc-linux-tdep.c (powerpc_linux_in_dynsym_resolve_code): Scan PLT stub backward for reverse debugging. (ppc_linux_init_abi): set powerpc_linux_in_dynsym_resolve_code for both 32-bit and 64-bit. --- gdb/ppc-linux-tdep.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 0a2afa7..f8971a3 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -51,6 +51,7 @@ #include "linux-tdep.h" #include "linux-record.h" #include "record-full.h" +#include "infrun.h" #include "stap-probe.h" #include "ax.h" @@ -300,6 +301,22 @@ powerpc_linux_in_dynsym_resolve_code (CORE_ADDR pc) || strcmp (MSYMBOL_LINKAGE_NAME (sym.minsym), "__glink_PLTresolve") == 0)) return 1; + else if (execution_direction == EXEC_REVERSE) + { + int i; + struct frame_info *frame = get_current_frame (); + struct gdbarch *gdbarch = get_frame_arch (frame); + const int plt_stub_len = 4; + + /* Scan backward to chech whether we are in the middle + of PLT stub. */ + for (i = 0; i < plt_stub_len; i++) + { + if (gdbarch_skip_trampoline_code (gdbarch, frame, pc)) + return 1; + pc -= 4; + } + } return 0; } @@ -1698,15 +1715,6 @@ ppc_linux_init_abi (struct gdbarch_info info, else set_gdbarch_gcore_bfd_target (gdbarch, "elf32-powerpc"); - if (powerpc_so_ops.in_dynsym_resolve_code == NULL) - { - powerpc_so_ops = svr4_so_ops; - /* Override dynamic resolve function. */ - powerpc_so_ops.in_dynsym_resolve_code = - powerpc_linux_in_dynsym_resolve_code; - } - set_solib_ops (gdbarch, &powerpc_so_ops); - set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); } @@ -1751,6 +1759,15 @@ ppc_linux_init_abi (struct gdbarch_info info, set_gdbarch_gcore_bfd_target (gdbarch, "elf64-powerpc"); } + if (powerpc_so_ops.in_dynsym_resolve_code == NULL) + { + powerpc_so_ops = svr4_so_ops; + /* Override dynamic resolve function. */ + powerpc_so_ops.in_dynsym_resolve_code = + powerpc_linux_in_dynsym_resolve_code; + } + set_solib_ops (gdbarch, &powerpc_so_ops); + /* PPC32 uses a different prpsinfo32 compared to most other Linux archs. */ if (tdep->wordsize == 4)