mbox series

[ARM/FDPIC,v5,00/21] FDPIC ABI for ARM

Message ID 20190515124006.25840-1-christophe.lyon@st.com
Headers show
Series FDPIC ABI for ARM | expand

Message

Christophe Lyon May 15, 2019, 12:39 p.m. UTC
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, QEMU and uclibc-ng patch series have been merged a few
months ago. [4][5][6]

This series provides support for architectures that support ARM and/or
Thumb-2 and has been tested on arm-linux-gnueabi without regression,
as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has
a few more failures than arm-linux-gnueabi, but is quite functional.

I have also booted an STM32 board (stm32f469) which uses a cortex-m4
with linux-4.20.17 and ran successfully several tools.

Are the GCC patches OK for inclusion in master?

Changes between v4 and v5:
- rebased on top of recent gcc-10 master (April 26th, 2019)
- fixed handling of stack-protector combined patterns in FDPIC mode

Changes between v3 and v4:

- improved documentation (patch 1)
- emit an error message (sorry) if the target architecture does not
  support arm nor thumb-2 modes (patch 4)
- handle Richard's comments on patch 4 (comments, unspec)
- added .align directive (patch 5)
- fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)
- code factorization in patch 7
- typos/internal function name in patch 8
- improved patch 12
- dropped patch 16
- patch 20 introduces arm_arch*_thumb_ok effective targets to help
  skip some tests
- I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many
  new tests, but a few regressions
  (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)
- I compiled and executed several LTP tests to exercise pthreads and signals
- I wrote and executed a simple testcase to change the interaction
  with __kernel_cmpxchg (ie. call the kernel helper rather than use an
  implementation in libgcc as requested by Richard)

Changes between v2 and v3:
- added doc entry for -mfdpic new option
- took Kyrill's comments into account (use "Armv7" instead of "7",
  code factorization, use preprocessor instead of hard-coding "r9",
  remove leftover code for thumb1 support, fixed comments)
- rebase over recent trunk
- patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,
  14 (rebase), 19 (rebase)

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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

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 read-only
  [ARM] FDPIC: Enforce 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 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 architectures unsupported by
    FDPIC
  [ARM] FDPIC: Handle stack-protector combined patterns

 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                               | 485 ++++++++++++++++++---
 gcc/config/arm/arm.h                               |  16 +-
 gcc/config/arm/arm.md                              | 151 ++++++-
 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/doc/invoke.texi                                |  20 +-
 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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +
 .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +
 libatomic/configure                                |   8 +-
 libatomic/configure.tgt                            |   2 +-
 libgcc/config.host                                 |   4 +-
 libgcc/config/arm/linux-atomic.c                   |  55 ++-
 libgcc/config/arm/unwind-arm.c                     |   5 +
 libgcc/config/arm/unwind-arm.h                     |  31 +-
 libgcc/crtstuff.c                                  |  18 +
 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 +-
 156 files changed, 1233 insertions(+), 219 deletions(-)
 create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

-- 
2.6.3

Comments

Christophe Lyon May 23, 2019, 12:46 p.m. UTC | #1
Ping?

Any feedback other than what I got on patch 03/21 ?

Thanks,

Christophe


On 15/05/2019 14:39, Christophe Lyon wrote:
> 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, QEMU and uclibc-ng patch series have been merged a few

> months ago. [4][5][6]

>

> This series provides support for architectures that support ARM and/or

> Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> a few more failures than arm-linux-gnueabi, but is quite functional.

>

> I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> with linux-4.20.17 and ran successfully several tools.

>

> Are the GCC patches OK for inclusion in master?

>

> Changes between v4 and v5:

> - rebased on top of recent gcc-10 master (April 26th, 2019)

> - fixed handling of stack-protector combined patterns in FDPIC mode

>

> Changes between v3 and v4:

>

> - improved documentation (patch 1)

> - emit an error message (sorry) if the target architecture does not

>    support arm nor thumb-2 modes (patch 4)

> - handle Richard's comments on patch 4 (comments, unspec)

> - added .align directive (patch 5)

> - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> - code factorization in patch 7

> - typos/internal function name in patch 8

> - improved patch 12

> - dropped patch 16

> - patch 20 introduces arm_arch*_thumb_ok effective targets to help

>    skip some tests

> - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

>    new tests, but a few regressions

>    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> - I compiled and executed several LTP tests to exercise pthreads and signals

> - I wrote and executed a simple testcase to change the interaction

>    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

>    implementation in libgcc as requested by Richard)

>

> Changes between v2 and v3:

> - added doc entry for -mfdpic new option

> - took Kyrill's comments into account (use "Armv7" instead of "7",

>    code factorization, use preprocessor instead of hard-coding "r9",

>    remove leftover code for thumb1 support, fixed comments)

> - rebase over recent trunk

> - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

>    14 (rebase), 19 (rebase)

>

> 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

>

> 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 read-only

>    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

>      FDPIC

>    [ARM] FDPIC: Handle stack-protector combined patterns

>

>   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                               | 485 ++++++++++++++++++---

>   gcc/config/arm/arm.h                               |  16 +-

>   gcc/config/arm/arm.md                              | 151 ++++++-

>   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/doc/invoke.texi                                |  20 +-

>   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

>   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

>   libatomic/configure                                |   8 +-

>   libatomic/configure.tgt                            |   2 +-

