Fix signedness of def_cfa_sf and def_cfa_offset_sf
authorRichard Henderson <richard.henderson@linaro.org>
Wed, 30 Jun 2021 11:11:54 +0000 (12:11 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 30 Jun 2021 11:11:54 +0000 (12:11 +0100)
 * dwarf.c (display_debug_frames): Both DW_CFA_def_cfa_sf
 and DW_CFA_def_cfa_offset_sf have a signed offset.

binutils/ChangeLog
binutils/dwarf.c

index c6a05ca6b3eea50d45a32496e617269103db3422..b5dedef26ee1e45aef567a7fa808891ed51bd6fc 100644 (file)
@@ -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
index a57f0dab6b268c9326a18d9e9997544a4c74eb63..a61f099e3f24b0ff8eb2c0669d67ab7a26434ff0 100644 (file)
@@ -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: