[clang][Sparc] Fix __builtin_extract_return_addr etc.
authorRainer Orth <ro@gcc.gnu.org>
Wed, 2 Feb 2022 18:20:02 +0000 (19:20 +0100)
committerRainer Orth <ro@gcc.gnu.org>
Wed, 2 Feb 2022 18:20:02 +0000 (19:20 +0100)
commitefdd0a29b7eb6f3b6ca3fe9182a6c1085806c73a
tree4a02a88890b0d3d016f2a14f626a6bf3341cf1a9
parentb73d151a118ffacffae772c9ddca8e276be2af43
[clang][Sparc] Fix __builtin_extract_return_addr etc.

While investigating the failures of `symbolize_pc.cpp` and
`symbolize_pc_inline.cpp` on SPARC (both Solaris and Linux), I noticed that
`__builtin_extract_return_addr` is a no-op in `clang` on all targets, while
`gcc` has non-default implementations for arm, mips, s390, and sparc.

This patch provides the SPARC implementation.  For background see
`SparcISelLowering.cpp` (`SparcTargetLowering::LowerReturn_32`), the SPARC
psABI p.3-12, `%i7` and p.3-16/17, and SCD 2.4.1, p.3P-10, `%i7` and
p.3P-15.

Tested (after enabling the `sanitizer_common` tests on SPARC) on
`sparcv9-sun-solaris2.11`.

Differential Revision: https://reviews.llvm.org/D91607
clang/lib/CodeGen/TargetInfo.cpp
clang/test/CodeGen/builtins-sparc.c