public inbox for gdb-testers@sourceware.org help / color / mirror / Atom feed
From: gdb-buildbot@sergiodj.net To: gdb-testers@sourceware.org Subject: [binutils-gdb] gas: Add --gdwarf-cie-version command line flag Date: Mon, 18 Nov 2019 11:24:00 -0000 [thread overview] Message-ID: <66f8b2cbbb675ccbcae56e2bdb6dae485878ec00@gdb-build> (raw) *** TEST RESULTS FOR COMMIT 66f8b2cbbb675ccbcae56e2bdb6dae485878ec00 *** commit 66f8b2cbbb675ccbcae56e2bdb6dae485878ec00 Author: Andrew Burgess <andrew.burgess@embecosm.com> AuthorDate: Mon Nov 4 12:27:45 2019 +0000 Commit: Andrew Burgess <andrew.burgess@embecosm.com> CommitDate: Mon Nov 18 10:30:21 2019 +0000 gas: Add --gdwarf-cie-version command line flag Add a flag to control the version of CIE that is generated. By default gas produces CIE version 1, and this continues to be the default after this patch. However, a user can now provide --gdwarf-cie-version=NUMBER to switch to either version 3 or version 4 of CIE, version 2 was never released, and so causes an error as does any number less than 1 or greater than 4. Producing version 4 CIE requires two new fields to be added to the CIE, an address size field, and an segment selector field. For a flat address space the DWARF specification indicates that the segment selector should be 0, and the address size fields just contains the address size in bytes. For now we support 4 or 8 byte addresses, and the segment selector is always produced as 0. At some future time we might need to allow targets to override this. gas/ChangeLog: * as.c (parse_args): Parse --gdwarf-cie-version option. (flag_dwarf_cie_version): New variable. * as.h (flag_dwarf_cie_version): Declare. * dw2gencfi.c (output_cie): Switch from DW_CIE_VERSION to flag_dwarf_cie_version. * doc/as.texi (Overview): Document --gdwarf-cie-version. * NEWS: Likewise. * testsuite/gas/cfi/cfi.exp: Add new tests. * testsuite/gas/cfi/cie-version-0.d: New file. * testsuite/gas/cfi/cie-version-1.d: New file. * testsuite/gas/cfi/cie-version-2.d: New file. * testsuite/gas/cfi/cie-version-3.d: New file. * testsuite/gas/cfi/cie-version-4.d: New file. * testsuite/gas/cfi/cie-version.s: New file. include/ChangeLog: * dwarf2.h (DW_CIE_VERSION): Delete. Change-Id: I9de19461aeb8332b5a57bbfe802953d0725a7ae8 diff --git a/gas/ChangeLog b/gas/ChangeLog index 7e9e6eff48..d9ad6498ef 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,20 @@ +2019-11-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * as.c (parse_args): Parse --gdwarf-cie-version option. + (flag_dwarf_cie_version): New variable. + * as.h (flag_dwarf_cie_version): Declare. + * dw2gencfi.c (output_cie): Switch from DW_CIE_VERSION to + flag_dwarf_cie_version. + * doc/as.texi (Overview): Document --gdwarf-cie-version. + * NEWS: Likewise. + * testsuite/gas/cfi/cfi.exp: Add new tests. + * testsuite/gas/cfi/cie-version-0.d: New file. + * testsuite/gas/cfi/cie-version-1.d: New file. + * testsuite/gas/cfi/cie-version-2.d: New file. + * testsuite/gas/cfi/cie-version-3.d: New file. + * testsuite/gas/cfi/cie-version-4.d: New file. + * testsuite/gas/cfi/cie-version.s: New file. + 2019-11-14 Jan Beulich <jbeulich@suse.com> * config/tc-i386.c (operand_size_match, md_assemble, diff --git a/gas/NEWS b/gas/NEWS index 1e7007428b..aaf857292c 100644 --- a/gas/NEWS +++ b/gas/NEWS @@ -27,6 +27,9 @@ Changes in 2.33: -mfp16-format=[ieee|alternative] option for Arm to control the format of the encoding. +* Add --gdwarf-cie-version command line flag. This allows control over which + version of DWARF CIE the assembler creates. + Changes in 2.32: * Add -mvexwig=[0|1] option to x86 assembler to control encoding of diff --git a/gas/as.c b/gas/as.c index d53db113e2..cc84725a42 100644 --- a/gas/as.c +++ b/gas/as.c @@ -95,6 +95,11 @@ int debug_memory = 0; /* Enable verbose mode. */ int verbose = 0; +/* Which version of DWARF CIE to produce. The default could be overridden + by a target during its initialisation, or by the --gdwarf-cie-version + command line flag. */ +int flag_dwarf_cie_version = 1; + #if defined OBJ_ELF || defined OBJ_MAYBE_ELF int flag_use_elf_stt_common = DEFAULT_GENERATE_ELF_STT_COMMON; bfd_boolean flag_generate_build_notes = DEFAULT_GENERATE_BUILD_NOTES; @@ -479,6 +484,7 @@ parse_args (int * pargc, char *** pargv) OPTION_GSTABS_PLUS, OPTION_GDWARF2, OPTION_GDWARF_SECTIONS, + OPTION_GDWARF_CIE_VERSION, OPTION_STRIP_LOCAL_ABSOLUTE, OPTION_TRADITIONAL_FORMAT, OPTION_WARN, @@ -534,6 +540,7 @@ parse_args (int * pargc, char *** pargv) so we keep it here for backwards compatibility. */ ,{"gdwarf2", no_argument, NULL, OPTION_GDWARF2} ,{"gdwarf-sections", no_argument, NULL, OPTION_GDWARF_SECTIONS} + ,{"gdwarf-cie-version", required_argument, NULL, OPTION_GDWARF_CIE_VERSION} ,{"gen-debug", no_argument, NULL, 'g'} ,{"gstabs", no_argument, NULL, OPTION_GSTABS} ,{"gstabs+", no_argument, NULL, OPTION_GSTABS_PLUS} @@ -828,6 +835,16 @@ This program has absolutely no warranty.\n")); flag_dwarf_sections = TRUE; break; + case OPTION_GDWARF_CIE_VERSION: + flag_dwarf_cie_version = atoi (optarg); + /* The available CIE versions are 1 (DWARF 2), 3 (DWARF 3), and 4 + (DWARF 4 and 5). */ + if (flag_dwarf_cie_version < 1 + || flag_dwarf_cie_version == 2 + || flag_dwarf_cie_version > 4) + as_fatal (_("Invalid --gdwarf-cie-version `%s'"), optarg); + break; + case 'J': flag_signed_overflow_ok = 1; break; diff --git a/gas/as.h b/gas/as.h index d996697bed..3c37519c1b 100644 --- a/gas/as.h +++ b/gas/as.h @@ -412,6 +412,7 @@ enum debug_info_type extern enum debug_info_type debug_type; extern int use_gnu_debug_info_extensions; COMMON bfd_boolean flag_dwarf_sections; +extern int flag_dwarf_cie_version; \f /* Maximum level of macro nesting. */ extern int max_macro_nest; diff --git a/gas/doc/as.texi b/gas/doc/as.texi index b54ab1eecc..532ed7acfa 100644 --- a/gas/doc/as.texi +++ b/gas/doc/as.texi @@ -231,6 +231,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. [@b{--debug-prefix-map} @var{old}=@var{new}] [@b{--defsym} @var{sym}=@var{val}] [@b{-f}] [@b{-g}] [@b{--gstabs}] [@b{--gstabs+}] [@b{--gdwarf-2}] [@b{--gdwarf-sections}] + [@b{--gdwarf-cie-version}=@var{VERSION}] [@b{--help}] [@b{-I} @var{dir}] [@b{-J}] [@b{-K}] [@b{-L}] [@b{--listing-lhs-width}=@var{NUM}] [@b{--listing-lhs-width2}=@var{NUM}] [@b{--listing-rhs-width}=@var{NUM}] @@ -772,6 +773,11 @@ will have its dwarf line number information placed into a section called then debug line section will still be called just @var{.debug_line} without any suffix. +@item --gdwarf-cie-version=@var{version} +Control which version of DWARF Common Information Entries (CIEs) are produced. +When this flag is not specificed the default is version 1, though some targets +can modify this default. Other possible values for @var{version} are 3 or 4. + @ifset ELF @item --size-check=error @itemx --size-check=warning diff --git a/gas/dw2gencfi.c b/gas/dw2gencfi.c index 6c0478a720..e27253db8e 100644 --- a/gas/dw2gencfi.c +++ b/gas/dw2gencfi.c @@ -1860,7 +1860,7 @@ output_cie (struct cie_entry *cie, bfd_boolean eh_frame, int align) if (fmt != dwarf2_format_32bit) out_four (-1); } - out_one (DW_CIE_VERSION); /* Version. */ + out_one (flag_dwarf_cie_version); /* Version. */ if (eh_frame) { out_one ('z'); /* Augmentation. */ @@ -1876,9 +1876,17 @@ output_cie (struct cie_entry *cie, bfd_boolean eh_frame, int align) if (cie->signal_frame) out_one ('S'); out_one (0); + if (flag_dwarf_cie_version >= 4) + { + /* For now we are assuming a flat address space with 4 or 8 byte + addresses. */ + int address_size = dwarf2_format_32bit ? 4 : 8; + out_one (address_size); /* Address size. */ + out_one (0); /* Segment size. */ + } out_uleb128 (DWARF2_LINE_MIN_INSN_LENGTH); /* Code alignment. */ out_sleb128 (DWARF2_CIE_DATA_ALIGNMENT); /* Data alignment. */ - if (DW_CIE_VERSION == 1) /* Return column. */ + if (flag_dwarf_cie_version == 1) /* Return column. */ out_one (cie->return_column); else out_uleb128 (cie->return_column); diff --git a/gas/testsuite/gas/cfi/cfi.exp b/gas/testsuite/gas/cfi/cfi.exp index c55f069afb..2d410545b2 100644 --- a/gas/testsuite/gas/cfi/cfi.exp +++ b/gas/testsuite/gas/cfi/cfi.exp @@ -133,4 +133,10 @@ if { ![istarget "hppa64*-*"] } then { run_dump_test "cfi-common-7" run_dump_test "cfi-common-8" run_dump_test "cfi-common-9" + + run_dump_test "cie-version-0" + run_dump_test "cie-version-1" + run_dump_test "cie-version-2" + run_dump_test "cie-version-3" + run_dump_test "cie-version-4" } diff --git a/gas/testsuite/gas/cfi/cie-version-0.d b/gas/testsuite/gas/cfi/cie-version-0.d new file mode 100644 index 0000000000..d9f71c4183 --- /dev/null +++ b/gas/testsuite/gas/cfi/cie-version-0.d @@ -0,0 +1,5 @@ +#objdump: --dwarf=frames +#name: CIE Version 0 +#as: --gdwarf-cie-version=0 +#source: cie-version.s +#error: Invalid --gdwarf-cie-version `0' diff --git a/gas/testsuite/gas/cfi/cie-version-1.d b/gas/testsuite/gas/cfi/cie-version-1.d new file mode 100644 index 0000000000..2a9a8f1d38 --- /dev/null +++ b/gas/testsuite/gas/cfi/cie-version-1.d @@ -0,0 +1,17 @@ +#objdump: --dwarf=frames +#name: CIE Version 1 +#as: --gdwarf-cie-version=1 +#source: cie-version.s +#... +.*: file format .* + +Contents of the .eh_frame section: + +00000000 0+[0-9a-f]+ 0+000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: .* + Data alignment factor: .* + Return address column: .* + Augmentation data: [01][abc] +#... \ No newline at end of file diff --git a/gas/testsuite/gas/cfi/cie-version-2.d b/gas/testsuite/gas/cfi/cie-version-2.d new file mode 100644 index 0000000000..5279489ae9 --- /dev/null +++ b/gas/testsuite/gas/cfi/cie-version-2.d @@ -0,0 +1,5 @@ +#objdump: --dwarf=frames +#name: CIE Version 2 +#as: --gdwarf-cie-version=2 +#source: cie-version.s +#error: Invalid --gdwarf-cie-version `2' diff --git a/gas/testsuite/gas/cfi/cie-version-3.d b/gas/testsuite/gas/cfi/cie-version-3.d new file mode 100644 index 0000000000..68cb79d49e --- /dev/null +++ b/gas/testsuite/gas/cfi/cie-version-3.d @@ -0,0 +1,17 @@ +#objdump: --dwarf=frames +#name: CIE Version 3 +#as: --gdwarf-cie-version=3 +#source: cie-version.s +#... +.*: file format .* + +Contents of the .eh_frame section: + +00000000 0+[0-9a-f]+ 0+000 CIE + Version: 3 + Augmentation: "zR" + Code alignment factor: .* + Data alignment factor: .* + Return address column: .* + Augmentation data: [01][abc] +#... \ No newline at end of file diff --git a/gas/testsuite/gas/cfi/cie-version-4.d b/gas/testsuite/gas/cfi/cie-version-4.d new file mode 100644 index 0000000000..bdd19d994f --- /dev/null +++ b/gas/testsuite/gas/cfi/cie-version-4.d @@ -0,0 +1,19 @@ +#objdump: --dwarf=frames +#name: CIE Version 4 +#as: --gdwarf-cie-version=4 +#source: cie-version.s +#... +.*: file format .* + +Contents of the .eh_frame section: + +00000000 0+[0-9a-f]+ 0+000 CIE + Version: 4 + Augmentation: "zR" + Pointer Size: .* + Segment Size: .* + Code alignment factor: .* + Data alignment factor: .* + Return address column: .* + Augmentation data: [01][abc] +#... diff --git a/gas/testsuite/gas/cfi/cie-version.s b/gas/testsuite/gas/cfi/cie-version.s new file mode 100644 index 0000000000..659b3b9d99 --- /dev/null +++ b/gas/testsuite/gas/cfi/cie-version.s @@ -0,0 +1,2 @@ + .cfi_startproc + .cfi_endproc diff --git a/include/ChangeLog b/include/ChangeLog index 591ae4e773..bfbf2bd5a2 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2019-11-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * dwarf2.h (DW_CIE_VERSION): Delete. + 2019-11-07 Mihail Ionescu <mihail.ionescu@arm.com> * opcode/arm.h (ARM_EXT2_I8MM): New feature macro. diff --git a/include/dwarf2.h b/include/dwarf2.h index e03349da94..a4a1831553 100644 --- a/include/dwarf2.h +++ b/include/dwarf2.h @@ -316,7 +316,6 @@ enum dwarf_location_list_entry_type #define DW_CIE_ID 0xffffffff #define DW64_CIE_ID 0xffffffffffffffffULL -#define DW_CIE_VERSION 1 #define DW_CFA_extended 0
next reply other threads:[~2019-11-18 11:24 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-18 11:24 gdb-buildbot [this message] 2019-11-18 11:24 ` Failures on Ubuntu-Aarch64-native-gdbserver-m64, branch master gdb-buildbot 2019-11-26 17:56 ` Failures on Fedora-i686, " gdb-buildbot 2019-11-26 18:22 ` Failures on Fedora-x86_64-m64, " gdb-buildbot 2019-11-26 19:14 ` Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot 2019-11-26 19:17 ` Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot 2019-11-26 19:28 ` Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=66f8b2cbbb675ccbcae56e2bdb6dae485878ec00@gdb-build \ --to=gdb-buildbot@sergiodj.net \ --cc=gdb-testers@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).