>   libgcc/config.host                                 |   4 +-

>   libgcc/config/arm/linux-atomic.c                   |  55 ++-

>   libgcc/config/arm/unwind-arm.c                     |   5 +

>   libgcc/config/arm/unwind-arm.h                     |  31 +-

>   libgcc/crtstuff.c                                  |  18 +

>   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 +-

>   156 files changed, 1233 insertions(+), 219 deletions(-)

>   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

>
Christophe Lyon June 4, 2019, 12:57 p.m. UTC | #2
Ping?


On Thu, 23 May 2019 at 14:46, Christophe Lyon <christophe.lyon@st.com> wrote:
>

> Ping?

>

> Any feedback other than what I got on patch 03/21 ?

>

> Thanks,

>

> Christophe

>

>

> On 15/05/2019 14:39, Christophe Lyon wrote:

> > 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, QEMU and uclibc-ng patch series have been merged a few

> > months ago. [4][5][6]

> >

> > This series provides support for architectures that support ARM and/or

> > Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> > as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> > a few more failures than arm-linux-gnueabi, but is quite functional.

> >

> > I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> > with linux-4.20.17 and ran successfully several tools.

> >

> > Are the GCC patches OK for inclusion in master?

> >

> > Changes between v4 and v5:

> > - rebased on top of recent gcc-10 master (April 26th, 2019)

> > - fixed handling of stack-protector combined patterns in FDPIC mode

> >

> > Changes between v3 and v4:

> >

> > - improved documentation (patch 1)

> > - emit an error message (sorry) if the target architecture does not

> >    support arm nor thumb-2 modes (patch 4)

> > - handle Richard's comments on patch 4 (comments, unspec)

> > - added .align directive (patch 5)

> > - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> > - code factorization in patch 7

> > - typos/internal function name in patch 8

> > - improved patch 12

> > - dropped patch 16

> > - patch 20 introduces arm_arch*_thumb_ok effective targets to help

> >    skip some tests

> > - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

> >    new tests, but a few regressions

> >    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> > - I compiled and executed several LTP tests to exercise pthreads and signals

> > - I wrote and executed a simple testcase to change the interaction

> >    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

> >    implementation in libgcc as requested by Richard)

> >

> > Changes between v2 and v3:

> > - added doc entry for -mfdpic new option

> > - took Kyrill's comments into account (use "Armv7" instead of "7",

> >    code factorization, use preprocessor instead of hard-coding "r9",

> >    remove leftover code for thumb1 support, fixed comments)

> > - rebase over recent trunk

> > - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

> >    14 (rebase), 19 (rebase)

> >

> > 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> >

> > 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 read-only

> >    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

> >      FDPIC

> >    [ARM] FDPIC: Handle stack-protector combined patterns

> >

> >   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                               | 485 ++++++++++++++++++---

> >   gcc/config/arm/arm.h                               |  16 +-

> >   gcc/config/arm/arm.md                              | 151 ++++++-

> >   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/doc/invoke.texi                                |  20 +-

> >   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

> >   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

> >   libatomic/configure                                |   8 +-

> >   libatomic/configure.tgt                            |   2 +-

> >   libgcc/config.host                                 |   4 +-

> >   libgcc/config/arm/linux-atomic.c                   |  55 ++-

> >   libgcc/config/arm/unwind-arm.c                     |   5 +

> >   libgcc/config/arm/unwind-arm.h                     |  31 +-

> >   libgcc/crtstuff.c                                  |  18 +

> >   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 +-

> >   156 files changed, 1233 insertions(+), 219 deletions(-)

> >   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

> >

>
Christophe Lyon June 6, 2019, 12:36 p.m. UTC | #3
Hi,

If this makes review easier, here are the areas covered by the patches:

- patches 1,3,4,7,8,9,10,12,21: target-specific
- patch 2: configure
- patch 5,6,11,13: generic parts, undef #if defined(__FDPIC__)
- patches 14-20: testsuite

Christophe

On Tue, 4 Jun 2019 at 14:57, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>

> Ping?

>

>

> On Thu, 23 May 2019 at 14:46, Christophe Lyon <christophe.lyon@st.com> wrote:

> >

> > Ping?

> >

> > Any feedback other than what I got on patch 03/21 ?

> >

> > Thanks,

> >

> > Christophe

> >

> >

> > On 15/05/2019 14:39, Christophe Lyon wrote:

> > > 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, QEMU and uclibc-ng patch series have been merged a few

> > > months ago. [4][5][6]

> > >

> > > This series provides support for architectures that support ARM and/or

> > > Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> > > as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> > > a few more failures than arm-linux-gnueabi, but is quite functional.

> > >

> > > I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> > > with linux-4.20.17 and ran successfully several tools.

> > >

> > > Are the GCC patches OK for inclusion in master?

> > >

> > > Changes between v4 and v5:

> > > - rebased on top of recent gcc-10 master (April 26th, 2019)

> > > - fixed handling of stack-protector combined patterns in FDPIC mode

> > >

> > > Changes between v3 and v4:

> > >

> > > - improved documentation (patch 1)

> > > - emit an error message (sorry) if the target architecture does not

> > >    support arm nor thumb-2 modes (patch 4)

> > > - handle Richard's comments on patch 4 (comments, unspec)

> > > - added .align directive (patch 5)

> > > - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> > > - code factorization in patch 7

