]> git.ipfire.org Git - thirdparty/gcc.git/commit
SVE unwinding
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Jan 2018 17:56:52 +0000 (17:56 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Jan 2018 17:56:52 +0000 (17:56 +0000)
commit599c8d3e6b63b359647f40cbfd53568655694f6d
treecbbcda2f43cf257940616199a72d7b22c5d92a50
parent2f0761be7ddb39be28392562517387d6955fc124
SVE unwinding

This patch adds support for unwinding frames that use the SVE
pseudo VG register.  We want this register to act like a normal
register if the CFI explicitly sets it, but want to provide a
default value otherwise.  Computing the default value requires
an SVE target, so we only want to compute it on demand.

aarch64_vg uses a hard-coded .inst in order to avoid a build
dependency on binutils 2.28 or later.

2018-01-13  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* doc/tm.texi.in (DWARF_LAZY_REGISTER_VALUE): Document.
* doc/tm.texi: Regenerate.

libgcc/
* config/aarch64/value-unwind.h (aarch64_vg): New function.
(DWARF_LAZY_REGISTER_VALUE): Define.
* unwind-dw2.c (_Unwind_GetGR): Use DWARF_LAZY_REGISTER_VALUE
to provide a fallback register value.

gcc/testsuite/
* g++.target/aarch64/sve/aarch64-sve.exp: New harness.
* g++.target/aarch64/sve/catch_1.C: New test.
* g++.target/aarch64/sve/catch_2.C: Likewise.
* g++.target/aarch64/sve/catch_3.C: Likewise.
* g++.target/aarch64/sve/catch_4.C: Likewise.
* g++.target/aarch64/sve/catch_5.C: Likewise.
* g++.target/aarch64/sve/catch_6.C: Likewise.

Reviewed-by: James Greenhalgh <james.greenhalgh@arm.com>
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256615 138bc75d-0d04-0410-961f-82ee72b054a4
14 files changed:
gcc/ChangeLog
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/testsuite/ChangeLog
gcc/testsuite/g++.target/aarch64/sve/aarch64-sve.exp [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/catch_1.C [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/catch_2.C [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/catch_3.C [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/catch_4.C [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/catch_5.C [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/catch_6.C [new file with mode: 0644]
libgcc/ChangeLog
libgcc/config/aarch64/value-unwind.h
libgcc/unwind-dw2.c