From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12413 invoked by alias); 1 Sep 2016 07:36:59 -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 12363 invoked by uid 89); 1 Sep 2016 07:36:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=lp64, H*MI:sk:1472516 X-Spam-User: qpsmtpd, 2 recipients X-HELO: camailhost.cavium.com Received: from camailhost.cavium.com (HELO camailhost.cavium.com) (12.108.191.230) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 01 Sep 2016 07:36:48 +0000 Received: from apinski-ss1.caveonetworks.com ([10.18.106.6]) by camailhost.cavium.com (8.14.7/8.14.7) with ESMTP id u817ajvn005040; Thu, 1 Sep 2016 00:36:45 -0700 Received: from apinski-ss1.caveonetworks.com (localhost [127.0.0.1]) by apinski-ss1.caveonetworks.com (8.15.2/8.15.2/Debian-3) with ESMTP id u817aj42043100; Thu, 1 Sep 2016 00:36:45 -0700 Received: (from apinski@localhost) by apinski-ss1.caveonetworks.com (8.15.2/8.15.2/Submit) id u817ajbS043099; Thu, 1 Sep 2016 00:36:45 -0700 From: Andrew Pinski To: gdb-patches@sourceware.org, binutils@sourceware.org Cc: Andrew Pinski Subject: [PATCH 2/3] Add ILP32 support to gdb. Date: Thu, 01 Sep 2016 07:36:00 -0000 Message-Id: <1472715400-43043-3-git-send-email-apinski@cavium.com> In-Reply-To: <1472715400-43043-1-git-send-email-apinski@cavium.com> References: <1472516750-30743-1-git-send-email-apinski@cavium.com> <1472715400-43043-1-git-send-email-apinski@cavium.com> X-SW-Source: 2016-09/txt/msg00002.txt.bz2 This patch adds AARCH64:ilp32 support to gdb and sets up the correct sizes for some types like pointers and long. Also sets up the correct linker map offsets for Linux. 2016-08-31 Andrew Pinski * aarch64-tdep.h (gdbarch_tdep): Add ilp32 field. * aarch64-tdep.c (aarch64_gdbarch_init): Setup ILP32 support. Make sure the gdbarches have compatible ilp32 flags. Set long and ptr sizes correctly for ilp32. * aarch64-linux-tdep.c (aarch64_linux_init_abi): Add support for ILP32. --- gdb/ChangeLog | 9 +++++++++ gdb/aarch64-linux-tdep.c | 8 ++++++-- gdb/aarch64-tdep.c | 14 ++++++++++++-- gdb/aarch64-tdep.h | 3 +++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 602a05a..03db9e2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2015-08-31 Andrew Pinski + + * aarch64-tdep.h (gdbarch_tdep): Add ilp32 field. + * aarch64-tdep.c (aarch64_gdbarch_init): Setup ILP32 support. + Make sure the gdbarches have compatible ilp32 flags. + Set long and ptr sizes correctly for ilp32. + * aarch64-linux-tdep.c (aarch64_linux_init_abi): + Add support for ILP32. + 2016-08-31 Yao Qi * record-full.c (record_full_insert_breakpoint): Fix typo. diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index cd220a6..43f959b 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -1000,8 +1000,12 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) linux_init_abi (info, gdbarch); - set_solib_svr4_fetch_link_map_offsets (gdbarch, - svr4_lp64_fetch_link_map_offsets); + if (tdep->ilp32) + set_solib_svr4_fetch_link_map_offsets (gdbarch, + svr4_ilp32_fetch_link_map_offsets); + else + set_solib_svr4_fetch_link_map_offsets (gdbarch, + svr4_lp64_fetch_link_map_offsets); /* Enable TLS support. */ set_gdbarch_fetch_tls_load_module_address (gdbarch, diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 3b7e954..1730ef8 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -2646,6 +2646,12 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) const struct tdesc_feature *feature; int num_regs = 0; int num_pseudo_regs = 0; + char ilp32 = FALSE; + + if (info.abfd + && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour + && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS32) + ilp32 = TRUE; /* Ensure we always have a target descriptor. */ if (!tdesc_has_registers (tdesc)) @@ -2703,6 +2709,9 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) best_arch != NULL; best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info)) { + /* ILP32 and LP64 are incompatible. */ + if (gdbarch_tdep (arches->gdbarch)->ilp32 != ilp32) + continue; /* Found a match. */ break; } @@ -2721,6 +2730,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) tdep->lowest_pc = 0x20; tdep->jb_pc = -1; /* Longjump support not enabled by default. */ tdep->jb_elt_size = 8; + tdep->ilp32 = ilp32; set_gdbarch_push_dummy_call (gdbarch, aarch64_push_dummy_call); set_gdbarch_frame_align (gdbarch, aarch64_frame_align); @@ -2760,9 +2770,9 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_float_bit (gdbarch, 32); set_gdbarch_double_bit (gdbarch, 64); set_gdbarch_long_double_bit (gdbarch, 128); - set_gdbarch_long_bit (gdbarch, 64); + set_gdbarch_long_bit (gdbarch, ilp32 ? 32 : 64); set_gdbarch_long_long_bit (gdbarch, 64); - set_gdbarch_ptr_bit (gdbarch, 64); + set_gdbarch_ptr_bit (gdbarch, ilp32 ? 32 : 64); set_gdbarch_char_signed (gdbarch, 0); set_gdbarch_float_format (gdbarch, floatformats_ieee_single); set_gdbarch_double_format (gdbarch, floatformats_ieee_double); diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h index a95b613..7b1ce3e 100644 --- a/gdb/aarch64-tdep.h +++ b/gdb/aarch64-tdep.h @@ -95,6 +95,9 @@ struct gdbarch_tdep /* syscall record. */ int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number); + /* If this is ILP32 or LP64. */ + bool ilp32; + }; extern struct target_desc *tdesc_aarch64; -- 2.7.4