> > > - typos/internal function name in patch 8

> > > - improved patch 12

> > > - dropped patch 16

> > > - patch 20 introduces arm_arch*_thumb_ok effective targets to help

> > >    skip some tests

> > > - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

> > >    new tests, but a few regressions

> > >    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> > > - I compiled and executed several LTP tests to exercise pthreads and signals

> > > - I wrote and executed a simple testcase to change the interaction

> > >    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

> > >    implementation in libgcc as requested by Richard)

> > >

> > > Changes between v2 and v3:

> > > - added doc entry for -mfdpic new option

> > > - took Kyrill's comments into account (use "Armv7" instead of "7",

> > >    code factorization, use preprocessor instead of hard-coding "r9",

> > >    remove leftover code for thumb1 support, fixed comments)

> > > - rebase over recent trunk

> > > - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

> > >    14 (rebase), 19 (rebase)

> > >

> > > 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> > >

> > > 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 read-only

> > >    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

> > >      FDPIC

> > >    [ARM] FDPIC: Handle stack-protector combined patterns

> > >

> > >   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                               | 485 ++++++++++++++++++---

> > >   gcc/config/arm/arm.h                               |  16 +-

> > >   gcc/config/arm/arm.md                              | 151 ++++++-

> > >   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/doc/invoke.texi                                |  20 +-

> > >   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

> > >   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

> > >   libatomic/configure                                |   8 +-

> > >   libatomic/configure.tgt                            |   2 +-

> > >   libgcc/config.host                                 |   4 +-

> > >   libgcc/config/arm/linux-atomic.c                   |  55 ++-

> > >   libgcc/config/arm/unwind-arm.c                     |   5 +

> > >   libgcc/config/arm/unwind-arm.h                     |  31 +-

> > >   libgcc/crtstuff.c                                  |  18 +

> > >   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 +-

> > >   156 files changed, 1233 insertions(+), 219 deletions(-)

> > >   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

> > >

> >
Christophe Lyon June 17, 2019, 11:41 a.m. UTC | #4
ping^3 ?

On Thu, 6 Jun 2019 at 14:36, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>

> Hi,

>

> If this makes review easier, here are the areas covered by the patches:

>

> - patches 1,3,4,7,8,9,10,12,21: target-specific

> - patch 2: configure

> - patch 5,6,11,13: generic parts, undef #if defined(__FDPIC__)

> - patches 14-20: testsuite

>

> Christophe

>

> On Tue, 4 Jun 2019 at 14:57, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> >

> > Ping?

> >

> >

> > On Thu, 23 May 2019 at 14:46, Christophe Lyon <christophe.lyon@st.com> wrote:

> > >

> > > Ping?

> > >

> > > Any feedback other than what I got on patch 03/21 ?

> > >

> > > Thanks,

> > >

> > > Christophe

> > >

> > >

> > > On 15/05/2019 14:39, Christophe Lyon wrote:

> > > > 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, QEMU and uclibc-ng patch series have been merged a few

> > > > months ago. [4][5][6]

> > > >

> > > > This series provides support for architectures that support ARM and/or

> > > > Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> > > > as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> > > > a few more failures than arm-linux-gnueabi, but is quite functional.

> > > >

> > > > I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> > > > with linux-4.20.17 and ran successfully several tools.

> > > >

> > > > Are the GCC patches OK for inclusion in master?

> > > >

> > > > Changes between v4 and v5:

> > > > - rebased on top of recent gcc-10 master (April 26th, 2019)

> > > > - fixed handling of stack-protector combined patterns in FDPIC mode

> > > >

> > > > Changes between v3 and v4:

> > > >

> > > > - improved documentation (patch 1)

> > > > - emit an error message (sorry) if the target architecture does not

> > > >    support arm nor thumb-2 modes (patch 4)

> > > > - handle Richard's comments on patch 4 (comments, unspec)

> > > > - added .align directive (patch 5)

> > > > - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> > > > - code factorization in patch 7

> > > > - typos/internal function name in patch 8

> > > > - improved patch 12

> > > > - dropped patch 16

> > > > - patch 20 introduces arm_arch*_thumb_ok effective targets to help

> > > >    skip some tests

> > > > - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

> > > >    new tests, but a few regressions

> > > >    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> > > > - I compiled and executed several LTP tests to exercise pthreads and signals

> > > > - I wrote and executed a simple testcase to change the interaction

> > > >    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

> > > >    implementation in libgcc as requested by Richard)

> > > >

> > > > Changes between v2 and v3:

> > > > - added doc entry for -mfdpic new option

> > > > - took Kyrill's comments into account (use "Armv7" instead of "7",

> > > >    code factorization, use preprocessor instead of hard-coding "r9",

> > > >    remove leftover code for thumb1 support, fixed comments)

> > > > - rebase over recent trunk

> > > > - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

> > > >    14 (rebase), 19 (rebase)

> > > >

> > > > 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> > > >

> > > > 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 read-only

> > > >    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

> > > >      FDPIC

> > > >    [ARM] FDPIC: Handle stack-protector combined patterns

> > > >

> > > >   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                               | 485 ++++++++++++++++++---

> > > >   gcc/config/arm/arm.h                               |  16 +-

> > > >   gcc/config/arm/arm.md                              | 151 ++++++-

> > > >   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/doc/invoke.texi                                |  20 +-

> > > >   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

