From patchwork Tue Sep 20 14:54:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 672327 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3sdn1m2N1Tz9s5g for ; Wed, 21 Sep 2016 01:37:16 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b=HDw9weYm; dkim-atps=neutral Received: from localhost ([::1]:36150 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmN6f-0004f7-UE for incoming@patchwork.ozlabs.org; Tue, 20 Sep 2016 11:37:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36908) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmMgB-0008Ur-MR for qemu-devel@nongnu.org; Tue, 20 Sep 2016 11:09:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bmMg7-0005yB-Q7 for qemu-devel@nongnu.org; Tue, 20 Sep 2016 11:09:51 -0400 Received: from mail-cys01nam02on0077.outbound.protection.outlook.com ([104.47.37.77]:6560 helo=NAM02-CY1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bmMg7-0005wg-Az for qemu-devel@nongnu.org; Tue, 20 Sep 2016 11:09:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2K6RvqhEqBCKcACPknB6Go6jhOoIdNMToIQmNn7crDk=; b=HDw9weYmf9Qsgf3/3Bs36DV0+GD0M1uj+jB0d4g0nfdtdMrqS9GYvwdWy55oSdQDd5wEO1zVzPw4HiZ7Z7IglCgnQIhNxEukuzv2neFqd1b5qMIk5vUdfh52uc+c9A88N2kyUXqmU6mDL7lKms7XIVfSexH16ld1I3cl0piNvOU= Received: from BY1PR0201CA0024.namprd02.prod.outlook.com (10.160.191.162) by BY2PR02MB1686.namprd02.prod.outlook.com (10.163.27.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8; Tue, 20 Sep 2016 14:55:20 +0000 Received: from SN1NAM02FT006.eop-nam02.prod.protection.outlook.com (2a01:111:f400:7e44::202) by BY1PR0201CA0024.outlook.office365.com (2a01:111:e400:4814::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8 via Frontend Transport; Tue, 20 Sep 2016 14:55:20 +0000 Authentication-Results: spf=fail (sender IP is 149.199.60.96) smtp.mailfrom=xilinx.com; redhat.com; dkim=none (message not signed) header.d=none; redhat.com; dmarc=none action=none header.from=xilinx.com; Received-SPF: Fail (protection.outlook.com: domain of xilinx.com does not designate 149.199.60.96 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.60.96; helo=xsj-tvapsmtpgw01; Received: from xsj-tvapsmtpgw01 (149.199.60.96) by SN1NAM02FT006.mail.protection.outlook.com (10.152.72.68) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.629.5 via Frontend Transport; Tue, 20 Sep 2016 14:55:19 +0000 Received: from 172-16-1-203.xilinx.com ([172.16.1.203]:50692 helo=xsj-tvapsmtp02.xilinx.com) by xsj-tvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1bmMS6-0008Go-TS; Tue, 20 Sep 2016 07:55:18 -0700 Received: from [127.0.0.1] (port=47519 helo=tsj-smtp-dlp1.xlnx.xilinx.com) by xsj-tvapsmtp02.xilinx.com with esmtp (Exim 4.63) (envelope-from ) id 1bmMS6-00074K-QG; Tue, 20 Sep 2016 07:55:18 -0700 Received: from xsj-tvapsmtp02 (xsj-tvapsmtp02.xilinx.com [172.16.1.203]) by tsj-smtp-dlp1.xlnx.xilinx.com (8.13.8/8.13.1) with ESMTP id u8KEmBEG008952; Tue, 20 Sep 2016 07:48:12 -0700 Received: from [172.19.74.182] (port=57008 helo=xsjalistai50.xilinx.com) by xsj-tvapsmtp02 with esmtp (Exim 4.63) (envelope-from ) id 1bmMS5-00074H-WE; Tue, 20 Sep 2016 07:55:18 -0700 From: Alistair Francis To: , Date: Tue, 20 Sep 2016 07:54:16 -0700 Message-ID: <8b5cefecdf56fba4ccdff2db880f0b6b264cf16f.1474331683.git.alistair.francis@xilinx.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-RCIS-Action: ALLOW X-TM-AS-MML: disable X-TM-AS-Product-Ver: IMSS-7.1.0.1679-8.0.0.1202-22588.005 X-TM-AS-Result: No--8.833-7.0-31-10 X-imss-scan-details: No--8.833-7.0-31-10 X-TMASE-MatchedRID: PsyXYoMXnggLazoQyrpm0lVN8laWo90MUAjrAJWsTe/K99fyOVK2z5zN 93wt7ZVSIHjnztybxtX4exig1DmiEXi25HfozijkFxqdoICq+IYj3JVwc0NTtqWoJLlGMFzdhCY Q0GRRnBNDlwNC3ZKKC7W46equGaPPFvu0BQToHVE00dkxYNMRt+3+iQEtoSj4FLXUWU5hGiGXXb gniNYSa8gRjgvldzomPRp04VFul+gP7YVDZjlcy1FgymyXggMtyeUl7aCTy8isYf/cPxFIRg6Tn 9wDc5HXlq4FTUFV7YjqUwd4lb5Mch8TzIzimOwPC24oEZ6SpSkj80Za3RRg8JUEORhxNmxyokxq A5YDwAS9kyxhd8bdjhZ5KKz7D4MAUQf0jVc5O2Y= X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.96; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(86362001)(33646002)(8936002)(5660300001)(626004)(575784001)(11100500001)(76176999)(50986999)(189998001)(77096005)(5001770100001)(9786002)(586003)(2950100001)(305945005)(4326007)(47776003)(92566002)(105606002)(356003)(19580405001)(2906002)(5003940100001)(50226002)(7846002)(106466001)(64026002)(81156014)(118296001)(229853001)(85426001)(81166006)(8676002)(48376002)(50466002)(87936001)(36756003)(71366001)(19580395003)(49343001)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR02MB1686; H:xsj-tvapsmtpgw01; FPR:; SPF:Fail; PTR:unknown-60-96.xilinx.com; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT006; 1:FWUG5ak1n4uOhhCcO3NZzmHmYjVb+mk9UsadAoMduC5tBTSBISZlHMCaA4hMgpFi3cPMhrbJAcY+M+Ou6CynJgQEX9Tms0TjwXRer4UAB30MR1lZ26/2Pv25P0GE50a2Q7w1tY3spWWwbaLd4PH+4sri2yp+glB0vBa3NrWFQHUfXhH0H2ss0VIiD4f9tpqSXiFzH/l1vmybDoNtetNgxtbppKfZ5JnQtIs2O1sR+47bYTu/UcPbBq5m/pEhdH9HsQgj8/6vM0qn/I8q7HFKe2jTLAlSbRfG8q15Y3+FArYVCaOT7OWppt/Q1/It8gpxUeg9HbE8RpzLNeViTdIm/Yd8pCqoA04a2qXcyStccC1UtQwN1rK+0IM4tvozf/U8TI76/ZsUAQL2JC+oe/iNLRJO2QTxDZd1FutE/tPa0M7Uzz7cPt6ImMOVCczXjusYQ1Ycpf5nta3dXue6GmyGA3OQImbSy5v4w7ZnNyhuICF5GOPN3wEr3Mee+l2Cr/Oh35GjSOTGUFt9zfps9JJ2ymOsML3s+bQ7+Zns0/VjCHc/L1y4wdYOm8FRGUcn5w69j04uZBsYGoMTsMynqCUn6KxehIF5OwaRiidGeKUuUOY= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: dd925c69-b8b8-4f29-4ad3-08d3e166240c X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1686; 2:FhP9KSUUth8mOeZS51V0jazNX8mF6YHQ4Mz6HZfgFHEmYwLvm8DHGTakpFrRDRFcbLGF5lvbohFnAM7OqniEtPmEFR4pHrU2np825dpRs2zdGgNt2/FGDju4zFuz8MVmjonmt/zFs8WS4OSstpyFo7I1sL9xTYgA5UPc0bDDB+TtwYaw6xIBDmTeseTbwbgR; 3:ZECLajGtnDwlZmKE+8qhpilmhAXUe74gUF7xWgjTCVTtJeHcrKMWwLV9Q6v09hBqyztgqr3c8Qt8ZudCVQdDA2VTAKs7jMbddFIOpBohsR6e6tuGRX3iRY2w2Jr5a459EXL+LGO+nsHQHZdVvfSfax7gezH9Gmc5M5zNJIedeASLeijV2hOEv5YxJ6o32gfAiZDLhlTLE53UAwDbDJulm+MNFItgyctgzCsLONO3LdQ=; 25:hn4yRY+p7obRtbPyvuoGqOO3cZkZiNGTlS1gjPT/SiGKZKovYTRcnntA+eGltqAWrFl38fAbqL9NQApuWF5FPLGTQFatjSlm5aQsMTH83uGiEm/8EkPoSVhSQPIFGQ/A2/ESbVdI0gWAsqtQd1gv8+757G07yP33/huvu6RD2gZRl8exXGZt/uPxVeQLi1ReSyVuqO5FqGzxMMNx48oNAXS5O6MMkpfW9ktopZmZPYdK3zfDgmzoVJDjdlBL5HFvFgv7//5kE1NNpLCm3WL3EGhpESzHIDzZMFx4VF1oPkn9fb469OO2nytb03f3FddkuvBLGoSC0CQtvjF2WrSl22g19KkCck+Wa6yXIsqcXLl/NO+oRo/9W4YrIJ1sLTg5zmkA2P/6NTXAWxvKPWfDTqnZRztBcTlOpdsf7gRv2hk= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR02MB1686; X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1686; 31:5uIWn4CeFhNh5tEX6d1xfC8GErlSrCgWyB8E2G69ADhXdIelH7twvXrzYO0/rYKoNqlXWsrAkCHO1scMszxfM9oxZfFD1YYyYGmGxFNXJ5d9O99cmwinKQMkXMjcT1Gq8xg66mMB3yd6ExQIqJh7vW/i3+Oxw1/ee6BHjbROiB/zhkpMpg1snfW2Mm/fTfHB03Rdm+O/YFIjrUZuV0rPY7TEOJJLSgIiu9g1nEiPOtI=; 20:bXE+MsVckJ6xJzN6vlnkYXIKA0gIAkI1Gg4+hS6Qpk4RhiV3Rz0scXgZjAM9zVLMQj2yBcC7kmVBbEBkN1+NFPU95DlCNJ1mTyWa4jMXbZDBiUPpVZZvt9NoxpXm24T/PF+FdZ05EYkZnqveFRwcJYVnfr0yPM4vrT1xIkOIQ+j6fRsULw+iKQDuAbeElV3H6S14kKpBQylAQGqmZbWliF/bg+JAO8s3oJKI8ewOj2nuQbzq+zR3vus2sErJwgzkwFGB0odBkNDREXzhPIznVAYTXC/e7ryAafuuO9NCrq2D8c6RB4PEpTdceTjE020spQllv8OVlEV8xBfuP7tKQiTY+vYKglC7USbKaAbNSy8En8nOL9NCEeAAlqt999NDGeO8nKh187sPEwLE3LnCaHYXxi1F4XHYuKTqNjaDfvpmg2vLkyHAxNGvUdu8aXV/jnlzgmFwdaI0zlAQwc3aBN4IlmlCQ+HARpyCpXVSd7liZtFNGECcl8fsh7T1E0r7 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(60795455431006)(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13018025)(13017025)(13015025)(13023025)(13024025)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:BY2PR02MB1686; BCL:0; PCL:0; RULEID:; SRVR:BY2PR02MB1686; X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1686; 4:xAl0pRyB3Umzn4fryTKXzV5AJlMD29Pc1j2jY7XiqkUCIU+zNN0y07EMux4TNhpdf+U5BDrTWe/cT175V+xnP1VgcMLubR40mRsUH0O3AyEDSd7MSZuLYTd7VAxDzMljIz3LrJnhI5HfCxdOvOaLcC+ftvHYtfDEEiuDw8zYNImIhFrj2MMv9lY1nqhyUWOyHV+zyVRt7T0J3Cc8/1fXEOGEx6P0q13JD2q3U3RXTDQAVdOaBumD1sNBYJ/Tk5PoFfSvS7EJy1lQr2c3lDtWePV+s2mpaAMsdvPP1QCEYUks16S1bqPTpBcPibZv68EG4creGJzO3lZ9yZ3EXlCTlZT79QgyzAnKU6EpktEcaZqAssfoALrr6U8sMd/Dx0F/qRRd3Qxh6WP9W8IQKj1gL+zwe4D9hDyw/dvG+OEvlOxbHdchjFUZJPrXak/1lFbMfbNImjS97KCOBskZx/MIKDFMYeULol6yMjknRoKKpraktvVmwITDHkyI22t6i7pZU8qZTxMtuH5ZESJeoPbHlrlBNITtJ2cZNnBN0FbOQm3EkWK7ZvjRCl64hqtNHjKryOhadPfiuX7PgBdua5R70Q== X-Forefront-PRVS: 0071BFA85B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR02MB1686; 23:P8URRbBFqz/zQ4k2+SWxFg+QXJUYYdEinA9j4w9qB?= =?us-ascii?Q?qjm4PDcWI8MwvHlCAEI3XTNoegEPiRHZG4daoRoI4Qx82J6afFKqEsp/KkbA?= =?us-ascii?Q?gm0juE4mDTJZIZGomDo6tB0HLwbSOVttypXjDHM/0cYH8ZNlcShVfzcJFUnv?= =?us-ascii?Q?34ZnWa/yHdszo1n3DdcY2/4oRo9TtELVhrzsy1Uv2bbOfHkPOuzcKguegJ0L?= =?us-ascii?Q?soZRPSZbh+7jqGhrHVYRjK9Tc0KVo2B+BvOOdNceXuIaZMvrUWMFBZr7uD9f?= =?us-ascii?Q?nmRCa5zbLmTpv0WxOWZyBrg8myZmE/O89aJcQxDkrmAukWSPpCh5afdCwVJA?= =?us-ascii?Q?U2T0u+r78MY4vj261ImIOzzWoxlOaRzyeSM0o80H29DdnzlpiH0suSLm+EH5?= =?us-ascii?Q?RzF0hYJouphoDvIcve0Nt2wQtnm21idSuQ22kV7AkR37umLuoPCtK0B49fTm?= =?us-ascii?Q?TsfeKszhJAD2IxdI/ZW1McPgvsg2v+ThJpEXieEP5QUfbmz7/t0hmpemGofG?= =?us-ascii?Q?h6VJrh3aTg4b2/eQyl7pBQHt8aDyyv/T+sbQEW3OT5NL4gQfnD+GY4oFYYfT?= =?us-ascii?Q?+9qlHvpaSMuww2bQ+U0kx4rbSm/+buwFa/+jQjH0vGr7W2qkEga4cHjQ8+1D?= =?us-ascii?Q?6IaAeetqHh2bk90slMwXEUs3cwk5r6MTBtaJiuhKyg5wfuG//p30LPbXI4qC?= =?us-ascii?Q?TPeaUSfnTM2YXlpMMs90tXav1S1ejarvKzBw8nGAHotgqHLFqToWx47+MzQE?= =?us-ascii?Q?UwngC4CxTpVcM9mXxXhbvqif0ZJr20Td+9yhMWsrrfTBa0HxGIAfgCo2qtSV?= =?us-ascii?Q?LZFyVEjW2JleAdd1kP2mUN0VLamSa/1L9Stk4YIiV+TFf8TdOA+up1cvmohv?= =?us-ascii?Q?aifvRs7f/d4+CROCSJISZpj/xGB67c8xGpGgwVc5l4QuuAnrY0ZBKx6e9cS1?= =?us-ascii?Q?nEGyVPLjZhX7BbzM1PhNrZHdC9v6Hg4YV8Pq09OGQ2W0oIEfS8L27hZmIBgV?= =?us-ascii?Q?A7ZvaKl4slStrgCmEAoAtMcwWhKAOjR0kybNq25HRc+XcgmY7jMRIrkYc5mD?= =?us-ascii?Q?fp84w3w3Az/ef2kF7fH4wX227EF9OPBxwhlOWKN5XucPZIDcOQU9bq9PCRvX?= =?us-ascii?Q?EISJd4+qogdAnu5T2qZi3OHjju0nfrtVOK77f05yc5IqH+XWql1B0T/2ivdw?= =?us-ascii?Q?9EJXFOcrQ2mRXIEFvrMNpUIw5VhCQrdFWrgKLYOfZp5dZPtEnpg6V/MkA=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR02MB1686; 6:XB9GyXhIp5FxmgLQKnRByWE/Y4AEHwxSYNC/lCaeT3XsuAmy1dd6BpuDu+ny9gjDjRN8J9BK5UXqXRnCfv36Dk/PQ78StzDiwYlDm6YvX2m9YeIyZFBXBoqekzAwKAThbKVqJR7aha/ZfA287bkq9Q+S9R58wT9mfPWnJvk8428STo2uDqZu8WqZaEDnpRmMKPgVVAjca+n4ti9uJUFiAI4I42wEd4C60b1PjhZHG8kjPw/69uag7lbprppJIHnqQL4ehLe25I7p4cQShZdEEz1Ne04B81T1YGWCOF3I2yiWsxsa5g8g8QA1ds+g4Fj9FvDY6uYB/DRy2fQUrwnbLw==; 5:jdZaSvNKtrpZq0h/AmvKsaOcbeJmJZF1Cy/YITTJprhD/8Is20A4UMk2muPOEKgaWx3d1JaouAfY7NmBRoGHSLBsJpPYj+fhTX/tPLJlUIOlye7lK+jld5PhAf3+cirp6GQ/AKP1gXo3HU0N0Lr4+A==; 24:fkyDqX5zuVnB0LCHwCJ20gbQdkdHsaXUUnMuakm72IkoupHkyIlGlY9qAGJddTh86Rj842JY0V4dBm3PAXtidGjKVAzRHjfw0Xx2gXbhcSw=; 7:FeDvv+wf2Li7tqvqRjFoiTcy+afvoXkjnJLjbnrjoadLcv4Ho8v4iL7nL4tB0WLAkT2hxpnj4Oinmyw1+T+Nihsf0eU1z2M8UUjMDQwNotV40vPmvZST+wRqicRtbm7d/DOm1neolYqOaz+/Vep9bCTdsoJjs6+e8bNHg14WwzPjGrKfwbh/QU6+6iit+Y7ay1E8Oc4vWVOLTPuLyFXNczKdAU9nzQJU3qEU5ZDwQW4biJnQ2AKN3eaSm+BulhIL7E+dLsfM3y7gG/fwdnF3eJdg5ZYG1VJBB93Pgp/0w3odTnWkeDJCFXLYPWHzaHWc SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2016 14:55:19.3789 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.60.96]; Helo=[xsj-tvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR02MB1686 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.37.77 Subject: [Qemu-devel] [PATCH v11 4/8] loader: Add AddressSpace loading support to ELFs X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: cov@codeaurora.org, crosthwaitepeter@gmail.com, pbonzini@redhat.com, armbru@redhat.com, alistair.francis@xilinx.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" Add a new function load_elf_as() that allows the caller to specify an AddressSpace to use when loading the ELF. The original load_elf() function doesn't have any change in functionality. Signed-off-by: Alistair Francis Reviewed-by: Peter Maydell --- V8: - Introduce an RFC version of AddressSpace support hw/core/loader.c | 16 ++++++++++++++-- include/hw/elf_ops.h | 5 +++-- include/hw/loader.h | 13 ++++++++++++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/hw/core/loader.c b/hw/core/loader.c index 56c593e..31cbeac 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -417,6 +417,18 @@ int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t), uint64_t *highaddr, int big_endian, int elf_machine, int clear_lsb, int data_swab) { + return load_elf_as(filename, translate_fn, translate_opaque, pentry, + lowaddr, highaddr, big_endian, elf_machine, clear_lsb, + data_swab, NULL); +} + +/* return < 0 if error, otherwise the number of bytes loaded in memory */ +int load_elf_as(const char *filename, + uint64_t (*translate_fn)(void *, uint64_t), + void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr, + uint64_t *highaddr, int big_endian, int elf_machine, + int clear_lsb, int data_swab, AddressSpace *as) +{ int fd, data_order, target_data_order, must_swab, ret = ELF_LOAD_FAILED; uint8_t e_ident[EI_NIDENT]; @@ -455,11 +467,11 @@ int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t), if (e_ident[EI_CLASS] == ELFCLASS64) { ret = load_elf64(filename, fd, translate_fn, translate_opaque, must_swab, pentry, lowaddr, highaddr, elf_machine, clear_lsb, - data_swab); + data_swab, as); } else { ret = load_elf32(filename, fd, translate_fn, translate_opaque, must_swab, pentry, lowaddr, highaddr, elf_machine, clear_lsb, - data_swab); + data_swab, as); } fail: diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h index 4744d11..25659b9 100644 --- a/include/hw/elf_ops.h +++ b/include/hw/elf_ops.h @@ -263,7 +263,8 @@ static int glue(load_elf, SZ)(const char *name, int fd, void *translate_opaque, int must_swab, uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr, - int elf_machine, int clear_lsb, int data_swab) + int elf_machine, int clear_lsb, int data_swab, + AddressSpace *as) { struct elfhdr ehdr; struct elf_phdr *phdr = NULL, *ph; @@ -405,7 +406,7 @@ static int glue(load_elf, SZ)(const char *name, int fd, snprintf(label, sizeof(label), "phdr #%d: %s", i, name); /* rom_add_elf_program() seize the ownership of 'data' */ - rom_add_elf_program(label, data, file_size, mem_size, addr, NULL); + rom_add_elf_program(label, data, file_size, mem_size, addr, as); total_size += mem_size; if (addr < low) diff --git a/include/hw/loader.h b/include/hw/loader.h index 815a8d6..fdf0a51 100644 --- a/include/hw/loader.h +++ b/include/hw/loader.h @@ -45,7 +45,7 @@ int load_image_gzipped(const char *filename, hwaddr addr, uint64_t max_sz); #define ELF_LOAD_WRONG_ENDIAN -4 const char *load_elf_strerror(int error); -/** load_elf: +/** load_elf_as: * @filename: Path of ELF file * @translate_fn: optional function to translate load addresses * @translate_opaque: opaque data passed to @translate_fn @@ -59,6 +59,8 @@ const char *load_elf_strerror(int error); * @data_swab: Set to order of byte swapping for data. 0 for no swap, 1 * for swapping bytes within halfwords, 2 for bytes within * words and 3 for within doublewords. + * @as: The AddressSpace to load the ELF to. The value of address_space_memory + * is used if nothing is supplied here. * * Load an ELF file's contents to the emulated system's address space. * Clients may optionally specify a callback to perform address @@ -71,7 +73,16 @@ const char *load_elf_strerror(int error); * If @elf_machine is EM_NONE then the machine type will be read from the * ELF header and no checks will be carried out against the machine type. */ +int load_elf_as(const char *filename, + uint64_t (*translate_fn)(void *, uint64_t), + void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr, + uint64_t *highaddr, int big_endian, int elf_machine, + int clear_lsb, int data_swab, AddressSpace *as); +/** load_elf: + * Same as load_elf_as(), but doesn't allow the caller to specify an + * AddressSpace. + */ int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t), void *translate_opaque, uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr, int big_endian, int elf_machine,