[PATCH,V2 00/15] Definition and support for SFrame unwind format
Indu Bhagat
indu.bhagat@oracle.com
Mon Oct 17 22:15:57 GMT 2022
Hello,
This patch series is the version 2 of the previously sent series
https://sourceware.org/pipermail/binutils/2022-September/123165.html.
Each patch has brief notes on the respective changes from V1. Here is a
combined summary of changes in V2:
- SFrame SPEC texi file has been added.
- readelf/objdump behaviour wrt --sframe command line option had some
reported issues in V1. These are now fixed. Both readelf and objdump,
specifying the section name with --gsframe is now optional.
- binutils/NEWS now has a mention about the new command line option --gsframe
in readelf/objdump.
- testsuite improvements - check for dejagnu+gcc compatible pair before
running libsframe tests.
- other minor code formatting, comments touch ups.
PS: libsframe/configure has been REMOVED from the patch series, as it causes
the size of some patches to go beyond the allowed limit. Please regenerate
libsframe/configure after applying the series.
Testing notes:
- Tested natively on x86_64-linux, aarch64-linux and i686-linux with
'--enable-shared'.
- Cross builds for various targets on x86_64 host.
Ran a regression script that checks for failures in gas, ld, binutils, libctf
with no reported regressions. libsframe tests ran as expected.
libsframebt (the backtracer) tests (which are present in
libsframe/testsuite/libsframe.unwind) have been disabled with host != target.
As next steps, I plan to continue to work on improving the current support in
this patch series. I also plan to now take up the following two tasks around
aarch64 support:
- #1 Generate SFrame information for PLT/veneers in aarch64, and
- #2 Look at how to support .cfi_negate_ra_state.
It is likely that #2 will need some changes to the SFrame format.
Thanks,
Indu Bhagat (12):
sframe.h: Add SFrame format definition
gas: add new command line option --gsframe
gas: generate .sframe from CFI directives
gas: testsuite: add new tests for SFrame unwind info
bfd: linker: merge .sframe sections
readelf/objdump: support for SFrame section
gdb: sim: buildsystem changes to accommodate libsframe
libctf: add libsframe to LDFLAGS and LIBS
src-release.sh: Add libsframe
binutils/NEWS: add text for SFrame support
gas/NEWS: add text about new command line option and SFrame support
doc: add SFrame spec file
Weimin Pan (3):
libsframe: add the SFrame library
unwinder: generate backtrace using SFrame format
unwinder: Add SFrame unwinder tests
Makefile.def | 6 +
Makefile.in | 1299 ++++++++++++-
bfd/Makefile.am | 6 +-
bfd/Makefile.in | 7 +-
bfd/bfd-in2.h | 1 +
bfd/configure | 2 +-
bfd/configure.ac | 2 +-
bfd/elf-bfd.h | 54 +
bfd/elf-sframe.c | 537 ++++++
bfd/elf.c | 32 +
bfd/elf64-x86-64.c | 97 +-
bfd/elflink.c | 52 +
bfd/elfxx-x86.c | 373 +++-
bfd/elfxx-x86.h | 49 +
bfd/section.c | 1 +
binutils/Makefile.am | 10 +-
binutils/Makefile.in | 9 +-
binutils/NEWS | 3 +
binutils/doc/binutils.texi | 4 +
binutils/doc/sframe.options.texi | 10 +
binutils/objdump.c | 75 +
binutils/readelf.c | 64 +
config/dejagnu.m4 | 22 +
config/sframe.m4 | 16 +
configure | 2 +-
configure.ac | 2 +-
gas/Makefile.am | 3 +
gas/Makefile.in | 22 +-
gas/NEWS | 3 +
gas/as.c | 10 +-
gas/as.h | 13 +-
gas/config/tc-aarch64.c | 41 +
gas/config/tc-aarch64.h | 29 +
gas/config/tc-i386.c | 44 +
gas/config/tc-i386.h | 26 +
gas/config/tc-xtensa.c | 1 +
gas/doc/as.texi | 20 +-
gas/dw2gencfi.c | 30 +
gas/dw2gencfi.h | 1 +
gas/gen-sframe.c | 1306 +++++++++++++
gas/gen-sframe.h | 141 ++
gas/sframe-opt.c | 158 ++
.../gas/cfi-sframe/cfi-sframe-aarch64-1.d | 20 +
.../gas/cfi-sframe/cfi-sframe-aarch64-1.s | 61 +
.../gas/cfi-sframe/cfi-sframe-common-1.d | 17 +
.../gas/cfi-sframe/cfi-sframe-common-1.s | 3 +
.../gas/cfi-sframe/cfi-sframe-common-2.d | 17 +
.../gas/cfi-sframe/cfi-sframe-common-2.s | 2 +
.../gas/cfi-sframe/cfi-sframe-common-3.d | 17 +
.../gas/cfi-sframe/cfi-sframe-common-3.s | 4 +
.../gas/cfi-sframe/cfi-sframe-common-4.d | 21 +
.../gas/cfi-sframe/cfi-sframe-common-4.s | 8 +
.../gas/cfi-sframe/cfi-sframe-common-5.d | 21 +
.../gas/cfi-sframe/cfi-sframe-common-5.s | 7 +
.../gas/cfi-sframe/cfi-sframe-common-6.d | 21 +
.../gas/cfi-sframe/cfi-sframe-common-6.s | 7 +
.../gas/cfi-sframe/cfi-sframe-common-7.d | 21 +
.../gas/cfi-sframe/cfi-sframe-common-7.s | 7 +
.../gas/cfi-sframe/cfi-sframe-common-8.d | 20 +
.../gas/cfi-sframe/cfi-sframe-common-8.s | 12 +
.../gas/cfi-sframe/cfi-sframe-x86_64-1.d | 22 +
.../gas/cfi-sframe/cfi-sframe-x86_64-1.s | 30 +
gas/testsuite/gas/cfi-sframe/cfi-sframe.exp | 71 +
gas/testsuite/gas/cfi-sframe/common-empty-1.d | 14 +
gas/testsuite/gas/cfi-sframe/common-empty-1.s | 5 +
gas/testsuite/gas/cfi-sframe/common-empty-2.d | 14 +
gas/testsuite/gas/cfi-sframe/common-empty-2.s | 8 +
gas/testsuite/gas/cfi-sframe/common-empty-3.d | 14 +
gas/testsuite/gas/cfi-sframe/common-empty-3.s | 9 +
gas/testsuite/gas/cfi-sframe/common-empty-4.d | 14 +
gas/testsuite/gas/cfi-sframe/common-empty-4.s | 17 +
gas/write.c | 13 +
gdb/Makefile.in | 8 +-
gdb/acinclude.m4 | 4 +-
gdb/configure | 35 +-
gdb/configure.ac | 11 +
include/elf/common.h | 1 +
include/elf/internal.h | 1 +
include/sframe-api.h | 222 +++
include/sframe-backtrace-api.h | 57 +
include/sframe.h | 289 +++
ld/Makefile.am | 2 +
ld/Makefile.in | 2 +
ld/configure | 8 +-
ld/configure.ac | 3 +
ld/ld.texi | 4 +-
ld/scripttempl/elf.sc | 2 +
ld/testsuite/ld-aarch64/aarch64-elf.exp | 4 +
ld/testsuite/ld-aarch64/sframe-bar.s | 7 +
ld/testsuite/ld-aarch64/sframe-foo.s | 10 +
ld/testsuite/ld-aarch64/sframe-simple-1.d | 26 +
ld/testsuite/ld-bootstrap/bootstrap.exp | 8 +-
ld/testsuite/ld-sframe/discard.d | 10 +
ld/testsuite/ld-sframe/discard.ld | 9 +
ld/testsuite/ld-sframe/discard.s | 13 +
ld/testsuite/ld-sframe/sframe-empty.d | 10 +
ld/testsuite/ld-sframe/sframe-empty.s | 2 +
ld/testsuite/ld-sframe/sframe.exp | 47 +
ld/testsuite/ld-x86-64/sframe-bar.s | 31 +
ld/testsuite/ld-x86-64/sframe-foo.s | 37 +
ld/testsuite/ld-x86-64/sframe-plt-1.d | 29 +
ld/testsuite/ld-x86-64/sframe-simple-1.d | 35 +
ld/testsuite/ld-x86-64/x86-64.exp | 5 +
ld/testsuite/lib/ld-lib.exp | 45 +
libctf/configure | 4 +-
libctf/configure.ac | 4 +-
libsframe/Makefile.am | 61 +
libsframe/Makefile.in | 1424 ++++++++++++++
libsframe/aclocal.m4 | 1243 +++++++++++++
libsframe/config.h.in | 144 ++
libsframe/configure.ac | 127 ++
libsframe/doc/local.mk | 40 +
libsframe/doc/sframe-spec.texi | 614 +++++++
libsframe/sframe-backtrace-err.c | 46 +
libsframe/sframe-backtrace.c | 620 +++++++
libsframe/sframe-dump.c | 180 ++
libsframe/sframe-error.c | 49 +
libsframe/sframe-impl.h | 55 +
libsframe/sframe.c | 1633 +++++++++++++++++
libsframe/testsuite/Makefile.am | 24 +
libsframe/testsuite/Makefile.in | 687 +++++++
libsframe/testsuite/config/default.exp | 57 +
libsframe/testsuite/lib/sframe-lib.exp | 180 ++
libsframe/testsuite/libsframe.decode/DATA-BE | Bin 0 -> 64 bytes
libsframe/testsuite/libsframe.decode/DATA1 | Bin 0 -> 60 bytes
libsframe/testsuite/libsframe.decode/DATA2 | Bin 0 -> 92 bytes
.../testsuite/libsframe.decode/Makefile.am | 17 +
.../testsuite/libsframe.decode/Makefile.in | 665 +++++++
.../testsuite/libsframe.decode/be-flipping.c | 115 ++
.../testsuite/libsframe.decode/decode.exp | 50 +
.../testsuite/libsframe.decode/frecnt-1.c | 99 +
.../testsuite/libsframe.decode/frecnt-2.c | 103 ++
.../testsuite/libsframe.encode/Makefile.am | 9 +
.../testsuite/libsframe.encode/Makefile.in | 612 ++++++
.../testsuite/libsframe.encode/encode-1.c | 182 ++
.../testsuite/libsframe.encode/encode.exp | 32 +
.../testsuite/libsframe.unwind/backtrace.c | 145 ++
.../testsuite/libsframe.unwind/backtrace.lk | 3 +
.../testsuite/libsframe.unwind/inline-cmds.c | 136 ++
.../testsuite/libsframe.unwind/inline-cmds.lk | 3 +
libsframe/testsuite/libsframe.unwind/inline.c | 97 +
.../testsuite/libsframe.unwind/inline.lk | 3 +
.../testsuite/libsframe.unwind/solib-lib1.c | 8 +
.../testsuite/libsframe.unwind/solib-lib1.h | 3 +
.../testsuite/libsframe.unwind/solib-lib2.c | 51 +
.../testsuite/libsframe.unwind/solib-lib2.h | 3 +
.../testsuite/libsframe.unwind/solib-main.c | 47 +
.../testsuite/libsframe.unwind/solib-main.d | 3 +
.../testsuite/libsframe.unwind/solib.exp | 75 +
.../testsuite/libsframe.unwind/tailcall.c | 103 ++
.../testsuite/libsframe.unwind/tailcall.lk | 3 +
libsframe/testsuite/libsframe.unwind/ttest.c | 127 ++
libsframe/testsuite/libsframe.unwind/ttest.lk | 3 +
.../testsuite/libsframe.unwind/unwind.exp | 200 ++
sim/common/Make-common.in | 7 +-
src-release.sh | 4 +-
156 files changed, 16113 insertions(+), 64 deletions(-)
create mode 100644 bfd/elf-sframe.c
create mode 100644 binutils/doc/sframe.options.texi
create mode 100644 config/dejagnu.m4
create mode 100644 config/sframe.m4
create mode 100644 gas/gen-sframe.c
create mode 100644 gas/gen-sframe.h
create mode 100644 gas/sframe-opt.c
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-1.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-1.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-2.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-3.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-4.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-5.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-6.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-7.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-common-8.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.d
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-1.s
create mode 100644 gas/testsuite/gas/cfi-sframe/cfi-sframe.exp
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-1.d
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-1.s
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-2.d
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-2.s
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-3.d
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-3.s
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-4.d
create mode 100644 gas/testsuite/gas/cfi-sframe/common-empty-4.s
mode change 100755 => 100644 gdb/configure
create mode 100644 include/sframe-api.h
create mode 100644 include/sframe-backtrace-api.h
create mode 100644 include/sframe.h
create mode 100644 ld/testsuite/ld-aarch64/sframe-bar.s
create mode 100644 ld/testsuite/ld-aarch64/sframe-foo.s
create mode 100644 ld/testsuite/ld-aarch64/sframe-simple-1.d
create mode 100644 ld/testsuite/ld-sframe/discard.d
create mode 100644 ld/testsuite/ld-sframe/discard.ld
create mode 100644 ld/testsuite/ld-sframe/discard.s
create mode 100644 ld/testsuite/ld-sframe/sframe-empty.d
create mode 100644 ld/testsuite/ld-sframe/sframe-empty.s
create mode 100644 ld/testsuite/ld-sframe/sframe.exp
create mode 100644 ld/testsuite/ld-x86-64/sframe-bar.s
create mode 100644 ld/testsuite/ld-x86-64/sframe-foo.s
create mode 100644 ld/testsuite/ld-x86-64/sframe-plt-1.d
create mode 100644 ld/testsuite/ld-x86-64/sframe-simple-1.d
create mode 100644 libsframe/Makefile.am
create mode 100644 libsframe/Makefile.in
create mode 100644 libsframe/aclocal.m4
create mode 100644 libsframe/config.h.in
create mode 100644 libsframe/configure.ac
create mode 100644 libsframe/doc/local.mk
create mode 100644 libsframe/doc/sframe-spec.texi
create mode 100644 libsframe/sframe-backtrace-err.c
create mode 100644 libsframe/sframe-backtrace.c
create mode 100644 libsframe/sframe-dump.c
create mode 100644 libsframe/sframe-error.c
create mode 100644 libsframe/sframe-impl.h
create mode 100644 libsframe/sframe.c
create mode 100644 libsframe/testsuite/Makefile.am
create mode 100644 libsframe/testsuite/Makefile.in
create mode 100644 libsframe/testsuite/config/default.exp
create mode 100644 libsframe/testsuite/lib/sframe-lib.exp
create mode 100644 libsframe/testsuite/libsframe.decode/DATA-BE
create mode 100644 libsframe/testsuite/libsframe.decode/DATA1
create mode 100644 libsframe/testsuite/libsframe.decode/DATA2
create mode 100644 libsframe/testsuite/libsframe.decode/Makefile.am
create mode 100644 libsframe/testsuite/libsframe.decode/Makefile.in
create mode 100644 libsframe/testsuite/libsframe.decode/be-flipping.c
create mode 100644 libsframe/testsuite/libsframe.decode/decode.exp
create mode 100644 libsframe/testsuite/libsframe.decode/frecnt-1.c
create mode 100644 libsframe/testsuite/libsframe.decode/frecnt-2.c
create mode 100644 libsframe/testsuite/libsframe.encode/Makefile.am
create mode 100644 libsframe/testsuite/libsframe.encode/Makefile.in
create mode 100644 libsframe/testsuite/libsframe.encode/encode-1.c
create mode 100644 libsframe/testsuite/libsframe.encode/encode.exp
create mode 100644 libsframe/testsuite/libsframe.unwind/backtrace.c
create mode 100644 libsframe/testsuite/libsframe.unwind/backtrace.lk
create mode 100644 libsframe/testsuite/libsframe.unwind/inline-cmds.c
create mode 100644 libsframe/testsuite/libsframe.unwind/inline-cmds.lk
create mode 100644 libsframe/testsuite/libsframe.unwind/inline.c
create mode 100644 libsframe/testsuite/libsframe.unwind/inline.lk
create mode 100644 libsframe/testsuite/libsframe.unwind/solib-lib1.c
create mode 100644 libsframe/testsuite/libsframe.unwind/solib-lib1.h
create mode 100644 libsframe/testsuite/libsframe.unwind/solib-lib2.c
create mode 100644 libsframe/testsuite/libsframe.unwind/solib-lib2.h
create mode 100644 libsframe/testsuite/libsframe.unwind/solib-main.c
create mode 100644 libsframe/testsuite/libsframe.unwind/solib-main.d
create mode 100644 libsframe/testsuite/libsframe.unwind/solib.exp
create mode 100644 libsframe/testsuite/libsframe.unwind/tailcall.c
create mode 100644 libsframe/testsuite/libsframe.unwind/tailcall.lk
create mode 100644 libsframe/testsuite/libsframe.unwind/ttest.c
create mode 100644 libsframe/testsuite/libsframe.unwind/ttest.lk
create mode 100644 libsframe/testsuite/libsframe.unwind/unwind.exp
--
2.37.2
More information about the Binutils
mailing list