> > > >   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

> > > >   libatomic/configure                                |   8 +-

> > > >   libatomic/configure.tgt                            |   2 +-

> > > >   libgcc/config.host                                 |   4 +-

> > > >   libgcc/config/arm/linux-atomic.c                   |  55 ++-

> > > >   libgcc/config/arm/unwind-arm.c                     |   5 +

> > > >   libgcc/config/arm/unwind-arm.h                     |  31 +-

> > > >   libgcc/crtstuff.c                                  |  18 +

> > > >   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 +-

> > > >   156 files changed, 1233 insertions(+), 219 deletions(-)

> > > >   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

> > > >

> > >
Christophe Lyon July 1, 2019, 12:15 p.m. UTC | #5
ping^4 ?
https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00817.html

On Mon, 17 Jun 2019 at 13:41, Christophe Lyon
<christophe.lyon@linaro.org> wrote:
>

> ping^3 ?

>

> On Thu, 6 Jun 2019 at 14:36, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> >

> > Hi,

> >

> > If this makes review easier, here are the areas covered by the patches:

> >

> > - patches 1,3,4,7,8,9,10,12,21: target-specific

> > - patch 2: configure

> > - patch 5,6,11,13: generic parts, undef #if defined(__FDPIC__)

> > - patches 14-20: testsuite

> >

> > Christophe

> >

> > On Tue, 4 Jun 2019 at 14:57, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> > >

> > > Ping?

> > >

> > >

> > > On Thu, 23 May 2019 at 14:46, Christophe Lyon <christophe.lyon@st.com> wrote:

> > > >

> > > > Ping?

> > > >

> > > > Any feedback other than what I got on patch 03/21 ?

> > > >

> > > > Thanks,

> > > >

> > > > Christophe

> > > >

> > > >

> > > > On 15/05/2019 14:39, Christophe Lyon wrote:

> > > > > 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, QEMU and uclibc-ng patch series have been merged a few

> > > > > months ago. [4][5][6]

> > > > >

> > > > > This series provides support for architectures that support ARM and/or

> > > > > Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> > > > > as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> > > > > a few more failures than arm-linux-gnueabi, but is quite functional.

> > > > >

> > > > > I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> > > > > with linux-4.20.17 and ran successfully several tools.

> > > > >

> > > > > Are the GCC patches OK for inclusion in master?

> > > > >

> > > > > Changes between v4 and v5:

> > > > > - rebased on top of recent gcc-10 master (April 26th, 2019)

> > > > > - fixed handling of stack-protector combined patterns in FDPIC mode

> > > > >

> > > > > Changes between v3 and v4:

> > > > >

> > > > > - improved documentation (patch 1)

> > > > > - emit an error message (sorry) if the target architecture does not

> > > > >    support arm nor thumb-2 modes (patch 4)

> > > > > - handle Richard's comments on patch 4 (comments, unspec)

> > > > > - added .align directive (patch 5)

> > > > > - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> > > > > - code factorization in patch 7

> > > > > - typos/internal function name in patch 8

> > > > > - improved patch 12

> > > > > - dropped patch 16

> > > > > - patch 20 introduces arm_arch*_thumb_ok effective targets to help

> > > > >    skip some tests

> > > > > - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

> > > > >    new tests, but a few regressions

> > > > >    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> > > > > - I compiled and executed several LTP tests to exercise pthreads and signals

> > > > > - I wrote and executed a simple testcase to change the interaction

> > > > >    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

> > > > >    implementation in libgcc as requested by Richard)

> > > > >

> > > > > Changes between v2 and v3:

> > > > > - added doc entry for -mfdpic new option

> > > > > - took Kyrill's comments into account (use "Armv7" instead of "7",

> > > > >    code factorization, use preprocessor instead of hard-coding "r9",

> > > > >    remove leftover code for thumb1 support, fixed comments)

> > > > > - rebase over recent trunk

> > > > > - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

> > > > >    14 (rebase), 19 (rebase)

> > > > >

> > > > > 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> > > > >

> > > > > 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 read-only

> > > > >    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

> > > > >      FDPIC

> > > > >    [ARM] FDPIC: Handle stack-protector combined patterns

> > > > >

> > > > >   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                               | 485 ++++++++++++++++++---

> > > > >   gcc/config/arm/arm.h                               |  16 +-

> > > > >   gcc/config/arm/arm.md                              | 151 ++++++-

> > > > >   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/doc/invoke.texi                                |  20 +-

> > > > >   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

> > > > >   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

> > > > >   libatomic/configure                                |   8 +-

> > > > >   libatomic/configure.tgt                            |   2 +-

> > > > >   libgcc/config.host                                 |   4 +-

> > > > >   libgcc/config/arm/linux-atomic.c                   |  55 ++-

> > > > >   libgcc/config/arm/unwind-arm.c                     |   5 +

> > > > >   libgcc/config/arm/unwind-arm.h                     |  31 +-

> > > > >   libgcc/crtstuff.c                                  |  18 +

> > > > >   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 +-

> > > > >   156 files changed, 1233 insertions(+), 219 deletions(-)

> > > > >   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

> > > > >

> > > >
Christophe Lyon July 8, 2019, 2:27 p.m. UTC | #6
ping^5?

On Mon, 1 Jul 2019 at 14:15, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>

> ping^4 ?

> https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00817.html

>

