From: Christophe Lyon <christophe.lyon@st.com>
To: <gcc-patches@gcc.gnu.org>
Cc: <christophe.lyon@linaro.org>
Subject: Re: [ARM/FDPIC v2 00/21] FDPIC ABI for ARM
Date: Wed, 01 Aug 2018 14:03:00 -0000 [thread overview]
Message-ID: <62818567-d7fa-6311-9b17-3e6c3273da88@st.com> (raw)
In-Reply-To: <20180713161136.29104-1-christophe.lyon@st.com>
Ping?
On 13/07/2018 18:10, christophe.lyon@st.com wrote:
> From: Christophe Lyon <christophe.lyon@linaro.org>
>
> Hello,
>
> This patch series implements the GCC 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 segments 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 [1], and the target name is
> arm-uclinuxfdpiceabi. Note that arm-uclinux exists, but uses another
> ABI and the BFLAT file format; it does not support code sharing.
> The -mfdpic option is enabled by default, and -mno-fdpic should be
> used to build the Linux kernel.
>
> 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 [2].
> This presentation was related to the toolchain published on github [3],
> 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 [3].
>
> The ABI itself is described in details in [1].
>
> 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.
>
> The binutils and QEMU patch series have been merged recently. [4][5]
>
> To build such a toolchain, you'd also need to use my uClibc branch[6].
> I have posted uclibc-ng patches for review [7]
>
> I am currently working on updating the patches for the remaining
> toolchain components: uclibc and gdb.
>
> This series provides support for ARM v7 architecture and has been
> tested on arm-linux-gnueabi without regression, as well as
> arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has more
> failures than arm-linux-gnueabi, but is quite functional.
>
> Are the GCC patches OK for inclusion in master?
>
> Changes between v1 and v2:
> - fix GNU coding style
> - exit with an error for pre-Armv7
> - use ACLE __ARM_ARCH and remove dead code for pre-Armv4
> - remove unsupported attempts of pre-Armv7/thumb1 support
> - add instructions in comments next to opcodes
> - merge patches 11 and 13
> - fixed protected visibility handling in patch 8
> - merged legitimize_tls_address_fdpic and
> legitimize_tls_address_not_fdpic as requested
>
> Thanks,
>
> Christophe.
>
>
> [1] https://github.com/mickael-guene/fdpic_doc/blob/master/abi.txt
> [2] http://connect.linaro.org/resource/sfo15/sfo15-406-arm-fdpic-toolset-kernel-libraries-for-cortex-m-cortex-r-mmuless-cores/
> [3] https://github.com/mickael-guene/fdpic_manifest
> [4] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=f1ac0afe481e83c9a33f247b81fa7de789edc4d9
> [5] https://git.qemu.org/?p=qemu.git;a=commit;h=e8fa72957419c11984608062c7dcb204a6003a06
> [6] https://git.linaro.org/people/christophe.lyon/uclibc.git/log/?h=uClibc-0.9.33.2-fdpic-upstream
> [7] https://mailman.uclibc-ng.org/pipermail/devel/2018-July/001705.html
>
> Christophe Lyon (21):
> [ARM] FDPIC: Add -mfdpic option support
> [ARM] FDPIC: Handle arm*-*-uclinuxfdpiceabi in configure scripts
> [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is provided
> [ARM] FDPIC: Add support for FDPIC for arm architecture
> [ARM] FDPIC: Fix __do_global_dtors_aux and frame_dummy generation
> [ARM] FDPIC: Add support for c++ exceptions
> [ARM] FDPIC: Avoid saving/restoring r9 on stack since it is RO
> [ARM] FDPIC: Ensure local/global binding for function descriptors
> [ARM] FDPIC: Add support for taking address of nested function
> [ARM] FDPIC: Implement TLS support.
> [ARM] FDPIC: Add support to unwind FDPIC signal frame
> [ARM] FDPIC: Restore r9 after we call __aeabi_read_tp
> [ARM] FDPIC: Force LSB bit for PC in Cortex-M architecture
> [ARM][testsuite] FDPIC: Skip unsupported tests
> [ARM][testsuite] FDPIC: Adjust scan-assembler patterns.
> [ARM][testsuite] FDPIC: Skip v8-m and v6-m tests that currently
> produce an ICE
> [ARM][testsuite] FDPIC: Skip tests that don't work in PIC mode
> [ARM][testsuite] FDPIC: Handle *-*-uclinux*
> [ARM][testsuite] FDPIC: Enable tests on pie_enabled targets
> [ARM][testsuite] FDPIC: Adjust pr43698.c to avoid clash with uclibc.
> [ARM][testsuite] FDPIC: Skip tests using architecture older than v7
>
> config/futex.m4 | 2 +-
> config/tls.m4 | 2 +-
> gcc/config.gcc | 13 +-
> gcc/config/arm/arm-c.c | 2 +
> gcc/config/arm/arm-protos.h | 1 +
> gcc/config/arm/arm.c | 507 ++++++++++++++++++---
> gcc/config/arm/arm.h | 9 +-
> gcc/config/arm/arm.md | 125 ++++-
> gcc/config/arm/arm.opt | 4 +
> gcc/config/arm/bpabi.h | 4 +-
> gcc/config/arm/linux-eabi.h | 7 +-
> gcc/config/arm/uclinuxfdpiceabi.h | 53 +++
> gcc/config/arm/unspecs.md | 1 +
> gcc/ginclude/unwind-arm-common.h | 2 +-
> gcc/testsuite/g++.dg/abi/forced.C | 2 +-
> gcc/testsuite/g++.dg/abi/guard2.C | 2 +-
> gcc/testsuite/g++.dg/cpp0x/noexcept03.C | 2 +-
> gcc/testsuite/g++.dg/ext/cleanup-10.C | 2 +-
> gcc/testsuite/g++.dg/ext/cleanup-11.C | 2 +-
> gcc/testsuite/g++.dg/ext/cleanup-8.C | 2 +-
> gcc/testsuite/g++.dg/ext/cleanup-9.C | 2 +-
> gcc/testsuite/g++.dg/ext/sync-4.C | 2 +-
> gcc/testsuite/g++.dg/ipa/comdat.C | 2 +-
> gcc/testsuite/g++.dg/ipa/devirt-c-7.C | 3 +-
> gcc/testsuite/g++.dg/ipa/ivinline-1.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-2.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-3.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-4.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-5.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-7.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-8.C | 2 +-
> gcc/testsuite/g++.dg/ipa/ivinline-9.C | 2 +-
> gcc/testsuite/g++.dg/other/anon5.C | 1 +
> gcc/testsuite/g++.dg/tls/pr79288.C | 2 +-
> gcc/testsuite/gcc.dg/20020312-2.c | 1 +
> gcc/testsuite/gcc.dg/20041106-1.c | 2 +-
> gcc/testsuite/gcc.dg/addr_equal-1.c | 3 +-
> gcc/testsuite/gcc.dg/cleanup-10.c | 2 +-
> gcc/testsuite/gcc.dg/cleanup-11.c | 2 +-
> gcc/testsuite/gcc.dg/cleanup-8.c | 2 +-
> gcc/testsuite/gcc.dg/cleanup-9.c | 2 +-
> gcc/testsuite/gcc.dg/const-1.c | 2 +-
> gcc/testsuite/gcc.dg/fdata-sections-1.c | 2 +-
> gcc/testsuite/gcc.dg/fdata-sections-2.c | 2 +-
> gcc/testsuite/gcc.dg/ipa/pure-const-1.c | 2 +-
> gcc/testsuite/gcc.dg/noreturn-8.c | 2 +-
> gcc/testsuite/gcc.dg/pr33826.c | 3 +-
> gcc/testsuite/gcc.dg/pr39323-1.c | 2 +-
> gcc/testsuite/gcc.dg/pr39323-2.c | 2 +-
> gcc/testsuite/gcc.dg/pr39323-3.c | 2 +-
> gcc/testsuite/gcc.dg/pr65780-1.c | 2 +-
> gcc/testsuite/gcc.dg/pr65780-2.c | 2 +-
> gcc/testsuite/gcc.dg/pr67338.c | 2 +-
> gcc/testsuite/gcc.dg/pr78185.c | 2 +-
> gcc/testsuite/gcc.dg/pr83100-1.c | 2 +-
> gcc/testsuite/gcc.dg/pr83100-4.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-12g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-14g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-14gf.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-16g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-17g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-18g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-1f.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-22g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-2f.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-31g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-33g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-4g.c | 2 +-
> gcc/testsuite/gcc.dg/strlenopt-4gf.c | 2 +-
> gcc/testsuite/gcc.dg/strncmp-2.c | 2 +-
> gcc/testsuite/gcc.dg/struct-ret-3.c | 2 +-
> gcc/testsuite/gcc.dg/torture/ipa-pta-1.c | 2 +-
> gcc/testsuite/gcc.dg/torture/pr69760.c | 2 +-
> gcc/testsuite/gcc.dg/tree-ssa/alias-2.c | 2 +-
> gcc/testsuite/gcc.dg/tree-ssa/ipa-split-5.c | 2 +-
> gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c | 2 +-
> gcc/testsuite/gcc.dg/uninit-19.c | 4 +-
> gcc/testsuite/gcc.target/arm/20051215-1.c | 1 +
> .../gcc.target/arm/armv6-unaligned-load-ice.c | 1 +
> .../arm/atomic-comp-swap-release-acquire-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-acq_rel-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-acquire-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-char-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-consume-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-int-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-relaxed-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-release-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-seq_cst-3.c | 1 +
> gcc/testsuite/gcc.target/arm/atomic-op-short-3.c | 1 +
> .../gcc.target/arm/attr-unaligned-load-ice.c | 1 +
> gcc/testsuite/gcc.target/arm/attr_arm-err.c | 1 +
> gcc/testsuite/gcc.target/arm/data-rel-2.c | 1 +
> gcc/testsuite/gcc.target/arm/data-rel-3.c | 1 +
> gcc/testsuite/gcc.target/arm/div64-unwinding.c | 2 +-
> gcc/testsuite/gcc.target/arm/eliminate.c | 2 +-
> gcc/testsuite/gcc.target/arm/ftest-armv4-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv4t-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv4t-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv5t-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv5t-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv5te-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv5te-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6k-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6k-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6m-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6t2-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6t2-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6z-arm.c | 1 +
> gcc/testsuite/gcc.target/arm/ftest-armv6z-thumb.c | 1 +
> gcc/testsuite/gcc.target/arm/g2.c | 1 +
> gcc/testsuite/gcc.target/arm/interrupt-1.c | 6 +-
> gcc/testsuite/gcc.target/arm/interrupt-2.c | 6 +-
> gcc/testsuite/gcc.target/arm/ivopts-2.c | 2 +-
> gcc/testsuite/gcc.target/arm/ivopts-3.c | 2 +-
> gcc/testsuite/gcc.target/arm/ivopts-4.c | 2 +-
> gcc/testsuite/gcc.target/arm/ivopts-5.c | 2 +-
> gcc/testsuite/gcc.target/arm/macro_defs1.c | 1 +
> gcc/testsuite/gcc.target/arm/mmx-1.c | 1 +
> gcc/testsuite/gcc.target/arm/pr19599.c | 1 +
> gcc/testsuite/gcc.target/arm/pr40887.c | 1 +
> gcc/testsuite/gcc.target/arm/pr43597.c | 2 +-
> gcc/testsuite/gcc.target/arm/pr43698.c | 4 +-
> gcc/testsuite/gcc.target/arm/pr43920-2.c | 2 +-
> gcc/testsuite/gcc.target/arm/pr45701-1.c | 4 +-
> gcc/testsuite/gcc.target/arm/pr45701-2.c | 4 +-
> gcc/testsuite/gcc.target/arm/pr59858.c | 1 +
> gcc/testsuite/gcc.target/arm/pr61948.c | 1 +
> gcc/testsuite/gcc.target/arm/pr65647-2.c | 1 +
> gcc/testsuite/gcc.target/arm/pr65647.c | 1 +
> gcc/testsuite/gcc.target/arm/pr66912.c | 2 +-
> gcc/testsuite/gcc.target/arm/pr70830.c | 3 +-
> gcc/testsuite/gcc.target/arm/pr77933-1.c | 1 +
> gcc/testsuite/gcc.target/arm/pr77933-2.c | 1 +
> gcc/testsuite/gcc.target/arm/pr79058.c | 1 +
> gcc/testsuite/gcc.target/arm/pr83712.c | 1 +
> .../gcc.target/arm/pragma_arch_switch_2.c | 1 +
> gcc/testsuite/gcc.target/arm/scd42-1.c | 1 +
> gcc/testsuite/gcc.target/arm/scd42-2.c | 1 +
> gcc/testsuite/gcc.target/arm/scd42-3.c | 1 +
> gcc/testsuite/gcc.target/arm/sibcall-1.c | 1 +
> gcc/testsuite/gcc.target/arm/stack-checking.c | 2 +-
> gcc/testsuite/gcc.target/arm/stack-red-zone.c | 2 +-
> gcc/testsuite/gcc.target/arm/synchronize.c | 2 +-
> gcc/testsuite/gcc.target/arm/tail-long-call.c | 1 +
> gcc/testsuite/gcc.target/arm/tlscall.c | 1 +
> gcc/testsuite/gcc.target/arm/vfp-longcall-apcs.c | 1 +
> gcc/testsuite/lib/target-supports.exp | 4 +
> libatomic/configure | 8 +-
> libatomic/configure.tgt | 2 +-
> libgcc/config.host | 4 +-
> libgcc/config/arm/linux-atomic.c | 38 ++
> libgcc/config/arm/unwind-arm.c | 5 +
> libgcc/config/arm/unwind-arm.h | 26 +-
> libgcc/crtstuff.c | 16 +
> libgcc/unwind-arm-common.inc | 216 +++++++++
> libgcc/unwind-pe.h | 17 +
> libitm/configure | 20 +-
> libitm/configure.tgt | 2 +-
> libsanitizer/configure.tgt | 3 +
> libstdc++-v3/acinclude.m4 | 12 +-
> libstdc++-v3/configure | 36 +-
> libstdc++-v3/configure.host | 6 +-
> libstdc++-v3/libsupc++/eh_personality.cc | 10 +-
> libtool.m4 | 14 +-
> 166 files changed, 1192 insertions(+), 212 deletions(-)
> create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h
>
next prev parent reply other threads:[~2018-08-01 14:03 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-13 16:12 christophe.lyon
2018-07-13 16:12 ` [ARM/FDPIC v2 01/21] [ARM] FDPIC: Add -mfdpic option support christophe.lyon
2018-08-29 10:46 ` Kyrill Tkachov
2018-08-31 14:09 ` Christophe Lyon
2018-09-21 15:41 ` Christophe Lyon
2018-07-13 16:12 ` [ARM/FDPIC v2 02/21] [ARM] FDPIC: Handle arm*-*-uclinuxfdpiceabi in configure scripts christophe.lyon
2018-08-29 10:46 ` Kyrill Tkachov
2018-08-31 14:13 ` Christophe Lyon
2018-09-09 8:16 ` Christophe Lyon
2018-07-13 16:13 ` [ARM/FDPIC v2 04/21] [ARM] FDPIC: Add support for FDPIC for arm architecture christophe.lyon
2018-08-29 10:46 ` Kyrill Tkachov
2018-09-04 15:29 ` Richard Earnshaw (lists)
2018-09-05 12:07 ` Christophe Lyon
2018-07-13 16:13 ` [ARM/FDPIC v2 03/21] [ARM] FDPIC: Force FDPIC related options unless -mno-fdpic is provided christophe.lyon
2018-07-13 16:13 ` [ARM/FDPIC v2 05/21] [ARM] FDPIC: Fix __do_global_dtors_aux and frame_dummy generation christophe.lyon
2018-07-13 16:14 ` [ARM/FDPIC v2 06/21] [ARM] FDPIC: Add support for c++ exceptions christophe.lyon
2018-08-29 10:49 ` Kyrill Tkachov
2018-07-13 16:14 ` [ARM/FDPIC v2 07/21] [ARM] FDPIC: Avoid saving/restoring r9 on stack since it is RO christophe.lyon
2018-08-29 10:52 ` Kyrill Tkachov
2018-07-13 16:14 ` [ARM/FDPIC v2 08/21] [ARM] FDPIC: Ensure local/global binding for function descriptors christophe.lyon
2018-07-13 16:15 ` [ARM/FDPIC v2 10/21] [ARM] FDPIC: Implement TLS support christophe.lyon
2018-07-13 16:15 ` [ARM/FDPIC v2 09/21] [ARM] FDPIC: Add support for taking address of nested function christophe.lyon
2018-08-29 11:01 ` Kyrill Tkachov
2018-08-31 14:17 ` Christophe Lyon
2018-07-13 16:15 ` [ARM/FDPIC v2 11/21] [ARM] FDPIC: Add support to unwind FDPIC signal frame christophe.lyon
2018-07-13 16:16 ` [ARM/FDPIC v2 13/21] [ARM] FDPIC: Force LSB bit for PC in Cortex-M architecture christophe.lyon
2018-07-13 16:16 ` [ARM/FDPIC v2 12/21] [ARM] FDPIC: Restore r9 after we call __aeabi_read_tp christophe.lyon
2018-07-13 16:16 ` [ARM/FDPIC v2 14/21] [ARM][testsuite] FDPIC: Skip unsupported tests christophe.lyon
2018-07-13 16:17 ` [ARM/FDPIC v2 15/21] [ARM][testsuite] FDPIC: Adjust scan-assembler patterns christophe.lyon
2018-07-13 16:17 ` [ARM/FDPIC v2 17/21] [ARM][testsuite] FDPIC: Skip tests that don't work in PIC mode christophe.lyon
2018-07-13 16:17 ` [ARM/FDPIC v2 16/21] [ARM][testsuite] FDPIC: Skip v8-m and v6-m tests that currently produce an ICE christophe.lyon
2018-07-13 16:18 ` [ARM/FDPIC v2 18/21] [ARM][testsuite] FDPIC: Handle *-*-uclinux* christophe.lyon
2018-07-13 16:18 ` [ARM/FDPIC v2 20/21] [ARM][testsuite] FDPIC: Adjust pr43698.c to avoid clash with uclibc christophe.lyon
2018-07-13 16:18 ` [ARM/FDPIC v2 19/21] [ARM][testsuite] FDPIC: Enable tests on pie_enabled targets christophe.lyon
2018-07-13 16:19 ` [ARM/FDPIC v2 21/21] [ARM][testsuite] FDPIC: Skip tests using architecture older than v7 christophe.lyon
2018-08-01 14:03 ` Christophe Lyon [this message]
2018-08-16 22:20 ` [ARM/FDPIC v2 00/21] FDPIC ABI for ARM Christophe Lyon
2018-08-28 16:09 ` Christophe Lyon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=62818567-d7fa-6311-9b17-3e6c3273da88@st.com \
--to=christophe.lyon@st.com \
--cc=christophe.lyon@linaro.org \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).