From patchwork Fri Apr 6 15:17:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 132927 Delivered-To: patch@linaro.org Received: by 10.46.84.29 with SMTP id i29csp919793ljb; Fri, 6 Apr 2018 08:24:00 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+qgrdSq8odAXmTXMydDKGnCcBO1Q8AQ1QNYKVgz27Y2seXxesUrmvxoIj5KeIOc5xZjGgx X-Received: by 10.55.214.7 with SMTP id t7mr34682764qki.341.1523028240830; Fri, 06 Apr 2018 08:24:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523028240; cv=none; d=google.com; s=arc-20160816; b=KqTE0WFWa5dnM1JhBIPKLhCOLoQHHZpMsc1k9TyMMFMhmrp6iyi4OQ56j70cm259E5 fW0ciTVvW0aN4UjTKxE+4vfCvsVXcZzoHM4Fy+GMwkWonoIWCw+qZidnQ0XxAj80WtTE yBEZUYRMG3/siMqspXEOTF16kS74eTOum6igBKPp7ffAkoHVyyx2eCzq6fUPhFQxkWoQ aJBlbw7jU4i55fXclOK7UmukGFEjiaG8GAj+17nK08Zany7XXkYMDdhYDwmkkDzdFZ8z uaOllPGRRIY8GnqmiWG8N/BCkmjsrquE35PQ4M39xyiQOfLE0IWHZjhPVEOYgTfVvS0o KZsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:message-id:date:to:from :arc-authentication-results; bh=6wHb4v98YZzmOh9ddF7SkkO1igYQvTZCi0a6cGTi+rk=; b=Iz/XFzBJ0129D2PHjKy6FzmGgnfuECiZVNI+w5zDnsZu4R4IYYzVtoyBZw2O2W6sjk Ee5zcCrv8/JPVnxqreZV8K8ChnSa4ccPPKK+TSbYF3ZYz8dOLhjihbaZcayIS82gV2w1 zMIrT9pd4CaQ4R9MW5GJg6Hnohsnk2nMFJ2v0oqFZwc8qOU5FnzIJ5XD+y33kid1mnzF IMtdj2Twm1LnzzF2DAyGtC/p1vMgZiA6c/2b3tiMjCNRPiavetGi0Nx3oeFDRd8WD85z rLALQQ17Ia4JqvcWpjffWyrfq4EizSQjOci83a4z4OeKrk6997Y3oytEohtHPWsbulRo 03qw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id z38si1017710qtb.349.2018.04.06.08.24.00 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 06 Apr 2018 08:24:00 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org Received: from localhost ([::1]:34045 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f4TDc-0008Rg-8u for patch@linaro.org; Fri, 06 Apr 2018 11:24:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60644) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f4T7u-0003Yk-VD for qemu-devel@nongnu.org; Fri, 06 Apr 2018 11:18:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f4T7r-0004GJ-KT for qemu-devel@nongnu.org; Fri, 06 Apr 2018 11:18:06 -0400 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:64645) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f4T7r-0004C4-Aa for qemu-devel@nongnu.org; Fri, 06 Apr 2018 11:18:03 -0400 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w36FE8aE020618; Fri, 6 Apr 2018 17:18:00 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2h1ysxp43t-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 06 Apr 2018 17:18:00 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id D3DFF46; Fri, 6 Apr 2018 15:17:58 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag5node1.st.com [10.75.127.13]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 5EFF4A552; Fri, 6 Apr 2018 15:17:58 +0000 (GMT) Received: from gnx2104.gnb.st.com (10.75.127.51) by SFHDAG5NODE1.st.com (10.75.127.13) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Fri, 6 Apr 2018 17:17:57 +0200 From: Christophe Lyon To: , , Date: Fri, 6 Apr 2018 17:17:28 +0200 Message-ID: <20180406151752.10854-1-christophe.lyon@st.com> X-Mailer: git-send-email 2.9.5 MIME-Version: 1.0 X-Originating-IP: [10.75.127.51] X-ClientProxiedBy: SFHDAG6NODE1.st.com (10.75.127.16) To SFHDAG5NODE1.st.com (10.75.127.13) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2018-04-06_08:, , signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 62.209.51.94 Subject: [Qemu-devel] [ARM/FDPIC 0/4] FDPIC ABI for ARM 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: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Hello, This patch series implements the QEMU contribution of the FDPIC ABI for ARM targets. This ABI enables to run Linux on ARM MMU-less cores and supports shared libraries to reduce the memory footprint. Without MMU, text and data segment relative distances are different from one process to another, hence the need for a dedicated FDPIC register holding the start address of the data segment. One of the side effects is that function pointers require two words to be represented: the address of the code, and the data segment start address. These two words are designated as "Function Descriptor", hence the "FD PIC" name. On ARM, the FDPIC register is r9 [3]. This work was developed some time ago by STMicroelectronics, and was presented during Linaro Connect SFO15 (September 2015). You can watch the discussion and read the slides [1]. This presentation was related to the toolchain published on github [2], which is based on binutils-2.22, gcc-4.7, uclibc-0.9.33.2, gdb-7.5.1 and qemu-2.3.0, and for which pre-built binaries are available [2]. The ABI itself is described in details in [3]. Our Linux kernel patches have been updated and committed by Nicolas Pitre (Linaro) in July 2017. They are required so that the loader is able to handle this new file type. Indeed, the ELF files are tagged with ELFOSABI_ARM_FDPIC. This new tag has been allocated by ARM, as well as the new relocations involved. This patch series has been rebased on top of QEMU from 2018-03-28. I have also rebased the GCC patch series, but it is still WIP as cleanup is still needed before I can request a review. It can be useful to build a preview toolchain though, so my WIP branch is available at [4]. To build such a toolchain, you'd also need to use my uClibc branch [5]. I am currently working on updating the patches for the other toolchain components, and will upstream them soon. This includes gcc, uclibc, and gdb. This series provides support for ARM v7 and later architectures and has been used to run the GCC tests on arm-linux-gnueabi without regression, as well as arm-linux-uclibceabi. Are the QEMU patches OK for inclusion in master? Thanks, Christophe. [1] http://connect.linaro.org/resource/sfo15/sfo15-406-arm-fdpic-toolset-kernel-libraries-for-cortex-m-cortex-r-mmuless-cores/ [2] https://github.com/mickael-guene/fdpic_manifest [3] https://github.com/mickael-guene/fdpic_doc/blob/master/abi.txt [4] https://git.linaro.org/people/christophe.lyon/gcc.git/log/?h=fdpic-upstream [5] https://git.linaro.org/people/christophe.lyon/uclibc.git/log/?h=uClibc-0.9.33.2-fdpic-upstream Christophe Lyon (4): linux-user: ARM-FDPIC: Add configure option to support loading of FDPIC binaries linux-user: ARM-FDPIC: Add support of FDPIC for ARM. linux-user: ARM-FDPIC: Add support for signals for FDPIC targets linux-user: ARM-FDPIC: Add arm get tls syscall support configure | 10 +++++ include/elf.h | 1 + linux-user/arm/target_syscall.h | 1 + linux-user/elfload.c | 35 ++++++++++++++++ linux-user/main.c | 8 ++++ linux-user/qemu.h | 3 ++ linux-user/signal.c | 91 +++++++++++++++++++++++++++++++++++++---- target/arm/cpu.h | 6 +++ 8 files changed, 147 insertions(+), 8 deletions(-) -- 2.6.3