mirror of
https://github.com/bminor/binutils-gdb.git
synced 2026-05-12 23:25:44 +00:00
055c525b8f49b062e7ebba6405d6897c10650ed5
This commit amalgamates a patch set proposed by Jens Remus to enable the
SFrame Version 3 Flexible FDE Type (SFRAME_FDE_TYPE_FLEX) generation for
the s390x ABI.
Previously, s390x relied on architecture-specific encoding (shifting register
numbers into offset fields) to represent register recovery rules. This limited
the complexity of CFI that could be supported. With Flex FDE enabled:
- s390x can now represent .cfi_def_cfa using non-SP/FP registers.
- The architecture-specific function s390_sframe_xlate_do_register () in GAS
is replaced by the generic Flex FDE generation path.
- The SFrame V3 specific macros for s390x register encoding are removed
from libsframe/include, as the generic Flex FDE format handles explicit
register columns natively.
The testsuite is updated to replace negative tests (which asserted
warnings or empty SFrame generation for these patterns) with positive
tests verifying valid Flex FDE generation.
Co-authored-by: Jens Remus <jremus@linux.ibm.com>
TBD:
- Discuss with s390x maintainer.
gas/
* config/tc-s390.c (s390_support_flex_fde_p): Return true to
enable Flex FDE generation.
* gen-sframe.c (s390_sframe_xlate_do_register): Disable s390x
specific implementation.
(sframe_xlate_do_register): Invoke generic Flex FDE path now
that flex FDE generation is supported.
gas/testsuite/
* gas/cfi-sframe/cfi-sframe-s390x-err-1.d: Removed.
* gas/cfi-sframe/cfi-sframe-s390x-err-1.s: Moved to...
* gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-1.s: ...here.
* gas/cfi-sframe/cfi-sframe-s390x-err-2.d: Removed.
* gas/cfi-sframe/cfi-sframe-s390x-err-2.s: Moved to...
* gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-2.s: ...here.
* gas/cfi-sframe/cfi-sframe-s390x-fpra-register-1.d: Update to
expect Flex FDE output.
* gas/cfi-sframe/cfi-sframe-s390x-fpra-register-2.d: Likewise.
* gas/cfi-sframe/cfi-sframe.exp: Run renamed tests.
include/
* sframe.h (SFRAME_V3_S390X_OFFSET_IS_REGNUM): Remove.
(SFRAME_V3_S390X_OFFSET_ENCODE_REGNUM): Remove.
(SFRAME_V3_S390X_OFFSET_DECODE_REGNUM): Remove.
libsframe/
* sframe-dump.c (sframe_s390x_offset_regnum_p): Return false
for SFrame V3.
(sframe_s390x_offset_decode_regnum): Remove V3 support.
---
[New in V2]
This commit is an amalgamation of a set of patches proposed by Jens to
use flex FDE for s390x. For ease of review, here are the details of the
diffs brought over:
makeshift s390x flex FDE use
gas/
* config/tc-s390.c (s390_support_flex_fde_p): Return true to
enable FLEX FDE generation for s390x.
* gen-sframe.c (s390_sframe_xlate_do_register): Remove definition.
(sframe_xlate_do_register): Use sframe_support_flex_fde_p () and
invoke the FLEX FDE generation path.
s390x: Jens' patch to move err tests to flex ones
Bring over the testsuite specific component from:
commit b4e5e9e670
Author: Jens Remus <jremus@linux.ibm.com>
Date: Fri Dec 12 16:03:33 2025 +0100
s390: sframe: gas: Represent .cfi_def_cfa[_register] for non-SP/FP reg. using FLEX_TOPMOST_FRAME
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
ChangeLog:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-err-1.s: Move to...
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-1.s: ...here.
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-err-2.s: Move to...
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-2.s: ...here.
* gas/testsuite/gas/cfi-sframe/cfi-sframe.exp:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-err-1.d: Removed.
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-err-2.d: Removed.
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-1.d: New test.
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-2.d: New test.
TODO: fixup! s390: sframe: gas: Represent .cfi_def_cfa[_register] for non-SP/FP reg. using FLEX_TOPMOST_FRAME
cherry-pick of the following commit
commit 9a39216b87
Author: Jens Remus <jremus@linux.ibm.com>
Date: Mon Dec 15 15:54:17 2025 +0100
TODO: fixup! s390: sframe: gas: Represent .cfi_def_cfa[_register] for non-SP/FP reg. using FLEX_TOPMOST_FRAME
Why does FLEX_TOPMOST_FRAME always have RA tracking information?
ChangeLog:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-1.d:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-2.d:
bring Jens fix fpra-register-1.d fpra-register-2.d
commit 69c3a613a4
Author: Jens Remus <jremus@linux.ibm.com>
Date: Fri Dec 12 16:05:01 2025 +0100
s390: gas: sframe: Represent .cfi_register FP/RA using FLEX_TOPMOST_FRAME
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
still needs adjustment
ChangeLog:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-fpra-register-1.d:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-fpra-register-2.d:
testsuite: fixup s390x tests now that 2 RA offsets are not always forcefully emitted
ChangeLog:
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-fpra-register-1.d
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-fpra-register-2.d
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-1.d
* gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-non-spfp-cfa-2.d
cleanup sframe.h and sframe-dump.c based on Jens' patch
commit 69c3a613a4
Author: Jens Remus <jremus@linux.ibm.com>
Date: Fri Dec 12 16:05:01 2025 +0100
s390: gas: sframe: Represent .cfi_register FP/RA using FLEX_TOPMOST_FRAME
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
include/
* sframe.h (SFRAME_V3_S390X_OFFSET_IS_REGNUM): Remove.
(SFRAME_V3_S390X_OFFSET_ENCODE_REGNUM): Remove.
(SFRAME_V3_S390X_OFFSET_DECODE_REGNUM): Remove.
libsframe/
* sframe-dump.c (sframe_s390x_offset_regnum_p): No more
necessary for V3, now that it uses FLEX FDE instead.
(sframe_s390x_offset_decode_regnum): Likewise.
…
…
…
…
…
…
…
…
…
…
README for GNU development tools This directory contains various GNU compilers, assemblers, linkers, debuggers, etc., plus their support routines, definitions, and documentation. If you are receiving this as part of a GDB release, see the file gdb/README. If with a binutils release, see binutils/README, and so on. That'll give you info about this package -- supported targets, how to use it, how to report bugs, etc. It is now possible to automatically configure and build a variety of tools with one command. To build all of the tools contained herein, run the ``configure'' script here, e.g.: ./configure make To install them (by default in /usr/local/bin, /usr/local/lib, etc), then do: make install (If the configure script can't determine your type of computer, give it the name as an argument, for instance ``./configure sun4''. You can use the script ``config.sub'' to test whether a name is recognized; if it is, config.sub translates it to a triplet specifying CPU, vendor, and OS.) If you have more than one compiler on your system, it is often best to explicitly set CC in the environment before running configure, and to also set CC when running make. For example (assuming sh/bash/ksh): CC=gcc ./configure make A similar example using csh: setenv CC gcc ./configure make Much of the code and documentation enclosed is copyright by the Free Software Foundation, Inc. See the file COPYING or COPYING.LIB in the various directories, for a description of the GNU General Public License terms under which you can copy the files. REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info on where and how to report problems.
Description
Languages
C
50.4%
Makefile
22.7%
Assembly
13.2%
C++
5.9%
Roff
1.5%
Other
5.7%