> On Mon, 17 Jun 2019 at 13:41, Christophe Lyon

> <christophe.lyon@linaro.org> wrote:

> >

> > ping^3 ?

> >

> > On Thu, 6 Jun 2019 at 14:36, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> > >

> > > Hi,

> > >

> > > If this makes review easier, here are the areas covered by the patches:

> > >

> > > - patches 1,3,4,7,8,9,10,12,21: target-specific

> > > - patch 2: configure

> > > - patch 5,6,11,13: generic parts, undef #if defined(__FDPIC__)

> > > - patches 14-20: testsuite

> > >

> > > Christophe

> > >

> > > On Tue, 4 Jun 2019 at 14:57, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> > > >

> > > > Ping?

> > > >

> > > >

> > > > On Thu, 23 May 2019 at 14:46, Christophe Lyon <christophe.lyon@st.com> wrote:

> > > > >

> > > > > Ping?

> > > > >

> > > > > Any feedback other than what I got on patch 03/21 ?

> > > > >

> > > > > Thanks,

> > > > >

> > > > > Christophe

> > > > >

> > > > >

> > > > > On 15/05/2019 14:39, Christophe Lyon wrote:

> > > > > > 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, QEMU and uclibc-ng patch series have been merged a few

> > > > > > months ago. [4][5][6]

> > > > > >

> > > > > > This series provides support for architectures that support ARM and/or

> > > > > > Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> > > > > > as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> > > > > > a few more failures than arm-linux-gnueabi, but is quite functional.

> > > > > >

> > > > > > I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> > > > > > with linux-4.20.17 and ran successfully several tools.

> > > > > >

> > > > > > Are the GCC patches OK for inclusion in master?

> > > > > >

> > > > > > Changes between v4 and v5:

> > > > > > - rebased on top of recent gcc-10 master (April 26th, 2019)

> > > > > > - fixed handling of stack-protector combined patterns in FDPIC mode

> > > > > >

> > > > > > Changes between v3 and v4:

> > > > > >

> > > > > > - improved documentation (patch 1)

> > > > > > - emit an error message (sorry) if the target architecture does not

> > > > > >    support arm nor thumb-2 modes (patch 4)

> > > > > > - handle Richard's comments on patch 4 (comments, unspec)

> > > > > > - added .align directive (patch 5)

> > > > > > - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> > > > > > - code factorization in patch 7

> > > > > > - typos/internal function name in patch 8

> > > > > > - improved patch 12

> > > > > > - dropped patch 16

> > > > > > - patch 20 introduces arm_arch*_thumb_ok effective targets to help

> > > > > >    skip some tests

> > > > > > - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

> > > > > >    new tests, but a few regressions

> > > > > >    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> > > > > > - I compiled and executed several LTP tests to exercise pthreads and signals

> > > > > > - I wrote and executed a simple testcase to change the interaction

> > > > > >    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

> > > > > >    implementation in libgcc as requested by Richard)

> > > > > >

> > > > > > Changes between v2 and v3:

> > > > > > - added doc entry for -mfdpic new option

> > > > > > - took Kyrill's comments into account (use "Armv7" instead of "7",

> > > > > >    code factorization, use preprocessor instead of hard-coding "r9",

> > > > > >    remove leftover code for thumb1 support, fixed comments)

> > > > > > - rebase over recent trunk

> > > > > > - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

> > > > > >    14 (rebase), 19 (rebase)

> > > > > >

> > > > > > 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> > > > > >

> > > > > > 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 read-only

> > > > > >    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

> > > > > >      FDPIC

> > > > > >    [ARM] FDPIC: Handle stack-protector combined patterns

> > > > > >

> > > > > >   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                               | 485 ++++++++++++++++++---

> > > > > >   gcc/config/arm/arm.h                               |  16 +-

> > > > > >   gcc/config/arm/arm.md                              | 151 ++++++-

> > > > > >   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/doc/invoke.texi                                |  20 +-

> > > > > >   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

> > > > > >   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

> > > > > >   libatomic/configure                                |   8 +-

> > > > > >   libatomic/configure.tgt                            |   2 +-

> > > > > >   libgcc/config.host                                 |   4 +-

> > > > > >   libgcc/config/arm/linux-atomic.c                   |  55 ++-

> > > > > >   libgcc/config/arm/unwind-arm.c                     |   5 +

> > > > > >   libgcc/config/arm/unwind-arm.h                     |  31 +-

> > > > > >   libgcc/crtstuff.c                                  |  18 +

> > > > > >   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 +-

> > > > > >   156 files changed, 1233 insertions(+), 219 deletions(-)

> > > > > >   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

> > > > > >

> > > > >
Christophe Lyon July 16, 2019, 9:07 a.m. UTC | #7
Ping^6?

Le lun. 8 juil. 2019 à 16:27, Christophe Lyon <christophe.lyon@linaro.org>
a écrit :

> ping^5?

>

> On Mon, 1 Jul 2019 at 14:15, Christophe Lyon <christophe.lyon@linaro.org>

> wrote:

> >

> > ping^4 ?

> > https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00817.html

> >

> > On Mon, 17 Jun 2019 at 13:41, Christophe Lyon

> > <christophe.lyon@linaro.org> wrote:

> > >

> > > ping^3 ?

> > >

> > > On Thu, 6 Jun 2019 at 14:36, Christophe Lyon <

