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
 


             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: link
Be 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).