From patchwork Wed Aug 3 20:06:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 655594 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3s4PQ84qCgz9sxb for ; Thu, 4 Aug 2016 06:13:04 +1000 (AEST) Received: from localhost ([::1]:36485 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bV2XG-0006by-Jw for incoming@patchwork.ozlabs.org; Wed, 03 Aug 2016 16:13:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32893) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bV2S3-0000l0-0c for qemu-devel@nongnu.org; Wed, 03 Aug 2016 16:07:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bV2Ry-0001dH-QW for qemu-devel@nongnu.org; Wed, 03 Aug 2016 16:07:37 -0400 Received: from mail-cys01nam02on0044.outbound.protection.outlook.com ([104.47.37.44]:56672 helo=NAM02-CY1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bV2Ry-0001cm-E7 for qemu-devel@nongnu.org; Wed, 03 Aug 2016 16:07:34 -0400 Received: from SN1NAM02FT005.eop-nam02.prod.protection.outlook.com (10.152.72.60) by SN1NAM02HT057.eop-nam02.prod.protection.outlook.com (10.152.73.96) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.557.8; Wed, 3 Aug 2016 20:07:26 +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 SN1NAM02FT005.mail.protection.outlook.com (10.152.72.117) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.557.8 via Frontend Transport; Wed, 3 Aug 2016 20:07:25 +0000 Received: from 172-16-1-203.xilinx.com ([172.16.1.203]:38989 helo=xsj-tvapsmtp02.xilinx.com) by xsj-tvapsmtpgw01 with esmtp (Exim 4.63) (envelope-from ) id 1bV2Rp-00026K-2F; Wed, 03 Aug 2016 13:07:25 -0700 Received: from [127.0.0.1] (port=35817 helo=tsj-smtp-dlp1.xlnx.xilinx.com) by xsj-tvapsmtp02.xilinx.com with esmtp (Exim 4.63) (envelope-from ) id 1bV2Ro-0000lF-VO; Wed, 03 Aug 2016 13:07:25 -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 u73K0aVU006703; Wed, 3 Aug 2016 13:00:37 -0700 Received: from [172.19.74.182] (port=45296 helo=xsjalistai50.xilinx.com) by xsj-tvapsmtp02 with esmtp (Exim 4.63) (envelope-from ) id 1bV2Ro-0000lC-8F; Wed, 03 Aug 2016 13:07:24 -0700 From: Alistair Francis To: , Date: Wed, 3 Aug 2016 13:06:43 -0700 Message-ID: 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-22490.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 9wDc5HXlq4FTUFV7YjqUwd4lb5Mch8TzIzimOwPC24oEZ6SpSkj80Za3RRg8OKUAky74EcaLIyB oAH+sAXQL+MQdz9ivt9Fyfdq1oHQuqy7mgT409o= 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)(199003)(189002)(85426001)(575784001)(19580405001)(19580395003)(8676002)(36756003)(33646002)(2950100001)(586003)(106466001)(77096005)(229853001)(86362001)(47776003)(81166006)(76176999)(50986999)(9786002)(81156014)(8936002)(92566002)(5003940100001)(189998001)(71366001)(50466002)(2906002)(356003)(64026002)(7846002)(118296001)(5001770100001)(4326007)(305945005)(11100500001)(105606002)(7696003)(50226002)(48376002)(87936001)(49343001)(107986001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1NAM02HT057; H:xsj-tvapsmtpgw01; FPR:; SPF:Fail; PTR:unknown-60-96.xilinx.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02FT005; 1:HMqi1yJLtpYwOm3vb5Mel2+aeV5+ZyaCl0PKTSvKmrAVVuetgIrwOD1GaoXRsavD2fEOcronQ9KHPMMXWnaBriOPYFdGm6YP7aeZ7CU0/pLpYl8jqW7BzYFOajRrIyA6Uoijfkc6FEiE0G7zBAdKscFSDX2ADLwP4fIeh/TNUOWcBH1AknFLDApwlVT0qZOw3fpIE0HXsk25EOu+U8jbKxGOh/T5p02XZbUhRL16vsdf195VuuT2AFubAslUrmyZxu+BY1dKYG2gFTs7YgYlNqvpvnsDVgigSIn65VM4IOiZyywCbHY32FbiSHTXDZVFc2iyachNf/E9hubsOSLwsOnM/BZSTbW6DZK2DENeltF8oc5FQcRiaaENZQxr9+jjD09CdaeVME5Y91zYDJyKizQ/90aC8NiP86ff/acCg86wUBzRSuR995G31K6hJGDyV0mScBEm8Gkm08EKwzr4JHCwRTasl7ivYNWXu6nIKFtNKFJv6TReZbWLVGNC0mKcjSOFtlmXhshvC9IngmfA0WrlLtGbyeEjCZXQHB+SseYaHHtXqdlxdj0ZDJalVfjs4n7lFFMdRKDFb8XGaqfScdTngOefw5/q7UtLAHobbfI= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: d91c3384-3ad8-442d-5478-08d3bbd9c9f7 X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02HT057; 2:eVJqnCLj28kZHq25vmX1ryIfdyAZmc2LKgRZESTKt8P7irqwohEOFtWHwzcuX3Gv8aUhFu5jINq9R8sRHFHo3N3tXfni4NQg2FGvzJr0cjJm4yWW8Vl/f01dxbpTGHcNF/4UoitUbTJ7oZA07axKcmqZWdOzzkWMomcHryGHpv9IIDpzRNak4CGleICyw+d7; 3:cQSoAom8zujRA2lyMrpCI9mOHRm78YNSi5+HAbjUTvNx+dTwJ/qZ2Z7L7OfVkNRrOvMR/5NB8L/LeYslES+5cQMg8Lgoc1mqBto4lG0yyWDGytfYL2h+LeJ/BGS2cWQIKZoHD1TjDQ+dtplL/4eGKaJRRNdluoeqTmcGlfX60NNoMqRn+MRlM/NXA7f8m8jMOLxxQI0K+z/VQ3N/JCavwKRboyyB+CaYUMzjgE3Hgjo= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1NAM02HT057; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02HT057; 25:hAIipDTQXCG3QNdRAT2vJ1I2TOYaLPHXVHXKLx/p9Bs5SFVoYKEVfJ3bxUa7XwCqBsg4PNbQuHl9W2fX6UeQmLgdQUS0NtKd/ybsi5E6XQfX2pJgnA5GBORPm6BY4zuw2ZTgZ3We7pENNLgYiIBjdq76fMEpyworE700WvqeaokR6IFrFzz1S7IwC/zSpCCqFzNkEDxUG/R3VTtnZRAMBDrLOKZYJu54KHIU+cMZJNF0Exmm8OWi9CNDBL6qxP6kSyRBM8c01RzmDYcPjk3jPPs+WqV2ipwrYuChQjDIWoA/JIokfDwtRWxQSZG8BP3zSaC51WfvIa5hUxVmsolRf9W4wlCmNojhFbbpGTMuZnIPkN/tAFfIVMIbS7is8OC4c2ravZmp4WnS/rnvgrM0xfxrJTJabpOzUfUcN8DM9FUOIgaQbdrUWqx+yejJXNv77z5sgCulfEw29t+xb8jpaxdeUBF5b52akOu/z5l6jsF5nEegr+T6blE6rYz4tkD1Q2uJfKW2VivazpWxirDraEKj3/2OTgglACSvGmoRoP2ApG5cL4TwU+16+xOew6cwx0qivpwPqRExzfQSjj+ggyO0fzZiz0MrY1U20Q59s4RK4SuRhqtheH6w+g3O60opl2prVC5heZ4+n7Sf7c0Mbi4I5GwCebmX4yUkDbkVjI80PBqzCIZruNSYs/FMAWxUDqstvIvWp1x88ob/sffuPYrJTNaudvjd0DpqIDkcxn3O64XXnG9XheWNsVpS1XV+xDPjefnByGEV0gEKlwkyMw== X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02HT057; 31:h71dh8/zmQAoLBWR9HZlg9cVzapU4dshRamtoQ0qRxRJnxhwwLoE7oaWuKa0siSdH6TGEy1ynevl6eoAmVfF9QbxDkbJPImRweD94VdluVce8w51tApBqo66bae2cm2EDcFwS5mvJViAABxCI8KobK9pM8hKA5dT1owRgZELASp32S9nQtnHcT/LQBzCSrj9mx1LJCfZ/TtzbKdN0lYQoKi87y1E8+z39wiIF8JR1/I=; 20:p0bqXDXrdS578ymG7WY34iOb/KwQJwgVPun5YYWaG+W0y10pYLSVMttoA8p5q10xmksJ8Uof3FUjeyVjfoL765JFxmFq/QyCtXwttZbvv1WBtEV66MlAjG42ojZUMVYvaEgUdm6rLrNJSkJIELlR3xlA0O5VOewx1ZeiPc9L+dkRU17hTQVytdXkjkEqIcMHtOjgrJBxWwwjl75nzLEdgpYRJ28GhSGyUX305xAs62GnhXBVLFu9JIdiKSJBfBEaLtMe54UViqOGpuAhR50s+QkZNOfwzbTWufy+tVzHq3MAWMnb4+/GAseZcDe0kPe6LnkuG+esshNzH3p8EMpEgn/45XIhxd0Qionag51Vk+/t3l7YC/L8oMi7si/OQyIe/1ZE5rriIsizlMOIdGCsH7+tGsMr+jzw4XU9Fz66lNt8ut7Zaxxc/Qi5bebja5fRHdyAkXEqF52dx9oopAGPT9AQlDibuh809i3L4Hd5glUM3pT5304LsiMOmpHRU58o X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(60795455431006)(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040151)(601004)(2401047)(13023025)(13017025)(13024025)(13018025)(8121501046)(13015025)(5005006)(10201501046)(3002001)(6055026); SRVR:SN1NAM02HT057; BCL:0; PCL:0; RULEID:; SRVR:SN1NAM02HT057; X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02HT057; 4:jX6q1Sxc63SoIAYL7LRkgi3abDi8hREdeBvyvb7owbgai40WGLe7OR9a20fDe6C/USozwKWCV1guGtWj6qY24NF1VtA70gEeUQqG5/K2XX0Jlb2UZjrzobzgCWQb/ZQ7NTPJivhOaBAyb5lkz4Fi+wf52L8mjjPFh1rWv/i59XX3/yILvq1llRIUOjTRhDIz46RpPdFS/hxkjRIDRA4w49mgO8LbuI15SIjsbNPtnp5or5zICmX7oMTnPgxZ+awEAZO89wGVEqGC+Nw/iBoJEscP47qliB2/1LE+ZDbpRZpDfWLfNvB4dZUZpKaCooACXSWiQdJ27byxdlFEphyLzaf/hPGkljaHi7WJa/dVCzj6c/NPvDcH5goQ92N/FoZE7qpfEsHSAX/lYeDCasqk+L20XHXM374dI/sIXC71vuwJE2zYVfzzqB6bU9z6HIRytYwaYXJGP7G69uK5umm13BIA3n59q2TZWJ6vqoogDnA4XtMBV0mJmO3z+gnmue8AdnSwmvaNl96ErZQJ6JVws/y/r11ACpqJicZauXGosfDl+h+EZRR98HxFC0u2dl2QGm/YX9qI5x8JVf641R0TIg== X-Forefront-PRVS: 00235A1EEF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1NAM02HT057; 23:SVnH6X99BOgMjIJGOqcGKn1b8D+9YUCG8VoaA1lXO?= =?us-ascii?Q?euFCwwJ2EzgVUWXTcTJWCUP4AnHX4LH0mM8xMvtNeLbb3wPeR2ESH5h4EORd?= =?us-ascii?Q?jE+4gWVIZEsIB5zutiezO3Ia/b6lQSDpLiUsUCw1+FKVjTQ58q7YVllVNDWA?= =?us-ascii?Q?gP4iOYIiF62MjW7pY6JNFfh1aAKU6yTh+g6jar8lv+xi+502olefqwlMNVhe?= =?us-ascii?Q?RGbk5RUccwqhmL/ScasD6TPjrLFg1yueNX7u5utOCXzZwAB0xkqw15vm7BYK?= =?us-ascii?Q?icyiKX0v3tO6ohDiWYqwl8TO6NYH6AmilYOgarnxeemn9iSmGRG7nfHkIQvI?= =?us-ascii?Q?r+q4pn0hEEJ7kjkvoizs/v6E7CsNhJw1b/nHKmWAQn3VHGCtRlhv8zbq6qtH?= =?us-ascii?Q?uHw0QSEaAy3/NK/w26WEWHxgGiemWkfZPe6sLEsp7Q0nvxPQ/cc6zoCK7YSa?= =?us-ascii?Q?GI4XiZLJLlS+gO7a74V5O4DaiT732vFDW2Zx0SeTnhTfXUvk5fEOsh8RzLz0?= =?us-ascii?Q?GGPPFZiPkx7ujBr2AbsblciA3YwHPxPuv1JxvytRmNb9yUmnilCKj9fvd/Yi?= =?us-ascii?Q?0Tk6rWikJwTQb6qW/1A5tBZHdYM1Go1j7JKhVtjpY/YS/gCX/+OnMa+HPbr3?= =?us-ascii?Q?Dlisv2RicoV3U/52fVGvHmB/5wJCUCafx4zyjpTfWLfAiChDHiLzPZwn3u0v?= =?us-ascii?Q?OwtI40J1An68UFxsOKZbHuH+lk7BjlASini8iwTWwBDP9b7VxyMcHLRwNjYz?= =?us-ascii?Q?HwS1UBMa5cWBbSGEHcRbGr8iA296P1BdakHwbwRyXwI9xXH4bGvqY/I0KyIo?= =?us-ascii?Q?3lHJH0zKVEXqPnn03j3MrKL9oo94t6l9narOPE39Q1N+OCDctxk3rs/F6x/7?= =?us-ascii?Q?zY1s75QlUo29kQL3w0qR3b5g0aezlZfj/8qrfwb1ixOaAPmNXeKBnrAsX8+R?= =?us-ascii?Q?4cNynTesqcA+/C6mxU0uZC1XXtlFLbJrjjiltw84mTxEtpUWISVwsLLUreR7?= =?us-ascii?Q?IUR7O4p0zIArhY1zriLhvMOCuhElfe2wmf+IEqxyyLMwqfdCWCf4csHrzBTD?= =?us-ascii?Q?qr5etz1SIJisUDEzTKvplmk7I4pMoVVdtz+r7mKAxwxZnyDrmf4vzvsVIv8h?= =?us-ascii?Q?pZytorVOBJhz1mBQVCqg6VQr5mGVms5K0u+pXZ8ZB6r8+CGwXLYRoBwC8aYs?= =?us-ascii?Q?EFaLn4Vw6Mz5QUi+f9g9W84s4/1wEG1hper2tnmcMcdRTFzNXIafS8fgg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN1NAM02HT057; 6:WAgFevb1w5R3GeDM70Z3BP9CEWNPBB8U1ksdrTGsgQ8k9ovYpbn0C49GC6xU4MI2CgEgqUezcS/SifBiykJ48Eiue24vJbg9ooBRcX6lZtd74lP1Xk6zDH+GQXnh8BzqivFI0cSA38DRzkXhKJ+3gYBXC9lMNvosMiWydLTwDnktTkIL4IGLT6hIGQxQgELT7APF2t32JsVdhKzw4IaDw5o7sWIicprv99scSzUKb/miNNtxAyE/+XO/EpWfNY+t2vrIOCRybXC6zKSWTWNhlZu2DFeLXvwppKcfC+bugfJc0qcY0r6Zq0YnVj8WBrjXmJTsXFveqqr4ZQwYhFNUCQ==; 5:41wWBEvKncDdO2qoqejC4vEQdbltv3cQ9q9lSRnb3fl3AukfH9zydxaSwryTv3KchwWKSk7GEzHGvrpl4bKdHEc/mOb2WOpY37Qmnk1pisSXQ2WFrdrR+IQSXE2FnklnGcJT2tCpFSeIqQZlEiKqDw==; 24:ciPydGpeD5G6HnY5gwAwIjrSCR2e7lkb1IXMMoNDWAWJBztOj3f4f3mDE9s4RtwG4d6eCwhufhV2rkyLMjflQRlYpQ7P0eQkzTJcLBY5/tk=; 7:TWW3SQXLNrov/qXXAa4GmZg+YvU07rIb2zuuB06VuSXZPGECV7keZogRWmNlqX5e+Pa+Zip0e97P9DEaP4fFiJaTLzA7ZTsbIwQoc866nfEk7cauFCRioH0Ktf2+xy7hDRsVYbjxQ6mPOR6fMvYzA/J8YS3gCFtKVF2gYluF9JOZ4HRNCRDJvSal4feHm0khiMKgD0hAwz5wdXELdc6QW76uDlwwFCry6pufxkNOwhm6l5zA7tiT/7cOZ1vETGmj SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2016 20:07:25.6817 (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: SN1NAM02HT057 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.37.44 Subject: [Qemu-devel] [PATCH v10 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 aef7bc9..0a17faf 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,