> christophe.lyon@linaro.org> wrote:

> > > >

> > > > Hi,

> > > >

> > > > If this makes review easier, here are the areas covered by the

> patches:

> > > >

> > > > - patches 1,3,4,7,8,9,10,12,21: target-specific

> > > > - patch 2: configure

> > > > - patch 5,6,11,13: generic parts, undef #if defined(__FDPIC__)

> > > > - patches 14-20: testsuite

> > > >

> > > > Christophe

> > > >

> > > > On Tue, 4 Jun 2019 at 14:57, Christophe Lyon <

> christophe.lyon@linaro.org> wrote:

> > > > >

> > > > > Ping?

> > > > >

> > > > >

> > > > > On Thu, 23 May 2019 at 14:46, Christophe Lyon <

> christophe.lyon@st.com> wrote:

> > > > > >

> > > > > > Ping?

> > > > > >

> > > > > > Any feedback other than what I got on patch 03/21 ?

> > > > > >

> > > > > > Thanks,

> > > > > >

> > > > > > Christophe

> > > > > >

> > > > > >

> > > > > > On 15/05/2019 14:39, Christophe Lyon wrote:

> > > > > > > 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, QEMU and uclibc-ng patch series have been merged

> a few

> > > > > > > months ago. [4][5][6]

> > > > > > >

> > > > > > > This series provides support for architectures that support

> ARM and/or

> > > > > > > Thumb-2 and has been tested on arm-linux-gnueabi without

> regression,

> > > > > > > as well as arm-uclinuxfdpiceabi, using QEMU.

> arm-uclinuxfdpiceabi has

> > > > > > > a few more failures than arm-linux-gnueabi, but is quite

> functional.

> > > > > > >

> > > > > > > I have also booted an STM32 board (stm32f469) which uses a

> cortex-m4

> > > > > > > with linux-4.20.17 and ran successfully several tools.

> > > > > > >

> > > > > > > Are the GCC patches OK for inclusion in master?

> > > > > > >

> > > > > > > Changes between v4 and v5:

> > > > > > > - rebased on top of recent gcc-10 master (April 26th, 2019)

> > > > > > > - fixed handling of stack-protector combined patterns in FDPIC

> mode

> > > > > > >

> > > > > > > Changes between v3 and v4:

> > > > > > >

> > > > > > > - improved documentation (patch 1)

> > > > > > > - emit an error message (sorry) if the target architecture

> does not

> > > > > > >    support arm nor thumb-2 modes (patch 4)

> > > > > > > - handle Richard's comments on patch 4 (comments, unspec)

> > > > > > > - added .align directive (patch 5)

> > > > > > > - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb)

> (patch 6)

> > > > > > > - code factorization in patch 7

> > > > > > > - typos/internal function name in patch 8

> > > > > > > - improved patch 12

> > > > > > > - dropped patch 16

> > > > > > > - patch 20 introduces arm_arch*_thumb_ok effective targets to

> help

> > > > > > >    skip some tests

> > > > > > > - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds

> many

> > > > > > >    new tests, but a few regressions

> > > > > > >    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> > > > > > > - I compiled and executed several LTP tests to exercise

> pthreads and signals

> > > > > > > - I wrote and executed a simple testcase to change the

> interaction

> > > > > > >    with __kernel_cmpxchg (ie. call the kernel helper rather

> than use an

> > > > > > >    implementation in libgcc as requested by Richard)

> > > > > > >

> > > > > > > Changes between v2 and v3:

> > > > > > > - added doc entry for -mfdpic new option

> > > > > > > - took Kyrill's comments into account (use "Armv7" instead of

> "7",

> > > > > > >    code factorization, use preprocessor instead of hard-coding

> "r9",

> > > > > > >    remove leftover code for thumb1 support, fixed comments)

> > > > > > > - rebase over recent trunk

> > > > > > > - patches with changes: 1, 2 (commit message), 3 (rebase), 4,

> 6, 7, 9,

> > > > > > >    14 (rebase), 19 (rebase)

> > > > > > >

> > > > > > > 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> > > > > > >

> > > > > > > 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

> read-only

> > > > > > >    [ARM] FDPIC: Enforce 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 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 architectures

> unsupported by

> > > > > > >      FDPIC

> > > > > > >    [ARM] FDPIC: Handle stack-protector combined patterns

> > > > > > >

> > > > > > >   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                               | 485

> ++++++++++++++++++---

> > > > > > >   gcc/config/arm/arm.h                               |  16 +-

> > > > > > >   gcc/config/arm/arm.md                              | 151

> ++++++-

> > > > > > >   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/doc/invoke.texi                                |  20 +-

> > > > > > >   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

> > > > > > >   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

> > > > > > >   libatomic/configure                                |   8 +-

> > > > > > >   libatomic/configure.tgt                            |   2 +-

> > > > > > >   libgcc/config.host                                 |   4 +-

> > > > > > >   libgcc/config/arm/linux-atomic.c                   |  55 ++-

> > > > > > >   libgcc/config/arm/unwind-arm.c                     |   5 +

> > > > > > >   libgcc/config/arm/unwind-arm.h                     |  31 +-

> > > > > > >   libgcc/crtstuff.c                                  |  18 +

> > > > > > >   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 +-

> > > > > > >   156 files changed, 1233 insertions(+), 219 deletions(-)

> > > > > > >   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

