From patchwork Fri Jan 27 22:25:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 19050 Received: (qmail 8602 invoked by alias); 27 Jan 2017 22:26:05 -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 8567 invoked by uid 89); 27 Jan 2017 22:26:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.6 required=5.0 tests=AWL, BAYES_50, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=user_reg_add, 979, SP, *aarch64_syscall_record X-Spam-User: qpsmtpd, 2 recipients X-HELO: NAM01-SN1-obe.outbound.protection.outlook.com Received: from mail-sn1nam01on0079.outbound.protection.outlook.com (HELO NAM01-SN1-obe.outbound.protection.outlook.com) (104.47.32.79) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 27 Jan 2017 22:25:53 +0000 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Steve.Ellcey@cavium.com; Received: from sellcey-dt.caveonetworks.com (50.233.148.156) by BLUPR0701MB1060.namprd07.prod.outlook.com (10.160.35.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13; Fri, 27 Jan 2017 22:25:49 +0000 Message-ID: <1485555939.2509.5.camel@caviumnetworks.com> Subject: Re: [PATCH] Patch 2 of 2 for aarch64 ILP32 support in gdb From: Steve Ellcey To: Yao Qi CC: binutils , gdb-patches , Yury Norov , , "Pinski, Andrew" Date: Fri, 27 Jan 2017 14:25:39 -0800 In-Reply-To: <20170126141414.GY28060@E107787-LIN> References: <1485303639.29977.10.camel@caviumnetworks.com> <20170126141414.GY28060@E107787-LIN> MIME-Version: 1.0 X-ClientProxiedBy: DM5PR10CA0024.namprd10.prod.outlook.com (10.172.33.34) To BLUPR0701MB1060.namprd07.prod.outlook.com (10.160.35.147) X-MS-Office365-Filtering-Correlation-Id: 9b83c852-e138-4737-441d-08d4470372f9 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BLUPR0701MB1060; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1060; 3:6uBH2UWUG97h4higpstg8E69p0992l9+L7hKmyw5klIis2vE9C7crCW4whkBzeOdJFHrXiTX9kr4FsrSNHdYV5+CEt2NxHPIg9iIV8N8PoR/0czXP901SVBXJ0j0k40AI+I3z1wbu1QlQpy7bSt1GI4hOWtU3nix8azEonTxZZOlTblhQrMxLqSVrUZ54AkHgTbOHdOYBn/K2cJy4WfGveVORtXBon9HTRz0pmXXWaJudWJY4QRqXEVRtTDesMATjt20z5imIOSI+dKet/fASQ== X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1060; 25:Wbk2/FlxW3fP2bEdeusrzGSdRqX7kYPyukGZQ40lVM+4icAkGe+SUMxSyZsgzXKpAccw/oyihxhi/q8j5hqlJCA5Y0e5mKMrVT7i8rtmgswJYO1LTX2iUdVFZBgYgE7i0bNT0znmw1nhlJNPU67wYYcBF9NzJpOFXVSL+aM8oc3VI6cpSq723gMD2YXh651U40Tub4Tzr5rLWg4b0IKy1AH/TV6pxUBfBENaMXThzS4fRmtebq8P8T1MYCwWRIYkI+dNQmqivua4pXh/MGaOSP+VAmer7nvErCybjyP7lECDWNwI//irn18PSO7FqfDymi8625jClCjIs8W813c7U7etOZtqS5BgzNYrcRQSMqYbYQB+98KjGMt3bDe+mzz+p0WRrHckbJt3Qww+WIb/pi/lM3fyjz4K/HBMp/LJb6cLzwGJK07WQ52YY8R3VAglzEwuLgHU09Kh05XVLLyEomtDW5o6wi4lgG2ivh1FMctUY/KtSQLi4eGG6ZLQVhZquLqD0sM9btytwoba18lpBYJk7jeGRk0nYuUloSqxbPip91RNDFgMKExOUS9S2Eib7cPaxgWsHwZpB57PYh/W9Giy+FxNBIXuxg8hfqiXTA++eSx+usNE24XCnMk8oxbZJMPxYTZfhMlO8Z8/TWKTXIOm+yOH1Rh5HDWuph/7QprgYjeO+YS/A9eN4558hv5DWQ9z5He02PE6vuRmKcN2DVzDtxsWWpJvffm2CTFJbTEM16GNq33GvpUzSKBxUnRrU8GMPNX0ZMEHFnweS7LV1b211MP0hhaLaAlQ9C83JS1wr3vT/URTxxPE8ugX2O9C/K9albL9E2p6DeRaFce9aVBT+Rk7AtinhbNYmzUuqPusvQrTDTDbFayVdIHWqzEfAzaoRMItvbfjh5rkidx3CwlpyvlUgq5did6hNt38Cun9d3V9rHVyoAn3yNNE7T6W X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1060; 31:IIM/e+KF2GImajeGOEvN+sPHJbGY6/dazINtm0Eg+SpW9RYgygz1AJt2nC6+Pp0v5N+XcBnkOEC6ucxDkMU10J52sQugCSEzRlWtQCrXzDwg5/jbgXiJZSqjZ1d8gMfivP9lUNvNQ2UWTg6RyqpoV9ycUEeL8BPObVfLAIE7qZny2NX3p4LjLiIZmrch4Helc04ItGQg9jHbMDj5QpPQBVirkiFPlqKxeEcPDgZM1HnsP9bs3PsL3s6u2du5vVu3iwnMmXOnYcebQl+BlwZjQsEK9xz4hUe6SXiZ4ix/ECM=; 20:h44rNODgHbp+4F7QU52Am6hxfvs87i+mJx1c6RX35lIOs6PBJPi2XUyHMzIf9PzTFlPkcTVXCnVybDZGkPNdDM+8uE7jpQ8m6qsro7udYLlZ3AbkZlNkYMq3z4l+vnd4/qmIM2+5XMHRVJv7BeG6IEX1MfXYkq9fSeEV/QVhMLds+35sVB+I1oIQFr0Dq/fb/2/N0fMMIh95ORGm2IX25igsPTwf0Qi1E5ZdiCCXRjgNeTMZwAb+p1p/V+nCWQg2/BneDwLSSeYNI1hmw8u9Qyo7Rfd3S0hbqd8KHW526yC9GkDlp3gRAQczqUhJu4kbztSvnMG4933J2Y7DWHv9FIx39tFSrA99yIYahaiuhs5JG26jw7d1KlsbmX+BkM3bRjY9JCF01Rw9P7Fq1ji0MSlU0WtrOk/zgI2PZjwyhMZ7W4HyytAH4GyRPWGBkoVbzarEZaeW7k2CdtCz+3vu1JNsuRzMpnoPRkVOA6s9/p0o2NZ9fn9POKiybpbekXVB7tSC/S7fRIdvOaPdubVI7YHqrKSO4mMecNF8qt9wm/Bo/1+djqa0UcPYAnrO7cyHB6zpR7HaVtocOSCor1M9gjwSBiA7yRz/SpR+mIzChhw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123555025)(20161123560025)(20161123562025)(20161123564025)(6072148); SRVR:BLUPR0701MB1060; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB1060; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1060; 4:1B5IXJ9fSjCjJkxzLckkBfnPzJy0pw+JkEv4cNgf0/16mLvIZQ+YqZSSbD5ZfXBHjHOm0T7pmVe3U9wLz+k/0coNHcheBM/6x7s0JfqYEmd7ys7r6dclZfycKTarXGupIP/uuvdWQfOEdXOGXg7F0jSrdAuMgncuio/b0KHLCCnF56m3luTqVmNNdthj6W5Ag/mn58Gg8Nwt/NcNafOnxMYJopUCnL1dhjKbNGQrfkA52OBZ/k/zyj8i1sYWe76IxdbsKYlnIkj+akb6Vsc36ExTaL6vaATHM7qBDjAleO6OYxJzu7e7FbuhB82JajZuRwbSRK6A35/zNa7wmVOSjqZbzv0MGlvM37GXkXqC8+vztekppkIAul8XyYgK+ITWh0yWZClAlcDmCd2hi4N/LsW/ZmtKIbUdLTVdWbbHDrKCJQ/xNzeiyapTneX4ZqemEYnHRmDGCAC3sDchySfh5imjO6z18eJdPrTjARPewfwX6Kc5147dQf0Em0JEelkiCZNx8MgfkL+IVtV/IhvbaTQ04Jxalq+0vxX1FH0XNvhlwj9XFEYLf0lgYI8fpyy1NtLySNcVnLVGeCWNlrio93Emrnf1GDOaTY/Cok9Yhuo= X-Forefront-PRVS: 0200DDA8BE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(377424004)(189002)(199003)(24454002)(69596002)(110136003)(4326007)(68736007)(2906002)(4001430100002)(103116003)(53936002)(568964002)(38730400001)(39060400001)(5660300001)(6666003)(305945005)(3846002)(2950100002)(25786008)(7736002)(512874002)(6116002)(6506006)(42882006)(229853002)(6306002)(6512007)(36756003)(54906002)(6486002)(6916009)(84326002)(2476003)(4610100001)(107886002)(81166006)(81156014)(66066001)(189998001)(53416004)(42186005)(1411001)(97736004)(105586002)(106356001)(50986999)(5890100001)(76176999)(92566002)(101416001)(33646002)(50226002)(8676002)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1060; H:sellcey-dt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1060; 23:+EPT1t6XbOYMj0BlorArZHtBWISwDM6zHDyJdch?= =?us-ascii?Q?ts4hsbXMRorDasbihIZ+GrhfhHpbtVdweHjQqe4jiAz2QM9zm3Jqc6s/v1R+?= =?us-ascii?Q?sV7A7PvlRwnUxwRxTcpE+gXxZB/3DcF2P7tNGzA4I7efYldcGs9ot3+18bLq?= =?us-ascii?Q?UHRHrAl72G8HtekupWwKO8xYzkEZCqvW2ZZO0k5nYI6GoB4Zx4cfP0Y99Iqo?= =?us-ascii?Q?lLBrIcEydaGsLdH5UOtPx5BDUAucOlwEscAYRpHGNN+uDMbNiaEePqWDWTqO?= =?us-ascii?Q?qS8O/dwJbT6d6hsjMWWE2JlM0ZSZtIKBed0kqr0iJ3BripLNk0zD0wCmUI73?= =?us-ascii?Q?AI6SttFvfsVPSwQpDb/AZN3uEhiyyt45+hssKVwozyo1pjpaizk0A3DkbXOg?= =?us-ascii?Q?PWo2rSiHLo7eYpCVbMqKCrceDb82j6j3Iv5d+nsXKJP6rNPynl8X0L870Bvm?= =?us-ascii?Q?x7ZUt+8RFwd0rDdomtEu96L404lnpwaRb1Cd1rjAQYpXn+ATdcapZBHheuBO?= =?us-ascii?Q?ENXA5BTEf2ZfT9s6//axM/xkfRuTPjDKJ5ZOWLm1EdACBIBvsQv5FKQqnuE2?= =?us-ascii?Q?8pNssEhf/kVxsvKPJSZsb0avdzsbcWutA6IspClHIM2palhWVcPqVaAMBc/u?= =?us-ascii?Q?/o71pK37dFrC6Up7TvAIJAGU5uZ5xa9OaeEQ9sblqR16Kf0vNr4NJ/dcARuf?= =?us-ascii?Q?dSa+eWAjS79FXfCuPJrOQ45hauXgbZceztpuZVb5uegYBTCDSl/oCskqiBwY?= =?us-ascii?Q?RTR1ckZKm96Ga71hKN8LQ4Lpd7jyEu3NJtc65AprilNGI0BSwgcrEI7+tQ3d?= =?us-ascii?Q?a9D89o09u5Ukl3OCVMC1eQnR+m7JwvhR0/CpMp+46zEBp3Sb5kCNFwpCq9XG?= =?us-ascii?Q?LF8YzZkb5SucMQPAQMsdpKqpJKdwz2qp6426f9Pymo0741/BE9CWB7CudyHB?= =?us-ascii?Q?9mJgiTyJHS51zCuktGkUhoNKRQSTNQlKermRgEQ36qa+Q28xWFFuL5QBI5Z/?= =?us-ascii?Q?DUC9wqfFidp6KAwvI6SS5XXx7mU+Qo3pKQP4mj9JzaEXW60tskXQGXRUj8YZ?= =?us-ascii?Q?A+kD3SQ5A+NihacvVZFEIIeF8F8wj6RLIXFZV0g+YsWoek1hOwxG/ARCUjNL?= =?us-ascii?Q?ruX0UotFg/ahcvkxlcDEfcudDQsQ90cjQAE5p/aNcDlI/XPfQY8XfIihInly?= =?us-ascii?Q?w+XDsuo5EPnEsZD+vY6FcSIHZcUNMeSw5JIj/Ssr58AeJcBKeU+eLnTiOdXP?= =?us-ascii?Q?vGBM8cisJ1zZNGuey5c+4eRhKnRxwo14SmlRmmuBfobaE0Jf241i1XkG1g0h?= =?us-ascii?Q?G9Bf4XZWDGM7At2CTlIVEDiCkDrbGkX6jw4sY8evFXQtL+nadjQiTBteRidJ?= =?us-ascii?Q?oDKBX0jhu7MAWKkU9VWr71npl8D42uovpG4R23S+SwokaqDqIfMLF/5JH4hk?= =?us-ascii?Q?1CD7lXE8zbFbMjo6bkVBFpGRAYIBR+FE=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1060; 6:MJFTFdks+5oMoykyUc8PfqiR08TkumR81/Hsf//nujV3PNst1vEPjr6MzlkUslhJbbI7tJVkR0sIlnZwqkbUUVrjR281AlgOjtRgt+f3kc05dkL1h7JbIjNMKsA3Zks5WjkjuMtQHJ9qqy8zvLMoU6Uyf8OoHs5JEOoyV0NsjRT6TLQlK+ZNYu/pTeU4rq0vDLRTBEJ4a1qtjnHZUicaNal1iv6FxgQuDzV/l32CrCqzGGOhyuajUbqfTxRqXw6CoIv1tzuQ13h1LFZ11PFVvMz+Owhj6z8/XUlGvqnZqeILOLdt65cMDYRVjBnRwuQGAqzkrjE44aCqWUywAH4+g3WEOGw09QQoPffYVntz/k9m8aoHGGeA1icT/6Y/05IbFkptWjwk6lNH9wPClh5ao96IpXFd/8JSxNLvNNM8HF4=; 5:VHT9iKixQadmfEBVB7ZVg1SlsypUde8phzSCZLCrYO0JRItFibM1q+cfeI0qFKQM4NnmON6XaVR/E1sthVpkAv9D2Yc5JfqN++N7+uLF8TbotnzQJPOyJcAxVWMzq4MxrwOEfOLVGdj4QAarrYEd1sZr1tPRqGgCFlWZ61JoewQ=; 24:6rcVkTSYr/jjjN4nl8xnbZpsDFyfYcdA4JCVAjJkqFw+rzgV2EwkgU4UDY588EZQWvm991xrx7vylMOceLJ96c/bLa1icR9Z3XEjum1cPPo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1060; 7:6fHDxBhoj06zdUuLj47R1k2Dz4wmfySDR6w6Xw0DcrqjDNGb5hGqbfg6Eu+KRpK87faEJXHAXd4nDdImd1o0K0kwQeBPFARS2HoLv9qUbq90eJNhw+LlfWA8h6WpHHv902AGC1IVW4j8qKjPGUvtTtMPh/ZAmPPUXPUnrUpMed7UKkMZHtw6AHRj9T8WQp7p9WfUUAY3kk5GFTNB1ZRczsBf854RAyMdh7khitmI/3dYL2RxFbswNLVzSi8Yk+4cH4Jp/RUGmwecIv3/HdwYjgFkI7oRxl2jBTvdN8zUqQmvD91QNAZVqXYR8dFtmF+/uCQUSA6cU09+IMgBNrPBylLrXN9COjzjmSQXtrG+aPDfHx1mK/+V3A+P18o3XawcyOxNyE5PcACsF3ckhOJFog4BVCBLVfzbDVps/EucO39lqAuK3+fwrmjA4UUPHf4ge9O1jVd0gHPvceBq8PQ0NQ== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2017 22:25:49.8619 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0701MB1060 On Thu, 2017-01-26 at 14:14 +0000, Yao Qi wrote: >  > Could you remove these ilp32 xml files, use the existing aarch64 target > description, and try the patch below? Yao, I removed the ilp32 xml files and applied the patch you included and made the other changes.  gdb seems to be working as well as it did with the original patch but I ran into a problem that I missed before. If I apply the gdb/gdbserver patch attached to this email and the earlier bfd patch: https://sourceware.org/ml/gdb-patches/2017-01/msg00508.html and I try to run gdb on an ILP32 program I get: (gdb) r Starting program: /home/ubuntu/sellcey/gdb-ilp32/x32  PC register is not available I didn't see this before because I didn't have this bfd patch: https://sourceware.org/ml/binutils/2016-12/msg00167.html That patch seems reasonable and it fixed some test failures I had in the glibc testsuite but it is breaking gdb.  If I undo this patch by making this change to bfd/cpu-aarch64.c:  static const bfd_arch_info_type bfd_aarch64_arch_ilp32 = -  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 32, FALSE, NULL); +  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 64, FALSE, NULL); Then gdb starts working again and I can debug 32 bit programs. I am not sure how this change to the ILP32 aarch64 bfd description is affecting gdb and why this change would break things.  Do you know why this change messes up gdb? Steve Ellcey sellcey@cavium.com 2017-01-27  Andrew Pinski       Steve Ellcey       Yao Qi   * aarch64-linux-tdep.c (aarch64_linux_init_abi): Set link map offsets to 32 or 64 bits. * aarch64-tdep.c (aarch64_ilp32_register_type): New function. (aarch64_gdbarch_init): Setup ILP32 support. Make sure the gdbarches have compatible ilp32 flags. Set long and ptr sizes correctly for ilp32. * aarch64-tdep.h (gdbarch_tdep) : New field. 2017-01-27  Andrew Pinski       Steve Ellcey   * linux-aarch64-low.c (aarch64_linux_read_description): Use machine instead of is_elf64 to determine architecture.  Give an error when using 32 bit gdbserver on 64 bit program. diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index b94ccb2..6d0c3bd 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 801c03d..bc6b0be 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -2091,6 +2091,22 @@ aarch64_gen_return_address (struct gdbarch *gdbarch, } +/* Implement the "register_type" gdbarch method. + Adjust the register type of $PC and $SP on ILP32. */ + +static struct type * +aarch64_ilp32_register_type (struct gdbarch *gdbarch, int regnum) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + gdb_assert (tdep->ilp32); + + if (regnum == AARCH64_SP_REGNUM || regnum == AARCH64_PC_REGNUM) + return builtin_type (gdbarch)->builtin_uint64; + else + return tdesc_register_type (gdbarch, regnum); +} + /* Return the pseudo register name corresponding to register regnum. */ static const char * @@ -2851,6 +2867,10 @@ 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; + bool ilp32 = FALSE; + + if (info.bfd_arch_info->mach == bfd_mach_aarch64_ilp32) + ilp32 = TRUE; /* Ensure we always have a target descriptor. */ if (!tdesc_has_registers (tdesc)) @@ -2908,6 +2928,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; } @@ -2926,6 +2949,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); @@ -2968,9 +2992,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); @@ -3012,6 +3036,13 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) tdesc_use_registers (gdbarch, tdesc, tdesc_data); + if (ilp32) + { + /* Override tdesc_register_type to adjust the types of $PC and + $SP in ILP32. */ + set_gdbarch_register_type (gdbarch, aarch64_ilp32_register_type); + } + /* Add standard register aliases. */ for (i = 0; i < ARRAY_SIZE (aarch64_register_aliases); i++) user_reg_add (gdbarch, aarch64_register_aliases[i].name, diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h index 85c6a97..87d36b6 100644 --- a/gdb/aarch64-tdep.h +++ b/gdb/aarch64-tdep.h @@ -97,6 +97,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; diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index 334310b..e31d5c5 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -484,7 +484,12 @@ aarch64_linux_read_description (void) is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine); - if (is_elf64) + /* There are problems with ptrace when gdbserver is 32 bits and the + program being debugged is 64 bits. */ + if (sizeof (void *) == 4 && is_elf64) + error (_("Can't debug 64-bit process with 32-bit GDBserver")); + + if (machine == EM_AARCH64) return tdesc_aarch64; else return tdesc_arm_with_neon;