]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb, btrace: Fix clang build
authorFelix Willgerodt <felix.willgerodt@intel.com>
Tue, 20 Aug 2024 07:38:16 +0000 (09:38 +0200)
committerFelix Willgerodt <felix.willgerodt@intel.com>
Mon, 26 Aug 2024 07:06:42 +0000 (09:06 +0200)
Simon pointed out to me that there are some failures when building with clang,
that were caused by my commit

commit d894edfcc40e63be9b6efa0950c1752f249f16e5
Author: Felix Willgerodt <felix.willgerodt@intel.com>
Date:   Mon Feb 18 13:49:25 2019 +0100

    btrace: Introduce auxiliary instructions.

The errors are:

  CXX    btrace.o
gdb/btrace.c:1203:11: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
 1203 |   return {(CORE_ADDR) insn.ip, (gdb_byte) insn.size,
      |           ^~~~~~~~~~~~~~~~~~~
      |           {                  }
gdb/btrace.c:1218:21: error: suggest braces around initialization of subobject [-Werror,-Wmissing-braces]
 1218 |   btrace_insn insn {btinfo->aux_data.size () - 1, 0,
      |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                     {                           }
gdb/btrace.c:1323:34: error: variable 'bfun' is uninitialized when used here [-Werror,-Wuninitialized]
 1323 |             handle_pt_aux_insn (btinfo, bfun, *ptw_string, pc);
      |                                         ^~~~
gdb/btrace.c:1236:35: note: initialize the variable 'bfun' to silence this warning
 1236 |       struct btrace_function *bfun;
      |                                   ^
      |                                    = nullptr
3 errors generated.
make[1]: *** [Makefile:1961: btrace.o] Error 1

This fixes those errors and switches two casts to C++ casts while we
are at it.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/btrace.c

index 95ff27cc4fe24d0544f5ab61ba8b79a97132f13c..ff9612dd6649bf20e6314303480501cbe751a8d4 100644 (file)
@@ -1200,7 +1200,8 @@ pt_btrace_insn_flags (const struct pt_insn &insn)
 static btrace_insn
 pt_btrace_insn (const struct pt_insn &insn)
 {
-  return {(CORE_ADDR) insn.ip, (gdb_byte) insn.size,
+  return {{static_cast<CORE_ADDR> (insn.ip)},
+         static_cast<gdb_byte> (insn.size),
          pt_reclassify_insn (insn.iclass),
          pt_btrace_insn_flags (insn)};
 }
@@ -1209,13 +1210,13 @@ pt_btrace_insn (const struct pt_insn &insn)
 /* Helper for events that will result in an aux_insn.  */
 
 static void
-handle_pt_aux_insn (btrace_thread_info *btinfo, btrace_function *bfun,
-                   std::string &aux_str, CORE_ADDR ip)
+handle_pt_aux_insn (btrace_thread_info *btinfo, std::string &aux_str,
+                   CORE_ADDR ip)
 {
   btinfo->aux_data.emplace_back (std::move (aux_str));
-  bfun = ftrace_update_function (btinfo, ip);
+  struct btrace_function *bfun = ftrace_update_function (btinfo, ip);
 
-  btrace_insn insn {btinfo->aux_data.size () - 1, 0,
+  btrace_insn insn {{btinfo->aux_data.size () - 1}, 0,
                    BTRACE_INSN_AUX, 0};
 
   ftrace_update_insns (bfun, insn);
@@ -1233,7 +1234,6 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
 #if defined (HAVE_PT_INSN_EVENT)
   while (status & pts_event_pending)
     {
-      struct btrace_function *bfun;
       struct pt_event event;
       uint64_t offset;
 
@@ -1247,30 +1247,38 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
          break;
 
        case ptev_enabled:
-         if (event.status_update != 0)
-           break;
+         {
+           if (event.status_update != 0)
+             break;
 
-         if (event.variant.enabled.resumed == 0 && !btinfo->functions.empty ())
-           {
-             bfun = ftrace_new_gap (btinfo, BDE_PT_DISABLED, gaps);
+           if (event.variant.enabled.resumed == 0
+               && !btinfo->functions.empty ())
+             {
+               struct btrace_function *bfun
+                 = ftrace_new_gap (btinfo, BDE_PT_DISABLED, gaps);
 
-             pt_insn_get_offset (decoder, &offset);
+               pt_insn_get_offset (decoder, &offset);
 
-             warning (_("Non-contiguous trace at instruction %u (offset = 0x%"
-                        PRIx64 ")."), bfun->insn_offset - 1, offset);
-           }
+               warning
+                 (_("Non-contiguous trace at instruction %u (offset = 0x%"
+                    PRIx64 ")."), bfun->insn_offset - 1, offset);
+             }
 
-         break;
+           break;
+         }
 
        case ptev_overflow:
-         bfun = ftrace_new_gap (btinfo, BDE_PT_OVERFLOW, gaps);
+         {
+           struct btrace_function *bfun
+             = ftrace_new_gap (btinfo, BDE_PT_OVERFLOW, gaps);
 
-         pt_insn_get_offset (decoder, &offset);
+           pt_insn_get_offset (decoder, &offset);
 
-         warning (_("Overflow at instruction %u (offset = 0x%" PRIx64 ")."),
-                  bfun->insn_offset - 1, offset);
+           warning (_("Overflow at instruction %u (offset = 0x%" PRIx64 ")."),
+                    bfun->insn_offset - 1, offset);
 
-         break;
+           break;
+         }
 #if defined (HAVE_STRUCT_PT_EVENT_VARIANT_PTWRITE)
        case ptev_ptwrite:
          {
@@ -1320,7 +1328,7 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
            if (!ptw_string.has_value ())
              *ptw_string = hex_string (event.variant.ptwrite.payload);
 
-           handle_pt_aux_insn (btinfo, bfun, *ptw_string, pc);
+           handle_pt_aux_insn (btinfo, *ptw_string, pc);
 
            break;
          }