> > > > > > >

> > > > > >

>
Christophe Lyon Aug. 29, 2019, 1:57 p.m. UTC | #8
Hi,

On 15/05/2019 14:39, Christophe Lyon wrote:
> 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, QEMU and uclibc-ng patch series have been merged a few

> months ago. [4][5][6]

> 

> This series provides support for architectures that support ARM and/or

> Thumb-2 and has been tested on arm-linux-gnueabi without regression,

> as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

> a few more failures than arm-linux-gnueabi, but is quite functional.

> 

> I have also booted an STM32 board (stm32f469) which uses a cortex-m4

> with linux-4.20.17 and ran successfully several tools.

> 

> Are the GCC patches OK for inclusion in master?

> 

I have addressed the comments I received on v5, and I am going to post updated versions of the patches that needed changes as follow-ups in this thread. I hope this will help reviewers as I will provide answers and updated patches next to their comments. After that, I will rebase the whole series and send it as v6 if that helps (several testsuite patches have already been approved as-is, but committing them now would change the patch numbering, thus possibly confusing reviewers).

However, note that several patches in the series haven't received feedback yet, so this is a ping for them :-)
[ARM/FDPIC v5 06/21] [ARM] FDPIC: Add support for c++ exceptions
[ARM/FDPIC v5 10/21] [ARM] FDPIC: Implement TLS support.
[ARM/FDPIC v5 11/21] [ARM] FDPIC: Add support to unwind FDPIC signal frame
[ARM/FDPIC v5 12/21] [ARM] FDPIC: Restore r9 after we call __aeabi_read_tp
[ARM/FDPIC v5 13/21] [ARM] FDPIC: Force LSB bit for PC in Cortex-M architecture

Thanks,

Christophe

> Changes between v4 and v5:

> - rebased on top of recent gcc-10 master (April 26th, 2019)

> - fixed handling of stack-protector combined patterns in FDPIC mode

> 

> Changes between v3 and v4:

> 

> - improved documentation (patch 1)

> - emit an error message (sorry) if the target architecture does not

>    support arm nor thumb-2 modes (patch 4)

> - handle Richard's comments on patch 4 (comments, unspec)

> - added .align directive (patch 5)

> - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

> - code factorization in patch 7

> - typos/internal function name in patch 8

> - improved patch 12

> - dropped patch 16

> - patch 20 introduces arm_arch*_thumb_ok effective targets to help

>    skip some tests

> - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

>    new tests, but a few regressions

>    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

> - I compiled and executed several LTP tests to exercise pthreads and signals

> - I wrote and executed a simple testcase to change the interaction

>    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

>    implementation in libgcc as requested by Richard)

> 

> Changes between v2 and v3:

> - added doc entry for -mfdpic new option

> - took Kyrill's comments into account (use "Armv7" instead of "7",

>    code factorization, use preprocessor instead of hard-coding "r9",

>    remove leftover code for thumb1 support, fixed comments)

> - rebase over recent trunk

> - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

>    14 (rebase), 19 (rebase)

> 

> 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

> 

> 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 read-only

>    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

>      FDPIC

>    [ARM] FDPIC: Handle stack-protector combined patterns

> 

>   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                               | 485 ++++++++++++++++++---

>   gcc/config/arm/arm.h                               |  16 +-

>   gcc/config/arm/arm.md                              | 151 ++++++-

>   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/doc/invoke.texi                                |  20 +-

>   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

>   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

>   libatomic/configure                                |   8 +-

>   libatomic/configure.tgt                            |   2 +-

>   libgcc/config.host                                 |   4 +-

>   libgcc/config/arm/linux-atomic.c                   |  55 ++-

>   libgcc/config/arm/unwind-arm.c                     |   5 +

>   libgcc/config/arm/unwind-arm.h                     |  31 +-

>   libgcc/crtstuff.c                                  |  18 +

>   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 +-

>   156 files changed, 1233 insertions(+), 219 deletions(-)

>   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

>
Christophe Lyon Aug. 29, 2019, 3:40 p.m. UTC | #9
On 29/08/2019 15:57, Christophe Lyon wrote:
> Hi,

> 

> On 15/05/2019 14:39, Christophe Lyon wrote:

>> 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, QEMU and uclibc-ng patch series have been merged a few

>> months ago. [4][5][6]

>>

>> This series provides support for architectures that support ARM and/or

>> Thumb-2 and has been tested on arm-linux-gnueabi without regression,

>> as well as arm-uclinuxfdpiceabi, using QEMU. arm-uclinuxfdpiceabi has

>> a few more failures than arm-linux-gnueabi, but is quite functional.

>>

>> I have also booted an STM32 board (stm32f469) which uses a cortex-m4

>> with linux-4.20.17 and ran successfully several tools.

>>

>> Are the GCC patches OK for inclusion in master?

>>

> I have addressed the comments I received on v5, and I am going to post updated versions of the patches that needed changes as follow-ups in this thread. I hope this will help reviewers as I will provide answers and updated patches next to their comments. After that, I will rebase the whole series and send it as v6 if that helps (several testsuite patches have already been approved as-is, but committing them now would change the patch numbering, thus possibly confusing reviewers).

> 

> However, note that several patches in the series haven't received feedback yet, so this is a ping for them :-)

> [ARM/FDPIC v5 06/21] [ARM] FDPIC: Add support for c++ exceptions

