[binutils-gdb] Fix signedness of def_cfa_sf and def_cfa_offset_sf

Nick Clifton nickc@sourceware.org
Wed Jun 30 11:12:23 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=280c57ff58f8cb7c70d47ffbfeb446ca9b562c96

commit 280c57ff58f8cb7c70d47ffbfeb446ca9b562c96
Author: Richard Henderson <richard.henderson@linaro.org>
Date:   Wed Jun 30 12:11:54 2021 +0100

    Fix signedness of def_cfa_sf and def_cfa_offset_sf
    
     * dwarf.c (display_debug_frames): Both DW_CFA_def_cfa_sf
     and DW_CFA_def_cfa_offset_sf have a signed offset.

Diff:
---
 binutils/ChangeLog |  5 +++++
 binutils/dwarf.c   | 16 +++++++++-------
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index c6a05ca6b3e..b5dedef26ee 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2021-06-30  Richard Henderson  <richard.henderson@linaro.org>
+
+	* dwarf.c (display_debug_frames): Both DW_CFA_def_cfa_sf
+	and DW_CFA_def_cfa_offset_sf have a signed offset.
+
 2021-06-19  Alan Modra  <amodra@gmail.com>
 
 	* dwarf.c (display_debug_lines_decoded): Use memcpy rather than
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index a57f0dab6b2..a61f099e3f2 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -9432,19 +9432,21 @@ display_debug_frames (struct dwarf_section *section,
 
 	    case DW_CFA_def_cfa_sf:
 	      READ_ULEB (fc->cfa_reg, start, block_end);
-	      READ_ULEB (fc->cfa_offset, start, block_end);
-	      fc->cfa_offset = fc->cfa_offset * fc->data_factor;
+	      READ_SLEB (l, start, block_end);
+	      l *= fc->data_factor;
+	      fc->cfa_offset = l;
 	      fc->cfa_exp = 0;
 	      if (! do_debug_frames_interp)
-		printf ("  DW_CFA_def_cfa_sf: %s ofs %d\n",
-			regname (fc->cfa_reg, 0), (int) fc->cfa_offset);
+		printf ("  DW_CFA_def_cfa_sf: %s ofs %ld\n",
+			regname (fc->cfa_reg, 0), (long) l);
 	      break;
 
 	    case DW_CFA_def_cfa_offset_sf:
-	      READ_ULEB (fc->cfa_offset, start, block_end);
-	      fc->cfa_offset *= fc->data_factor;
+	      READ_SLEB (l, start, block_end);
+	      l *= fc->data_factor;
+	      fc->cfa_offset = l;
 	      if (! do_debug_frames_interp)
-		printf ("  DW_CFA_def_cfa_offset_sf: %d\n", (int) fc->cfa_offset);
+		printf ("  DW_CFA_def_cfa_offset_sf: %ld\n", (long) l);
 	      break;
 
 	    case DW_CFA_MIPS_advance_loc8:


More information about the Binutils-cvs mailing list