[V3,00/15] Definition and support for SFrame unwind format

Message ID 20221030074450.1956074-1-indu.bhagat@oracle.com
Headers
Series Definition and support for SFrame unwind format |

Message

Indu Bhagat Oct. 30, 2022, 7:44 a.m. UTC
  Since the V2 was approved, there have been some changes to the patch series.
Each patch has brief notes on the respective changes from V2.  Here is a
combined summary:
  - V3 has some bugfixes.  It was noticed that unwinding on aarch64 had issues
  with -fomit-frame-pointer.  Fixed now.  Added new unwinder testcases around
  the same.
  - Addressed review comments by Mike on libsframe/ and gdb/ builsystem.

Posting a V3 for the complete set.

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:
 - Regression tested natively on x86_64-linux, aarch64-linux and i686-linux with
 '--enable-shared'.
 - Cross builds for various targets on x86_64 host, and some targets on aarch64
 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.

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                              |  544 ++++++
 bfd/elf.c                                     |   32 +
 bfd/elf64-x86-64.c                            |   97 +-
 bfd/elflink.c                                 |   52 +
 bfd/elfxx-x86.c                               |  375 +++-
 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                       |   52 +
 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   |   96 +
 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                               |    7 +-
 gdb/acinclude.m4                              |    4 +-
 gdb/configure                                 |    8 +-
 include/elf/common.h                          |    1 +
 include/elf/internal.h                        |    1 +
 include/sframe-api.h                          |  234 +++
 include/sframe-backtrace-api.h                |   57 +
 include/sframe.h                              |  303 +++
 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                         |   58 +
 libsframe/Makefile.in                         | 1533 +++++++++++++++
 libsframe/aclocal.m4                          | 1243 ++++++++++++
 libsframe/config.h.in                         |  132 ++
 libsframe/configure.ac                        |  114 ++
 libsframe/doc/local.mk                        |   40 +
 libsframe/doc/sframe-spec.texi                |  619 ++++++
 libsframe/sframe-backtrace-err.c              |   46 +
 libsframe/sframe-backtrace.c                  |  626 ++++++
 libsframe/sframe-dump.c                       |  181 ++
 libsframe/sframe-error.c                      |   49 +
 libsframe/sframe-impl.h                       |   55 +
 libsframe/sframe.c                            | 1675 +++++++++++++++++
 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/be-flipping.c  |  115 ++
 .../testsuite/libsframe.decode/decode.exp     |   50 +
 .../testsuite/libsframe.decode/frecnt-1.c     |   99 +
 .../testsuite/libsframe.decode/frecnt-2.c     |  104 +
 libsframe/testsuite/libsframe.decode/local.mk |   16 +
 .../testsuite/libsframe.encode/encode-1.c     |  177 ++
 .../testsuite/libsframe.encode/encode.exp     |   37 +
 libsframe/testsuite/libsframe.encode/local.mk |    7 +
 .../libsframe.unwind/backtrace-fp-attr-1.c    |  109 ++
 .../libsframe.unwind/backtrace-fp-attr-1.lk   |    4 +
 .../libsframe.unwind/backtrace-fp-attr-2.c    |  110 ++
 .../libsframe.unwind/backtrace-fp-attr-2.lk   |    4 +
 .../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     |  205 ++
 libsframe/testsuite/local.mk                  |   24 +
 sim/common/Make-common.in                     |    7 +-
 sim/ppc/Makefile.in                           |    5 +-
 src-release.sh                                |    4 +-
 157 files changed, 14549 insertions(+), 66 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/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/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.decode/local.mk
 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.encode/local.mk
 create mode 100644 libsframe/testsuite/libsframe.unwind/backtrace-fp-attr-1.c
 create mode 100644 libsframe/testsuite/libsframe.unwind/backtrace-fp-attr-1.lk
 create mode 100644 libsframe/testsuite/libsframe.unwind/backtrace-fp-attr-2.c
 create mode 100644 libsframe/testsuite/libsframe.unwind/backtrace-fp-attr-2.lk
 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
 create mode 100644 libsframe/testsuite/local.mk