> [ARM/FDPIC v5 10/21] [ARM] FDPIC: Implement TLS support.

> [ARM/FDPIC v5 11/21] [ARM] FDPIC: Add support to unwind FDPIC signal frame

> [ARM/FDPIC v5 12/21] [ARM] FDPIC: Restore r9 after we call __aeabi_read_tp

> [ARM/FDPIC v5 13/21] [ARM] FDPIC: Force LSB bit for PC in Cortex-M architecture

> 


I forgot to mention that I found a problem in libitm's sjlj.S, worth this additional patch.

Christophe


> Thanks,

> 

> Christophe

> 

>> Changes between v4 and v5:

>> - rebased on top of recent gcc-10 master (April 26th, 2019)

>> - fixed handling of stack-protector combined patterns in FDPIC mode

>>

>> Changes between v3 and v4:

>>

>> - improved documentation (patch 1)

>> - emit an error message (sorry) if the target architecture does not

>>    support arm nor thumb-2 modes (patch 4)

>> - handle Richard's comments on patch 4 (comments, unspec)

>> - added .align directive (patch 5)

>> - fixed use of kernel helpers (__kernel_cmpxchg, __kernel_dmb) (patch 6)

>> - code factorization in patch 7

>> - typos/internal function name in patch 8

>> - improved patch 12

>> - dropped patch 16

>> - patch 20 introduces arm_arch*_thumb_ok effective targets to help

>>    skip some tests

>> - I tested patch 2 on xtensa-buildroot-uclinux-uclibc, it adds many

>>    new tests, but a few regressions

>>    (https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00713.html)

>> - I compiled and executed several LTP tests to exercise pthreads and signals

>> - I wrote and executed a simple testcase to change the interaction

>>    with __kernel_cmpxchg (ie. call the kernel helper rather than use an

>>    implementation in libgcc as requested by Richard)

>>

>> Changes between v2 and v3:

>> - added doc entry for -mfdpic new option

>> - took Kyrill's comments into account (use "Armv7" instead of "7",

>>    code factorization, use preprocessor instead of hard-coding "r9",

>>    remove leftover code for thumb1 support, fixed comments)

>> - rebase over recent trunk

>> - patches with changes: 1, 2 (commit message), 3 (rebase), 4, 6, 7, 9,

>>    14 (rebase), 19 (rebase)

>>

>> 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://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=13c46fbc1e5a021f2b9ed32d83aecc93ae5e655d

>>

>> 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 read-only

>>    [ARM] FDPIC: Enforce 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 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 architectures unsupported by

>>      FDPIC

>>    [ARM] FDPIC: Handle stack-protector combined patterns

>>

>>   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                               | 485 ++++++++++++++++++---

>>   gcc/config/arm/arm.h                               |  16 +-

>>   gcc/config/arm/arm.md                              | 151 ++++++-

>>   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/doc/invoke.texi                                |  20 +-

>>   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.c-torture/compile/pr82096.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.target/arm/20051215-1.c          |   1 +

>>   .../gcc.target/arm/armv6-unaligned-load-ice.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/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              |  10 +

>>   libatomic/configure                                |   8 +-

>>   libatomic/configure.tgt                            |   2 +-

>>   libgcc/config.host                                 |   4 +-

>>   libgcc/config/arm/linux-atomic.c                   |  55 ++-

>>   libgcc/config/arm/unwind-arm.c                     |   5 +

>>   libgcc/config/arm/unwind-arm.h                     |  31 +-

>>   libgcc/crtstuff.c                                  |  18 +

>>   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 +-

>>   156 files changed, 1233 insertions(+), 219 deletions(-)

>>   create mode 100644 gcc/config/arm/uclinuxfdpiceabi.h

>>

>
From 5da6c409d616a30dddd56aa6512eb79db1acb8fe Mon Sep 17 00:00:00 2001
From: Christophe Lyon <christophe.lyon@linaro.org>

Date: Thu, 29 Aug 2019 13:14:04 +0000
Subject: [ARM/FDPIC v6 23/24] [ARM] FDPIC: Implement libitm support.

The ldaddr macro in sjlj.S needs to be updated to support the FDPIC
model.

2019-XX-XX  Christophe Lyon  <christophe.lyon@st.com>

	libitm/
	* config/arm/sjlj.S (ldaddr): Add FDPIC support.

Change-Id: Ieb2c6613363341d109c3500af0575b133b17407d

diff --git a/libitm/config/arm/sjlj.S b/libitm/config/arm/sjlj.S
index a9abf16..5d44964 100644
--- a/libitm/config/arm/sjlj.S
+++ b/libitm/config/arm/sjlj.S
@@ -49,7 +49,16 @@
 	.arch	armv7-m
 #endif
 
-#if defined(HAVE_MOVT) && defined(PIC)
+#if defined(__FDPIC__)
+.macro ldaddr reg, addr
+	ldr \reg, 99f
+	add \reg, \reg, r9
+.subsection 1
+	.align	2
+99:	.word	\addr(GOTOFF)
+.subsection 0
+.endm
+#elif defined(HAVE_MOVT) && defined(PIC)
 .macro ldaddr reg, addr
 	movw	\reg, #:lower16:(\addr - (98f + PC_OFS))
 	movt	\reg, #:upper16:(\addr - (98f + PC_OFS))
-- 
2.6.3