#include "arc-tdep.h"
 #include "arch/arc.h"
 
+/* Print an "arc-linux" debug statement.  */
+
+#define arc_linux_debug_printf(fmt, ...) \
+  debug_prefixed_printf_cond (arc_debug, "arc-linux", fmt, ##__VA_ARGS__)
+
 #define REGOFF(offset) (offset * ARC_REGISTER_SIZE)
 
 /* arc_linux_sc_reg_offsets[i] is the offset of register i in the `struct
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   CORE_ADDR pc = get_frame_pc (this_frame);
 
-  if (arc_debug)
-    {
-      debug_printf ("arc-linux: arc_linux_is_sigtramp, pc=%s\n",
-                   paddress(gdbarch, pc));
-    }
+  arc_linux_debug_printf ("pc=%s", paddress(gdbarch, pc));
 
   static const gdb_byte insns_be_hs[] = {
     0x20, 0x8a, 0x12, 0xc2,    /* mov  r8,nr_rt_sigreturn */
          regcache_cooked_read_unsigned (regcache, ARC_LP_COUNT_REGNUM,
                                         &lp_count);
 
-         if (arc_debug)
-           {
-             debug_printf ("arc-linux: lp_start = %s, lp_end = %s, "
-                           "lp_count = %s, next_pc = %s\n",
-                           paddress (gdbarch, lp_start),
-                           paddress (gdbarch, lp_end),
-                           pulongest (lp_count),
-                           paddress (gdbarch, next_pc));
-           }
+         arc_linux_debug_printf ("lp_start = %s, lp_end = %s, "
+                                 "lp_count = %s, next_pc = %s",
+                                 paddress (gdbarch, lp_start),
+                                 paddress (gdbarch, lp_end),
+                                 pulongest (lp_count),
+                                 paddress (gdbarch, next_pc));
 
          if (next_pc == lp_end && lp_count > 1)
            {
       if (resolver.minsym != nullptr)
        {
          CORE_ADDR res_addr = BMSYMBOL_VALUE_ADDRESS (resolver);
-         debug_printf ("arc-linux: skip_solib_resolver (): "
-                       "pc = %s, resolver at %s\n",
-                       print_core_address (gdbarch, pc),
-                       print_core_address (gdbarch, res_addr));
+         arc_linux_debug_printf ("pc = %s, resolver at %s",
+                                 print_core_address (gdbarch, pc),
+                                 print_core_address (gdbarch, res_addr));
        }
       else
-       {
-         debug_printf ("arc-linux: skip_solib_resolver (): "
-                       "pc = %s, no resolver found\n",
-                       print_core_address (gdbarch, pc));
-       }
+       arc_linux_debug_printf ("pc = %s, no resolver found",
+                               print_core_address (gdbarch, pc));
     }
 
   if (resolver.minsym != nullptr && BMSYMBOL_VALUE_ADDRESS (resolver) == pc)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  if (arc_debug)
-    debug_printf ("arc-linux: GNU/Linux OS/ABI initialization.\n");
+  arc_linux_debug_printf ("GNU/Linux OS/ABI initialization.");
 
   /* Fill in target-dependent info in ARC-private structure.  */
   tdep->is_sigtramp = arc_linux_is_sigtramp;
 
 {
   struct gdbarch *gdbarch = regcache->arch ();
 
-  if (arc_debug)
-    debug_printf ("arc: Writing PC, new value=%s\n",
-                 paddress (gdbarch, new_pc));
+  arc_debug_printf ("Writing PC, new value=%s",
+                   paddress (gdbarch, new_pc));
 
   regcache_cooked_write_unsigned (regcache, gdbarch_pc_regnum (gdbarch),
                                  new_pc);
 
   if ((status32 & ARC_STATUS32_DE_MASK) != 0)
     {
-      if (arc_debug)
-       {
-         debug_printf ("arc: Changing PC while in delay slot.  Will "
+      arc_debug_printf ("Changing PC while in delay slot.  Will "
                        "reset STATUS32.DE bit to zero.  Value of STATUS32 "
-                       "register is 0x%s\n",
+                       "register is 0x%s",
                        phex (status32, ARC_REGISTER_SIZE));
-       }
 
       /* Reset bit and write to the cache.  */
       status32 &= ~0x40;
                     function_call_return_method return_method,
                     CORE_ADDR struct_addr)
 {
-  if (arc_debug)
-    debug_printf ("arc: push_dummy_call (nargs = %d)\n", nargs);
+  arc_debug_printf ("nargs = %d", nargs);
 
   int arg_reg = ARC_FIRST_ARG_REGNUM;
 
       /* Pass the return address in the first argument register.  */
       regcache_cooked_write_unsigned (regcache, arg_reg, struct_addr);
 
-      if (arc_debug)
-       debug_printf ("arc: struct return address %s passed in R%d",
-                     print_core_address (gdbarch, struct_addr), arg_reg);
+      arc_debug_printf ("struct return address %s passed in R%d",
+                       print_core_address (gdbarch, struct_addr), arg_reg);
 
       arg_reg++;
     }
 
          total_space += space;
 
-         if (arc_debug)
-           debug_printf ("arc: arg %d: %u bytes -> %u\n", i, len, space);
+         arc_debug_printf ("arg %d: %u bytes -> %u", i, len, space);
        }
 
       /* Allocate a buffer to hold a memory image of the arguments.  */
          unsigned int space = align_up (len, 4);
 
          memcpy (data, value_contents (args[i]), (size_t) len);
-         if (arc_debug)
-           debug_printf ("arc: copying arg %d, val 0x%08x, len %d to mem\n",
-                         i, *((int *) value_contents (args[i])), len);
+         arc_debug_printf ("copying arg %d, val 0x%08x, len %d to mem",
+                           i, *((int *) value_contents (args[i])), len);
 
          data += space;
        }
       data = memory_image;
       while (arg_reg <= ARC_LAST_ARG_REGNUM)
        {
-         if (arc_debug)
-           debug_printf ("arc: passing 0x%02x%02x%02x%02x in register R%d\n",
-                         data[0], data[1], data[2], data[3], arg_reg);
+         arc_debug_printf ("passing 0x%02x%02x%02x%02x in register R%d",
+                           data[0], data[1], data[2], data[3], arg_reg);
 
          /* Note we don't use write_unsigned here, since that would convert
             the byte order, but we are already in the correct byte order.  */
         operation).  */
       if (total_space > 0)
        {
-         if (arc_debug)
-           debug_printf ("arc: passing %d bytes on stack\n", total_space);
+         arc_debug_printf ("passing %d bytes on stack\n", total_space);
 
          sp -= total_space;
          write_memory (sp, data, (int) total_space);
 {
   unsigned int len = TYPE_LENGTH (type);
 
-  if (arc_debug)
-    debug_printf ("arc: extract_return_value\n");
+  arc_debug_printf ("called");
 
   if (len <= ARC_REGISTER_SIZE)
     {
       store_unsigned_integer (valbuf, (int) len,
                              gdbarch_byte_order (gdbarch), val);
 
-      if (arc_debug)
-       debug_printf ("arc: returning 0x%s\n", phex (val, ARC_REGISTER_SIZE));
+      arc_debug_printf ("returning 0x%s", phex (val, ARC_REGISTER_SIZE));
     }
   else if (len <= ARC_REGISTER_SIZE * 2)
     {
                              (int) len - ARC_REGISTER_SIZE,
                              gdbarch_byte_order (gdbarch), high);
 
-      if (arc_debug)
-       debug_printf ("arc: returning 0x%s%s\n",
-                     phex (high, ARC_REGISTER_SIZE),
-                     phex (low, ARC_REGISTER_SIZE));
+      arc_debug_printf ("returning 0x%s%s",
+                       phex (high, ARC_REGISTER_SIZE),
+                       phex (low, ARC_REGISTER_SIZE));
     }
   else
     error (_("arc: extract_return_value: type length %u too large"), len);
 {
   unsigned int len = TYPE_LENGTH (type);
 
-  if (arc_debug)
-    debug_printf ("arc: store_return_value\n");
+  arc_debug_printf ("called");
 
   if (len <= ARC_REGISTER_SIZE)
     {
                                      gdbarch_byte_order (gdbarch));
       regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, val);
 
-      if (arc_debug)
-       debug_printf ("arc: storing 0x%s\n", phex (val, ARC_REGISTER_SIZE));
+      arc_debug_printf ("storing 0x%s", phex (val, ARC_REGISTER_SIZE));
     }
   else if (len <= ARC_REGISTER_SIZE * 2)
     {
       regcache_cooked_write_unsigned (regcache, ARC_R0_REGNUM, low);
       regcache_cooked_write_unsigned (regcache, ARC_R1_REGNUM, high);
 
-      if (arc_debug)
-       debug_printf ("arc: storing 0x%s%s\n",
-                     phex (high, ARC_REGISTER_SIZE),
-                     phex (low, ARC_REGISTER_SIZE));
+      arc_debug_printf ("storing 0x%s%s",
+                       phex (high, ARC_REGISTER_SIZE),
+                       phex (low, ARC_REGISTER_SIZE));
     }
   else
     error (_("arc_store_return_value: type length too large."));
 static int
 arc_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
 {
-  if (arc_debug)
-    debug_printf ("arc: get_longjmp_target\n");
+  arc_debug_printf ("called");
 
   struct gdbarch *gdbarch = get_frame_arch (frame);
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
                          || valtype->code () == TYPE_CODE_UNION
                          || TYPE_LENGTH (valtype) > 2 * ARC_REGISTER_SIZE);
 
-  if (arc_debug)
-    debug_printf ("arc: return_value (readbuf = %s, writebuf = %s)\n",
-                 host_address_to_string (readbuf),
-                 host_address_to_string (writebuf));
+  arc_debug_printf ("readbuf = %s, writebuf = %s",
+                   host_address_to_string (readbuf),
+                   host_address_to_string (writebuf));
 
   if (writebuf != NULL)
     {
 arc_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR entrypoint,
                      const CORE_ADDR limit_pc, struct arc_frame_cache *cache)
 {
-  if (arc_debug)
-    debug_printf ("arc: analyze_prologue (entrypoint=%s, limit_pc=%s)\n",
-                 paddress (gdbarch, entrypoint),
-                 paddress (gdbarch, limit_pc));
+  arc_debug_printf ("entrypoint=%s, limit_pc=%s",
+                   paddress (gdbarch, entrypoint),
+                   paddress (gdbarch, limit_pc));
 
   /* Prologue values.  Only core registers can be stored.  */
   pv_t regs[ARC_LAST_CORE_REGNUM + 1];
       if (!arc_is_in_prologue (gdbarch, insn, regs, &stack))
        {
          /* Found an instruction that is not in the prologue.  */
-         if (arc_debug)
-           debug_printf ("arc: End of prologue reached at address %s\n",
-                         paddress (gdbarch, insn.address));
+         arc_debug_printf ("End of prologue reached at address %s",
+                           paddress (gdbarch, insn.address));
          break;
        }
 
 static CORE_ADDR
 arc_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  if (arc_debug)
-    debug_printf ("arc: skip_prologue\n");
+  arc_debug_printf ("called");
 
   CORE_ADDR func_addr;
   const char *func_name;
 arc_print_frame_cache (struct gdbarch *gdbarch, const char *message,
                       struct arc_frame_cache *cache, int addresses_known)
 {
-  debug_printf ("arc: frame_info %s\n", message);
-  debug_printf ("arc: prev_sp = %s\n", paddress (gdbarch, cache->prev_sp));
-  debug_printf ("arc: frame_base_reg = %i\n", cache->frame_base_reg);
-  debug_printf ("arc: frame_base_offset = %s\n",
-               plongest (cache->frame_base_offset));
+  arc_debug_printf ("frame_info %s", message);
+  arc_debug_printf ("prev_sp = %s", paddress (gdbarch, cache->prev_sp));
+  arc_debug_printf ("frame_base_reg = %i", cache->frame_base_reg);
+  arc_debug_printf ("frame_base_offset = %s",
+                   plongest (cache->frame_base_offset));
 
   for (int i = 0; i <= ARC_BLINK_REGNUM; i++)
     {
       if (trad_frame_addr_p (cache->saved_regs, i))
-       debug_printf ("arc: saved register %s at %s %s\n",
-                     gdbarch_register_name (gdbarch, i),
-                     (addresses_known) ? "address" : "offset",
-                     paddress (gdbarch, cache->saved_regs[i].addr ()));
+       arc_debug_printf ("saved register %s at %s %s",
+                         gdbarch_register_name (gdbarch, i),
+                         (addresses_known) ? "address" : "offset",
+                             paddress (gdbarch, cache->saved_regs[i].addr ()));
     }
 }
 
 static struct arc_frame_cache *
 arc_make_frame_cache (struct frame_info *this_frame)
 {
-  if (arc_debug)
-    debug_printf ("arc: frame_cache\n");
+  arc_debug_printf ("called");
 
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
 
 arc_frame_this_id (struct frame_info *this_frame, void **this_cache,
                   struct frame_id *this_id)
 {
-  if (arc_debug)
-    debug_printf ("arc: frame_this_id\n");
+  arc_debug_printf ("called");
 
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
 
 static struct arc_frame_cache *
 arc_make_sigtramp_frame_cache (struct frame_info *this_frame)
 {
-  if (arc_debug)
-    debug_printf ("arc: sigtramp_frame_cache\n");
+  arc_debug_printf ("called");
 
   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
 
 arc_sigtramp_frame_this_id (struct frame_info *this_frame,
                            void **this_cache, struct frame_id *this_id)
 {
-  if (arc_debug)
-    debug_printf ("arc: sigtramp_frame_this_id\n");
+  arc_debug_printf ("called");
 
   if (*this_cache == NULL)
     *this_cache = arc_make_sigtramp_frame_cache (this_frame);
 arc_sigtramp_frame_prev_register (struct frame_info *this_frame,
                                  void **this_cache, int regnum)
 {
-  if (arc_debug)
-    debug_printf ("arc: sigtramp_frame_prev_register (regnum = %d)\n", regnum);
+  arc_debug_printf ("regnum = %d", regnum);
 
   /* Make sure we've initialized the cache.  */
   if (*this_cache == NULL)
 {
   struct gdbarch_tdep *tdep;
 
-  if (arc_debug)
-    debug_printf ("arc: sigtramp_frame_sniffer\n");
+  arc_debug_printf ("called");
 
   tdep = gdbarch_tdep (get_frame_arch (this_frame));
 
                tdesc_arch_data_up *tdesc_data)
 {
   const struct target_desc *tdesc_loc = info.target_desc;
-  if (arc_debug)
-    debug_printf ("arc: Target description initialization.\n");
+  arc_debug_printf ("Target description initialization.");
 
   /* If target doesn't provide a description, use the default ones.  */
   if (!tdesc_has_registers (tdesc_loc))
     }
   gdb_assert (tdesc_loc != nullptr);
 
-  if (arc_debug)
-    debug_printf ("arc: Have got a target description\n");
+  arc_debug_printf ("Have got a target description");
 
   const struct tdesc_feature *feature_core
     = tdesc_find_feature (tdesc_loc, ARC_CORE_FEATURE_NAME);
 
   if (!valid_p)
     {
-      if (arc_debug)
-       debug_printf ("arc: Target description is not valid\n");
+      arc_debug_printf ("Target description is not valid");
       return false;
     }
 
   const struct target_desc *tdesc;
   tdesc_arch_data_up tdesc_data;
 
-  if (arc_debug)
-    debug_printf ("arc: Architecture initialization.\n");
+  arc_debug_printf ("Architecture initialization.");
 
   if (!arc_tdesc_init (info, &tdesc, &tdesc_data))
     return nullptr;