From patchwork Mon Mar 6 22:04:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 19442 Received: (qmail 29645 invoked by alias); 6 Mar 2017 22:04:39 -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 29597 invoked by uid 89); 6 Mar 2017 22:04:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=initialised, HX-ClientProxiedBy:sk:MWHPR01, H*r:104.47.36, H*r:sk:NAM02-S X-Spam-User: qpsmtpd, 2 recipients X-HELO: NAM02-SN1-obe.outbound.protection.outlook.com Received: from mail-sn1nam02on0059.outbound.protection.outlook.com (HELO NAM02-SN1-obe.outbound.protection.outlook.com) (104.47.36.59) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 06 Mar 2017 22:04:35 +0000 Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none; sourceware.org; dmarc=none action=none header.from=caviumnetworks.com; Received: from sellcey-dt.caveonetworks.com (50.233.148.156) by BY2PR07MB2438.namprd07.prod.outlook.com (10.166.115.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.947.12; Mon, 6 Mar 2017 22:04:33 +0000 Message-ID: <1488837868.2866.270.camel@caviumnetworks.com> Subject: [Patch v2 2/2] Enable ILP32 mode in gdb on aarch64 From: Steve Ellcey To: gdb-patches , binutils Date: Mon, 06 Mar 2017 14:04:28 -0800 Mime-Version: 1.0 X-ClientProxiedBy: MWHPR01CA0017.prod.exchangelabs.com (10.168.201.155) To BY2PR07MB2438.namprd07.prod.outlook.com (10.166.115.18) X-MS-Office365-Filtering-Correlation-Id: fc5f5635-db09-48f5-b21f-08d464dcc5c1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY2PR07MB2438; X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 3:xLvu82YeaVHGEWkWSA5TwOqngtWg8OJU8eHFCqHQHvce9ntnpQfhe8TiESc9uk3l81G7ZKn4Jpj7CaM/h/8wirCa0R7ZvgOLsfSktgZhdmhtkA5CrmS/snibnOBR6pM57szurNwTfT0UfEWNOu3+r7g8AzhJuJsbOmfRov/cQGcMt5uGOkUKm9JHH5Vi/yBcTTUUa69tGF89oPThDnLhJSaEqPuTSxog2ao2miMZX2ZTfJdqxwgi1tG8ElrmZrMOuihze3oB9M/39XS13yGSKw==; 25:Q3VHzVmDfZzFR4VwbdmYIGrZrnAX8HWcxFJdcBr3xJ9pRpZrXtWmYFk++3WTLUOrnM1QNICRpgDK8fGfVsJYInWF7mNI8SLQweB/9JkGFXubgf1pqAQxyj5/zWxTORPqsNbSV16gEqOcN/P2tZG0WjQciEhJ7B2s/EcpDExdNTwE3sNhnz+lB7jb+rWCDOgvNr63w0SPFQtXWbnXb1NFaKMROYwJjE4UGgHGTwUEZzIhBTH3avtd6qAOrRGpxXWsH6iJ9mQYcWAJdRFdhxQJA9+qstAhgcsRZEBc+Jf6u6Gxw+HLzAGXB0mgCO2nmVUJGuyXSaL5seePMHLPTPvjUMckm9SE1e9euM7FHjaoEdSU5+pFRTZ/PuzrXKytTELDAkqQbkOevmjPfNSpuo+gZRdIIqFmmCl2aqRA6HvYSvd36TIW1vfAt/elTRPtdjPOiYaW+78GOarBIDRAFysHj7/1DhGXvPNgfqqKTXcTf0d9kGrwZZGZK+ZuXzJ2hEDk X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 31:9kq87ObZNdYk7nvd7XB1rzjhcz2Gulkjsvj18UGzwUiezD55a96vpbNYfSXjpDYcy+RY4TB956ZethztFUSbOHnq0VaCsSUQeu9vSKwggrpLyzQyFun0HVenE21Z43noewN2jWh6bRv6pxzlgzHn8flwImC2DpYhOnQhaxP9DnarrCUu0oQvJ6BMCppZnx9sbUZtQx3JfUglaaq7qAMAtdFY6SPOZBN2JPbvrZsjp47d8zvdTGvBseGovUa43QyCSf+b2MAivtB0kKRfLEgw0/F7tXAeLZFR8y94c/IA9adP6Oxeh/jD/SBk5eglnsrM; 20:CQzAv0AAyca3WO6Nk6AqPcmLpIPLgp7N0V1oHSi2m8ASWP24sJTslkoNw2gKFShVGvR9CkOF108Uzl0XrHeJvuqd89XCRhseiaad7kft6s35oZb+68rmFeym3DLhueUr5dZTf2k9d3cTAk4oHp3zUZ/vqLdQyraEMgGxnlU31YRMPVhgzP+jSURkd1DwvGOONgrqZzFJSiDIzS1Z8hT8YtZSISlnP6hz3sBym383Q492TNewmvDd8TRwy8mzdzm6Jl7ZIQM1OVL5UWlkZZX96sYuubeUBPb6pJdTkeHGdcgAzzM+3AylGbnA2mnBg7Sbm9J8CvQEd1TWoIGXwl4IkNKYdSMnCn9VZbJt3uVQk8UTUs6I/25+2WgLN9n9mcKMHnhXDGpv/mVr0YxuXAVt4XdNBJv0dmZvZMKtCh6qubg4e/jXD4vcmTjYgTRunanIJoqjc0NlKKuuu1wMfcUsJjyZOYyNdDcN7DJHpMHJHRiQ0p6M+1WjIldhNjj2mvVQQLtp88nFxy26J1eld14YhFGHn2uYzTpp1FKXFB+vVu23Ht37ivfQTTj9whA2TPIyjmPMxO27wN/pnIvwTGawlGjNw/cW6e8oqEn7vcWJtrE= 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)(10201501046)(3002001)(6041248)(20161123564025)(20161123558025)(20161123560025)(20161123555025)(20161123562025)(6072148); SRVR:BY2PR07MB2438; BCL:0; PCL:0; RULEID:; SRVR:BY2PR07MB2438; X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 4:3egnbWM5a2xE3iiucHzTiTtYalvJ1jVgs88jOoSuvHGh3/ALv8PQ59u1LaSY2RZMWRNS2BzNlRxi0r9seEEHDIeqSYX0g3LJY9A9TXUQqlMhnrp5tEGf5UisbYySpV0w1gGBjpB5S7S+d1/2xb03lmiHAnbTAh0HH60nIOC5pKswNL/5eqOoPRE3V11cbSUCSnqIXLu1YNgcO73HWf9+7NqjXQSRZW8SZH+8CNQ6jB4REQe/faq7wh30iz6eg0h/9jo+yrmGxVnkrk8v2GUTOFD66T+kwkIpkM8SxtnDzsUSQeS7oVQ541tj16UhquYjCmVLgT3N/gqPtILwzLu/h77gQG/hfV4JXKsyFoW1ZPvt3rt2ckFoaaH+P/PpCv0tfSk4yvy7pZOBQ2xwg5i3U2UZB12OQ5MVUejyWJKVxAqTa1P3voABwt3othnv4P0RC1529BZFtCQze5mKBAQRSCH7jMuGcc6V0PZtuVDlUCc3ftKITvA7WlPYdCzXMbqJ/MpRla06bwdLYpUedvkdA1RpsGNdaH3A4+v2PaAtxanBhygOCec8V7BstAXrV5+cfgGTARdsmk+BSAhUPeI0b3fNL1aPE4uIkOWMOJ9C+ZLYv/jl3hOlAaTVSg8dze6L X-Forefront-PRVS: 0238AEEDB0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(377424004)(2906002)(3846002)(36756003)(2476003)(25786008)(38730400002)(7736002)(103116003)(305945005)(50986999)(33646002)(53936002)(512874002)(450100001)(53416004)(42186005)(92566002)(6666003)(42882006)(189998001)(5660300001)(5000100001)(6116002)(6512007)(84326002)(4610100001)(81166006)(6486002)(568964002)(5890100001)(66066001)(50226002)(6506006)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR07MB2438; H:sellcey-dt.caveonetworks.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR07MB2438; 23:FlSXZyNG7jpxEM1EAJ59ueYVvVnns1c3zB+9KhP2o?= =?us-ascii?Q?j9V+6/1ib/hSGlWTVrZlAqlOwlTmxaHk0Hgiu2bcHMl/ZDLPZxcK/HmyvLZd?= =?us-ascii?Q?E02bDFdWNJYVkD0FvbcaJpubx6d33PqB8BDFITp+cgqmGyHnxMOAXj/23wgf?= =?us-ascii?Q?HkOKtKxkmVhEz9phZfDBb2ZORu5c9W3aUPgFXFDitfUztuphWuE3UMR/OyBo?= =?us-ascii?Q?068jMo1WbjwRrYIm5NjKMf6+nhSaJjU2qCO1caOfpmHUm/DBkVq/EiMMhAha?= =?us-ascii?Q?Qw8uxJSf4Ut0lL9IMENMNnc9FZBAd5K7ngzwWsdq5XZyzeWbuZY9Rdi0sAu8?= =?us-ascii?Q?1rLi5c2K5nb/VhYJd2I0jj6R9Kf6FPqBT61dZcpfPo2/eotVkbqzD3cqGgyO?= =?us-ascii?Q?KY/qH1Iqz9n+C+TqNzhCUWK4TnofBKaiWOfSh3N5BceDZ1W5p7ZQH0UuMMWD?= =?us-ascii?Q?7M28Cwj5cPQCVFFnRP9WV8D8Pz0CTi9SUy9PHe5QTnnCCNY4fKMbyTqESEN+?= =?us-ascii?Q?vcEdjBAKa+1LMmpLB6WtR0zRRJ4LcsB3St+kZiNmfcIug2yU8CRaNbOVOIda?= =?us-ascii?Q?urixhnQ/RZkG4LNaIMePlmAbwXeHp6F4A6w0uSGnILHWMnYUvqoI3BwEIgKm?= =?us-ascii?Q?6tHHD5pN0TORb3pRcQPAjr7m7eMhYQuzRj1utti1kOiBMU9HCB8f86kzdDSz?= =?us-ascii?Q?0gERTxSFTYlGANr8kEIAoL20eNQQbGrMVib6MNTdHSZbqcJPa2B4x7jGsHr/?= =?us-ascii?Q?9ppnSHRMbelCbxHjgsqA0+ZLkUGFo706p/2NyuEcu3XmW+2tI0AKIFN4qBtr?= =?us-ascii?Q?OUx4eQ6ASoPyunyM3WT8+syhJ3/6Xse/B5Jd175tWwxlgGHS0VF1A4JUMGXk?= =?us-ascii?Q?7UEMRpSMlrhDVJJaH+W2hvwRqIC9oUQUw3nnr5Vg+Piu6aJR64ghk+SZHfAQ?= =?us-ascii?Q?4+VhWg2hYMqPGF29w4jpCAHZARomy265TRAS/JRko4CgIA4mow2hl7usB0Rx?= =?us-ascii?Q?v0=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 6:keQgsfP2RaRuHDiHm3TMA/HBY4NKif93CVZj9MSBFyNdmFU75K+hAkJZ0cRnWbECwVoBc9h0YW13tr7FEaDniwEkGflxgJPsIddjkszc9xaEhXSzMSPiCYjS3LeOJ/kid2jLKWlJ2p+Cna8h73fI2U9ckvmf37iNOtPZ6DBbK9Zr5bJnM1+rTwRFOYUx9ZTRKdUkHTP0VVzYm78/5UKOuP6Ct8IEfZvHWToXfN9lxrDBZhw77uedXGiLmlmf6dK87yy0SvjYjTsbcK0cTNwXxCWqMaHMyK4PUwcCTFz3GI+vA5TW4tezgsQ9L8S0V39Sj7AU21rDukHA2JuKW4Ke7kQ7UztXEKkFh9O6eM4Pxt7pEhOWcn2nr5K0xVq4M1Z9f/YV9jodAhWi+Mno/b+X6g==; 5:Rza/xUu6pEseD+xjxTF4C9H+JFJ4WF0AaODHs20VqUxxwCY/zW6KTFT7FlDqkQtfhlH2CSpnY0aES+Qq6WDq5QGy1H907q2nC9sm+xyStZziz/N0xRbmN95REdZ8kEWCAmGfm2ZTDfKt/4GXyl6t2g==; 24:DLlztO6bpDleXILG5ZdaQGkYs05C7pM6sSwx41RZi2jWdU1wnZHLRvbTBFZ1abSBSsvFFX/r7/05CzLmU0+ucoo80f0prqfAyBbTSd/Yhnk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 7:ARmusi81trMtmh+Jp0aJmO3xMxiH97c8J4A2RDXQY2IMQ8oZ9St0hQw8f0SF0nqMVyVLhbB9S3Q/VnaX+eEFOZ48JUXUP95nQsRKAtoudU04yYOzGVtkzZFusFupZnP03GE/GfmAvG6v1gWdCIlDl/nVjcz9P6B6SA2ZyAjhJtXW8aeLq3kL1krssSN6/jP6ep1Y4NrS4DZEI19ZXGJLaAok1IXmS6nG/YhcYnXSCLfgsUVRovU/iF5rJ868+32ryUhnYNzeftgF2pvHwXcajK1q65/0INh9wjHAIOflNfCj0vF1Isz1xaVXKiP+5q39SlTKYMpEmv2/k/kA6iuRWQ== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2017 22:04:33.7127 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR07MB2438 Here is the second of two gdb patches to support aarch64 ILP32 mode. This one just has the bfd changes.  I sent the cpu-aarch64.c and elfnn-aarch64.c parts before but I had to add a change to elfxx- aarch64.c to fix gdb support in ILP32 mode. Steve Ellcey sellcey@cavium.com 2017-03-06  Andrew Pinski       Steve Ellcey   * cpu-aarch64.c (compatible): Don't reject different ILP32/LP64 ABI's here. * elfnn-aarch64.c (elfNN_aarch64_merge_private_bfd_data): Add an error message on why endianess is rejected. Reject different ILP32/LP64 ABI settings. * elfxx-aarch64.c (_bfd_aarch64_elf_grok_prstatus): Handle size and offset of ILP32 executables. (_bfd_aarch64_elf_grok_psinfo):  Ditto. diff --git a/bfd/cpu-aarch64.c b/bfd/cpu-aarch64.c index 7cb81f3..63fba48 100644 --- a/bfd/cpu-aarch64.c +++ b/bfd/cpu-aarch64.c @@ -25,7 +25,8 @@ /* This routine is provided two arch_infos and works out which Aarch64 machine which would be compatible with both and returns a pointer - to its info structure. */ + to its info structure. ABI (ilp32 vs. lp64) and endianness compatibility + are checked in elfNN_aarch64_merge_private_bfd_data. */ static const bfd_arch_info_type * compatible (const bfd_arch_info_type * a, const bfd_arch_info_type * b) @@ -38,10 +39,6 @@ compatible (const bfd_arch_info_type * a, const bfd_arch_info_type * b) if (a->mach == b->mach) return a; - /* Don't allow mixing ilp32 with lp64. */ - if ((a->mach & bfd_mach_aarch64_ilp32) != (b->mach & bfd_mach_aarch64_ilp32)) - return NULL; - /* Otherwise if either a or b is the 'default' machine then it can be polymorphed into the other. */ if (a->the_default) diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index c86a3e1..9b82f4b 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -6597,11 +6597,26 @@ elfNN_aarch64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) /* Check if we have the same endianess. */ if (!_bfd_generic_verify_endian_match (ibfd, info)) - return FALSE; + { + (*_bfd_error_handler) + (_("%B: endianness incompatible with that of the selected emulation"), + ibfd); + return FALSE; + } if (!is_aarch64_elf (ibfd) || !is_aarch64_elf (obfd)) return TRUE; + /* Don't allow mixing ilp32 with lp64. */ + if ((bfd_get_arch_info (ibfd)->mach & bfd_mach_aarch64_ilp32) + != (bfd_get_arch_info (obfd)->mach & bfd_mach_aarch64_ilp32)) + { + (*_bfd_error_handler) + (_("%B: ABI is incompatible with that of the selected emulation: \"%s\" != \"%s\""), + ibfd, bfd_get_target (ibfd), bfd_get_target (obfd)); + return FALSE; + } + /* The input BFD must have had its flags initialised. */ /* The following seems bogus to me -- The flags are initialized in the assembler but I don't think an elf_flags_init field is diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c index 1c5c72a..fb62061 100644 --- a/bfd/elfxx-aarch64.c +++ b/bfd/elfxx-aarch64.c @@ -559,14 +559,25 @@ _bfd_aarch64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) default: return FALSE; - case 392: /* sizeof(struct elf_prstatus) on Linux/arm64. */ + case 352: /* sizeof(struct elf_prstatus) on Linux/aarch64 ilp32. */ /* pr_cursig */ - elf_tdata (abfd)->core->signal - = bfd_get_16 (abfd, note->descdata + 12); + elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core->lwpid - = bfd_get_32 (abfd, note->descdata + 32); + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32); + + /* pr_reg */ + offset = 72; + size = 272; + + break; + + case 392: /* sizeof(struct elf_prstatus) on Linux/aarch64. */ + /* pr_cursig */ + elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); + + /* pr_pid */ + elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32); /* pr_reg */ offset = 112; @@ -588,12 +599,21 @@ _bfd_aarch64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) default: return FALSE; - case 136: /* This is sizeof(struct elf_prpsinfo) on Linux/aarch64. */ + case 124: /* sizeof(struct elf_prpsinfo) on Linux/aarch64 ilp32. */ + elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 12); + elf_tdata (abfd)->core->program + = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); + elf_tdata (abfd)->core->command + = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80); + break; + + case 136: /* sizeof(struct elf_prpsinfo) on Linux/aarch64. */ elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24); elf_tdata (abfd)->core->program = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16); elf_tdata (abfd)->core->command = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80); + break; } /* Note that for some reason, a spurious space is tacked