Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] gdb, gdbserver, gdbsupport: replace many uses of strcmp with streq
@ 2026-03-16 15:23 Simon Marchi
  2026-03-16 17:18 ` Andrew Burgess
  0 siblings, 1 reply; 3+ messages in thread
From: Simon Marchi @ 2026-03-16 15:23 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

Replace all occurrences of:

  strcmp (...) == 0
  strcmp (...) != 0
  !strcmp (...)
  0 == strcmp (...)
  strcmp (...) directly used as a boolean predicate

with the equivalent expression using streq.

This is for consistency (we already use streq as some places in the
testsuite) but also for clarity.  I think that streq is clearer on the
intent than strcmp.  It's also a bit shorter.

Change-Id: Ibbf5261b1872c240bc0c982c147f6a5477275a91
---
 gdb/aarch64-tdep.c                         |  11 +-
 gdb/ada-exp.y                              |   4 +-
 gdb/ada-lang.c                             |  91 ++++++++--------
 gdb/amd64-dicos-tdep.c                     |   3 +-
 gdb/amd64-gnu-tdep.c                       |   2 +-
 gdb/amd64-linux-tdep.c                     |   2 +-
 gdb/amd64-obsd-tdep.c                      |   7 +-
 gdb/amd64-windows-tdep.c                   |   4 +-
 gdb/arch-utils.c                           |   4 +-
 gdb/arm-pikeos-tdep.c                      |   6 +-
 gdb/arm-tdep.c                             |  18 ++--
 gdb/arm-wince-tdep.c                       |   4 +-
 gdb/auto-load.c                            |  15 ++-
 gdb/avr-tdep.c                             |   2 +-
 gdb/ax-gdb.c                               |   6 +-
 gdb/bfin-tdep.c                            |   2 +-
 gdb/break-catch-sig.c                      |   2 +-
 gdb/break-cond-parse.c                     |   4 +-
 gdb/breakpoint.c                           |  13 ++-
 gdb/bt-utils.c                             |   2 +-
 gdb/btrace.c                               |  10 +-
 gdb/c-lang.c                               |   6 +-
 gdb/c-typeprint.c                          |   8 +-
 gdb/c-valprint.c                           |   9 +-
 gdb/charset.c                              |  36 +++----
 gdb/cli/cli-cmds.c                         |   7 +-
 gdb/cli/cli-decode.c                       |   9 +-
 gdb/cli/cli-dump.c                         |   4 +-
 gdb/cli/cli-option.c                       |   4 +-
 gdb/cli/cli-script.c                       |   2 +-
 gdb/cli/cli-style.c                        |   6 +-
 gdb/coff-pe-read.c                         |  48 ++++-----
 gdb/compile/compile-object-load.c          |   6 +-
 gdb/compile/compile.c                      |   4 +-
 gdb/completer.c                            |   4 +-
 gdb/corelow.c                              |   4 +-
 gdb/cp-abi.c                               |   4 +-
 gdb/cp-name-parser.y                       |   2 +-
 gdb/cp-namespace.c                         |  14 +--
 gdb/cp-support.c                           |  24 ++---
 gdb/cp-valprint.c                          |   4 +-
 gdb/csky-tdep.c                            |  33 +++---
 gdb/ctfread.c                              |   8 +-
 gdb/d-namespace.c                          |  13 +--
 gdb/d-valprint.c                           |   4 +-
 gdb/darwin-nat-info.c                      |   6 +-
 gdb/dicos-tdep.c                           |   2 +-
 gdb/dictionary.c                           |   2 +-
 gdb/disasm.c                               |   4 +-
 gdb/dtrace-probe.c                         |   2 +-
 gdb/dwarf2/cooked-index-shard.c            |   2 +-
 gdb/dwarf2/cooked-index.c                  |   2 +-
 gdb/dwarf2/cooked-indexer.c                |   2 +-
 gdb/dwarf2/cu.c                            |   2 +-
 gdb/dwarf2/index-write.c                   |   5 +-
 gdb/dwarf2/read-gdb-index.c                |   2 +-
 gdb/dwarf2/read.c                          |  39 ++++---
 gdb/dwarf2/sect-names.h                    |   4 +-
 gdb/elfread.c                              |  12 +--
 gdb/eval.c                                 |   2 +-
 gdb/event-top.c                            |   2 +-
 gdb/exec.c                                 |   6 +-
 gdb/extension.c                            |   2 +-
 gdb/f-typeprint.c                          |   2 +-
 gdb/f-valprint.c                           |   5 +-
 gdb/fbsd-nat.c                             |   2 +-
 gdb/fbsd-tdep.c                            |   2 +-
 gdb/frame.c                                |   2 +-
 gdb/frv-tdep.c                             |   6 +-
 gdb/ft32-tdep.c                            |   2 +-
 gdb/gcore-elf.c                            |   2 +-
 gdb/gcore.c                                |   2 +-
 gdb/gdb-demangle.c                         |   5 +-
 gdb/gdb_bfd.c                              |   2 +-
 gdb/gdbtypes.c                             |  16 +--
 gdb/gnu-nat.c                              |   8 +-
 gdb/gnu-v2-abi.c                           |   9 +-
 gdb/go-lang.c                              |  19 ++--
 gdb/go32-nat.c                             |   6 +-
 gdb/guile/scm-lazy-string.c                |   2 +-
 gdb/guile/scm-param.c                      |   2 +-
 gdb/hppa-bsd-tdep.c                        |   2 +-
 gdb/hppa-linux-tdep.c                      |   2 +-
 gdb/hppa-tdep.c                            |  10 +-
 gdb/i386-dicos-tdep.c                      |   3 +-
 gdb/i386-gnu-tdep.c                        |   2 +-
 gdb/i386-go32-tdep.c                       |   4 +-
 gdb/i386-linux-tdep.c                      |   3 +-
 gdb/i386-obsd-tdep.c                       |   9 +-
 gdb/i386-tdep.c                            |  39 +++----
 gdb/i386-windows-tdep.c                    |   2 +-
 gdb/ia64-tdep.c                            |   8 +-
 gdb/infrun.c                               |   4 +-
 gdb/interps.c                              |   8 +-
 gdb/language.c                             |  27 +++--
 gdb/linespec.c                             |   7 +-
 gdb/linux-tdep.c                           |  22 ++--
 gdb/linux-thread-db.c                      |   7 +-
 gdb/m2-typeprint.c                         |   9 +-
 gdb/m32c-tdep.c                            |   6 +-
 gdb/m32r-linux-tdep.c                      |   3 +-
 gdb/machoread.c                            |   6 +-
 gdb/macrocmd.c                             |   2 +-
 gdb/macroexp.c                             |   7 +-
 gdb/macrotab.c                             |   4 +-
 gdb/main.c                                 |   4 +-
 gdb/memattr.c                              |   2 +-
 gdb/mi/mi-cmd-disas.c                      |   6 +-
 gdb/mi/mi-cmd-var.c                        |  14 +--
 gdb/mi/mi-getopt.c                         |   4 +-
 gdb/mi/mi-main.c                           |  46 ++++-----
 gdb/mi/mi-parse.c                          |  33 +++---
 gdb/minsyms.c                              |  24 ++---
 gdb/mips-sde-tdep.c                        |   5 +-
 gdb/mips-tdep.c                            |  12 +--
 gdb/namespace.c                            |  10 +-
 gdb/nat/linux-btrace.c                     |   2 +-
 gdb/nat/linux-osdata.c                     |   4 +-
 gdb/nat/linux-procfs.c                     |   2 +-
 gdb/nds32-tdep.c                           |   2 +-
 gdb/objc-lang.c                            |  10 +-
 gdb/objfiles.c                             |   4 +-
 gdb/opencl-lang.c                          |   8 +-
 gdb/osabi.c                                |  18 ++--
 gdb/p-exp.y                                |  14 +--
 gdb/p-lang.c                               |   8 +-
 gdb/p-valprint.c                           |   9 +-
 gdb/ppc-linux-tdep.c                       |  20 ++--
 gdb/ppc64-tdep.c                           |   2 +-
 gdb/probe.c                                |   5 +-
 gdb/python/py-breakpoint.c                 |   2 +-
 gdb/python/py-lazy-string.c                |   2 +-
 gdb/python/py-micmd.c                      |   5 +-
 gdb/python/py-param.c                      |   6 +-
 gdb/python/py-prettyprint.c                |   6 +-
 gdb/python/py-style.c                      |  11 +-
 gdb/python/python.c                        |   2 +-
 gdb/record.c                               |  16 +--
 gdb/regformats/regdef.h                    |   2 +-
 gdb/reggroups.c                            |   2 +-
 gdb/remote-fileio.c                        |   2 +-
 gdb/remote.c                               | 114 ++++++++++-----------
 gdb/riscv-tdep.c                           |  14 +--
 gdb/rs6000-tdep.c                          |  16 ++-
 gdb/rust-lang.c                            |  28 ++---
 gdb/rust-parse.c                           |   2 +-
 gdb/s390-tdep.c                            |   2 +-
 gdb/selftest-arch.c                        |  20 ++--
 gdb/serial.c                               |   2 +-
 gdb/sh-tdep.c                              |   2 +-
 gdb/sol2-tdep.c                            |   7 +-
 gdb/solib-aix.c                            |  10 +-
 gdb/solib-darwin.c                         |   2 +-
 gdb/solib-dsbt.c                           |   2 +-
 gdb/solib-frv.c                            |   4 +-
 gdb/solib-svr4.c                           |  23 ++---
 gdb/solib-target.c                         |   2 +-
 gdb/solib.c                                |   4 +-
 gdb/source.c                               |   8 +-
 gdb/sparc64-fbsd-tdep.c                    |   2 +-
 gdb/sparc64-obsd-tdep.c                    |   2 +-
 gdb/stack.c                                |   5 +-
 gdb/stap-probe.c                           |   3 +-
 gdb/symfile.c                              |  30 +++---
 gdb/symmisc.c                              |  12 +--
 gdb/symtab.c                               |  14 +--
 gdb/target.c                               |   2 +-
 gdb/top.c                                  |   4 +-
 gdb/tracectf.c                             |  31 +++---
 gdb/tracefile-tfile.c                      |   2 +-
 gdb/tracefile.c                            |   4 +-
 gdb/tracepoint.c                           |   6 +-
 gdb/tui/tui-layout.c                       |  12 +--
 gdb/tui/tui-win.c                          |   4 +-
 gdb/tui/tui.c                              |   2 +-
 gdb/ui-style.c                             |   4 +-
 gdb/unittests/child-path-selftests.c       |   2 +-
 gdb/unittests/cli-utils-selftests.c        |  14 +--
 gdb/unittests/copy_bitwise-selftests.c     |   2 +-
 gdb/unittests/environ-selftests.c          |  34 +++---
 gdb/unittests/intrusive_list-selftests.c   |   4 +-
 gdb/unittests/lookup_name_info-selftests.c |   2 +-
 gdb/unittests/scoped_mmap-selftests.c      |   2 +-
 gdb/unittests/unique_xmalloc_ptr_char.c    |   4 +-
 gdb/utils.c                                |  10 +-
 gdb/valops.c                               |  18 ++--
 gdb/varobj.c                               |   2 +-
 gdb/windows-tdep.c                         |   8 +-
 gdb/x86-tdep.c                             |   4 +-
 gdb/xcoffread.c                            |  11 +-
 gdb/xml-support.c                          |  10 +-
 gdb/xml-syscall.c                          |   8 +-
 gdb/xml-tdesc.c                            |  17 ++-
 gdb/xstormy16-tdep.c                       |   6 +-
 gdbserver/gdbreplay.cc                     |   2 +-
 gdbserver/linux-arc-low.cc                 |   2 +-
 gdbserver/linux-low.cc                     |   4 +-
 gdbserver/linux-x86-low.cc                 |   2 +-
 gdbserver/linux-x86-tdesc.cc               |   3 +-
 gdbserver/regcache.cc                      |   2 +-
 gdbserver/remote-utils.cc                  |   6 +-
 gdbserver/server.cc                        | 105 +++++++++----------
 gdbserver/thread-db.cc                     |   2 +-
 gdbserver/tracepoint.cc                    |  26 ++---
 gdbsupport/common-exceptions.h             |   2 +-
 gdbsupport/osabi.cc                        |   2 +-
 gdbsupport/signals.cc                      |   3 +-
 207 files changed, 923 insertions(+), 984 deletions(-)

diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index de0d7ddb73b9..ce00f5182992 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -355,8 +355,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 	break;
 
       if (inst.opcode->iclass == addsub_imm
-	  && (inst.opcode->op == OP_ADD
-	      || strcmp ("sub", inst.opcode->name) == 0))
+	  && (inst.opcode->op == OP_ADD || streq ("sub", inst.opcode->name)))
 	{
 	  unsigned rd = inst.operands[0].reg.regno;
 	  unsigned rn = inst.operands[1].reg.regno;
@@ -382,7 +381,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 	    seen_stack_set = true;
 	}
       else if (inst.opcode->iclass == addsub_ext
-	       && strcmp ("sub", inst.opcode->name) == 0)
+	       && streq ("sub", inst.opcode->name))
 	{
 	  unsigned rd = inst.operands[0].reg.regno;
 	  unsigned rn = inst.operands[1].reg.regno;
@@ -433,7 +432,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 				  << inst.operands[1].shifter.amount);
 	}
       else if (inst.opcode->iclass == log_shift
-	       && strcmp (inst.opcode->name, "orr") == 0)
+	       && streq (inst.opcode->name, "orr"))
 	{
 	  unsigned rd = inst.operands[0].reg.regno;
 	  unsigned rn = inst.operands[1].reg.regno;
@@ -477,7 +476,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
       else if ((inst.opcode->iclass == ldstpair_off
 		|| (inst.opcode->iclass == ldstpair_indexed
 		    && inst.operands[2].addr.preind))
-	       && strcmp ("stp", inst.opcode->name) == 0)
+	       && streq ("stp", inst.opcode->name))
 	{
 	  /* STP with addressing mode Pre-indexed and Base register.  */
 	  unsigned rt1;
@@ -526,7 +525,7 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 		    && (inst.opcode->op == OP_STR_POS
 			|| inst.opcode->op == OP_STRF_POS)))
 	       && inst.operands[1].addr.base_regno == AARCH64_SP_REGNUM
-	       && strcmp ("str", inst.opcode->name) == 0)
+	       && streq ("str", inst.opcode->name))
 	{
 	  /* STR (immediate) */
 	  unsigned int rt = inst.operands[0].reg.regno;
diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y
index 0663de01fda1..7c691d5a0990 100644
--- a/gdb/ada-exp.y
+++ b/gdb/ada-exp.y
@@ -563,7 +563,7 @@ exp1	:	exp
 
 primary :	primary DOT_ID
 			{
-			  if (strcmp ($2.ptr, "all") == 0)
+			  if (streq ($2.ptr, "all"))
 			    ada_wrap<ada_unop_ind_operation> ();
 			  else
 			    {
@@ -1553,7 +1553,7 @@ find_primitive_type (struct parser_state *par_state, const char *name)
   type = language_lookup_primitive_type (par_state->language (),
 					 par_state->gdbarch (),
 					 name);
-  if (type == NULL && strcmp ("system__address", name) == 0)
+  if (type == NULL && streq ("system__address", name))
     type = type_system_address (par_state);
 
   if (type != NULL)
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 908b33d9c72a..ddffc2973e45 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -454,12 +454,11 @@ field_name_match (const char *field_name, const char *target)
 {
   int len = strlen (target);
 
-  return
-    (strncmp (field_name, target, len) == 0
-     && (field_name[len] == '\0'
-	 || (startswith (field_name + len, "___")
-	     && strcmp (field_name + strlen (field_name) - 6,
-			"___XVN") != 0)));
+  return (strncmp (field_name, target, len) == 0
+	  && (field_name[len] == '\0'
+	      || (startswith (field_name + len, "___")
+		  && !streq (field_name + strlen (field_name) - 6,
+			     "___XVN"))));
 }
 
 
@@ -519,7 +518,7 @@ is_suffix (const char *str, const char *suffix)
     return false;
   len1 = strlen (str);
   len2 = strlen (suffix);
-  return len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0;
+  return len1 >= len2 && streq (str + len1 - len2, suffix);
 }
 
 /* The contents of value VAL, treated as a value of type TYPE.  The
@@ -1699,8 +1698,8 @@ ada_fixup_array_indexes_type (struct type *index_desc_type)
      the field type should be a meaningless integer type whose name
      is not equal to the field name.  */
   if (index_desc_type->field (0).type ()->name () != NULL
-      && strcmp (index_desc_type->field (0).type ()->name (),
-		 index_desc_type->field (0).name ()) == 0)
+      && streq (index_desc_type->field (0).type ()->name (),
+		index_desc_type->field (0).name ()))
     return;
 
   /* Fixup each field of INDEX_DESC_TYPE.  */
@@ -3850,7 +3849,7 @@ ada_resolve_enum (std::vector<struct block_symbol> &syms,
       /* We let an anonymous enum type match a non-anonymous one.  */
       if (type1->name () != nullptr
 	  && type2->name () != nullptr
-	  && strcmp (type1->name (), type2->name ()) != 0)
+	  && !streq (type1->name (), type2->name ()))
 	continue;
       if (ada_identical_enum_types_p (type1, type2))
 	return i;
@@ -4847,10 +4846,9 @@ equiv_types (struct type *type0, struct type *type1)
   if (type0 == NULL || type1 == NULL
       || type0->code () != type1->code ())
     return false;
-  if ((type0->code () == TYPE_CODE_STRUCT
-       || type0->code () == TYPE_CODE_ENUM)
+  if ((type0->code () == TYPE_CODE_STRUCT || type0->code () == TYPE_CODE_ENUM)
       && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
-      && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
+      && streq (ada_type_name (type0), ada_type_name (type1)))
     return true;
 
   return false;
@@ -4894,7 +4892,7 @@ lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
       {
 	const char *name0 = sym0->linkage_name ();
 	const char *name1 = sym1->linkage_name ();
-	return (strcmp (name0, name1) == 0
+	return (streq (name0, name1)
 		&& sym0->value_address () == sym1->value_address ());
       }
 
@@ -4983,7 +4981,7 @@ is_nondebugging_type (struct type *type)
 {
   const char *name = ada_type_name (type);
 
-  return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
+  return (name != NULL && streq (name, "<variable, no debug info>"));
 }
 
 /* Return true if TYPE1 and TYPE2 are two enumeration types
@@ -5112,8 +5110,8 @@ remove_extra_symbols (std::vector<struct block_symbol> &syms)
 	      if (j != i
 		  && !syms[j].symbol->type ()->is_stub ()
 		  && syms[j].symbol->linkage_name () != NULL
-		  && strcmp (syms[i].symbol->linkage_name (),
-			     syms[j].symbol->linkage_name ()) == 0)
+		  && streq (syms[i].symbol->linkage_name (),
+			    syms[j].symbol->linkage_name ()))
 		remove_p = true;
 	    }
 	}
@@ -5129,12 +5127,12 @@ remove_extra_symbols (std::vector<struct block_symbol> &syms)
 	    {
 	      if (i != j
 		  && syms[j].symbol->linkage_name () != NULL
-		  && strcmp (syms[i].symbol->linkage_name (),
-			     syms[j].symbol->linkage_name ()) == 0
+		  && streq (syms[i].symbol->linkage_name (),
+			    syms[j].symbol->linkage_name ())
 		  && (syms[i].symbol->loc_class ()
 		      == syms[j].symbol->loc_class ())
-		  && syms[i].symbol->value_address ()
-		  == syms[j].symbol->value_address ())
+		  && (syms[i].symbol->value_address ()
+		      == syms[j].symbol->value_address ()))
 		remove_p = true;
 	    }
 	}
@@ -5820,7 +5818,7 @@ is_name_suffix (const char *str)
 
   /* "TKB" suffixes are used for subprograms implementing task bodies.  */
 
-  if (strcmp (str, "TKB") == 0)
+  if (streq (str, "TKB"))
     return true;
 
 #if 0
@@ -5876,14 +5874,14 @@ is_name_suffix (const char *str)
 	return false;
       if (str[2] == '_')
 	{
-	  if (strcmp (str + 3, "JM") == 0)
+	  if (streq (str + 3, "JM"))
 	    return true;
 	  /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
 	     the LJM suffix in favor of the JM one.  But we will
 	     still accept LJM as a valid suffix for a reasonable
 	     amount of time, just to allow ourselves to debug programs
 	     compiled using an older version of GNAT.  */
-	  if (strcmp (str + 3, "LJM") == 0)
+	  if (streq (str + 3, "LJM"))
 	    return true;
 	  if (str[3] != 'X')
 	    return false;
@@ -6211,7 +6209,7 @@ ada_is_dispatch_table_ptr_type (struct type *type)
   if (name == NULL)
     return false;
 
-  return (strcmp (name, "ada__tags__dispatch_table") == 0);
+  return (streq (name, "ada__tags__dispatch_table"));
 }
 
 /* Return true if TYPE is an interface tag.  */
@@ -6224,7 +6222,7 @@ ada_is_interface_tag (struct type *type)
   if (name == nullptr)
     return false;
 
-  return (strcmp (name, "ada__tags__interface_tag") == 0);
+  return (streq (name, "ada__tags__interface_tag"));
 }
 
 /* True if field number FIELD_NUM in struct or union type TYPE is supposed
@@ -6304,8 +6302,7 @@ ada_is_tag_type (struct type *type)
     {
       const char *name = ada_type_name (type->target_type ());
 
-      return (name != NULL
-	      && strcmp (name, "ada__tags__dispatch_table") == 0);
+      return name != nullptr && streq (name, "ada__tags__dispatch_table");
     }
 }
 
@@ -6654,7 +6651,7 @@ ada_is_wrapper_field (struct type *type, int field_num)
 {
   const char *name = type->field (field_num).name ();
 
-  if (name != NULL && strcmp (name, "RETVAL") == 0)
+  if (name != NULL && streq (name, "RETVAL"))
     {
       /* This happens in functions with "out" or "in out" parameters
 	 which are passed by copy.  For such functions, GNAT describes
@@ -6667,7 +6664,7 @@ ada_is_wrapper_field (struct type *type, int field_num)
 
   return (name != NULL
 	  && (startswith (name, "PARENT")
-	      || strcmp (name, "REP") == 0
+	      || streq (name, "REP")
 	      || startswith (name, "_parent")
 	      || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
 }
@@ -7565,7 +7562,7 @@ find_parallel_type_by_descriptive_type (struct type *type, const char *name)
 	}
 
       /* If the names match, stop.  */
-      if (strcmp (result_name, name) == 0)
+      if (streq (result_name, name))
 	break;
 
       /* Otherwise, look at the next item on the list, if any.  */
@@ -7652,7 +7649,7 @@ dynamic_template_type (struct type *type)
     {
       int len = strlen (ada_type_name (type));
 
-      if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
+      if (len > 6 && streq (ada_type_name (type) + len - 6, "___XVE"))
 	return type;
       else
 	return ada_find_parallel_type (type, "___XVE");
@@ -8873,10 +8870,10 @@ ada_is_character_type (struct type *type)
   return (name != NULL
 	  && (type->code () == TYPE_CODE_INT
 	      || type->code () == TYPE_CODE_RANGE)
-	  && (strcmp (name, "character") == 0
-	      || strcmp (name, "wide_character") == 0
-	      || strcmp (name, "wide_wide_character") == 0
-	      || strcmp (name, "unsigned char") == 0));
+	  && (streq (name, "character")
+	      || streq (name, "wide_character")
+	      || streq (name, "wide_wide_character")
+	      || streq (name, "unsigned char")));
 }
 
 /* True if TYPE appears to be an Ada string type.  */
@@ -8924,7 +8921,7 @@ ada_is_aligner_type (struct type *type)
 
   return (type->code () == TYPE_CODE_STRUCT
 	  && type->num_fields () == 1
-	  && strcmp (type->field (0).name (), "F") == 0);
+	  && streq (type->field (0).name (), "F"));
 }
 
 /* If there is an ___XVS-convention type parallel to SUBTYPE, return
@@ -10646,7 +10643,7 @@ convert_char_literal (struct type *type, LONGEST val)
       const char *ename = field.name ();
       size_t elen = strlen (ename);
 
-      if (elen >= len && strcmp (name, ename + elen - len) == 0)
+      if (elen >= len && streq (name, ename + elen - len))
 	return field.loc_enumval ();
     }
   return val;
@@ -11432,7 +11429,7 @@ ada_ternop_slice_operation::resolve (struct expression *exp,
 bool
 ada_is_system_address_type (struct type *type)
 {
-  return (type->name () && strcmp (type->name (), "system__address") == 0);
+  return (type->name () && streq (type->name (), "system__address"));
 }
 
 \f
@@ -12020,8 +12017,8 @@ ada_unhandled_exception_name_addr_from_raise (void)
 	= find_frame_funname (fi, &func_lang, NULL);
       if (func_name != NULL)
 	{
-	  if (strcmp (func_name.get (),
-		      data->exception_info->catch_exception_sym) == 0)
+	  if (streq (func_name.get (),
+		     data->exception_info->catch_exception_sym))
 	    break; /* We found the frame we were looking for...  */
 	}
       fi = get_prev_frame (fi);
@@ -12773,7 +12770,7 @@ ada_exception_catchpoint_cond_string (const char *excep_string,
 
   for (const char *name : standard_exc)
     {
-      if (strcmp (name, excep_string) == 0)
+      if (streq (name, excep_string))
 	{
 	  is_standard_exc = true;
 	  break;
@@ -12981,7 +12978,7 @@ ada_is_exception_sym (struct symbol *sym)
 	  && sym->loc_class () != LOC_BLOCK
 	  && sym->loc_class () != LOC_CONST
 	  && sym->loc_class () != LOC_UNRESOLVED
-	  && type_name != NULL && strcmp (type_name, "exception") == 0);
+	  && type_name != nullptr && streq (type_name, "exception"));
 }
 
 /* Given a global symbol SYM, return non-zero iff SYM is a non-standard
@@ -12995,13 +12992,13 @@ ada_is_non_standard_exception_sym (struct symbol *sym)
     return false;
 
   for (const char *name : standard_exc)
-    if (strcmp (sym->linkage_name (), name) == 0)
+    if (streq (sym->linkage_name (), name))
       return false;  /* A standard exception.  */
 
   /* Numeric_Error is also a standard exception, so exclude it.
      See the STANDARD_EXC description for more details as to why
      this exception is not listed in that array.  */
-  if (strcmp (sym->linkage_name (), "numeric_error") == 0)
+  if (streq (sym->linkage_name (), "numeric_error"))
     return false;
 
   return true;
@@ -13029,7 +13026,7 @@ ada_exc_info::operator< (const ada_exc_info &other) const
 bool
 ada_exc_info::operator== (const ada_exc_info &other) const
 {
-  return addr == other.addr && strcmp (name, other.name) == 0;
+  return addr == other.addr && streq (name, other.name);
 }
 
 /* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
@@ -13373,7 +13370,7 @@ do_exact_match (const char *symbol_search_name,
 		const lookup_name_info &lookup_name,
 		completion_match_result *comp_match_res)
 {
-  return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
+  return streq (symbol_search_name, ada_lookup_name (lookup_name));
 }
 
 /* Build the Ada lookup name for LOOKUP_NAME.  */
diff --git a/gdb/amd64-dicos-tdep.c b/gdb/amd64-dicos-tdep.c
index 915d1141110a..259d4e86c003 100644
--- a/gdb/amd64-dicos-tdep.c
+++ b/gdb/amd64-dicos-tdep.c
@@ -38,8 +38,7 @@ amd64_dicos_osabi_sniffer (bfd *abfd)
 
   /* On amd64-DICOS, the Load Module's "header" section is 72
      bytes.  */
-  if (strcmp (target_name, "elf64-x86-64") == 0
-      && dicos_load_module_p (abfd, 72))
+  if (streq (target_name, "elf64-x86-64") && dicos_load_module_p (abfd, 72))
     return GDB_OSABI_DICOS;
 
   return GDB_OSABI_UNKNOWN;
diff --git a/gdb/amd64-gnu-tdep.c b/gdb/amd64-gnu-tdep.c
index 963ca791b100..366cc4584ada 100644
--- a/gdb/amd64-gnu-tdep.c
+++ b/gdb/amd64-gnu-tdep.c
@@ -90,7 +90,7 @@ amd64_gnu_sigtramp_p (const frame_info_ptr &this_frame)
   find_pc_partial_function (pc, &name, NULL, NULL);
 
   /* If we have a NAME, we can check for the trampoline function */
-  if (name != NULL && strcmp (name, "trampoline") == 0)
+  if (name != NULL && streq (name, "trampoline"))
     return 1;
 
   return amd64_gnu_sigtramp_start (this_frame) != 0;
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index ff0c58464f25..17d9f78f32d1 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -206,7 +206,7 @@ amd64_linux_sigtramp_p (const frame_info_ptr &this_frame)
   if (name == NULL || strstr (name, "sigaction") != NULL)
     return (amd64_linux_sigtramp_start (this_frame) != 0);
 
-  return (strcmp ("__restore_rt", name) == 0);
+  return (streq ("__restore_rt", name));
 }
 
 /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>.  */
diff --git a/gdb/amd64-obsd-tdep.c b/gdb/amd64-obsd-tdep.c
index 81bc5f5d93ca..0dbc47be6f9a 100644
--- a/gdb/amd64-obsd-tdep.c
+++ b/gdb/amd64-obsd-tdep.c
@@ -396,10 +396,9 @@ amd64obsd_trapframe_sniffer (const struct frame_unwind *self,
     return 0;
 
   find_pc_partial_function (get_frame_pc (this_frame), &name, NULL, NULL);
-  return (name && ((strcmp (name, "calltrap") == 0)
-		   || (strcmp (name, "osyscall1") == 0)
-		   || (strcmp (name, "Xsyscall") == 0)
-		   || (startswith (name, "Xintr"))));
+  return (name != nullptr
+	  && (streq (name, "calltrap") || streq (name, "osyscall1")
+	      || streq (name, "Xsyscall") || startswith (name, "Xintr")));
 }
 
 static const struct frame_unwind_legacy amd64obsd_trapframe_unwind (
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index a9ca7b2ac79b..85f7ac51a4f9 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -444,7 +444,7 @@ amd64_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 	  bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
 	  if (s.minsym != NULL
 	      && s.minsym->linkage_name () != NULL
-	      && strcmp (s.minsym->linkage_name (), "__main") == 0)
+	      && streq (s.minsym->linkage_name (), "__main"))
 	    pc += 5;
 	}
     }
@@ -1379,7 +1379,7 @@ amd64_cygwin_core_osabi_sniffer (bfd *abfd)
 
   /* Cygwin uses elf core dumps.  Do not claim all ELF executables,
      check whether there is a .reg section of proper size.  */
-  if (strcmp (target_name, "elf64-x86-64") == 0)
+  if (streq (target_name, "elf64-x86-64"))
     {
       asection *section = bfd_get_section_by_name (abfd, ".reg");
       if (section != nullptr
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 8de7655e6384..ea0b3c111f99 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -295,7 +295,7 @@ default_floatformat_for_type (struct gdbarch *gdbarch,
   /* Check if this is a bfloat16 type.  It has the same size as the
      IEEE half float type, so we use the base type name to tell them
      apart.  */
-  if (name != nullptr && strcmp (name, "__bf16") == 0
+  if (name != nullptr && streq (name, "__bf16")
       && len == gdbarch_bfloat16_bit (gdbarch))
     format = gdbarch_bfloat16_format (gdbarch);
   else if (len == gdbarch_half_bit (gdbarch))
@@ -553,7 +553,7 @@ set_architecture (const char *ignore_args,
 {
   struct gdbarch_info info;
 
-  if (strcmp (set_architecture_string, "auto") == 0)
+  if (streq (set_architecture_string, "auto"))
     {
       target_architecture_user = NULL;
       if (!gdbarch_update_p (current_inferior (), info))
diff --git a/gdb/arm-pikeos-tdep.c b/gdb/arm-pikeos-tdep.c
index ce7297d51bea..8b84cc3f68a1 100644
--- a/gdb/arm-pikeos-tdep.c
+++ b/gdb/arm-pikeos-tdep.c
@@ -58,12 +58,10 @@ arm_pikeos_osabi_sniffer (bfd *abfd)
     {
       const char *name = bfd_asymbol_name (sym);
 
-      if (strcmp (name, "_vm_stack") == 0
-	  || strcmp (name, "__p4_stack") == 0)
+      if (streq (name, "_vm_stack") || streq (name, "__p4_stack"))
 	pikeos_stack_found = 1;
 
-      if (strcmp (name, "_vm_stack_size") == 0
-	  || strcmp (name, "__p4_stack_end") == 0)
+      if (streq (name, "_vm_stack_size") || streq (name, "__p4_stack_end"))
 	pikeos_stack_size_found = 1;
     }
 
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index dabae0aec0f0..83dc71cc9da8 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -734,9 +734,9 @@ arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
     return 1;
 
   /* If the user wants to override the symbol table, let him.  */
-  if (strcmp (arm_force_mode_string, "arm") == 0)
+  if (streq (arm_force_mode_string, "arm"))
     return 0;
-  if (strcmp (arm_force_mode_string, "thumb") == 0)
+  if (streq (arm_force_mode_string, "thumb"))
     return 1;
 
   /* ARM v6-M and v7-M are always in Thumb mode.  */
@@ -754,9 +754,9 @@ arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
     return (MSYMBOL_IS_SPECIAL (sym.minsym));
 
   /* If the user wants to override the fallback mode, let them.  */
-  if (strcmp (arm_fallback_mode_string, "arm") == 0)
+  if (streq (arm_fallback_mode_string, "arm"))
     return 0;
-  if (strcmp (arm_fallback_mode_string, "thumb") == 0)
+  if (streq (arm_fallback_mode_string, "thumb"))
     return 1;
 
   /* If we couldn't find any symbol, but we're talking to a running
@@ -9408,7 +9408,7 @@ arm_skip_stub (const frame_info_ptr &frame, CORE_ADDR pc)
       int offset = strlen (name) - 2;
 
       for (regno = 0; regno <= 14; regno++)
-	if (strcmp (&name[offset], table[regno]) == 0)
+	if (streq (&name[offset], table[regno]))
 	  return get_frame_register_unsigned (frame, regno);
     }
 
@@ -9476,7 +9476,7 @@ set_fp_model_sfunc (const char *args, int from_tty,
   int fp_model;
 
   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
-    if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
+    if (streq (current_fp_model, fp_model_strings[fp_model]))
       {
 	arm_fp_model = (enum arm_float_model) fp_model;
 	break;
@@ -9516,7 +9516,7 @@ arm_set_abi (const char *args, int from_tty,
   int arm_abi;
 
   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
-    if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
+    if (streq (arm_abi_string, arm_abi_strings[arm_abi]))
       {
 	arm_abi_global = (enum arm_abi_kind) arm_abi;
 	break;
@@ -10043,7 +10043,7 @@ arm_code_of_frame_writable (struct gdbarch *gdbarch, const frame_info_ptr &frame
 static const char *
 arm_gnu_triplet_regexp (struct gdbarch *gdbarch)
 {
-  if (strcmp (gdbarch_bfd_arch_info (gdbarch)->arch_name, "arm") == 0)
+  if (streq (gdbarch_bfd_arch_info (gdbarch)->arch_name, "arm"))
     return "arm(v[^- ]*)?";
   return gdbarch_bfd_arch_info (gdbarch)->arch_name;
 }
@@ -11010,7 +11010,7 @@ INIT_GDB_FILE (arm_tdep)
 	size_t offset = strlen ("reg-names-");
 	const char *style = disasm_options->name[i];
 	valid_disassembly_styles[j++] = &style[offset];
-	if (strcmp (&style[offset], "std") == 0)
+	if (streq (&style[offset], "std"))
 	  disassembly_style = &style[offset];
 	length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
 			   disasm_options->description[i]);
diff --git a/gdb/arm-wince-tdep.c b/gdb/arm-wince-tdep.c
index 39593f4c3f37..1a03e63bb681 100644
--- a/gdb/arm-wince-tdep.c
+++ b/gdb/arm-wince-tdep.c
@@ -103,7 +103,7 @@ arm_wince_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 
       if (s.minsym != NULL
 	  && s.minsym->linkage_name () != NULL
-	  && strcmp (s.minsym->linkage_name (), "__gccmain") == 0)
+	  && streq (s.minsym->linkage_name (), "__gccmain"))
 	pc += 4;
     }
 
@@ -143,7 +143,7 @@ arm_wince_osabi_sniffer (bfd *abfd)
 {
   const char *target_name = bfd_get_target (abfd);
 
-  if (strcmp (target_name, "pei-arm-wince-little") == 0)
+  if (streq (target_name, "pei-arm-wince-little"))
     return GDB_OSABI_WINCE;
 
   return GDB_OSABI_UNKNOWN;
diff --git a/gdb/auto-load.c b/gdb/auto-load.c
index b5fec13743cb..7bb062ed4322 100644
--- a/gdb/auto-load.c
+++ b/gdb/auto-load.c
@@ -279,7 +279,7 @@ auto_load_safe_path_vec_update (void)
 
       if (debug_auto_load)
 	{
-	  if (strcmp (in_vec.get (), original.get ()) == 0)
+	  if (streq (in_vec.get (), original.get ()))
 	    auto_load_debug_printf ("Using directory \"%s\".",
 				    in_vec.get ());
 	  else
@@ -288,7 +288,7 @@ auto_load_safe_path_vec_update (void)
 	}
 
       /* If gdb_realpath returns a different content, append it.  */
-      if (strcmp (real_path.get (), in_vec.get ()) != 0)
+      if (!streq (real_path.get (), in_vec.get ()))
 	{
 	  auto_load_debug_printf ("And canonicalized as \"%s\".",
 				  real_path.get ());
@@ -468,12 +468,12 @@ filename_is_in_auto_load_safe_path_vec (const char *filename,
       if (*filename_realp == NULL)
 	{
 	  *filename_realp = gdb_realpath (filename);
-	  if (debug_auto_load && strcmp (filename_realp->get (), filename) != 0)
+	  if (debug_auto_load && !streq (filename_realp->get (), filename))
 	    auto_load_debug_printf ("Resolved file \"%s\" as \"%s\".",
 				    filename, filename_realp->get ());
 	}
 
-      if (strcmp (filename_realp->get (), filename) != 0)
+      if (!streq (filename_realp->get (), filename))
 	for (const gdb::unique_xmalloc_ptr<char> &p : auto_load_safe_path_vec)
 	  if (filename_is_in_pattern (filename_realp->get (), p.get ()))
 	    {
@@ -629,7 +629,7 @@ eq_loaded_script_entry (const void *a, const void *b)
   const struct loaded_script *ea = (const struct loaded_script *) a;
   const struct loaded_script *eb = (const struct loaded_script *) b;
 
-  return strcmp (ea->name, eb->name) == 0 && ea->language == eb->language;
+  return streq (ea->name, eb->name) && ea->language == eb->language;
 }
 
 /* Initialize the table to track loaded scripts.
@@ -915,7 +915,7 @@ auto_load_objfile_script (struct objfile *objfile,
 	(bfd_get_debug_link_info (parent->obfd.get (), &crc32));
 
       if (debuglink.get () != nullptr
-	  && strcmp (debuglink.get (), lbasename (realname.get ())) != 0)
+	  && !streq (debuglink.get (), lbasename (realname.get ())))
 	{
 	  /* Replace the last component of the parent's path with the
 	     debuglink name.  */
@@ -1261,8 +1261,7 @@ print_script (struct loaded_script *script)
   uiout->text ("\n");
 
   /* If the name isn't the full path, print it too.  */
-  if (script->full_path != NULL
-      && strcmp (script->name, script->full_path) != 0)
+  if (script->full_path != NULL && !streq (script->name, script->full_path))
     {
       uiout->text ("\tfull name: ");
       uiout->field_string ("full_path", script->full_path);
diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
index 8b88f69a04f2..f445a2db6ba7 100644
--- a/gdb/avr-tdep.c
+++ b/gdb/avr-tdep.c
@@ -1412,7 +1412,7 @@ avr_address_class_name_to_type_flags (struct gdbarch *gdbarch,
 				      const char* name,
 				      type_instance_flags *type_flags_ptr)
 {
-  if (strcmp (name, "flash") == 0)
+  if (streq (name, "flash"))
     {
       *type_flags_ptr = AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH;
       return true;
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
index 2a96ff1c6213..498a307c8688 100644
--- a/gdb/ax-gdb.c
+++ b/gdb/ax-gdb.c
@@ -1345,7 +1345,7 @@ gen_struct_ref_recursive (struct agent_expr *ax, struct axs_value *value,
 
       if (this_name)
 	{
-	  if (strcmp (field, this_name) == 0)
+	  if (streq (field, this_name))
 	    {
 	      /* Note that bytecodes for the struct's base (aka
 		 "this") will have been generated already, which will
@@ -1486,7 +1486,7 @@ gen_struct_elt_for_reference (struct agent_expr *ax, struct axs_value *value,
     {
       const char *t_field_name = t->field (i).name ();
 
-      if (t_field_name && strcmp (t_field_name, fieldname) == 0)
+      if (t_field_name && streq (t_field_name, fieldname))
 	{
 	  if (t->field (i).is_static ())
 	    {
@@ -2478,7 +2478,7 @@ agent_eval_command_one (const char *exp, int eval, CORE_ADDR pc)
   agent_expr_up agent;
 
   arg = exp;
-  if (!eval && strcmp (arg, "$_ret") == 0)
+  if (!eval && streq (arg, "$_ret"))
     {
       agent = gen_trace_for_return_address (pc, get_current_arch (),
 					    trace_string);
diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
index 5e1330166458..2a9e458e51cd 100644
--- a/gdb/bfin-tdep.c
+++ b/gdb/bfin-tdep.c
@@ -597,7 +597,7 @@ bfin_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 
   *size = kind;
 
-  if (strcmp (target_shortname (), "sim") == 0)
+  if (streq (target_shortname (), "sim"))
     return bfin_sim_breakpoint;
   else
     return bfin_breakpoint;
diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c
index fbc4458145a2..ea85083b6f86 100644
--- a/gdb/break-catch-sig.c
+++ b/gdb/break-catch-sig.c
@@ -87,7 +87,7 @@ signal_to_name_or_int (enum gdb_signal sig)
 {
   const char *result = gdb_signal_to_name (sig);
 
-  if (strcmp (result, "?") == 0)
+  if (streq (result, "?"))
     result = plongest (sig);
 
   return result;
diff --git a/gdb/break-cond-parse.c b/gdb/break-cond-parse.c
index e2283a8d59f4..4fec4dbef94f 100644
--- a/gdb/break-cond-parse.c
+++ b/gdb/break-cond-parse.c
@@ -588,9 +588,9 @@ test (const char *input, const char *condition, int thread = -1,
 
   if ((condition == nullptr) != (extracted_condition.get () == nullptr)
       || (condition != nullptr
-	  && strcmp (condition, extracted_condition.get ()) != 0)
+	  && !streq (condition, extracted_condition.get ()))
       || (rest == nullptr) != (extracted_rest.get () == nullptr)
-      || (rest != nullptr && strcmp (rest, extracted_rest.get ()) != 0)
+      || (rest != nullptr && !streq (rest, extracted_rest.get ()))
       || thread != extracted_thread
       || inferior != extracted_inferior
       || task != extracted_task
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index a48a2ceb4f3b..d7be1b44229e 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4836,7 +4836,7 @@ breakpoint_about_to_proceed (void)
 static bool
 command_line_is_silent (struct command_line *cmd)
 {
-  return cmd && (strcmp ("silent", cmd->line) == 0);
+  return cmd && (streq ("silent", cmd->line));
 }
 
 /* Sets the $_hit_bpnum and $_hit_locno to bpnum and locno.
@@ -6325,7 +6325,7 @@ wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
   total_width = 0;
   for (i = 1; uiout->query_table_field (i, &width, &align, &text); i++)
     {
-      if (strcmp (text, col_name) == 0)
+      if (streq (text, col_name))
 	return total_width;
 
       total_width += width + 1;
@@ -8723,9 +8723,9 @@ update_dprintf_command_list (struct breakpoint *b)
   if (*dprintf_args != '"')
     error (_("Bad format string, missing '\"'."));
 
-  if (strcmp (dprintf_style, dprintf_style_gdb) == 0)
+  if (streq (dprintf_style, dprintf_style_gdb))
     printf_line = xstrprintf ("printf %s", dprintf_args);
-  else if (strcmp (dprintf_style, dprintf_style_call) == 0)
+  else if (streq (dprintf_style, dprintf_style_call))
     {
       if (dprintf_function.empty ())
 	error (_("No function supplied for dprintf call"));
@@ -8740,7 +8740,7 @@ update_dprintf_command_list (struct breakpoint *b)
 				  dprintf_function.c_str (),
 				  dprintf_args);
     }
-  else if (strcmp (dprintf_style, dprintf_style_agent) == 0)
+  else if (streq (dprintf_style, dprintf_style_agent))
     {
       if (target_can_run_breakpoint_commands ())
 	printf_line = xstrprintf ("agent-printf %s", dprintf_args);
@@ -13102,8 +13102,7 @@ update_breakpoint_locations (code_breakpoint *b,
 	{
 	  for (bp_location &l : b->locations ())
 	    if (l.function_name
-		&& strcmp (e.function_name.get (),
-			   l.function_name.get ()) == 0)
+		&& streq (e.function_name.get (), l.function_name.get ()))
 	      {
 		l.enabled = e.enabled;
 		break;
diff --git a/gdb/bt-utils.c b/gdb/bt-utils.c
index c2566931bf2f..7fc8d04f306b 100644
--- a/gdb/bt-utils.c
+++ b/gdb/bt-utils.c
@@ -104,7 +104,7 @@ libbacktrace_print (void *data, uintptr_t pc, const char *filename,
     }
   sig_write ("\n");
 
-  return function != nullptr && strcmp (function, "main") == 0;
+  return function != nullptr && streq (function, "main");
 }
 
 /* Write a backtrace to GDB's stderr in an async safe manner.  This is a
diff --git a/gdb/btrace.c b/gdb/btrace.c
index 27487f526ab5..6a8f0f549d1a 100644
--- a/gdb/btrace.c
+++ b/gdb/btrace.c
@@ -196,7 +196,7 @@ ftrace_function_switched (const struct btrace_function *bfun,
 
   /* If the minimal symbol changed, we certainly switched functions.  */
   if (mfun != NULL && msym != NULL
-      && strcmp (mfun->linkage_name (), msym->linkage_name ()) != 0)
+      && !streq (mfun->linkage_name (), msym->linkage_name ()))
     return 1;
 
   /* If the symbol changed, we certainly switched functions.  */
@@ -205,7 +205,7 @@ ftrace_function_switched (const struct btrace_function *bfun,
       const char *bfname, *fname;
 
       /* Check the function name.  */
-      if (strcmp (fun->linkage_name (), sym->linkage_name ()) != 0)
+      if (!streq (fun->linkage_name (), sym->linkage_name ()))
 	return 1;
 
       /* Check the location of those functions, as well.  */
@@ -604,7 +604,7 @@ ftrace_update_function (struct btrace_thread_info *btinfo,
 	       create a stack back trace with the same function names but
 	       different frame id's.  This will confuse stepping.  */
 	    fname = ftrace_print_function_name (bfun);
-	    if (strcmp (fname, "_dl_runtime_resolve") == 0)
+	    if (streq (fname, "_dl_runtime_resolve"))
 	      return ftrace_new_tailcall (btinfo, mfun, fun);
 
 	    return ftrace_new_return (btinfo, mfun, fun);
@@ -3316,7 +3316,7 @@ maint_btrace_packet_history_cmd (const char *arg, int from_tty)
       return;
     }
 
-  if (arg == NULL || *arg == 0 || strcmp (arg, "+") == 0)
+  if (arg == NULL || *arg == 0 || streq (arg, "+"))
     {
       from = to;
 
@@ -3324,7 +3324,7 @@ maint_btrace_packet_history_cmd (const char *arg, int from_tty)
 	size = end - from;
       to = from + size;
     }
-  else if (strcmp (arg, "-") == 0)
+  else if (streq (arg, "-"))
     {
       to = from;
 
diff --git a/gdb/c-lang.c b/gdb/c-lang.c
index a8e3a467bec4..fdb5be7b2b7a 100644
--- a/gdb/c-lang.c
+++ b/gdb/c-lang.c
@@ -90,19 +90,19 @@ classify_type (struct type *elttype, struct gdbarch *gdbarch,
 	  goto done;
 	}
 
-      if (!strcmp (name, "wchar_t"))
+      if (streq (name, "wchar_t"))
 	{
 	  result = C_WIDE_CHAR;
 	  goto done;
 	}
 
-      if (!strcmp (name, "char16_t"))
+      if (streq (name, "char16_t"))
 	{
 	  result = C_CHAR_16;
 	  goto done;
 	}
 
-      if (!strcmp (name, "char32_t"))
+      if (streq (name, "char32_t"))
 	{
 	  result = C_CHAR_32;
 	  goto done;
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 76472c23254f..821b78becf41 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -128,7 +128,7 @@ c_print_type_1 (struct type *type,
 		  || code == TYPE_CODE_METHODPTR
 		  || TYPE_IS_REFERENCE (type))))
 	gdb_puts (" ", stream);
-      need_post_space = (varstring != NULL && strcmp (varstring, "") != 0);
+      need_post_space = (varstring != NULL && !streq (varstring, ""));
       c_type_print_varspec_prefix (type, stream, show, 0, need_post_space,
 				   language, flags, podata);
     }
@@ -181,8 +181,7 @@ c_print_typedef (struct type *type,
   gdb_printf (stream, "typedef ");
   type_print (type, "", stream, -1);
   if ((new_symbol->type ())->name () == 0
-      || strcmp ((new_symbol->type ())->name (),
-		 new_symbol->linkage_name ()) != 0
+      || !streq ((new_symbol->type ())->name (), new_symbol->linkage_name ())
       || new_symbol->type ()->code () == TYPE_CODE_TYPEDEF)
     gdb_printf (stream, " %s", new_symbol->print_name ());
   gdb_printf (stream, ";");
@@ -1100,8 +1099,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
 	  int j, len2 = TYPE_FN_FIELDLIST_LENGTH (type, i);
 	  const char *method_name = TYPE_FN_FIELDLIST_NAME (type, i);
 	  const char *name = type->name ();
-	  int is_constructor = name && strcmp (method_name,
-					       name) == 0;
+	  int is_constructor = name != nullptr && streq (method_name, name);
 
 	  for (j = 0; j < len2; j++)
 	    {
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
index 522b42497d12..9f9f61ea2e0d 100644
--- a/gdb/c-valprint.c
+++ b/gdb/c-valprint.c
@@ -38,9 +38,9 @@
 static int
 textual_name (const char *name)
 {
-  return (!strcmp (name, "wchar_t")
-	  || !strcmp (name, "char16_t")
-	  || !strcmp (name, "char32_t"));
+  return (streq (name, "wchar_t")
+	  || streq (name, "char16_t")
+	  || streq (name, "char32_t"));
 }
 
 /* Apply a heuristic to decide whether an array of TYPE or a pointer
@@ -500,8 +500,7 @@ c_value_print (struct value *val, struct ui_file *stream,
       if (original_type->code () == TYPE_CODE_PTR
 	  && original_type->name () == NULL
 	  && original_type->target_type ()->name () != NULL
-	  && (strcmp (original_type->target_type ()->name (),
-		      "char") == 0
+	  && (streq (original_type->target_type ()->name (), "char")
 	      || textual_name (original_type->target_type ()->name ())))
 	{
 	  /* Print nothing.  */
diff --git a/gdb/charset.c b/gdb/charset.c
index 2f0ceafd57d0..1b0725b50783 100644
--- a/gdb/charset.c
+++ b/gdb/charset.c
@@ -106,16 +106,16 @@
 static iconv_t
 phony_iconv_open (const char *to, const char *from)
 {
-  if (strcmp (to, "wchar_t") && strcmp (to, GDB_DEFAULT_HOST_CHARSET))
+  if (!streq (to, "wchar_t") && !streq (to, GDB_DEFAULT_HOST_CHARSET))
     return -1;
 
-  if (!strcmp (from, "UTF-32BE") || !strcmp (from, "UTF-32"))
+  if (streq (from, "UTF-32BE") || streq (from, "UTF-32"))
     return 1;
 
-  if (!strcmp (from, "UTF-32LE"))
+  if (streq (from, "UTF-32LE"))
     return 2;
 
-  if (strcmp (from, "wchar_t") && strcmp (from, GDB_DEFAULT_HOST_CHARSET))
+  if (!streq (from, "wchar_t") && !streq (from, GDB_DEFAULT_HOST_CHARSET))
     return -1;
 
   return 0;
@@ -232,7 +232,7 @@ show_host_charset_name (struct ui_file *file, int from_tty,
 			struct cmd_list_element *c,
 			const char *value)
 {
-  if (!strcmp (value, "auto"))
+  if (streq (value, "auto"))
     gdb_printf (file,
 		_("The host character set is \"auto; currently %s\".\n"),
 		auto_host_charset_name);
@@ -245,7 +245,7 @@ static void
 show_target_charset_name (struct ui_file *file, int from_tty,
 			  struct cmd_list_element *c, const char *value)
 {
-  if (!strcmp (value, "auto"))
+  if (streq (value, "auto"))
     gdb_printf (file,
 		_("The target character set is \"auto; "
 		  "currently %s\".\n"),
@@ -262,7 +262,7 @@ show_target_wide_charset_name (struct ui_file *file,
 			       struct cmd_list_element *c,
 			       const char *value)
 {
-  if (!strcmp (value, "auto"))
+  if (streq (value, "auto"))
     gdb_printf (file,
 		_("The target wide character set is \"auto; "
 		  "currently %s\".\n"),
@@ -311,7 +311,7 @@ set_be_le_names (struct gdbarch *gdbarch)
   target_wide_charset_be_name = NULL;
 
   target_wide = target_wide_charset_name;
-  if (!strcmp (target_wide, "auto"))
+  if (streq (target_wide, "auto"))
     target_wide = gdbarch_auto_wide_charset (gdbarch);
 
   len = strlen (target_wide);
@@ -344,7 +344,7 @@ validate (struct gdbarch *gdbarch)
   const char *target_cset = target_charset (gdbarch);
   const char *target_wide_cset = target_wide_charset_name;
 
-  if (!strcmp (target_wide_cset, "auto"))
+  if (streq (target_wide_cset, "auto"))
     target_wide_cset = gdbarch_auto_wide_charset (gdbarch);
 
   desc = iconv_open (target_wide_cset, host_cset);
@@ -416,7 +416,7 @@ show_charset (struct ui_file *file, int from_tty,
 const char *
 host_charset (void)
 {
-  if (!strcmp (host_charset_name, "auto"))
+  if (streq (host_charset_name, "auto"))
     return auto_host_charset_name;
   return host_charset_name;
 }
@@ -424,7 +424,7 @@ host_charset (void)
 const char *
 target_charset (struct gdbarch *gdbarch)
 {
-  if (!strcmp (target_charset_name, "auto"))
+  if (streq (target_charset_name, "auto"))
     return default_auto_charset ();
   return target_charset_name;
 }
@@ -446,7 +446,7 @@ target_wide_charset (struct gdbarch *gdbarch)
 	return target_wide_charset_le_name;
     }
 
-  if (!strcmp (target_wide_charset_name, "auto"))
+  if (streq (target_wide_charset_name, "auto"))
     return gdbarch_auto_wide_charset (gdbarch);
 
   return target_wide_charset_name;
@@ -505,7 +505,7 @@ convert_between_encodings (const char *from, const char *to,
   unsigned int space_request;
 
   /* Often, the host and target charsets will be the same.  */
-  if (!strcmp (from, to))
+  if (streq (from, to))
     {
       obstack_grow (output, bytes, num_bytes);
       return;
@@ -1004,7 +1004,7 @@ INIT_GDB_FILE (charset)
   /* Solaris will return `646' here -- but the Solaris iconv then does
      not accept this.  Darwin (and maybe FreeBSD) may return "" here,
      which GNU libiconv doesn't like (infinite loop).  */
-  if (!strcmp (auto_host_charset_name, "646") || !*auto_host_charset_name)
+  if (streq (auto_host_charset_name, "646") || !*auto_host_charset_name)
     auto_host_charset_name = "ASCII";
   auto_target_charset_name = auto_host_charset_name;
 #elif defined (USE_WIN32API)
@@ -1031,7 +1031,7 @@ INIT_GDB_FILE (charset)
     auto_target_charset_name = auto_host_charset_name;
 
     /* Windows Terminal supports Emoji when using UTF-8 output.  */
-    if (strcmp (w32_host_default_charset, "UTF-8") != 0)
+    if (!streq (w32_host_default_charset, "UTF-8"))
       no_emojis ();
   }
 #endif
@@ -1039,7 +1039,7 @@ INIT_GDB_FILE (charset)
 
   /* Recall that the first element is always "auto".  */
   host_charset_name = charset_enum[0];
-  gdb_assert (strcmp (host_charset_name, "auto") == 0);
+  gdb_assert (streq (host_charset_name, "auto"));
   add_setshow_enum_cmd ("charset", class_support,
 			charset_enum, &host_charset_name, _("\
 Set the host and target character sets."), _("\
@@ -1070,7 +1070,7 @@ To see a list of the character sets GDB supports, type `set host-charset <TAB>'.
 
   /* Recall that the first element is always "auto".  */
   target_charset_name = charset_enum[0];
-  gdb_assert (strcmp (target_charset_name, "auto") == 0);
+  gdb_assert (streq (target_charset_name, "auto"));
   add_setshow_enum_cmd ("target-charset", class_support,
 			charset_enum, &target_charset_name, _("\
 Set the target character set."), _("\
@@ -1085,7 +1085,7 @@ To see a list of the character sets GDB supports, type `set target-charset'<TAB>
 
   /* Recall that the first element is always "auto".  */
   target_wide_charset_name = charset_enum[0];
-  gdb_assert (strcmp (target_wide_charset_name, "auto") == 0);
+  gdb_assert (streq (target_wide_charset_name, "auto"));
   add_setshow_enum_cmd ("target-wide-charset", class_support,
 			charset_enum, &target_wide_charset_name,
 			_("\
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 760889fbc720..e58553245b31 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -497,7 +497,7 @@ pwd_command (const char *args, int from_tty)
     error (_("Error finding name of working directory: %s"),
 	   safe_strerror (errno));
 
-  if (strcmp (cwd.get (), current_directory) != 0)
+  if (!streq (cwd.get (), current_directory))
     gdb_printf (_("Working directory %ps\n (canonically %ps).\n"),
 		styled_string (file_name_style.style (),
 			       current_directory),
@@ -2193,13 +2193,12 @@ alias_command (const char *args, int from_tty)
 
 	if (alias_cmd != nullptr
 	    && alias_cmd->prefix == prefix_cmd
-	    && strcmp (alias_name, alias_cmd->name) == 0)
+	    && streq (alias_name, alias_cmd->name))
 	  error (_("Alias already exists: %s"), alias);
 
 	/* Check ALIAS differs from the found CMD.  */
 
-	if (cmd->prefix == prefix_cmd
-	    && strcmp (alias_name, cmd->name) == 0)
+	if (cmd->prefix == prefix_cmd && streq (alias_name, cmd->name))
 	  error (_("Alias %s is the name of an existing command"), alias);
       }
   }
diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index 285f5f1f0c40..de40faeed591 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -1528,7 +1528,7 @@ delete_cmd (const char *name, struct cmd_list_element **list,
 
   for (iter = *previous_chain_ptr; iter; iter = *previous_chain_ptr)
     {
-      if (strcmp (iter->name, name) == 0)
+      if (streq (iter->name, name))
 	{
 	  if (iter->destroyer)
 	    iter->destroyer (iter, iter->context ());
@@ -1638,8 +1638,7 @@ user_documented_alias (const cmd_list_element &alias)
   gdb_assert (alias.is_alias ());
   /* Alias is user documented if it has an allocated documentation
      that differs from the aliased command.  */
-  return (alias.doc_allocated
-	  && strcmp (alias.doc, alias.alias_target->doc) != 0);
+  return alias.doc_allocated && !streq (alias.doc, alias.alias_target->doc);
 }
 
 /* Print the definition of alias C using title style for alias
@@ -1838,7 +1837,7 @@ help_cmd (const char *command, struct ui_file *stream)
       return;
     }
 
-  if (strcmp (command, "all") == 0)
+  if (streq (command, "all"))
     {
       help_all (stream);
       return;
@@ -2502,7 +2501,7 @@ lookup_cmd_exact (const char *name,
   const char *tem = name;
   struct cmd_list_element *cmd = lookup_cmd (&tem, list, "", NULL, -1,
 					     ignore_help_classes);
-  if (cmd != nullptr && strcmp (name, cmd->name) != 0)
+  if (cmd != nullptr && !streq (name, cmd->name))
     cmd = nullptr;
   return cmd;
 }
diff --git a/gdb/cli/cli-dump.c b/gdb/cli/cli-dump.c
index 3084aa111288..59c5827c0939 100644
--- a/gdb/cli/cli-dump.c
+++ b/gdb/cli/cli-dump.c
@@ -193,7 +193,7 @@ dump_memory_to_file (const char *cmd, const char *mode, const char *file_format)
   read_memory (lo, buf.data (), count);
 
   /* Have everything.  Open/write the data.  */
-  if (file_format == NULL || strcmp (file_format, "binary") == 0)
+  if (file_format == NULL || streq (file_format, "binary"))
     dump_binary_file (filename.get (), mode, buf.data (), count);
   else
     dump_bfd_file (filename.get (), mode, file_format, lo, buf.data (), count);
@@ -221,7 +221,7 @@ dump_value_to_file (const char *cmd, const char *mode, const char *file_format)
     error (_("Invalid expression."));
 
   /* Have everything.  Open/write the data.  */
-  if (file_format == NULL || strcmp (file_format, "binary") == 0)
+  if (file_format == NULL || streq (file_format, "binary"))
     dump_binary_file (filename.get (), mode, val->contents ().data (),
 		      val->type ()->length ());
   else
diff --git a/gdb/cli/cli-option.c b/gdb/cli/cli-option.c
index 24409d0e0075..ded79adaa141 100644
--- a/gdb/cli/cli-option.c
+++ b/gdb/cli/cli-option.c
@@ -588,12 +588,12 @@ complete_options (completion_tracker &tracker,
 	  *args = skip_spaces (*args);
 	  completion_info.word = *args;
 
-	  if (strcmp (*args, "-") == 0)
+	  if (streq (*args, "-"))
 	    {
 	      complete_on_options (options_group, tracker, *args + 1,
 				   completion_info.word);
 	    }
-	  else if (strcmp (*args, "--") == 0)
+	  else if (streq (*args, "--"))
 	    {
 	      tracker.add_completion (make_unique_xstrdup (*args));
 	    }
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index e403f7e9b5e7..253e63af570f 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -1662,7 +1662,7 @@ commands_equal (const command_line *a, const command_line *b)
 	}
 
       /* Check lines are identical.  */
-      if (a->line != nullptr && strcmp (a->line, b->line) != 0)
+      if (a->line != nullptr && !streq (a->line, b->line))
 	return false;
 
       /* Check body_list_0.  */
diff --git a/gdb/cli/cli-style.c b/gdb/cli/cli-style.c
index ac4fb27e725b..272e857c2a5e 100644
--- a/gdb/cli/cli-style.c
+++ b/gdb/cli/cli-style.c
@@ -89,13 +89,13 @@ terminal_supports_styling ()
   /* Windows doesn't by default define $TERM, but can support styles
      regardless.  */
 #ifndef _WIN32
-  if (term == nullptr || strcmp (term, "dumb") == 0)
+  if (term == nullptr || streq (term, "dumb"))
     return false;
 #else
   /* But if they do define $TERM, let us behave the same as on Posix
      platforms, for the benefit of programs which invoke GDB as their
      back-end.  */
-  if (term != nullptr && strcmp (term, "dumb") == 0)
+  if (term != nullptr && streq (term, "dumb"))
     return false;
 #endif
 
@@ -438,7 +438,7 @@ emojis_ok ()
     return false;
   if (emoji_styling == AUTO_BOOLEAN_TRUE)
     return true;
-  return strcmp (host_charset (), "UTF-8") == 0;
+  return streq (host_charset (), "UTF-8");
 }
 
 /* See cli-style.h.  */
diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c
index 5073a4b0c4b7..48963ff8d054 100644
--- a/gdb/coff-pe-read.c
+++ b/gdb/coff-pe-read.c
@@ -71,17 +71,17 @@ struct read_pe_section_data
 static int
 read_pe_section_index (const char *section_name)
 {
-  if (strcmp (section_name, ".text") == 0)
+  if (streq (section_name, ".text"))
     {
       return PE_SECTION_INDEX_TEXT;
     }
 
-  else if (strcmp (section_name, ".data") == 0)
+  else if (streq (section_name, ".data"))
     {
       return PE_SECTION_INDEX_DATA;
     }
 
-  else if (strcmp (section_name, ".bss") == 0)
+  else if (streq (section_name, ".bss"))
     {
       return PE_SECTION_INDEX_BSS;
     }
@@ -336,15 +336,15 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
   section_data[PE_SECTION_INDEX_BSS].ms_type = mst_bss;
   section_data[PE_SECTION_INDEX_BSS].section_name = ".bss";
 
-  is_pe64 = (strcmp (target, "pe-x86-64") == 0
-	     || strcmp (target, "pei-x86-64") == 0
-	     || strcmp (target, "pe-aarch64") == 0
-	     || strcmp (target, "pei-aarch64") == 0
-	     || strcmp (target, "pei-aarch64-little") == 0);
-  is_pe32 = (strcmp (target, "pe-i386") == 0
-	     || strcmp (target, "pei-i386") == 0
-	     || strcmp (target, "pe-arm-wince-little") == 0
-	     || strcmp (target, "pei-arm-wince-little") == 0);
+  is_pe64 = (streq (target, "pe-x86-64")
+	     || streq (target, "pei-x86-64")
+	     || streq (target, "pe-aarch64")
+	     || streq (target, "pei-aarch64")
+	     || streq (target, "pei-aarch64-little"));
+  is_pe32 = (streq (target, "pe-i386")
+	     || streq (target, "pei-i386")
+	     || streq (target, "pe-arm-wince-little")
+	     || streq (target, "pei-arm-wince-little"));
 
   /* Possibly print a debug message about DLL not having a valid format.  */
   auto maybe_print_debug_msg = [&] () -> void {
@@ -406,10 +406,10 @@ read_pe_exported_syms (minimal_symbol_reader &reader,
 	  || bfd_read (sname, sizeof (sname), dll) != sizeof (sname))
 	return maybe_print_debug_msg ();
 
-      if ((strcmp (sname, ".edata") == 0)
+      if (streq (sname, ".edata")
 	  || (vaddr <= export_opthdrrva && export_opthdrrva < vaddr + vsize))
 	{
-	  if (strcmp (sname, ".edata") != 0)
+	  if (!streq (sname, ".edata"))
 	    {
 	      if (debug_coff_pe_read)
 		gdb_printf (gdb_stdlog, _("Export RVA for dll "
@@ -636,15 +636,15 @@ pe_text_section_offset (struct bfd *abfd)
 
   target = bfd_get_target (abfd);
 
-  is_pe64 = (strcmp (target, "pe-x86-64") == 0
-	     || strcmp (target, "pei-x86-64") == 0
-	     || strcmp (target, "pe-aarch64") == 0
-	     || strcmp (target, "pei-aarch64") == 0
-	     || strcmp (target, "pei-aarch64-little") == 0);
-  is_pe32 = (strcmp (target, "pe-i386") == 0
-	     || strcmp (target, "pei-i386") == 0
-	     || strcmp (target, "pe-arm-wince-little") == 0
-	     || strcmp (target, "pei-arm-wince-little") == 0);
+  is_pe64 = (streq (target, "pe-x86-64")
+	     || streq (target, "pei-x86-64")
+	     || streq (target, "pe-aarch64")
+	     || streq (target, "pei-aarch64")
+	     || streq (target, "pei-aarch64-little"));
+  is_pe32 = (streq (target, "pe-i386")
+	     || streq (target, "pei-i386")
+	     || streq (target, "pe-arm-wince-little")
+	     || streq (target, "pei-arm-wince-little"));
 
   if (!is_pe32 && !is_pe64)
     {
@@ -677,7 +677,7 @@ pe_text_section_offset (struct bfd *abfd)
 	  || bfd_read (sname, SCNNMLEN, abfd) != SCNNMLEN)
 	return DEFAULT_COFF_PE_TEXT_SECTION_OFFSET;
       sname[SCNNMLEN] = '\0';
-      if (strcmp (sname, ".text") == 0)
+      if (streq (sname, ".text"))
 	return vaddr;
     }
 
diff --git a/gdb/compile/compile-object-load.c b/gdb/compile/compile-object-load.c
index bbee2f7cc560..fe48979e4f68 100644
--- a/gdb/compile/compile-object-load.c
+++ b/gdb/compile/compile-object-load.c
@@ -561,7 +561,7 @@ store_regs (struct type *regs_type, CORE_ADDR regs_base)
       struct value *regval;
       CORE_ADDR inferior_addr;
 
-      if (strcmp (reg_name, COMPILE_I_SIMPLE_REGISTER_DUMMY) == 0)
+      if (streq (reg_name, COMPILE_I_SIMPLE_REGISTER_DUMMY))
 	continue;
 
       if ((reg_bitpos % 8) != 0 || reg_bitsize != 0)
@@ -694,7 +694,7 @@ compile_object_load (const compile_file_names &file_names,
 	continue;
       sym->flags = BSF_GLOBAL;
       sym->section = bfd_abs_section_ptr;
-      if (strcmp (sym->name, "_GLOBAL_OFFSET_TABLE_") == 0)
+      if (streq (sym->name, "_GLOBAL_OFFSET_TABLE_"))
 	{
 	  if (compile_debug)
 	    gdb_printf (gdb_stdlog,
@@ -707,7 +707,7 @@ compile_object_load (const compile_file_names &file_names,
 	  sym->value = 0;
 	  continue;
 	}
-      if (strcmp (sym->name, ".TOC.") == 0)
+      if (streq (sym->name, ".TOC."))
 	{
 	  /* Handle the .TOC. symbol as the linker would do.  Set the .TOC.
 	     sections value to 0x8000 (see bfd/elf64-ppc.c TOC_BASE_OFF);
diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c
index 2a9702ee8526..a64297bcbe1c 100644
--- a/gdb/compile/compile.c
+++ b/gdb/compile/compile.c
@@ -462,7 +462,7 @@ filter_args (char **argv)
   for (destv = argv; *argv != NULL; argv++)
     {
       /* -fpreprocessed may get in commonly from ccache.  */
-      if (strcmp (*argv, "-fpreprocessed") == 0)
+      if (streq (*argv, "-fpreprocessed"))
 	{
 	  xfree (*argv);
 	  continue;
@@ -767,7 +767,7 @@ compile_register_name_demangle (struct gdbarch *gdbarch,
   regname += 2;
 
   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
-    if (strcmp (regname, gdbarch_register_name (gdbarch, regnum)) == 0)
+    if (streq (regname, gdbarch_register_name (gdbarch, regnum)))
       return regnum;
 
   error (_("Cannot find gdbarch register \"%s\"."), regname);
diff --git a/gdb/completer.c b/gdb/completer.c
index 01c607c3850c..8c70a61cdec6 100644
--- a/gdb/completer.c
+++ b/gdb/completer.c
@@ -90,7 +90,7 @@ class completion_tracker::completion_hash_entry
   /* Return true of the name in this hash entry is STR.  */
   bool is_name_eq (const char *str) const
   {
-    return strcmp (m_name.get (), str) == 0;
+    return streq (m_name.get (), str);
   }
 
   /* Return the hash value based on the name of the entry.  */
@@ -2200,7 +2200,7 @@ signal_completer (struct cmd_list_element *ignore,
       signame = gdb_signal_to_name ((enum gdb_signal) signum);
 
       /* Ignore the unknown signal case.  */
-      if (!signame || strcmp (signame, "?") == 0)
+      if (!signame || streq (signame, "?"))
 	continue;
 
       if (strncasecmp (signame, word, len) == 0)
diff --git a/gdb/corelow.c b/gdb/corelow.c
index f6e8179d1f40..79b902118fab 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -1345,13 +1345,13 @@ get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
   if (!variable_size_section)
     gdb_assert (supply_size == collect_size);
 
-  if (strcmp (sect_name, ".reg") == 0)
+  if (streq (sect_name, ".reg"))
     {
       required = true;
       if (human_name == NULL)
 	human_name = "general-purpose";
     }
-  else if (strcmp (sect_name, ".reg2") == 0)
+  else if (streq (sect_name, ".reg2"))
     {
       if (human_name == NULL)
 	human_name = "floating-point";
diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
index 4c2429dafc7b..a2189579cb5e 100644
--- a/gdb/cp-abi.c
+++ b/gdb/cp-abi.c
@@ -284,7 +284,7 @@ set_cp_abi_as_auto_default (const char *short_name)
   /* Since we copy the current ABI into current_cp_abi instead of
      using a pointer, if auto is currently the default, we need to
      reset it.  */
-  if (strcmp (current_cp_abi.shortname, "auto") == 0)
+  if (streq (current_cp_abi.shortname, "auto"))
     switch_to_cp_abi ("auto");
 }
 
@@ -296,7 +296,7 @@ find_cp_abi (const char *short_name)
   int i;
 
   for (i = 0; i < num_cp_abis; i++)
-    if (strcmp (cp_abis[i]->shortname, short_name) == 0)
+    if (streq (cp_abis[i]->shortname, short_name))
       return cp_abis[i];
 
   return NULL;
diff --git a/gdb/cp-name-parser.y b/gdb/cp-name-parser.y
index fe3c6dce8ca4..4be50599762e 100644
--- a/gdb/cp-name-parser.y
+++ b/gdb/cp-name-parser.y
@@ -2092,7 +2092,7 @@ should_be_the_same (const char *one, const char *two)
   if (cptwo != nullptr)
     two = cptwo.get ();
 
-  SELF_CHECK (strcmp (one, two) == 0);
+  SELF_CHECK (streq (one, two));
 }
 
 static void
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index efdb2a2c850a..c8cd5c245aa7 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -431,7 +431,7 @@ cp_lookup_symbol_via_imports (const char *scope,
 			    && (len == 0
 				|| scope[len] == ':'
 				|| scope[len] == '\0'))
-			 : strcmp (scope, current->import_dest) == 0);
+			 : streq (scope, current->import_dest));
 
       /* If the import destination is the current scope or one of its
 	 ancestors then it is applicable.  */
@@ -447,9 +447,10 @@ cp_lookup_symbol_via_imports (const char *scope,
 	     with the sought out name.  If there is a match pass
 	     current->import_src as NAMESPACE to direct the search
 	     towards the imported namespace.  */
-	  if (current->declaration
-	      && strcmp (name, current->alias
-			 ? current->alias : current->declaration) == 0)
+	  if (current->declaration != nullptr
+	      && streq (name, (current->alias != nullptr
+			       ? current->alias
+			       : current->declaration)))
 	    sym = cp_lookup_symbol_in_namespace (current->import_src,
 						 current->declaration,
 						 block, domain, 1);
@@ -467,13 +468,12 @@ cp_lookup_symbol_via_imports (const char *scope,
 
 	  /* Do not follow CURRENT if NAME matches its EXCLUDES.  */
 	  for (excludep = current->excludes; *excludep; excludep++)
-	    if (strcmp (name, *excludep) == 0)
+	    if (streq (name, *excludep))
 	      break;
 	  if (*excludep)
 	    continue;
 
-	  if (current->alias != NULL
-	      && strcmp (name, current->alias) == 0)
+	  if (current->alias != nullptr && streq (name, current->alias))
 	    /* If the import is creating an alias and the alias matches
 	       the sought name.  Pass current->import_src as the NAME to
 	       direct the search towards the aliased namespace.  */
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index 5dfb2a785055..d321986f72da 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -110,9 +110,9 @@ cp_already_canonical (const char *string)
   /* These are the only two identifiers which canonicalize to other
      than themselves or an error: unsigned -> unsigned int and
      signed -> int.  */
-  if (string[0] == 'u' && strcmp (&string[1], "nsigned") == 0)
+  if (string[0] == 'u' && streq (&string[1], "nsigned"))
     return 0;
-  else if (string[0] == 's' && strcmp (&string[1], "igned") == 0)
+  else if (string[0] == 's' && streq (&string[1], "igned"))
     return 0;
 
   /* Identifier character [a-zA-Z0-9_].  */
@@ -165,7 +165,7 @@ inspect_type (struct demangle_parse_info *info,
 	{
 	  const char *new_name = (*finder) (otype, data);
 
-	  if (new_name != nullptr && strcmp (new_name, name) != 0)
+	  if (new_name != nullptr && !streq (new_name, name))
 	    {
 	      ret_comp->u.s_name.s = new_name;
 	      ret_comp->u.s_name.len = strlen (new_name);
@@ -200,8 +200,7 @@ inspect_type (struct demangle_parse_info *info,
 
 	     If the symbol is typedef and its type name is the same
 	     as the symbol's name, e.g., "typedef struct foo foo;".  */
-	  if (type->name () != nullptr
-	      && strcmp (type->name (), name) == 0)
+	  if (type->name () != nullptr && streq (type->name (), name))
 	    return 0;
 
 	  is_anon = (type->name () == NULL
@@ -617,7 +616,7 @@ cp_canonicalize_string_full (const char *string,
 
       /* Finally, compare the original string with the computed
 	 name, returning NULL if they are the same.  */
-      if (strcmp (us.get (), string) == 0)
+      if (streq (us.get (), string))
 	return nullptr;
 
       return us;
@@ -666,7 +665,7 @@ cp_canonicalize_string (const char *string)
   if (info->added_parens)
     maybe_strip_parens (us.get ());
 
-  if (strcmp (us.get (), string) == 0)
+  if (streq (us.get (), string))
     return nullptr;
 
   return us;
@@ -1239,7 +1238,7 @@ overload_list_add_symbol (struct symbol *sym,
 
   /* skip any symbols that we've already considered.  */
   for (symbol *listed_sym : *overload_list)
-    if (strcmp (sym->linkage_name (), listed_sym->linkage_name ()) == 0)
+    if (streq (sym->linkage_name (), listed_sym->linkage_name ()))
       return;
 
   /* Get the demangled name without parameters */
@@ -1249,7 +1248,7 @@ overload_list_add_symbol (struct symbol *sym,
     return;
 
   /* skip symbols that cannot match */
-  if (strcmp (sym_name.get (), oload_name) != 0)
+  if (!streq (sym_name.get (), oload_name))
     return;
 
   overload_list->push_back (sym);
@@ -1429,7 +1428,7 @@ add_symbol_overload_list_using (const char *func_name,
 	if (current->alias != NULL || current->declaration != NULL)
 	  continue;
 
-	if (strcmp (the_namespace, current->import_dest) == 0)
+	if (streq (the_namespace, current->import_dest))
 	  {
 	    /* Mark this import as searched so that the recursive call
 	       does not search it again.  */
@@ -2206,9 +2205,8 @@ check_remove_params (const char *file, int line,
   gdb::unique_xmalloc_ptr<char> result
     = cp_remove_params_if_any (name, completion_mode);
 
-  if ((expected == NULL) != (result == NULL)
-      || (expected != NULL
-	  && strcmp (result.get (), expected) != 0))
+  if ((expected == nullptr) != (result == nullptr)
+      || (expected != nullptr && !streq (result.get (), expected)))
     {
       error (_("%s:%d: make-paramless self-test failed: (completion=%d) "
 	       "\"%s\" -> %s, expected %s"),
diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
index 54b992b3b21e..349a0d6bf9e9 100644
--- a/gdb/cp-valprint.c
+++ b/gdb/cp-valprint.c
@@ -66,7 +66,7 @@ cp_is_vtbl_ptr_type (struct type *type)
 {
   const char *type_name = type->name ();
 
-  return (type_name != NULL && !strcmp (type_name, vtbl_ptr_name));
+  return (type_name != NULL && streq (type_name, vtbl_ptr_name));
 }
 
 /* Return truth value for the assertion that TYPE is of the type
@@ -247,7 +247,7 @@ cp_print_value_fields (struct value *val, struct ui_file *stream,
 
 	  /* Do not print leading '=' in case of anonymous
 	     unions.  */
-	  if (strcmp (type->field (i).name (), ""))
+	  if (!streq (type->field (i).name (), ""))
 	    gdb_puts (" = ", stream);
 	  else
 	    {
diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c
index 33b99bb35e62..e86f79a42eaf 100644
--- a/gdb/csky-tdep.c
+++ b/gdb/csky-tdep.c
@@ -2455,14 +2455,11 @@ csky_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dw_reg)
 static int
 csky_essential_reg_check (const struct csky_supported_tdesc_register *reg)
 {
-  if ((strcmp (reg->name , "pc") == 0)
-      && (reg->num == CSKY_PC_REGNUM))
+  if (streq (reg->name, "pc") && reg->num == CSKY_PC_REGNUM)
     return CSKY_TDESC_REGS_PC_NUMBERED;
-  else if ((strcmp (reg->name , "r14") == 0)
-      && (reg->num == CSKY_SP_REGNUM))
+  else if (streq (reg->name, "r14") && reg->num == CSKY_SP_REGNUM)
     return CSKY_TDESC_REGS_SP_NUMBERED;
-  else if ((strcmp (reg->name , "r15") == 0)
-      && (reg->num == CSKY_LR_REGNUM))
+  else if (streq (reg->name, "r15") && reg->num == CSKY_LR_REGNUM)
     return CSKY_TDESC_REGS_LR_NUMBERED;
   else
     return 0;
@@ -2474,11 +2471,9 @@ static int
 csky_fr0_fr15_reg_check (const struct csky_supported_tdesc_register *reg) {
   int i = 0;
   for (i = 0; i < 16; i++)
-    {
-      if ((strcmp (reg->name, csky_supported_fpu_regs[i].name) == 0)
-	  && (csky_supported_fpu_regs[i].num == reg->num))
-	return (1 << i);
-    }
+    if (streq (reg->name, csky_supported_fpu_regs[i].name)
+	&& csky_supported_fpu_regs[i].num == reg->num)
+      return 1 << i;
 
   return 0;
 };
@@ -2489,11 +2484,9 @@ static int
 csky_fr16_fr31_reg_check (const struct csky_supported_tdesc_register *reg) {
   int i = 0;
   for (i = 0; i < 16; i++)
-    {
-      if ((strcmp (reg->name, csky_supported_fpu_regs[i + 16].name) == 0)
-	  && (csky_supported_fpu_regs[i + 16].num == reg->num))
-	return (1 << i);
-    }
+    if (streq (reg->name, csky_supported_fpu_regs[i + 16].name)
+	&& csky_supported_fpu_regs[i + 16].num == reg->num)
+      return (1 << i);
 
   return 0;
 };
@@ -2504,11 +2497,9 @@ static int
 csky_vr0_vr15_reg_check (const struct csky_supported_tdesc_register *reg) {
   int i = 0;
   for (i = 0; i < 16; i++)
-    {
-      if ((strcmp (reg->name, csky_supported_fpu_regs[i + 32].name) == 0)
-	  && (csky_supported_fpu_regs[i + 32].num == reg->num))
-	return (1 << i);
-    }
+    if (streq (reg->name, csky_supported_fpu_regs[i + 32].name)
+	&& csky_supported_fpu_regs[i + 32].num == reg->num)
+      return (1 << i);
 
   return 0;
 };
diff --git a/gdb/ctfread.c b/gdb/ctfread.c
index 3de7e8d54efa..b95cdbed33c9 100644
--- a/gdb/ctfread.c
+++ b/gdb/ctfread.c
@@ -543,7 +543,7 @@ read_base_type (struct ctf_context *ccp, ctf_id_t tid)
       type = alloc.new_type (TYPE_CODE_ERROR, cet.cte_bits, name);
     }
 
-  if (name != nullptr && strcmp (name, "char") == 0)
+  if (name != nullptr && streq (name, "char"))
     type->set_has_no_signedness (true);
 
   return set_tid_type (ccp, tid, type);
@@ -1139,7 +1139,7 @@ ctf_add_var_cb (const char *name, ctf_id_t id, void *arg)
   if (kind == CTF_K_FUNCTION)
     {
       sym->set_domain (FUNCTION_DOMAIN);
-      if (name != nullptr && strcmp (name, "main") == 0)
+      if (name != nullptr && streq (name, "main"))
 	set_objfile_main_name (objfile, name, language_c);
     }
   else
@@ -1233,12 +1233,12 @@ build_ctf_archive_member (ctf_dict_t *dict, const char *name, void *arg)
   auto *iter_data = static_cast<ctf_archive_iter_data *> (arg);
   ctf_per_objfile &per_objfile = iter_data->per_objfile;
 
-  if (strcmp (name, ".ctf") != 0)
+  if (!streq (name, ".ctf"))
     ctf_import (dict, per_objfile.parent_dict.get ());
 
   objfile *objfile = per_objfile.objfile;
 
-  if (strcmp (name, ".ctf") == 0)
+  if (streq (name, ".ctf"))
     {
       name = bfd_get_filename (objfile->obfd.get ());
       ctf_debug_printf ("is parent, using name='%s'", name);
diff --git a/gdb/d-namespace.c b/gdb/d-namespace.c
index 575db0c08b70..34b90c0ed938 100644
--- a/gdb/d-namespace.c
+++ b/gdb/d-namespace.c
@@ -378,7 +378,7 @@ d_lookup_symbol_imports (const char *scope, const char *name,
       const char **excludep;
 
       /* If the import destination is the current scope then search it.  */
-      if (!current->searched && strcmp (scope, current->import_dest) == 0)
+      if (!current->searched && streq (scope, current->import_dest))
 	{
 	  /* Mark this import as searched so that the recursive call
 	     does not search it again.  */
@@ -390,9 +390,10 @@ d_lookup_symbol_imports (const char *scope, const char *name,
 	     with the sought out name.  If there is a match pass
 	     current->import_src as MODULE to direct the search towards
 	     the imported module.  */
-	  if (current->declaration
-	      && strcmp (name, current->alias
-			 ? current->alias : current->declaration) == 0)
+	  if (current->declaration != nullptr
+	      && streq (name, (current->alias != nullptr
+			       ? current->alias
+			       : current->declaration)))
 	    sym = d_lookup_symbol_in_module (current->import_src,
 					     current->declaration,
 					     block, domain, 1);
@@ -409,7 +410,7 @@ d_lookup_symbol_imports (const char *scope, const char *name,
 
 	  /* Do not follow CURRENT if NAME matches its EXCLUDES.  */
 	  for (excludep = current->excludes; *excludep; excludep++)
-	    if (strcmp (name, *excludep) == 0)
+	    if (streq (name, *excludep))
 	      break;
 	  if (*excludep)
 	    continue;
@@ -417,7 +418,7 @@ d_lookup_symbol_imports (const char *scope, const char *name,
 	  /* If the import statement is creating an alias.  */
 	  if (current->alias != NULL)
 	    {
-	      if (strcmp (name, current->alias) == 0)
+	      if (streq (name, current->alias))
 		{
 		  /* If the alias matches the sought name.  Pass
 		     current->import_src as the NAME to direct the
diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
index a3dd80a10ec0..6e5757192da7 100644
--- a/gdb/d-valprint.c
+++ b/gdb/d-valprint.c
@@ -35,8 +35,8 @@ dynamic_array_type (struct type *type,
 {
   if (type->num_fields () == 2
       && type->field (0).type ()->code () == TYPE_CODE_INT
-      && strcmp (type->field (0).name (), "length") == 0
-      && strcmp (type->field (1).name (), "ptr") == 0
+      && streq (type->field (0).name (), "length")
+      && streq (type->field (1).name (), "ptr")
       && !val->bits_any_optimized_out (TARGET_CHAR_BIT * embedded_offset,
 				       TARGET_CHAR_BIT * type->length ()))
     {
diff --git a/gdb/darwin-nat-info.c b/gdb/darwin-nat-info.c
index d274c4a4fcc4..d1befa7d8c36 100644
--- a/gdb/darwin-nat-info.c
+++ b/gdb/darwin-nat-info.c
@@ -123,7 +123,7 @@ get_task_from_args (const char *args)
 
       return priv->task;
     }
-  if (strcmp (args, "gdb") == 0)
+  if (streq (args, "gdb"))
     return mach_task_self ();
   task = strtoul (args, &eptr, 0);
   if (*eptr)
@@ -799,7 +799,7 @@ info_mach_exceptions_command (const char *args, int from_tty)
 
   if (args != NULL)
     {
-      if (strcmp (args, "saved") == 0)
+      if (streq (args, "saved"))
 	{
 	  if (inferior_ptid == null_ptid)
 	    gdb_printf (_("No inferior running\n"));
@@ -809,7 +809,7 @@ info_mach_exceptions_command (const char *args, int from_tty)
 	  disp_exception (&priv->exception_info);
 	  return;
 	}
-      else if (strcmp (args, "host") == 0)
+      else if (streq (args, "host"))
 	{
 	  /* FIXME: This needs a privileged host port!  */
 	  kret = host_get_exception_ports
diff --git a/gdb/dicos-tdep.c b/gdb/dicos-tdep.c
index f6a071184d66..805889174d13 100644
--- a/gdb/dicos-tdep.c
+++ b/gdb/dicos-tdep.c
@@ -80,7 +80,7 @@ dicos_load_module_p (bfd *abfd, int header_size)
     {
       if (sym->name != NULL
 	  && symname[0] == sym->name[0]
-	  && strcmp (symname + 1, sym->name + 1) == 0)
+	  && streq (symname + 1, sym->name + 1))
 	{
 	  ret = 1;
 	  break;
diff --git a/gdb/dictionary.c b/gdb/dictionary.c
index e3ff053504ee..4c3d87823680 100644
--- a/gdb/dictionary.c
+++ b/gdb/dictionary.c
@@ -791,7 +791,7 @@ language_defn::search_name_hash (const char *string0) const
 	     ignore the "TKB" suffix because searches for this task body
 	     subprogram are going to be performed using `pck__t' (the encoded
 	     version of the natural name `pck.t').  */
-	  if (strcmp (string, "TKB") == 0)
+	  if (streq (string, "TKB"))
 	    return hash;
 	  break;
 	}
diff --git a/gdb/disasm.c b/gdb/disasm.c
index 17f281138b2c..81c466c188af 100644
--- a/gdb/disasm.c
+++ b/gdb/disasm.c
@@ -1311,7 +1311,7 @@ set_disassembler_options (const char *prospective_options)
 	    if (valid_options->arg[i]->values == NULL)
 	      break;
 	    for (j = 0; valid_options->arg[i]->values[j] != NULL; j++)
-	      if (strcmp (arg, valid_options->arg[i]->values[j]) == 0)
+	      if (streq (arg, valid_options->arg[i]->values[j]))
 		{
 		  found = true;
 		  break;
@@ -1319,7 +1319,7 @@ set_disassembler_options (const char *prospective_options)
 	    if (found)
 	      break;
 	  }
-	else if (strcmp (opt, valid_options->name[i]) == 0)
+	else if (streq (opt, valid_options->name[i]))
 	  break;
       if (valid_options->name[i] == NULL)
 	{
diff --git a/gdb/dtrace-probe.c b/gdb/dtrace-probe.c
index b42afea5a173..e69e6f754b4b 100644
--- a/gdb/dtrace-probe.c
+++ b/gdb/dtrace-probe.c
@@ -846,7 +846,7 @@ dtrace_static_probe_ops::get_probes
 	 that sh_type == SHT_SUNW_dof.  Therefore, in addition to the sh_type
 	 check, we need to check for sections named .sframe.  */
       if (elf_section_data (sect)->this_hdr.sh_type == SHT_SUNW_dof
-	  && strcmp (bfd_section_name (sect), ".sframe") != 0)
+	  && !streq (bfd_section_name (sect), ".sframe"))
 	{
 	  bfd_byte *dof;
 
diff --git a/gdb/dwarf2/cooked-index-shard.c b/gdb/dwarf2/cooked-index-shard.c
index 938ee8f29694..91dc9ab89455 100644
--- a/gdb/dwarf2/cooked-index-shard.c
+++ b/gdb/dwarf2/cooked-index-shard.c
@@ -104,7 +104,7 @@ cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag,
 	   && parent_entry.resolved == nullptr
 	   && m_main == nullptr
 	   && language_may_use_plain_main (lang)
-	   && strcmp (name, "main") == 0)
+	   && streq (name, "main"))
     m_main = result;
 
   return result;
diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c
index 9e84e5e65faf..167e39ffc89a 100644
--- a/gdb/dwarf2/cooked-index.c
+++ b/gdb/dwarf2/cooked-index.c
@@ -197,7 +197,7 @@ cooked_index::get_main () const
 		 exception.  */
 	      if ((entry->lang != language_ada
 		   && entry->lang != language_cplus)
-		  || strcmp (entry->name, "main") == 0)
+		  || streq (entry->name, "main"))
 		{
 		  /* There won't be one better than this.  */
 		  return entry;
diff --git a/gdb/dwarf2/cooked-indexer.c b/gdb/dwarf2/cooked-indexer.c
index 1848b92e2cab..302b4a6d6a0b 100644
--- a/gdb/dwarf2/cooked-indexer.c
+++ b/gdb/dwarf2/cooked-indexer.c
@@ -554,7 +554,7 @@ cooked_indexer::index_dies (cutu_reader *reader,
 
       if (abbrev->tag == DW_TAG_namespace
 	  && m_language == language_cplus
-	  && strcmp (name, "::") == 0)
+	  && streq (name, "::"))
 	{
 	  /* GCC 4.0 and 4.1 had a bug (PR c++/28460) where they
 	     generated bogus DW_TAG_namespace DIEs with a name of "::"
diff --git a/gdb/dwarf2/cu.c b/gdb/dwarf2/cu.c
index 7dca05b3a810..c3bfd15f14a1 100644
--- a/gdb/dwarf2/cu.c
+++ b/gdb/dwarf2/cu.c
@@ -178,7 +178,7 @@ dwarf2_cu::get_builder ()
 void
 dwarf2_cu::set_producer (const char *producer)
 {
-  gdb_assert (m_producer == nullptr || strcmp (producer, m_producer) == 0);
+  gdb_assert (m_producer == nullptr || streq (producer, m_producer));
   m_producer = producer;
 
   int major, minor;
diff --git a/gdb/dwarf2/index-write.c b/gdb/dwarf2/index-write.c
index c4e75898f4c0..f40e9636a0b2 100644
--- a/gdb/dwarf2/index-write.c
+++ b/gdb/dwarf2/index-write.c
@@ -284,8 +284,7 @@ mapped_symtab::find_slot (const char *name)
 
   for (;;)
     {
-      if (m_data[index].name == NULL
-	  || strcmp (name, m_data[index].name) == 0)
+      if (m_data[index].name == nullptr || streq (name, m_data[index].name))
 	return m_data[index];
       index = (index + step) & (m_data.size () - 1);
     }
@@ -443,7 +442,7 @@ class c_str_view
 
   bool operator== (const c_str_view &other) const
   {
-    return strcmp (m_cstr, other.m_cstr) == 0;
+    return streq (m_cstr, other.m_cstr);
   }
 
   bool operator< (const c_str_view &other) const
diff --git a/gdb/dwarf2/read-gdb-index.c b/gdb/dwarf2/read-gdb-index.c
index ddbac684675f..48d1200270be 100644
--- a/gdb/dwarf2/read-gdb-index.c
+++ b/gdb/dwarf2/read-gdb-index.c
@@ -315,7 +315,7 @@ mapped_gdb_index::build_name_components (dwarf2_per_objfile *per_objfile)
 	    flags |= IS_STATIC;
 	  if (main_name != nullptr
 	      && tag == DW_TAG_subprogram
-	      && strcmp (name, main_name) == 0)
+	      && streq (name, main_name))
 	    {
 	      flags |= IS_MAIN;
 	      this_lang = main_lang;
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index e41f06890d74..29c601ef2c32 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -433,7 +433,7 @@ dwo_file_eq::operator() (const dwo_file_search &search,
   if (search.comp_dir == nullptr || dwo_file->comp_dir == nullptr)
     return search.comp_dir == dwo_file->comp_dir;
 
-  return std::strcmp (search.comp_dir, dwo_file->comp_dir) == 0;
+  return streq (search.comp_dir, dwo_file->comp_dir);
 }
 
 /* See dwarf2/read.h.  */
@@ -4114,7 +4114,7 @@ fixup_go_packaging (struct dwarf2_cu *cu)
 	  {
 	    objfile *objfile = cu->per_objfile->objfile;
 
-	    if (strcmp (package_name.get (), this_package_name.get ()) != 0)
+	    if (!streq (package_name.get (), this_package_name.get ()))
 	      complaint (_("Symtab %s has objects from two different Go "
 			   "packages: %s and %s"),
 			 (sym->symtab () != NULL
@@ -4361,8 +4361,7 @@ quirk_rust_enum (struct type *type, struct objfile *objfile)
 	      /* Could be data-less variant, so keep going.  */
 	      disr_type = nullptr;
 	    }
-	  else if (strcmp (disr_type->field (0).name (),
-			   "RUST$ENUM$DISR") != 0)
+	  else if (!streq (disr_type->field (0).name (), "RUST$ENUM$DISR"))
 	    {
 	      /* Not a Rust enum.  */
 	      return;
@@ -5418,7 +5417,7 @@ dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
     {
       const char *physname = dwarf2_compute_name (name, die, cu, 1);
 
-      if (canon != NULL && strcmp (physname, canon) != 0)
+      if (canon != NULL && !streq (physname, canon))
 	{
 	  /* It may not mean a bug in GDB.  The compiler could also
 	     compute DW_AT_linkage_name incorrectly.  But in such case
@@ -7219,8 +7218,8 @@ open_and_init_dwp_file (dwarf2_per_objfile *per_objfile)
   dwp_name += ".dwp";
 
   gdb_bfd_ref_ptr dbfd (open_dwp_file (per_bfd, dwp_name.c_str ()));
-  if (dbfd == NULL
-      && strcmp (objfile->original_name, objfile_name (objfile)) != 0)
+  if (dbfd == nullptr
+      && !streq (objfile->original_name, objfile_name (objfile)))
     {
       /* Try to find .dwp for the binary file after gdb_realpath resolving.  */
       dwp_name = objfile_name (objfile);
@@ -9947,7 +9946,7 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
   /* Look up member function name in fieldlist.  */
   for (i = 0; i < fip->fnfieldlists.size (); i++)
     {
-      if (strcmp (fip->fnfieldlists[i].name, fieldname) == 0)
+      if (streq (fip->fnfieldlists[i].name, fieldname))
 	{
 	  flp = &fip->fnfieldlists[i];
 	  break;
@@ -10183,9 +10182,9 @@ quirk_gcc_member_function_pointer (struct type *type, struct objfile *objfile)
 
   /* Check for __pfn and __delta members.  */
   if (type->field (0).name () == NULL
-      || strcmp (type->field (0).name (), "__pfn") != 0
+      || !streq (type->field (0).name (), "__pfn")
       || type->field (1).name () == NULL
-      || strcmp (type->field (1).name (), "__delta") != 0)
+      || !streq (type->field (1).name (), "__delta"))
     return;
 
   /* Find the type of the method.  */
@@ -10271,9 +10270,9 @@ quirk_ada_thick_pointer_struct (struct die_info *die, struct dwarf2_cu *cu,
 
   /* Check for P_ARRAY and P_BOUNDS members.  */
   if (type->field (0).name () == NULL
-      || strcmp (type->field (0).name (), "P_ARRAY") != 0
+      || !streq (type->field (0).name (), "P_ARRAY")
       || type->field (1).name () == NULL
-      || strcmp (type->field (1).name (), "P_BOUNDS") != 0)
+      || !streq (type->field (1).name (), "P_BOUNDS"))
     return;
 
   /* Make sure we're looking at a pointer to an array.  */
@@ -10843,7 +10842,7 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
 		   i >= TYPE_N_BASECLASSES (type);
 		   --i)
 		{
-		  if (strcmp (type->field (i).name (), "__vfp") == 0)
+		  if (streq (type->field (i).name (), "__vfp"))
 		    {
 		      set_type_vptr_fieldno (type, i);
 		      set_type_vptr_basetype (type, type);
@@ -12653,7 +12652,7 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
 		      if (follow_die_ref (die, attr, &arg_cu) == child_die)
 			is_this = 1;
 		    }
-		  else if (name && strcmp (name, "this") == 0)
+		  else if (name && streq (name, "this"))
 		    /* Function definitions will have the argument names.  */
 		    is_this = 1;
 		  else if (name == NULL && iparams == 0)
@@ -13038,7 +13037,7 @@ dwarf2_init_integer_type (struct dwarf2_cu *cu, int bits, int unsigned_p,
      at least versions 14, 17, and 18.  */
   type_allocator alloc (objfile, cu->lang ());
   if (bits == 0 && cu->producer_is_icc () && name != nullptr
-      && strcmp (name, "void") == 0)
+      && streq (name, "void"))
     type = alloc.copy_type (builtin_type (objfile)->builtin_void);
   else
     type = init_integer_type (alloc, bits, unsigned_p, name);
@@ -13329,7 +13328,7 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
 
   if (type->code () == TYPE_CODE_INT
       && name != nullptr
-      && strcmp (name, "char") == 0)
+      && streq (name, "char"))
     type->set_has_no_signedness (true);
 
   maybe_set_alignment (cu, die, type);
@@ -16375,7 +16374,7 @@ guess_full_die_structure_name (struct die_info *die, struct dwarf2_cu *cu)
 		  const char *die_name = dwarf2_name (die, cu);
 
 		  if (die_name != NULL
-		      && strcmp (die_name, actual_name.get ()) != 0)
+		      && !streq (die_name, actual_name.get ()))
 		    {
 		      /* Strip off the class name from the full name.
 			 We want the prefix.  */
@@ -16554,7 +16553,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
 	   DW_TAG_namespace DIEs with a name of "::" for the global namespace.
 	   Work around this problem here.  */
 	if (cu->lang () == language_cplus
-	    && strcmp (parent_type->name (), "::") == 0)
+	    && streq (parent_type->name (), "::"))
 	  return "";
 	/* We give a name to even anonymous namespaces.  */
 	return parent_type->name ();
@@ -16638,7 +16637,7 @@ typename_concat (const char *prefix, const char *suffix, int physname,
     {
       /* For D, the 'main' function could be defined in any module, but it
 	 should never be prefixed.  */
-      if (strcmp (suffix, "D main") == 0)
+      if (streq (suffix, "D main"))
 	{
 	  prefix = "";
 	  sep = "";
@@ -18179,7 +18178,7 @@ cutu_reader::prepare_one_comp_unit (struct dwarf2_cu *cu,
   if (attr != nullptr
       && cu->producer_is_gcc ()
       && attr->as_string () != nullptr
-      && strcmp (attr->as_string (), "<artificial>") == 0)
+      && streq (attr->as_string (), "<artificial>"))
     cu->per_cu->lto_artificial = true;
 
   switch (m_top_level_die->tag)
diff --git a/gdb/dwarf2/sect-names.h b/gdb/dwarf2/sect-names.h
index 54e29c2a106a..a2c007f7e690 100644
--- a/gdb/dwarf2/sect-names.h
+++ b/gdb/dwarf2/sect-names.h
@@ -35,8 +35,8 @@ struct dwarf2_section_names {
   /* Return true if NAME matches either of this section's names.  */
   bool matches (const char *name) const
   {
-    return ((normal != nullptr && strcmp (name, normal) == 0)
-	    || (compressed != nullptr && strcmp (name, compressed) == 0));
+    return ((normal != nullptr && streq (name, normal))
+	    || (compressed != nullptr && streq (name, compressed)));
   }
 };
 
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 8924bb6ba245..7e2f4fe8f3f6 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -191,15 +191,15 @@ elf_symfile_segments (bfd *abfd)
 static void
 elf_locate_sections (asection *sectp, struct elfinfo *ei)
 {
-  if (strcmp (sectp->name, ".stab") == 0)
+  if (streq (sectp->name, ".stab"))
     {
       ei->stabsect = sectp;
     }
-  else if (strcmp (sectp->name, ".mdebug") == 0)
+  else if (streq (sectp->name, ".mdebug"))
     {
       ei->mdebugsect = sectp;
     }
-  else if (strcmp (sectp->name, ".ctf") == 0)
+  else if (streq (sectp->name, ".ctf"))
     {
       ei->ctfsect = sectp;
     }
@@ -508,7 +508,7 @@ elf_symtab_read (minimal_symbol_reader &reader,
 	    {
 	      const char *atsign = strchr (sym->name, '@');
 	      bool is_at_symbol = atsign != nullptr && atsign > sym->name;
-	      bool is_plt = is_at_symbol && strcmp (atsign, "@plt") == 0;
+	      bool is_plt = is_at_symbol && streq (atsign, "@plt");
 	      int len = is_at_symbol ? atsign - sym->name : 0;
 
 	      if (is_at_symbol
@@ -708,14 +708,14 @@ elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
   /* Note we check the symbol's name instead of checking whether the
      symbol is in the .plt section because some systems have @plt
      symbols in the .text section.  */
-  if (len > 4 && strcmp (target_name + len - 4, "@plt") == 0)
+  if (len > 4 && streq (target_name + len - 4, "@plt"))
     {
       gnu_ifunc_debug_printf ("target \"%s\" is a PLT stub, not caching",
 			      target_name);
       return 0;
     }
 
-  if (strcmp (target_name, "_PROCEDURE_LINKAGE_TABLE_") == 0)
+  if (streq (target_name, "_PROCEDURE_LINKAGE_TABLE_"))
     {
       gnu_ifunc_debug_printf ("target is _PROCEDURE_LINKAGE_TABLE_, "
 			      "not caching");
diff --git a/gdb/eval.c b/gdb/eval.c
index c13f3cb170d3..c47ac2614c5e 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -1015,7 +1015,7 @@ add_struct_fields (struct type *type, completion_list &output,
 	      computed_type_name = 1;
 	    }
 	  /* Omit constructors from the completion list.  */
-	  if (!type_name || strcmp (type_name, name))
+	  if (!type_name || !streq (type_name, name))
 	    output.emplace_back (concat (prefix, name, nullptr));
 	}
     }
diff --git a/gdb/event-top.c b/gdb/event-top.c
index d27ce02e61cb..48dfb34c47fe 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -821,7 +821,7 @@ command_line_handler (gdb::unique_xmalloc_ptr<char> &&rl)
 	 Which we will get with a newer readline, but this really is the
 	 best we can do with older versions of readline.  */
       const char *value = rl_variable_value ("enable-bracketed-paste");
-      if (value != nullptr && strcmp (value, "on") == 0
+      if (value != nullptr && streq (value, "on")
 	  && ((rl_readline_version >> 8) & 0xff) > 0x07)
 	printf_unfiltered ("\n");
       printf_unfiltered ("quit\n");
diff --git a/gdb/exec.c b/gdb/exec.c
index 94051ddab232..5d297bfee563 100644
--- a/gdb/exec.c
+++ b/gdb/exec.c
@@ -114,7 +114,7 @@ set_exec_file_mismatch_command (const char *ignore,
        ;
        mode = static_cast<enum exec_file_mismatch_mode>(1 + (int) mode))
     {
-      if (strcmp (exec_file_mismatch, exec_file_mismatch_names[mode]) == 0)
+      if (streq (exec_file_mismatch, exec_file_mismatch_names[mode]))
 	{
 	  exec_file_mismatch_mode = mode;
 	  return;
@@ -512,8 +512,8 @@ exec_file_attach (const char *filename, int from_tty)
   bfd *curr_bfd = current_program_space->exec_bfd ();
   bool reload_p = (((prev_bfd != nullptr) == (curr_bfd != nullptr))
 		   && (prev_bfd == nullptr
-		       || (strcmp (bfd_get_filename (prev_bfd),
-				   bfd_get_filename (curr_bfd)) == 0)));
+		       || (streq (bfd_get_filename (prev_bfd),
+				  bfd_get_filename (curr_bfd)))));
 
   gdb::observers::executable_changed.notify (current_program_space, reload_p);
 }
diff --git a/gdb/extension.c b/gdb/extension.c
index 2560ff91e893..d8ef8123ab59 100644
--- a/gdb/extension.c
+++ b/gdb/extension.c
@@ -123,7 +123,7 @@ has_extension (const char *file, const char *extension)
   int extension_len = strlen (extension);
 
   return (file_len > extension_len
-	  && strcmp (&file[file_len - extension_len], extension) == 0);
+	  && streq (&file[file_len - extension_len], extension));
 }
 
 /* Return the extension language of FILE, or NULL if
diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
index f93090669361..123d9995c39c 100644
--- a/gdb/f-typeprint.c
+++ b/gdb/f-typeprint.c
@@ -378,7 +378,7 @@ f_language::f_type_print_base (struct type *type, struct ui_file *stream,
 	 through as TYPE_CODE_INT since dbxstclass.h is so
 	 C-oriented, we must change these to "character" from "char".  */
 
-      if (strcmp (type->name (), "char") == 0)
+      if (streq (type->name (), "char"))
 	gdb_printf (stream, "%*scharacter", level, "");
       else
 	goto default_case;
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
index c66e90c04029..13921c03a48d 100644
--- a/gdb/f-valprint.c
+++ b/gdb/f-valprint.c
@@ -634,8 +634,9 @@ info_common_command_for_block (const struct block *block, const char *comname,
 
 	gdb_assert (sym->loc_class () == LOC_COMMON_BLOCK);
 
-	if (comname && (!sym->linkage_name ()
-			|| strcmp (comname, sym->linkage_name ()) != 0))
+	if (comname != nullptr
+	    && (sym->linkage_name () == nullptr
+		|| !streq (comname, sym->linkage_name ())))
 	  continue;
 
 	if (*any_printed)
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index 80116553d9be..dc486139861a 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -897,7 +897,7 @@ fbsd_nat_target::thread_name (struct thread_info *thr)
     return nullptr;
   if (ptrace (PT_LWPINFO, lwp, (caddr_t) &pl, sizeof pl) == -1)
     return nullptr;
-  if (strcmp (kp.ki_comm, pl.pl_tdname) == 0)
+  if (streq (kp.ki_comm, pl.pl_tdname))
     return NULL;
   xsnprintf (buf, sizeof buf, "%s", pl.pl_tdname);
   return buf;
diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c
index e3c78aaff5dd..4bbe0c120e6a 100644
--- a/gdb/fbsd-tdep.c
+++ b/gdb/fbsd-tdep.c
@@ -573,7 +573,7 @@ fbsd_core_thread_name (struct gdbarch *gdbarch, bfd &cbfd,
 		 as its thread name instead of an empty name if a name
 		 has not been set explicitly.  Return a NULL name in
 		 that case.  */
-	      if (strcmp (buf, elf_tdata (&cbfd)->core->program) != 0)
+	      if (!streq (buf, elf_tdata (&cbfd)->core->program))
 		return buf;
 	    }
 	}
diff --git a/gdb/frame.c b/gdb/frame.c
index 746d7d06ec1f..70621cf6e206 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -2439,7 +2439,7 @@ get_prev_frame_always_1 (const frame_info_ptr &this_frame)
       morestack_msym = lookup_minimal_symbol_by_pc (this_pc_in_block).minsym;
       if (morestack_msym)
 	morestack_name = morestack_msym->linkage_name ();
-      if (!morestack_name || strcmp (morestack_name, "__morestack") != 0)
+      if (!morestack_name || !streq (morestack_name, "__morestack"))
 	{
 	  frame_debug_printf ("  -> nullptr // this frame ID is inner");
 	  this_frame->stop_reason = UNWIND_INNER_ID;
diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
index 94d3db68ae9c..33a270497f3c 100644
--- a/gdb/frv-tdep.c
+++ b/gdb/frv-tdep.c
@@ -1071,9 +1071,9 @@ frv_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
       call_dest = pc + 4 * displ;
       bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
 
-      if (s.minsym != NULL
-	  && s.minsym->linkage_name () != NULL
-	  && strcmp (s.minsym->linkage_name (), "__main") == 0)
+      if (s.minsym != nullptr
+	  && s.minsym->linkage_name () != nullptr
+	  && streq (s.minsym->linkage_name (), "__main"))
 	{
 	  pc += 4;
 	  return pc;
diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
index 5a1f3315c7f2..ba0a0882a0ad 100644
--- a/gdb/ft32-tdep.c
+++ b/gdb/ft32-tdep.c
@@ -377,7 +377,7 @@ ft32_address_class_name_to_type_flags (struct gdbarch *gdbarch,
 				       const char* name,
 				       type_instance_flags *type_flags_ptr)
 {
-  if (strcmp (name, "flash") == 0)
+  if (streq (name, "flash"))
     {
       *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
       return true;
diff --git a/gdb/gcore-elf.c b/gdb/gcore-elf.c
index 2157fea18dc3..f7c9003a0df8 100644
--- a/gdb/gcore-elf.c
+++ b/gdb/gcore-elf.c
@@ -85,7 +85,7 @@ gcore_elf_collect_regset_section_cb (const char *sect_name,
 			  collect_size);
 
   /* PRSTATUS still needs to be treated specially.  */
-  if (strcmp (sect_name, ".reg") == 0)
+  if (streq (sect_name, ".reg"))
     data->note_data->reset (elfcore_write_prstatus
 			    (data->obfd, data->note_data->release (),
 			     data->note_size, data->lwp,
diff --git a/gdb/gcore.c b/gdb/gcore.c
index 2bf300c0d29f..98883a0fd4c1 100644
--- a/gdb/gcore.c
+++ b/gdb/gcore.c
@@ -336,7 +336,7 @@ derive_heap_segment (bfd *abfd, bfd_vma *bottom, bfd_vma *top)
   for (sec = abfd->sections; sec; sec = sec->next)
     {
       if (bfd_section_flags (sec) & SEC_DATA
-	  || strcmp (".bss", bfd_section_name (sec)) == 0)
+	  || streq (".bss", bfd_section_name (sec)))
 	{
 	  sec_vaddr = bfd_section_vma (sec);
 	  sec_size = bfd_section_size (sec);
diff --git a/gdb/gdb-demangle.c b/gdb/gdb-demangle.c
index 1f1d672a8379..d02b80ab621d 100644
--- a/gdb/gdb-demangle.c
+++ b/gdb/gdb-demangle.c
@@ -118,8 +118,7 @@ set_demangling_command (const char *ignore,
        dem->demangling_style != unknown_demangling;
        dem++)
     {
-      if (strcmp (current_demangling_style_string,
-		  dem->demangling_style_name) == 0)
+      if (streq (current_demangling_style_string, dem->demangling_style_name))
 	{
 	  current_demangling_style = dem->demangling_style;
 	  current_demangling_style_string = demangling_style_names[i];
@@ -227,7 +226,7 @@ INIT_GDB_FILE (gdb_demangle)
 	= xstrdup (libiberty_demanglers[i].demangling_style_name);
 
       if (current_demangling_style_string == NULL
-	  && strcmp (DEFAULT_DEMANGLING_STYLE, demangling_style_names[i]) == 0)
+	  && streq (DEFAULT_DEMANGLING_STYLE, demangling_style_names[i]))
 	current_demangling_style_string = demangling_style_names[i];
     }
 
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index bada133da801..342957273cd7 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -230,7 +230,7 @@ struct bfd_cache_eq
 	    && gdata->size == s.size
 	    && gdata->inode == s.inode
 	    && gdata->device_id == s.device_id
-	    && strcmp (bfd_get_filename (abfd), s.filename) == 0);
+	    && streq (bfd_get_filename (abfd), s.filename));
   }
 };
 
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 5e07e290f67e..0ad06f56c30d 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -545,9 +545,9 @@ address_space_name_to_type_instance_flags (struct gdbarch *gdbarch,
   type_instance_flags type_flags;
 
   /* Check for known address space delimiters.  */
-  if (!strcmp (space_identifier, "code"))
+  if (streq (space_identifier, "code"))
     return TYPE_INSTANCE_FLAG_CODE_SPACE;
-  else if (!strcmp (space_identifier, "data"))
+  else if (streq (space_identifier, "data"))
     return TYPE_INSTANCE_FLAG_DATA_SPACE;
   else if (gdbarch_address_class_name_to_type_flags_p (gdbarch)
 	   && gdbarch_address_class_name_to_type_flags (gdbarch,
@@ -3616,8 +3616,9 @@ int
 class_types_same_p (const struct type *a, const struct type *b)
 {
   return (TYPE_MAIN_TYPE (a) == TYPE_MAIN_TYPE (b)
-	  || (a->name () && b->name ()
-	      && !strcmp (a->name (), b->name ())));
+	  || (a->name () != nullptr
+	      && b->name () != nullptr
+	      && streq (a->name (), b->name ())));
 }
 
 /* If BASE is an ancestor of DCLASS return the distance between them.
@@ -4008,8 +4009,9 @@ types_equal (struct type *a, struct type *b)
      stubs.  The types won't point to the same address, but they
      really are the same.  */
 
-  if (a->name () && b->name ()
-      && strcmp (a->name (), b->name ()) == 0)
+  if (a->name () != nullptr
+      && b->name () != nullptr
+      && streq (a->name (), b->name ()))
     return true;
 
   /* Two function types are equal if their argument and return types
@@ -4070,7 +4072,7 @@ compare_maybe_null_strings (const char *s, const char *t)
 {
   if (s == NULL || t == NULL)
     return s == t;
-  return strcmp (s, t) == 0;
+  return streq (s, t);
 }
 
 /* A helper function for check_types_worklist that checks two types for
diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
index e5706b75b1cd..123f237b7217 100644
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -2708,9 +2708,9 @@ static int
 _parse_bool_arg (const char *args, const char *t_val, const char *f_val,
 		 const char *cmd_prefix)
 {
-  if (!args || strcmp (args, t_val) == 0)
+  if (!args || streq (args, t_val))
     return 1;
-  else if (strcmp (args, f_val) == 0)
+  else if (streq (args, f_val))
     return 0;
   else
     error (_("Illegal argument for \"%s\" command, "
@@ -2925,11 +2925,11 @@ set_sig_thread_cmd (const char *args, int from_tty)
 {
   struct inf *inf = cur_inf ();
 
-  if (!args || (!c_isdigit (*args) && strcmp (args, "none") != 0))
+  if (!args || (!c_isdigit (*args) && !streq (args, "none")))
     error (_("Illegal argument to \"set signal-thread\" command.\n"
 	     "Should be a thread ID, or \"none\"."));
 
-  if (strcmp (args, "none") == 0)
+  if (streq (args, "none"))
     inf->signal_thread = 0;
   else
     {
diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c
index e5dcbd69c0bf..4e98f7d06fff 100644
--- a/gdb/gnu-v2-abi.c
+++ b/gdb/gnu-v2-abi.c
@@ -316,12 +316,9 @@ vb_match (struct type *type, int index, struct type *basetype)
   if (fieldtype->target_type () == basetype)
     return 1;
 
-  if (basetype->name () != NULL
-      && fieldtype->target_type ()->name () != NULL
-      && strcmp (basetype->name (),
-		 fieldtype->target_type ()->name ()) == 0)
-    return 1;
-  return 0;
+  return (basetype->name () != nullptr
+	  && fieldtype->target_type ()->name () != nullptr
+	  && streq (basetype->name (), fieldtype->target_type ()->name ()));
 }
 
 /* Compute the offset of the baseclass which is the INDEXth baseclass
diff --git a/gdb/go-lang.c b/gdb/go-lang.c
index 60033c8eca7d..3b388c961fab 100644
--- a/gdb/go-lang.c
+++ b/gdb/go-lang.c
@@ -79,9 +79,9 @@ gccgo_string_p (struct type *type)
       type1 = check_typedef (type1);
 
       if (type0->code () == TYPE_CODE_PTR
-	  && strcmp (type->field (0).name (), "__data") == 0
+	  && streq (type->field (0).name (), "__data")
 	  && type1->code () == TYPE_CODE_INT
-	  && strcmp (type->field (1).name (), "__length") == 0)
+	  && streq (type->field (1).name (), "__length"))
 	{
 	  struct type *target_type = type0->target_type ();
 
@@ -89,7 +89,7 @@ gccgo_string_p (struct type *type)
 
 	  if (target_type->code () == TYPE_CODE_INT
 	      && target_type->length () == 1
-	      && strcmp (target_type->name (), "uint8") == 0)
+	      && streq (target_type->name (), "uint8"))
 	    return 1;
 	}
     }
@@ -103,12 +103,9 @@ gccgo_string_p (struct type *type)
 static int
 sixg_string_p (struct type *type)
 {
-  if (type->num_fields () == 2
-      && type->name () != NULL
-      && strcmp (type->name (), "string") == 0)
-    return 1;
-
-  return 0;
+  return (type->num_fields () == 2
+	  && type->name () != nullptr
+	  && streq (type->name (), "string"));
 }
 
 /* Classify the kind of Go object that TYPE is.
@@ -201,7 +198,7 @@ unpack_mangled_go_symbol (const char *mangled_name,
   *method_type_is_pointerp = 0;
 
   /* main.init is mangled specially.  */
-  if (strcmp (mangled_name, "__go_init_main") == 0)
+  if (streq (mangled_name, "__go_init_main"))
     {
       gdb::unique_xmalloc_ptr<char> package
 	= make_unique_xstrdup ("main");
@@ -212,7 +209,7 @@ unpack_mangled_go_symbol (const char *mangled_name,
     }
 
   /* main.main is mangled specially (missing prefix).  */
-  if (strcmp (mangled_name, "main.main") == 0)
+  if (streq (mangled_name, "main.main"))
     {
       gdb::unique_xmalloc_ptr<char> package
 	= make_unique_xstrdup ("main");
diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
index d0d0c6f2a74b..b3ea5c1fd5ce 100644
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -1141,9 +1141,9 @@ go32_sysinfo (const char *arg, int from_tty)
       char cpu_string[80];
       char cpu_brand[20];
       unsigned brand_idx;
-      int intel_p = strcmp (cpuid_vendor, "GenuineIntel") == 0;
-      int amd_p = strcmp (cpuid_vendor, "AuthenticAMD") == 0;
-      int hygon_p = strcmp (cpuid_vendor, "HygonGenuine") == 0;
+      int intel_p = streq (cpuid_vendor, "GenuineIntel");
+      int amd_p = streq (cpuid_vendor, "AuthenticAMD");
+      int hygon_p = streq (cpuid_vendor, "HygonGenuine");
       unsigned cpu_family, cpu_model;
 
 #if 0
diff --git a/gdb/guile/scm-lazy-string.c b/gdb/guile/scm-lazy-string.c
index 0c9dd7c967e9..a13567eaa32b 100644
--- a/gdb/guile/scm-lazy-string.c
+++ b/gdb/guile/scm-lazy-string.c
@@ -119,7 +119,7 @@ lsscm_make_lazy_string_smob (CORE_ADDR address, int length,
 
   ls_smob->address = address;
   ls_smob->length = length;
-  if (encoding == NULL || strcmp (encoding, "") == 0)
+  if (encoding == NULL || streq (encoding, ""))
     ls_smob->encoding = NULL;
   else
     ls_smob->encoding = xstrdup (encoding);
diff --git a/gdb/guile/scm-param.c b/gdb/guile/scm-param.c
index b31efbf529f2..ee7432178282 100644
--- a/gdb/guile/scm-param.c
+++ b/gdb/guile/scm-param.c
@@ -795,7 +795,7 @@ pascm_set_param_value_x (param_smob *p_smob,
 	  gdbscm_throw (exception);
 	for (i = 0; enumeration[i]; ++i)
 	  {
-	    if (strcmp (enumeration[i], str.get ()) == 0)
+	    if (streq (enumeration[i], str.get ()))
 	      break;
 	  }
 	if (enumeration[i] == nullptr)
diff --git a/gdb/hppa-bsd-tdep.c b/gdb/hppa-bsd-tdep.c
index c0e984ab0349..c24e246cecc7 100644
--- a/gdb/hppa-bsd-tdep.c
+++ b/gdb/hppa-bsd-tdep.c
@@ -56,7 +56,7 @@ hppabsd_find_global_pointer (struct gdbarch *gdbarch, struct value *function)
     {
       for (struct obj_section &sec : faddr_sec->objfile->sections ())
 	{
-	  if (strcmp (sec.the_bfd_section->name, ".dynamic") == 0)
+	  if (streq (sec.the_bfd_section->name, ".dynamic"))
 	    {
 	      CORE_ADDR addr = sec.addr ();
 	      CORE_ADDR endaddr = sec.endaddr ();
diff --git a/gdb/hppa-linux-tdep.c b/gdb/hppa-linux-tdep.c
index e99e39578759..2141841d1c80 100644
--- a/gdb/hppa-linux-tdep.c
+++ b/gdb/hppa-linux-tdep.c
@@ -363,7 +363,7 @@ hppa_linux_find_global_pointer (struct gdbarch *gdbarch,
     {
       for (obj_section &osect : faddr_sect->objfile->sections ())
 	{
-	  if (strcmp (osect.the_bfd_section->name, ".dynamic") == 0)
+	  if (streq (osect.the_bfd_section->name, ".dynamic"))
 	    {
 	      CORE_ADDR addr, endaddr;
 
diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
index 140e31422582..a2df05b4d293 100644
--- a/gdb/hppa-tdep.c
+++ b/gdb/hppa-tdep.c
@@ -369,8 +369,8 @@ read_unwind_info (struct objfile *objfile)
        unwind_sec;
        unwind_sec = unwind_sec->next)
     {
-      if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
-	  || strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
+      if (streq (unwind_sec->name, "$UNWIND_START$")
+	  || streq (unwind_sec->name, ".PARISC.unwind"))
 	{
 	  unwind_size = bfd_section_size (unwind_sec);
 	  unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
@@ -411,8 +411,8 @@ read_unwind_info (struct objfile *objfile)
        unwind_sec;
        unwind_sec = unwind_sec->next)
     {
-      if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0
-	  || strcmp (unwind_sec->name, ".PARISC.unwind") == 0)
+      if (streq (unwind_sec->name, "$UNWIND_START$")
+	  || streq (unwind_sec->name, ".PARISC.unwind"))
 	{
 	  unwind_size = bfd_section_size (unwind_sec);
 	  unwind_entries = unwind_size / UNWIND_ENTRY_SIZE;
@@ -925,7 +925,7 @@ hppa64_convert_code_addr_to_fptr (struct gdbarch *gdbarch, CORE_ADDR code)
 
   for (obj_section &opd : sec->objfile->sections ())
     {
-      if (strcmp (opd.the_bfd_section->name, ".opd") == 0)
+      if (streq (opd.the_bfd_section->name, ".opd"))
 	{
 	  for (CORE_ADDR addr = opd.addr ();
 	       addr < opd.endaddr ();
diff --git a/gdb/i386-dicos-tdep.c b/gdb/i386-dicos-tdep.c
index a61a376796a6..e5defef92c5b 100644
--- a/gdb/i386-dicos-tdep.c
+++ b/gdb/i386-dicos-tdep.c
@@ -33,8 +33,7 @@ i386_dicos_osabi_sniffer (bfd *abfd)
   const char *target_name = bfd_get_target (abfd);
 
   /* On x86-DICOS, the Load Module's "header" section is 36 bytes.  */
-  if (strcmp (target_name, "elf32-i386") == 0
-      && dicos_load_module_p (abfd, 36))
+  if (streq (target_name, "elf32-i386") && dicos_load_module_p (abfd, 36))
     return GDB_OSABI_DICOS;
 
   return GDB_OSABI_UNKNOWN;
diff --git a/gdb/i386-gnu-tdep.c b/gdb/i386-gnu-tdep.c
index 5774aaf8dfa2..c351debff07a 100644
--- a/gdb/i386-gnu-tdep.c
+++ b/gdb/i386-gnu-tdep.c
@@ -84,7 +84,7 @@ i386_gnu_sigtramp_p (const frame_info_ptr &this_frame)
   find_pc_partial_function (pc, &name, NULL, NULL);
 
   /* If we have a NAME, we can check for the trampoline function */
-  if (name != NULL && strcmp (name, "trampoline") == 0)
+  if (name != NULL && streq (name, "trampoline"))
     return 1;
 
   return i386_gnu_sigtramp_start (this_frame) != 0;
diff --git a/gdb/i386-go32-tdep.c b/gdb/i386-go32-tdep.c
index 13c4b51c3f9e..7a6294d4133e 100644
--- a/gdb/i386-go32-tdep.c
+++ b/gdb/i386-go32-tdep.c
@@ -46,8 +46,8 @@ i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 static enum gdb_osabi
 i386_coff_osabi_sniffer (bfd *abfd)
 {
-  if (strcmp (bfd_get_target (abfd), "coff-go32-exe") == 0
-      || strcmp (bfd_get_target (abfd), "coff-go32") == 0)
+  if (streq (bfd_get_target (abfd), "coff-go32-exe")
+      || streq (bfd_get_target (abfd), "coff-go32"))
     return GDB_OSABI_GO32;
 
   return GDB_OSABI_UNKNOWN;
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index dae4a7b7eeba..23aeccac9fc6 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -246,8 +246,7 @@ i386_linux_sigtramp_p (const frame_info_ptr &this_frame)
     return (i386_linux_sigtramp_start (this_frame) != 0
 	    || i386_linux_rt_sigtramp_start (this_frame) != 0);
 
-  return (strcmp ("__restore", name) == 0
-	  || strcmp ("__restore_rt", name) == 0);
+  return streq ("__restore", name) || streq ("__restore_rt", name);
 }
 
 /* Return true if the PC of THIS_FRAME is in a signal trampoline which
diff --git a/gdb/i386-obsd-tdep.c b/gdb/i386-obsd-tdep.c
index a361ab1ae6a9..0fc2fab3ed84 100644
--- a/gdb/i386-obsd-tdep.c
+++ b/gdb/i386-obsd-tdep.c
@@ -384,10 +384,11 @@ i386obsd_trapframe_sniffer (const struct frame_unwind *self,
     return 0;
 
   find_pc_partial_function (get_frame_pc (this_frame), &name, NULL, NULL);
-  return (name && (strcmp (name, "calltrap") == 0
-		   || strcmp (name, "syscall1") == 0
-		   || startswith (name, "Xintr")
-		   || startswith (name, "Xsoft")));
+  return (name != nullptr
+	  && (streq (name, "calltrap")
+	      || streq (name, "syscall1")
+	      || startswith (name, "Xintr")
+	      || startswith (name, "Xsoft")));
 }
 
 static const struct frame_unwind_legacy i386obsd_trapframe_unwind (
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 9cee112facd8..b9013e183c29 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -1869,9 +1869,9 @@ i386_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 	  call_dest = pc + 5 + extract_signed_integer (buf, 4, byte_order);
 	  call_dest = call_dest & 0xffffffffU;
 	  bound_minimal_symbol s = lookup_minimal_symbol_by_pc (call_dest);
-	  if (s.minsym != NULL
-	      && s.minsym->linkage_name () != NULL
-	      && strcmp (s.minsym->linkage_name (), "__main") == 0)
+	  if (s.minsym != nullptr
+	      && s.minsym->linkage_name () != nullptr
+	      && streq (s.minsym->linkage_name (), "__main"))
 	    pc += 5;
 	}
     }
@@ -3772,7 +3772,7 @@ i386_sigtramp_p (const frame_info_ptr &this_frame)
   const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
-  return (name && strcmp ("_sigtramp", name) == 0);
+  return (name && streq ("_sigtramp", name));
 }
 \f
 
@@ -3809,8 +3809,9 @@ i386_svr4_sigtramp_p (const frame_info_ptr &this_frame)
 
   /* The origin of these symbols is currently unknown.  */
   find_pc_partial_function (pc, &name, NULL, NULL);
-  return (name && (strcmp ("_sigreturn", name) == 0
-		   || strcmp ("sigvechandler", name) == 0));
+  return (name != nullptr
+	  && (streq ("_sigreturn", name)
+	      || streq ("sigvechandler", name)));
 }
 
 /* Assuming THIS_FRAME is for a SVR4 sigtramp routine, return the
@@ -8450,19 +8451,19 @@ static const struct floatformat **
 i386_floatformat_for_type (struct gdbarch *gdbarch,
 			   const char *name, int len)
 {
-  if (len == 128 && name)
-    if (strcmp (name, "__float128") == 0
-	|| strcmp (name, "_Float128") == 0
-	|| strcmp (name, "complex _Float128") == 0
-	|| strcmp (name, "complex(kind=16)") == 0
-	|| strcmp (name, "COMPLEX(16)") == 0
-	|| strcmp (name, "complex*32") == 0
-	|| strcmp (name, "COMPLEX*32") == 0
-	|| strcmp (name, "quad complex") == 0
-	|| strcmp (name, "real(kind=16)") == 0
-	|| strcmp (name, "real*16") == 0
-	|| strcmp (name, "REAL*16") == 0
-	|| strcmp (name, "REAL(16)") == 0)
+  if (len == 128 && name != nullptr)
+    if (streq (name, "__float128")
+	|| streq (name, "_Float128")
+	|| streq (name, "complex _Float128")
+	|| streq (name, "complex(kind=16)")
+	|| streq (name, "COMPLEX(16)")
+	|| streq (name, "complex*32")
+	|| streq (name, "COMPLEX*32")
+	|| streq (name, "quad complex")
+	|| streq (name, "real(kind=16)")
+	|| streq (name, "real*16")
+	|| streq (name, "REAL*16")
+	|| streq (name, "REAL(16)"))
       return floatformats_ieee_quad;
 
   return default_floatformat_for_type (gdbarch, name, len);
diff --git a/gdb/i386-windows-tdep.c b/gdb/i386-windows-tdep.c
index daaa556d171b..b66483c4b960 100644
--- a/gdb/i386-windows-tdep.c
+++ b/gdb/i386-windows-tdep.c
@@ -210,7 +210,7 @@ i386_cygwin_core_osabi_sniffer (bfd *abfd)
 
   /* Cygwin uses elf core dumps.  Do not claim all ELF executables,
      check whether there is a .reg section of proper size.  */
-  if (strcmp (target_name, "elf32-i386") == 0)
+  if (streq (target_name, "elf32-i386"))
     {
       asection *section = bfd_get_section_by_name (abfd, ".reg");
       if (section != nullptr
diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
index 2b918b87bbc5..43f2f4e10bca 100644
--- a/gdb/ia64-tdep.c
+++ b/gdb/ia64-tdep.c
@@ -3433,7 +3433,7 @@ ia64_find_global_pointer_from_dynamic_section (struct gdbarch *gdbarch,
     {
       for (obj_section &osect : faddr_sect->objfile->sections ())
 	{
-	  if (strcmp (osect.the_bfd_section->name, ".dynamic") == 0)
+	  if (streq (osect.the_bfd_section->name, ".dynamic"))
 	    {
 	      CORE_ADDR addr = osect.addr ();
 	      CORE_ADDR endaddr = osect.endaddr ();
@@ -3507,14 +3507,14 @@ find_extant_func_descr (struct gdbarch *gdbarch, CORE_ADDR faddr)
 
   /* Return early if faddr is already a function descriptor.  */
   faddr_sect = find_pc_section (faddr);
-  if (faddr_sect && strcmp (faddr_sect->the_bfd_section->name, ".opd") == 0)
+  if (faddr_sect && streq (faddr_sect->the_bfd_section->name, ".opd"))
     return faddr;
 
   if (faddr_sect != NULL)
     {
       for (obj_section &osect : faddr_sect->objfile->sections ())
 	{
-	  if (strcmp (osect.the_bfd_section->name, ".opd") == 0)
+	  if (streq (osect.the_bfd_section->name, ".opd"))
 	    {
 	      CORE_ADDR addr = osect.addr ();
 	      CORE_ADDR endaddr = osect.endaddr ();
@@ -3593,7 +3593,7 @@ ia64_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
   s = find_pc_section (addr);
 
   /* check if ADDR points to a function descriptor.  */
-  if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
+  if (s && streq (s->the_bfd_section->name, ".opd"))
     return read_memory_unsigned_integer (addr, 8, byte_order);
 
   /* Normally, functions live inside a section that is executable.
diff --git a/gdb/infrun.c b/gdb/infrun.c
index c05c2b0f42f3..592f9197cd5e 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -10463,9 +10463,9 @@ set_exec_direction_func (const char *args, int from_tty,
 {
   if (target_can_execute_reverse ())
     {
-      if (!strcmp (exec_direction, exec_forward))
+      if (streq (exec_direction, exec_forward))
 	execution_direction = EXEC_FORWARD;
-      else if (!strcmp (exec_direction, exec_reverse))
+      else if (streq (exec_direction, exec_reverse))
 	execution_direction = EXEC_REVERSE;
     }
   else
diff --git a/gdb/interps.c b/gdb/interps.c
index 23663cb5ef53..0b05a3f277d2 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -85,7 +85,7 @@ interp_factory_register (const char *name, interp_factory_func func)
 {
   /* Assert that no factory for NAME is already registered.  */
   for (const interp_factory &f : interpreter_factories)
-    if (strcmp (f.name, name) == 0)
+    if (streq (f.name, name))
       {
 	internal_error (_("interpreter factory already registered: \"%s\"\n"),
 			name);
@@ -157,7 +157,7 @@ static struct interp *
 interp_lookup_existing (struct ui *ui, const char *name)
 {
   for (interp &interp : ui->interp_list)
-    if (strcmp (interp.name (), name) == 0)
+    if (streq (interp.name (), name))
       return &interp;
 
   return nullptr;
@@ -177,7 +177,7 @@ interp_lookup (struct ui *ui, const char *name)
     return interp;
 
   for (const interp_factory &factory : interpreter_factories)
-    if (strcmp (factory.name, name) == 0)
+    if (streq (factory.name, name))
       {
 	interp = factory.func (factory.name);
 	interp_add (ui, interp);
@@ -224,7 +224,7 @@ current_interp_named_p (const char *interp_name)
   interp *interp = current_ui->current_interpreter;
 
   if (interp != NULL)
-    return (strcmp (interp->name (), interp_name) == 0);
+    return (streq (interp->name (), interp_name));
 
   return 0;
 }
diff --git a/gdb/language.c b/gdb/language.c
index ac718b0bf07b..439ef293622d 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -191,8 +191,7 @@ set_language (const char *language)
   enum language flang = language_unknown;
 
   /* "local" is a synonym of "auto".  */
-  if (strcmp (language, "auto") == 0
-      || strcmp (language, "local") == 0)
+  if (streq (language, "auto") || streq (language, "local"))
     {
       /* Enter auto mode.  Set to the current frame's language, if
 	 known, or fallback to the initial language.  */
@@ -221,7 +220,7 @@ set_language (const char *language)
   /* Search the list of languages for a match.  */
   for (const auto &lang : language_defn::languages)
     {
-      if (strcmp (lang->name (), language) != 0)
+      if (!streq (lang->name (), language))
 	continue;
 
       /* Found it!  Go into manual mode, and use this language.  */
@@ -293,22 +292,22 @@ static void
 set_range_command (const char *ignore,
 		   int from_tty, struct cmd_list_element *c)
 {
-  if (strcmp (range, "on") == 0)
+  if (streq (range, "on"))
     {
       range_check = range_check_on;
       range_mode = range_mode_manual;
     }
-  else if (strcmp (range, "warn") == 0)
+  else if (streq (range, "warn"))
     {
       range_check = range_check_warn;
       range_mode = range_mode_manual;
     }
-  else if (strcmp (range, "off") == 0)
+  else if (streq (range, "off"))
     {
       range_check = range_check_off;
       range_mode = range_mode_manual;
     }
-  else if (strcmp (range, "auto") == 0)
+  else if (streq (range, "auto"))
     {
       range_mode = range_mode_auto;
       set_range_case ();
@@ -367,17 +366,17 @@ show_case_command (struct ui_file *file, int from_tty,
 static void
 set_case_command (const char *ignore, int from_tty, struct cmd_list_element *c)
 {
-   if (strcmp (case_sensitive, "on") == 0)
+   if (streq (case_sensitive, "on"))
      {
        case_sensitivity = case_sensitive_on;
        case_mode = case_mode_manual;
      }
-   else if (strcmp (case_sensitive, "off") == 0)
+   else if (streq (case_sensitive, "off"))
      {
        case_sensitivity = case_sensitive_off;
        case_mode = case_mode_manual;
      }
-   else if (strcmp (case_sensitive, "auto") == 0)
+   else if (streq (case_sensitive, "auto"))
      {
        case_mode = case_mode_auto;
        set_range_case ();
@@ -478,7 +477,7 @@ enum language
 language_enum (const char *str)
 {
   for (const auto &lang : language_defn::languages)
-    if (strcmp (lang->name (), str) == 0)
+    if (streq (lang->name (), str))
       return lang->la_language;
 
   return language_unknown;
@@ -977,7 +976,7 @@ language_arch_info::lookup_primitive_type_and_symbol (const char *name)
 {
   for (struct type_and_symbol &tas : primitive_types_and_symbols)
     {
-      if (strcmp (tas.type ()->name (), name) == 0)
+      if (streq (tas.type ()->name (), name))
 	return &tas;
     }
 
@@ -1107,7 +1106,7 @@ INIT_GDB_FILE (language)
   add_alias_cmd ("ch", setshow_check_cmds.show, no_class, 1, &showlist);
 
   range = type_or_range_names[3];
-  gdb_assert (strcmp (range, "auto") == 0);
+  gdb_assert (streq (range, "auto"));
   add_setshow_enum_cmd ("range", class_support, type_or_range_names,
 			&range,
 			_("Set range checking (on/warn/off/auto)."),
@@ -1117,7 +1116,7 @@ INIT_GDB_FILE (language)
 			&setchecklist, &showchecklist);
 
   case_sensitive = case_sensitive_names[2];
-  gdb_assert (strcmp (case_sensitive, "auto") == 0);
+  gdb_assert (streq (case_sensitive, "auto"));
   add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
 			&case_sensitive, _("\
 Set case sensitivity in name search (on/off/auto)."), _("\
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 024358c65f59..7624c92ab257 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1742,8 +1742,7 @@ linespec_parse_basic (linespec_parser *parser)
 	 completions, advance the stream past the colon token and make
 	 it part of the function name/token.  */
 
-      if (!parser->completion_quote_char
-	  && strcmp (parser->lexer.stream, ":") == 0)
+      if (!parser->completion_quote_char && streq (parser->lexer.stream, ":"))
 	{
 	  completion_tracker tmp_tracker (false);
 	  const char *source_filename
@@ -4217,8 +4216,8 @@ search_minsyms_for_name (struct collect_info *info,
 	      if (msymbol_type_is_static (item2.minsym->type ()))
 		continue;
 
-	      if (strcmp (item.minsym->linkage_name (),
-			  item2.minsym->linkage_name ()) != 0)
+	      if (!streq (item.minsym->linkage_name (),
+			  item2.minsym->linkage_name ()))
 		continue;
 
 	      /* Found a global minsym with the same name as the
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 3f2bab166304..da92c6a3af27 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -498,17 +498,17 @@ decode_vmflags (char *p, struct smaps_vmflags *v)
        s != NULL;
        s = strtok_r (NULL, " ", &saveptr))
     {
-      if (strcmp (s, "io") == 0)
+      if (streq (s, "io"))
 	v->io_page = 1;
-      else if (strcmp (s, "ht") == 0)
+      else if (streq (s, "ht"))
 	v->uses_huge_tlb = 1;
-      else if (strcmp (s, "dd") == 0)
+      else if (streq (s, "dd"))
 	v->exclude_coredump = 1;
-      else if (strcmp (s, "sh") == 0)
+      else if (streq (s, "sh"))
 	v->shared_mapping = 1;
-      else if (strcmp (s, "mt") == 0)
+      else if (streq (s, "mt"))
 	v->memory_tagging = 1;
-      else if (strcmp (s, "ss") == 0)
+      else if (streq (s, "ss"))
 	v->shadow_stack_memory = 1;
     }
 }
@@ -591,7 +591,7 @@ mapping_is_anonymous_p (const char *filename)
 	 If we managed to find it, then we assume the mapping is
 	 anonymous.  */
       return (filename_len >= del_len
-	      && strcmp (filename + filename_len - del_len, deleted) == 0);
+	      && streq (filename + filename_len - del_len, deleted));
     }
 
   if (*filename == '\0'
@@ -1420,17 +1420,17 @@ parse_smaps_data (const char *data,
 	      break;
 	    }
 
-	  if (strcmp (keyword, "Anonymous:") == 0)
+	  if (streq (keyword, "Anonymous:"))
 	    {
 	      /* Older Linux kernels did not support the
 		 "Anonymous:" counter.  Check it here.  */
 	      has_anonymous = 1;
 	    }
-	  else if (strcmp (keyword, "VmFlags:") == 0)
+	  else if (streq (keyword, "VmFlags:"))
 	    decode_vmflags (line, &v);
 
-	  if (strcmp (keyword, "AnonHugePages:") == 0
-	      || strcmp (keyword, "Anonymous:") == 0)
+	  if (streq (keyword, "AnonHugePages:")
+	      || streq (keyword, "Anonymous:"))
 	    {
 	      unsigned long number;
 
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index bd45a2f29785..f276031184c4 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -1154,7 +1154,7 @@ thread_db_load_search (void)
 	  if (rc)
 	    break;
 	}
-      else if (strcmp (this_dir, "$sdir") == 0)
+      else if (streq (this_dir, "$sdir"))
 	{
 	  if (try_thread_db_load_from_sdir ())
 	    {
@@ -1905,7 +1905,7 @@ info_auto_load_libthread_db (const char *args, int from_tty)
       for (this_pid_len = 0; pid != 0; pid /= 10)
 	this_pid_len++;
 
-      if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
+      if (i == 0 || !streq (array[i - 1]->filename, array[i]->filename))
 	{
 	  unique_filenames++;
 	  max_filename_len = std::max (max_filename_len,
@@ -1943,8 +1943,7 @@ info_auto_load_libthread_db (const char *args, int from_tty)
 			     file_name_style.style ());
 
 	std::string pids;
-	while (i < array.size () && strcmp (info->filename,
-					    array[i]->filename) == 0)
+	while (i < array.size () && streq (info->filename, array[i]->filename))
 	  {
 	    if (!pids.empty ())
 	      pids += ", ";
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 8971e4b5ec12..59616e7f2d66 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -162,8 +162,7 @@ m2_language::print_typedef (struct type *type, struct symbol *new_symbol,
   type = check_typedef (type);
   gdb_printf (stream, "TYPE ");
   if (!new_symbol->type ()->name ()
-      || strcmp ((new_symbol->type ())->name (),
-		 new_symbol->linkage_name ()) != 0)
+      || !streq ((new_symbol->type ())->name (), new_symbol->linkage_name ()))
     gdb_printf (stream, "%s = ", new_symbol->print_name ());
   else
     gdb_printf (stream, "<builtin> = ");
@@ -352,7 +351,7 @@ m2_is_long_set (struct type *type)
 	  if (type->field (i).type ()->code () != TYPE_CODE_SET)
 	    return 0;
 	  if (type->field (i).name () != NULL
-	      && (strcmp (type->field (i).name (), "") != 0))
+	      && (!streq (type->field (i).name (), "")))
 	    return 0;
 	  range = type->field (i).type ()->index_type ();
 	  if ((i > TYPE_N_BASECLASSES (type))
@@ -490,9 +489,9 @@ m2_is_unbounded_array (struct type *type)
        */
       if (type->num_fields () != 2)
 	return 0;
-      if (strcmp (type->field (0).name (), "_m2_contents") != 0)
+      if (!streq (type->field (0).name (), "_m2_contents"))
 	return 0;
-      if (strcmp (type->field (1).name (), "_m2_high") != 0)
+      if (!streq (type->field (1).name (), "_m2_high"))
 	return 0;
       if (type->field (0).type ()->code () != TYPE_CODE_PTR)
 	return 0;
diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
index 4c4aa19185f0..f9d46c00b9ca 100644
--- a/gdb/m32c-tdep.c
+++ b/gdb/m32c-tdep.c
@@ -2327,8 +2327,7 @@ m32c_skip_trampoline_code (const frame_info_ptr &frame, CORE_ADDR stop_pc)
   if (find_pc_partial_function (stop_pc, &name, &start, &end))
     {
       /* Are we stopped at the beginning of the trampoline function?  */
-      if (strcmp (name, "m32c_jsri16") == 0
-	  && stop_pc == start)
+      if (streq (name, "m32c_jsri16") && stop_pc == start)
 	{
 	  /* Get the stack pointer.  The return address is at the top,
 	     and the target function's address is just below that.  We
@@ -2508,8 +2507,7 @@ m32c_m16c_pointer_to_address (struct gdbarch *gdbarch,
 	  const char *ptr_msym_name = ptr_msym.minsym->linkage_name ();
 	  int len = strlen (ptr_msym_name);
 
-	  if (len > 4
-	      && strcmp (ptr_msym_name + len - 4, ".plt") == 0)
+	  if (len > 4 && streq (ptr_msym_name + len - 4, ".plt"))
 	    {
 	      /* We have a .plt symbol; try to find the symbol for the
 		 corresponding function.
diff --git a/gdb/m32r-linux-tdep.c b/gdb/m32r-linux-tdep.c
index 75e112edc6ea..1068783565ce 100644
--- a/gdb/m32r-linux-tdep.c
+++ b/gdb/m32r-linux-tdep.c
@@ -185,8 +185,7 @@ m32r_linux_pc_in_sigtramp (CORE_ADDR pc, const char *name,
     return (m32r_linux_sigtramp_start (pc, this_frame) != 0
 	    || m32r_linux_rt_sigtramp_start (pc, this_frame) != 0);
 
-  return (strcmp ("__restore", name) == 0
-	  || strcmp ("__restore_rt", name) == 0);
+  return streq ("__restore", name) || streq ("__restore_rt", name);
 }
 
 /* From <asm/sigcontext.h>.  */
diff --git a/gdb/machoread.c b/gdb/machoread.c
index 416eb6766fdb..6bd063a89e93 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -835,7 +835,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
 	       asect && dsect;
 	       asect = asect->next, dsect = dsect->next)
 	    {
-	      if (strcmp (asect->name, dsect->name) != 0)
+	      if (!streq (asect->name, dsect->name))
 		break;
 	      bfd_set_section_size (dsect, bfd_section_size (asect));
 	    }
@@ -912,8 +912,8 @@ macho_symfile_offsets (struct objfile *objfile,
 
       if (startswith (bfd_sect_name, "LC_SEGMENT."))
 	bfd_sect_name += 11;
-      if (strcmp (bfd_sect_name, "__TEXT") == 0
-	  || strcmp (bfd_sect_name, "__TEXT.__text") == 0)
+      if (streq (bfd_sect_name, "__TEXT")
+	  || streq (bfd_sect_name, "__TEXT.__text"))
 	objfile->sect_index_text = sect_index;
     }
 }
diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c
index d700dd37108d..c0af31c2b6ed 100644
--- a/gdb/macrocmd.c
+++ b/gdb/macrocmd.c
@@ -210,7 +210,7 @@ info_macro_command (const char *args, int from_tty)
 					 macro_source_file *source,
 					 int line)
       {
-	if (strcmp (name, macro_name) == 0)
+	if (streq (name, macro_name))
 	  print_macro_definition (name, macro, source, line);
       });
   else
diff --git a/gdb/macroexp.c b/gdb/macroexp.c
index 79d45457e001..82f1378e1535 100644
--- a/gdb/macroexp.c
+++ b/gdb/macroexp.c
@@ -721,7 +721,7 @@ static int
 currently_rescanning (struct macro_name_list *list, const char *name)
 {
   for (; list; list = list->next)
-    if (strcmp (name, list->name) == 0)
+    if (streq (name, list->name))
       return 1;
 
   return 0;
@@ -1231,7 +1231,7 @@ expand (const char *id,
 
       if (def->argc >= 1)
 	{
-	  if (strcmp (def->argv[def->argc - 1], "...") == 0)
+	  if (streq (def->argv[def->argc - 1], "..."))
 	    {
 	      /* In C99-style varargs, substitution is done using
 		 __VA_ARGS__.  */
@@ -1242,8 +1242,7 @@ expand (const char *id,
 	    {
 	      int len = strlen (def->argv[def->argc - 1]);
 
-	      if (len > 3
-		  && strcmp (def->argv[def->argc - 1] + len - 3, "...") == 0)
+	      if (len > 3 && streq (def->argv[def->argc - 1] + len - 3, "..."))
 		{
 		  /* In GNU-style varargs, the name of the
 		     substitution parameter is the name of the formal
diff --git a/gdb/macrotab.c b/gdb/macrotab.c
index 688d1e3fff3e..078eb5cb5aa7 100644
--- a/gdb/macrotab.c
+++ b/gdb/macrotab.c
@@ -657,7 +657,7 @@ find_definition (const char *name,
 	     We just want to search within a given name's definitions.  */
 	  struct macro_key *found = (struct macro_key *) pred->key;
 
-	  if (strcmp (found->name, name) == 0)
+	  if (streq (found->name, name))
 	    n = pred;
 	}
     }
@@ -707,7 +707,7 @@ check_for_redefinition (macro_source_file *source, int line, const char *name,
 	 definition changes).  */
       if (kind != found_def->kind)
 	same = 0;
-      else if (strcmp (replacement, found_def->replacement))
+      else if (!streq (replacement, found_def->replacement))
 	same = 0;
       else if (kind == macro_function_like)
 	{
diff --git a/gdb/main.c b/gdb/main.c
index a4e6cddef702..df40ee0b005d 100644
--- a/gdb/main.c
+++ b/gdb/main.c
@@ -1240,9 +1240,7 @@ captured_main_1 (struct captured_main_args *context)
   save_auto_load = global_auto_load;
   global_auto_load = 0;
 
-  if (execarg != NULL
-      && symarg != NULL
-      && strcmp (execarg, symarg) == 0)
+  if (execarg != nullptr && symarg != nullptr && streq (execarg, symarg))
     {
       /* The exec file and the symbol-file are the same.  If we can't
 	 open it, better only print one error message.
diff --git a/gdb/memattr.c b/gdb/memattr.c
index aa0ca17008d9..bea33f6df6d4 100644
--- a/gdb/memattr.c
+++ b/gdb/memattr.c
@@ -257,7 +257,7 @@ mem_command (const char *args, int from_tty)
     error_no_arg (_("No mem"));
 
   /* For "mem auto", switch back to using a target provided list.  */
-  if (strcmp (args, "auto") == 0)
+  if (streq (args, "auto"))
     {
       if (mem_use_target ())
 	return;
diff --git a/gdb/mi/mi-cmd-disas.c b/gdb/mi/mi-cmd-disas.c
index 1059e366d7be..bc4bd52dfff0 100644
--- a/gdb/mi/mi-cmd-disas.c
+++ b/gdb/mi/mi-cmd-disas.c
@@ -145,11 +145,11 @@ mi_cmd_disassemble (const char *command, const char *const *argv, int argc)
 	  break;
 	case OPCODES_OPT:
 	  opcodes_seen = true;
-	  if (strcmp (oarg, "none") == 0)
+	  if (streq (oarg, "none"))
 	    opcodes_mode = OPCODES_NONE;
-	  else if (strcmp (oarg, "display") == 0)
+	  else if (streq (oarg, "display"))
 	    opcodes_mode = OPCODES_DISPLAY;
-	  else if (strcmp (oarg, "bytes") == 0)
+	  else if (streq (oarg, "bytes"))
 	    opcodes_mode = OPCODES_BYTES;
 	  else
 	    error (_("-data-disassemble: unknown value for -opcodes argument"));
diff --git a/gdb/mi/mi-cmd-var.c b/gdb/mi/mi-cmd-var.c
index 22736f568ef3..f1f1637b74b2 100644
--- a/gdb/mi/mi-cmd-var.c
+++ b/gdb/mi/mi-cmd-var.c
@@ -103,7 +103,7 @@ mi_cmd_var_create (const char *command, const char *const *argv, int argc)
 
   const char *name = argv[0];
   std::string gen_name;
-  if (strcmp (name, "-") == 0)
+  if (streq (name, "-"))
     {
       gen_name = varobj_gen_name ();
       name = gen_name.c_str ();
@@ -111,9 +111,9 @@ mi_cmd_var_create (const char *command, const char *const *argv, int argc)
   else if (!c_isalpha (name[0]))
     error (_("-var-create: name of object must begin with a letter"));
 
-  if (strcmp (frame, "*") == 0)
+  if (streq (frame, "*"))
     var_type = USE_CURRENT_FRAME;
-  else if (strcmp (frame, "@") == 0)
+  else if (streq (frame, "@"))
     var_type = USE_SELECTED_FRAME;
   else
     {
@@ -154,7 +154,7 @@ mi_cmd_var_delete (const char *command, const char *const *argv, int argc)
      starting with '-'.  */
   if (argc == 1)
     {
-      if (strcmp (name, "-c") == 0)
+      if (streq (name, "-c"))
 	error (_("-var-delete: Missing required "
 		 "argument after '-c': variable object name"));
       if (*name == '-')
@@ -165,7 +165,7 @@ mi_cmd_var_delete (const char *command, const char *const *argv, int argc)
      which would be the variable name.  */
   if (argc == 2)
     {
-      if (strcmp (name, "-c") != 0)
+      if (!streq (name, "-c"))
 	error (_("-var-delete: Invalid option."));
       children_only_p = 1;
       name = argv[1];
@@ -264,9 +264,9 @@ mi_cmd_var_set_frozen (const char *command, const char *const *argv, int argc)
 
   var = varobj_get_handle (argv[0]);
 
-  if (strcmp (argv[1], "0") == 0)
+  if (streq (argv[1], "0"))
     frozen = false;
-  else if (strcmp (argv[1], "1") == 0)
+  else if (streq (argv[1], "1"))
     frozen = true;
   else
     error (_("Invalid flag value"));
diff --git a/gdb/mi/mi-getopt.c b/gdb/mi/mi-getopt.c
index c005263243ef..865bba9abf8e 100644
--- a/gdb/mi/mi-getopt.c
+++ b/gdb/mi/mi-getopt.c
@@ -37,7 +37,7 @@ mi_getopt_1 (const char *prefix, int argc, const char *const *argv,
     return -1;
   arg = argv[*oind];
   /* ``--''? */
-  if (strcmp (arg, "--") == 0)
+  if (streq (arg, "--"))
     {
       *oind += 1;
       *oarg = NULL;
@@ -52,7 +52,7 @@ mi_getopt_1 (const char *prefix, int argc, const char *const *argv,
   /* Look the option up.  */
   for (opt = opts; opt->name != NULL; opt++)
     {
-      if (strcmp (opt->name, arg + 1) != 0)
+      if (!streq (opt->name, arg + 1))
 	continue;
       if (opt->arg_p)
 	{
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 77e56bc9fc8d..c03cbfe51173 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -161,7 +161,7 @@ void
 mi_cmd_exec_next (const char *command, const char *const *argv, int argc)
 {
   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
-  if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
+  if (argc > 0 && streq (argv[0], "--reverse"))
     mi_execute_async_cli_command ("reverse-next", argv + 1, argc - 1);
   else
     mi_execute_async_cli_command ("next", argv, argc);
@@ -172,7 +172,7 @@ mi_cmd_exec_next_instruction (const char *command, const char *const *argv,
 			      int argc)
 {
   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
-  if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
+  if (argc > 0 && streq (argv[0], "--reverse"))
     mi_execute_async_cli_command ("reverse-nexti", argv + 1, argc - 1);
   else
     mi_execute_async_cli_command ("nexti", argv, argc);
@@ -182,7 +182,7 @@ void
 mi_cmd_exec_step (const char *command, const char *const *argv, int argc)
 {
   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
-  if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
+  if (argc > 0 && streq (argv[0], "--reverse"))
     mi_execute_async_cli_command ("reverse-step", argv + 1, argc - 1);
   else
     mi_execute_async_cli_command ("step", argv, argc);
@@ -193,7 +193,7 @@ mi_cmd_exec_step_instruction (const char *command, const char *const *argv,
 			      int argc)
 {
   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
-  if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
+  if (argc > 0 && streq (argv[0], "--reverse"))
     mi_execute_async_cli_command ("reverse-stepi", argv + 1, argc - 1);
   else
     mi_execute_async_cli_command ("stepi", argv, argc);
@@ -203,7 +203,7 @@ void
 mi_cmd_exec_finish (const char *command, const char *const *argv, int argc)
 {
   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
-  if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
+  if (argc > 0 && streq (argv[0], "--reverse"))
     mi_execute_async_cli_command ("reverse-finish", argv + 1, argc - 1);
   else
     mi_execute_async_cli_command ("finish", argv, argc);
@@ -329,7 +329,7 @@ exec_reverse_continue (const char *const *argv, int argc)
 void
 mi_cmd_exec_continue (const char *command, const char *const *argv, int argc)
 {
-  if (argc > 0 && strcmp (argv[0], "--reverse") == 0)
+  if (argc > 0 && streq (argv[0], "--reverse"))
     exec_reverse_continue (argv + 1, argc - 1);
   else
     exec_continue (argv, argc);
@@ -759,9 +759,9 @@ mi_cmd_list_thread_groups (const char *command, const char *const *argv,
 	  available = 1;
 	  break;
 	case RECURSE_OPT:
-	  if (strcmp (oarg, "0") == 0)
+	  if (streq (oarg, "0"))
 	    ;
-	  else if (strcmp (oarg, "1") == 0)
+	  else if (streq (oarg, "1"))
 	    recurse = 1;
 	  else
 	    error (_("only '0' and '1' are valid values "
@@ -1589,9 +1589,9 @@ mi_cmd_enable_timings (const char *command, const char *const *argv, int argc)
     do_timings = 1;
   else if (argc == 1)
     {
-      if (strcmp (argv[0], "yes") == 0)
+      if (streq (argv[0], "yes"))
 	do_timings = 1;
-      else if (strcmp (argv[0], "no") == 0)
+      else if (streq (argv[0], "no"))
 	do_timings = 0;
       else
 	goto usage_error;
@@ -1795,8 +1795,10 @@ captured_mi_execute_command (struct mi_interp *mi, struct ui_out *uiout,
 	  gdb_puts (context->token.c_str (), mi->raw_stdout);
 	  /* There's no particularly good reason why target-connect results
 	     in not ^done.  Should kill ^connected for MI3.  */
-	  gdb_puts (strcmp (context->command.get (), "target-select") == 0
-		    ? "^connected" : "^done", mi->raw_stdout);
+	  gdb_puts ((streq (context->command.get (), "target-select")
+		     ? "^connected"
+		     : "^done"),
+		    mi->raw_stdout);
 	  mi_out_put (uiout, mi->raw_stdout);
 	  mi_out_rewind (uiout);
 	  mi_print_timing_maybe (mi->raw_stdout);
@@ -2150,7 +2152,6 @@ mi_load_progress (const char *section_name,
   using namespace std::chrono;
   static steady_clock::time_point last_update;
   static char *previous_sect_name = NULL;
-  int new_section;
   struct mi_interp *mi = as_mi_interp (current_interpreter ());
 
   /* If the current interpreter is not an MI interpreter, then just
@@ -2169,9 +2170,8 @@ mi_load_progress (const char *section_name,
   scoped_restore save_uiout
     = make_scoped_restore (&current_uiout, uiout.get ());
 
-  new_section = (previous_sect_name ?
-		 strcmp (previous_sect_name, section_name) : 1);
-  if (new_section)
+  if (previous_sect_name == nullptr
+      || !streq (previous_sect_name, section_name))
     {
       xfree (previous_sect_name);
       previous_sect_name = xstrdup (section_name);
@@ -2301,7 +2301,7 @@ mi_cmd_trace_find (const char *command, const char *const *argv, int argc)
 
   mode = argv[0];
 
-  if (strcmp (mode, "none") == 0)
+  if (streq (mode, "none"))
     {
       tfind_1 (tfind_number, -1, 0, 0, 0);
       return;
@@ -2309,39 +2309,39 @@ mi_cmd_trace_find (const char *command, const char *const *argv, int argc)
 
   check_trace_running (current_trace_status ());
 
-  if (strcmp (mode, "frame-number") == 0)
+  if (streq (mode, "frame-number"))
     {
       if (argc != 2)
 	error (_("frame number is required"));
       tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
     }
-  else if (strcmp (mode, "tracepoint-number") == 0)
+  else if (streq (mode, "tracepoint-number"))
     {
       if (argc != 2)
 	error (_("tracepoint number is required"));
       tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
     }
-  else if (strcmp (mode, "pc") == 0)
+  else if (streq (mode, "pc"))
     {
       if (argc != 2)
 	error (_("PC is required"));
       tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
     }
-  else if (strcmp (mode, "pc-inside-range") == 0)
+  else if (streq (mode, "pc-inside-range"))
     {
       if (argc != 3)
 	error (_("Start and end PC are required"));
       tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]),
 	       parse_and_eval_address (argv[2]), 0);
     }
-  else if (strcmp (mode, "pc-outside-range") == 0)
+  else if (streq (mode, "pc-outside-range"))
     {
       if (argc != 3)
 	error (_("Start and end PC are required"));
       tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]),
 	       parse_and_eval_address (argv[2]), 0);
     }
-  else if (strcmp (mode, "line") == 0)
+  else if (streq (mode, "line"))
     {
       if (argc != 2)
 	error (_("Line is required"));
diff --git a/gdb/mi/mi-parse.c b/gdb/mi/mi-parse.c
index 886d093c62cb..68c56c9b57f5 100644
--- a/gdb/mi/mi-parse.c
+++ b/gdb/mi/mi-parse.c
@@ -349,7 +349,7 @@ mi_parse::mi_parse (const char *cmd, std::string *token)
 	  chp += as;
 	}
       /* See if --all is the last token in the input.  */
-      if (strcmp (chp, "--all") == 0)
+      if (streq (chp, "--all"))
 	{
 	  this->all = 1;
 	  chp += strlen (chp);
@@ -429,32 +429,32 @@ mi_parse::mi_parse (gdb::unique_xmalloc_ptr<char> command,
       const char *chp = args[i].get ();
 
       /* See if --all is the last token in the input.  */
-      if (strcmp (chp, "--all") == 0)
+      if (streq (chp, "--all"))
 	{
 	  this->all = 1;
 	}
-      else if (strcmp (chp, "--thread-group") == 0)
+      else if (streq (chp, "--thread-group"))
 	{
 	  ++i;
 	  if (i == args.size ())
 	    error ("No argument to '--thread-group'");
 	  this->set_thread_group (args[i].get (), nullptr);
 	}
-      else if (strcmp (chp, "--thread") == 0)
+      else if (streq (chp, "--thread"))
 	{
 	  ++i;
 	  if (i == args.size ())
 	    error ("No argument to '--thread'");
 	  this->set_thread (args[i].get (), nullptr);
 	}
-      else if (strcmp (chp, "--frame") == 0)
+      else if (streq (chp, "--frame"))
 	{
 	  ++i;
 	  if (i == args.size ())
 	    error ("No argument to '--frame'");
 	  this->set_frame (args[i].get (), nullptr);
 	}
-      else if (strcmp (chp, "--language") == 0)
+      else if (streq (chp, "--language"))
 	{
 	  ++i;
 	  if (i == args.size ())
@@ -472,17 +472,14 @@ mi_parse::mi_parse (gdb::unique_xmalloc_ptr<char> command,
 enum print_values
 mi_parse_print_values (const char *name)
 {
-   if (strcmp (name, "0") == 0
-       || strcmp (name, mi_no_values) == 0)
-     return PRINT_NO_VALUES;
-   else if (strcmp (name, "1") == 0
-	    || strcmp (name, mi_all_values) == 0)
-     return PRINT_ALL_VALUES;
-   else if (strcmp (name, "2") == 0
-	    || strcmp (name, mi_simple_values) == 0)
-     return PRINT_SIMPLE_VALUES;
-   else
-     error (_("Unknown value for PRINT_VALUES: must be: \
+  if (streq (name, "0") || streq (name, mi_no_values))
+    return PRINT_NO_VALUES;
+  else if (streq (name, "1") || streq (name, mi_all_values))
+    return PRINT_ALL_VALUES;
+  else if (streq (name, "2") || streq (name, mi_simple_values))
+    return PRINT_SIMPLE_VALUES;
+  else
+    error (_("Unknown value for PRINT_VALUES: must be: \
 0 or \"%s\", 1 or \"%s\", 2 or \"%s\""),
-	    mi_no_values, mi_all_values, mi_simple_values);
+	   mi_no_values, mi_all_values, mi_simple_values);
 }
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index 71cd1bb4c2bd..0d6ea53aecf6 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -557,7 +557,7 @@ lookup_minimal_symbol_linkage (const char *name, struct objfile *objf,
 	   msymbol != NULL;
 	   msymbol = msymbol->hash_next)
 	{
-	  if (strcmp (msymbol->linkage_name (), name) == 0
+	  if (streq (msymbol->linkage_name (), name)
 	      && (msymbol->type () == mst_data
 		  || msymbol->type () == mst_bss
 		  || (match_static_type
@@ -611,10 +611,10 @@ lookup_minimal_symbol_text (program_space *pspace, const char *name,
 	 msymbol != NULL && found_symbol.minsym == NULL;
 	 msymbol = msymbol->hash_next)
       {
-	if (strcmp (msymbol->linkage_name (), name) == 0 &&
-	    (msymbol->type () == mst_text
-	     || msymbol->type () == mst_text_gnu_ifunc
-	     || msymbol->type () == mst_file_text))
+	if (streq (msymbol->linkage_name (), name)
+	    && (msymbol->type () == mst_text
+		|| msymbol->type () == mst_text_gnu_ifunc
+		|| msymbol->type () == mst_file_text))
 	  {
 	    switch (msymbol->type ())
 	      {
@@ -678,7 +678,7 @@ lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
 	       msymbol = msymbol->hash_next)
 	    {
 	      if (msymbol->value_address (&objfile) == pc
-		  && strcmp (msymbol->linkage_name (), name) == 0)
+		  && streq (msymbol->linkage_name (), name))
 		return msymbol;
 	    }
 	}
@@ -1229,12 +1229,12 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
       copyfrom = copyto = msymbol;
       while (copyfrom < msymbol + mcount - 1)
 	{
-	  if (copyfrom->unrelocated_address ()
-	      == (copyfrom + 1)->unrelocated_address ()
+	  if ((copyfrom->unrelocated_address ()
+	       == (copyfrom + 1)->unrelocated_address ())
 	      && (copyfrom->section_index ()
 		  == (copyfrom + 1)->section_index ())
-	      && strcmp (copyfrom->linkage_name (),
-			 (copyfrom + 1)->linkage_name ()) == 0)
+	      && streq (copyfrom->linkage_name (),
+			(copyfrom + 1)->linkage_name ()))
 	    {
 	      if ((copyfrom + 1)->type () == mst_unknown)
 		(copyfrom + 1)->set_type (copyfrom->type ());
@@ -1498,8 +1498,8 @@ find_solib_trampoline_target (const frame_info_ptr &frame, CORE_ADDR pc)
 		   || msymbol->type () == mst_text_gnu_ifunc
 		   || msymbol->type () == mst_data
 		   || msymbol->type () == mst_data_gnu_ifunc)
-		  && strcmp (msymbol->linkage_name (),
-			     tsymbol->linkage_name ()) == 0)
+		  && streq (msymbol->linkage_name (),
+			    tsymbol->linkage_name ()))
 		{
 		  CORE_ADDR func;
 
diff --git a/gdb/mips-sde-tdep.c b/gdb/mips-sde-tdep.c
index 727d092b6312..036fc4c45a70 100644
--- a/gdb/mips-sde-tdep.c
+++ b/gdb/mips-sde-tdep.c
@@ -153,9 +153,8 @@ mips_sde_frame_sniffer (const struct frame_unwind *self,
   const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
-  return (name
-	  && (strcmp (name, "_xcptcall") == 0
-	      || strcmp (name, "_sigtramp") == 0));
+  return (name != nullptr
+	  && (streq (name, "_xcptcall") || streq (name, "_sigtramp")));
 }
 
 /* Data structure for the SDE frame unwinder.  */
diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
index 3ecf5283a900..995a3b10915e 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -7964,17 +7964,17 @@ mips_find_abi_from_sections (bfd *abfd)
       if (!startswith (name, ".mdebug."))
 	continue;
 
-      if (strcmp (name, ".mdebug.abi32") == 0)
+      if (streq (name, ".mdebug.abi32"))
 	return MIPS_ABI_O32;
-      else if (strcmp (name, ".mdebug.abiN32") == 0)
+      else if (streq (name, ".mdebug.abiN32"))
 	return MIPS_ABI_N32;
-      else if (strcmp (name, ".mdebug.abi64") == 0)
+      else if (streq (name, ".mdebug.abi64"))
 	return MIPS_ABI_N64;
-      else if (strcmp (name, ".mdebug.abiO64") == 0)
+      else if (streq (name, ".mdebug.abiO64"))
 	return MIPS_ABI_O64;
-      else if (strcmp (name, ".mdebug.eabi32") == 0)
+      else if (streq (name, ".mdebug.eabi32"))
 	return MIPS_ABI_EABI32;
-      else if (strcmp (name, ".mdebug.eabi64") == 0)
+      else if (streq (name, ".mdebug.eabi64"))
 	return MIPS_ABI_EABI64;
       else
 	warning (_("unsupported ABI %s."), name + 8);
diff --git a/gdb/namespace.c b/gdb/namespace.c
index b4a96c753775..5b5749369eeb 100644
--- a/gdb/namespace.c
+++ b/gdb/namespace.c
@@ -53,25 +53,25 @@ add_using_directive (struct using_direct **using_directives,
     {
       int ix;
 
-      if (strcmp (current->import_src, src) != 0)
+      if (!streq (current->import_src, src))
 	continue;
-      if (strcmp (current->import_dest, dest) != 0)
+      if (!streq (current->import_dest, dest))
 	continue;
       if ((alias == NULL && current->alias != NULL)
 	  || (alias != NULL && current->alias == NULL)
 	  || (alias != NULL && current->alias != NULL
-	      && strcmp (alias, current->alias) != 0))
+	      && !streq (alias, current->alias)))
 	continue;
       if ((declaration == NULL && current->declaration != NULL)
 	  || (declaration != NULL && current->declaration == NULL)
 	  || (declaration != NULL && current->declaration != NULL
-	      && strcmp (declaration, current->declaration) != 0))
+	      && !streq (declaration, current->declaration)))
 	continue;
 
       /* Compare the contents of EXCLUDES.  */
       for (ix = 0; ix < excludes.size (); ++ix)
 	if (current->excludes[ix] == NULL
-	    || strcmp (excludes[ix], current->excludes[ix]) != 0)
+	    || !streq (excludes[ix], current->excludes[ix]))
 	  break;
       if (ix < excludes.size () || current->excludes[ix] != NULL)
 	continue;
diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c
index 46aa2b730a78..046372da7457 100644
--- a/gdb/nat/linux-btrace.c
+++ b/gdb/nat/linux-btrace.c
@@ -210,7 +210,7 @@ linux_determine_kernel_start (void)
       if (match != 2)
 	continue;
 
-      if (strcmp (symbol, "_text") == 0)
+      if (streq (symbol, "_text"))
 	{
 	  kernel_start = addr;
 	  break;
diff --git a/gdb/nat/linux-osdata.c b/gdb/nat/linux-osdata.c
index 57ac60175875..248dbab94289 100644
--- a/gdb/nat/linux-osdata.c
+++ b/gdb/nat/linux-osdata.c
@@ -586,7 +586,7 @@ linux_xfer_osdata_cpus ()
 
 	      value[i] = '\0';
 
-	      if (strcmp (key, "processor") == 0)
+	      if (streq (key, "processor"))
 		{
 		  if (first_item)
 		    buffer += "<item>";
@@ -1392,7 +1392,7 @@ linux_common_xfer_osdata (const char *annex, gdb_byte *readbuf,
 
       for (i = 0; osdata_table[i].type; ++i)
 	{
-	  if (strcmp (annex, osdata_table[i].type) == 0)
+	  if (streq (annex, osdata_table[i].type))
 	    return common_getter (&osdata_table[i],
 				  readbuf, offset, len);
 	}
diff --git a/gdb/nat/linux-procfs.c b/gdb/nat/linux-procfs.c
index 90db9fad6b55..6281581aeeac 100644
--- a/gdb/nat/linux-procfs.c
+++ b/gdb/nat/linux-procfs.c
@@ -105,7 +105,7 @@ parse_proc_status_state (const char *state)
       return PROC_STATE_TRACING_STOP;
     case 'T':
       /* Before Linux 2.6.33, tracing stop used uppercase T.  */
-      if (strcmp (state, "T (stopped)\n") == 0)
+      if (streq (state, "T (stopped)\n"))
 	return PROC_STATE_STOPPED;
       else /* "T (tracing stop)\n" */
 	return PROC_STATE_TRACING_STOP;
diff --git a/gdb/nds32-tdep.c b/gdb/nds32-tdep.c
index 3da3c3b61957..3640b31ec274 100644
--- a/gdb/nds32-tdep.c
+++ b/gdb/nds32-tdep.c
@@ -2031,7 +2031,7 @@ nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 	{
 	  const char *regname = gdbarch_register_name (gdbarch, j);
 
-	  if (strcmp (regname, nds32_register_aliases[i].name) == 0)
+	  if (streq (regname, nds32_register_aliases[i].name))
 	    {
 	      regnum = j;
 	      break;
diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c
index f14d7f16d376..2af438de6599 100644
--- a/gdb/objc-lang.c
+++ b/gdb/objc-lang.c
@@ -1070,15 +1070,15 @@ find_methods (char type, const char *theclass, const char *category,
 	    continue;
 
 	  if ((theclass != NULL)
-	      && ((nclass == NULL) || (strcmp (theclass, nclass) != 0)))
+	      && ((nclass == NULL) || (!streq (theclass, nclass))))
 	    continue;
 
-	  if ((category != NULL) &&
-	      ((ncategory == NULL) || (strcmp (category, ncategory) != 0)))
+	  if (category != nullptr
+	      && ((ncategory == nullptr) || !streq (category, ncategory)))
 	    continue;
 
-	  if ((selector != NULL) &&
-	      ((nselector == NULL) || (strcmp (selector, nselector) != 0)))
+	  if (selector != nullptr
+	      && (nselector == nullptr || !streq (selector, nselector)))
 	    continue;
 
 	  symbol_names->push_back (symname);
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index ff98cf28ca6b..387434153e9a 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -141,7 +141,7 @@ set_objfile_main_name (struct objfile *objfile,
 		       const char *name, enum language lang)
 {
   if (objfile->per_bfd->name_of_main == NULL
-      || strcmp (objfile->per_bfd->name_of_main, name) != 0)
+      || !streq (objfile->per_bfd->name_of_main, name))
     objfile->per_bfd->name_of_main
       = obstack_strdup (&objfile->per_bfd->storage_obstack, name);
   objfile->per_bfd->language_of_main = lang;
@@ -982,7 +982,7 @@ pc_in_section (CORE_ADDR pc, const char *name)
   struct obj_section *s = find_pc_section (pc);
   return (s != nullptr
 	  && s->the_bfd_section->name != nullptr
-	  && strcmp (s->the_bfd_section->name, name) == 0);
+	  && streq (s->the_bfd_section->name, name));
 }
 
 /* See objfiles.h.  */
diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
index 0ec7cf861ae9..8576f4224a29 100644
--- a/gdb/opencl-lang.c
+++ b/gdb/opencl-lang.c
@@ -346,28 +346,28 @@ opencl_component_ref (struct expression *exp, struct value *val,
       && src_len != 16)
     error (_("Invalid OpenCL vector size"));
 
-  if (strcmp (comps, "lo") == 0 )
+  if (streq (comps, "lo"))
     {
       dst_len = (src_len == 3) ? 2 : src_len / 2;
 
       for (i = 0; i < dst_len; i++)
 	indices[i] = i;
     }
-  else if (strcmp (comps, "hi") == 0)
+  else if (streq (comps, "hi"))
     {
       dst_len = (src_len == 3) ? 2 : src_len / 2;
 
       for (i = 0; i < dst_len; i++)
 	indices[i] = dst_len + i;
     }
-  else if (strcmp (comps, "even") == 0)
+  else if (streq (comps, "even"))
     {
       dst_len = (src_len == 3) ? 2 : src_len / 2;
 
       for (i = 0; i < dst_len; i++)
 	indices[i] = i*2;
     }
-  else if (strcmp (comps, "odd") == 0)
+  else if (streq (comps, "odd"))
     {
       dst_len = (src_len == 3) ? 2 : src_len / 2;
 
diff --git a/gdb/osabi.c b/gdb/osabi.c
index d00da1349a0e..49f618610b08 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -353,7 +353,7 @@ check_note (bfd *abfd, asection *sect, char *note, unsigned int *sectsize,
 
   /* Check the note name.  */
   if (bfd_h_get_32 (abfd, note) != (strlen (name) + 1)
-      || strcmp (note + 12, name) != 0)
+      || !streq (note + 12, name))
     return 0;
 
   /* Check the descriptor size.  */
@@ -391,7 +391,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
   char note[MAX_NOTESZ];
 
   /* .note.ABI-tag notes, used by GNU/Linux and FreeBSD.  */
-  if (strcmp (name, ".note.ABI-tag") == 0)
+  if (streq (name, ".note.ABI-tag"))
     {
       /* GNU.  */
       if (check_note (abfd, sect, note, &sectsize, "GNU", 16, NT_GNU_ABI_TAG))
@@ -440,7 +440,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
     }
 
   /* .note.netbsd.ident notes, used by NetBSD.  */
-  if (strcmp (name, ".note.netbsd.ident") == 0
+  if (streq (name, ".note.netbsd.ident")
       && check_note (abfd, sect, note, &sectsize, "NetBSD", 4, NT_NETBSD_IDENT))
     {
       /* There is no need to check the version yet.  */
@@ -449,7 +449,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
     }
 
   /* .note.openbsd.ident notes, used by OpenBSD.  */
-  if (strcmp (name, ".note.openbsd.ident") == 0
+  if (streq (name, ".note.openbsd.ident")
       && check_note (abfd, sect, note, &sectsize, "OpenBSD", 4,
 		     NT_OPENBSD_IDENT))
     {
@@ -459,7 +459,7 @@ generic_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect,
     }
 
   /* .note.netbsdcore.procinfo notes, used by NetBSD.  */
-  if (strcmp (name, ".note.netbsdcore.procinfo") == 0)
+  if (streq (name, ".note.netbsdcore.procinfo"))
     {
       *osabi = GDB_OSABI_NETBSD;
       return;
@@ -557,9 +557,9 @@ gdbarch_osabi_enum_name (enum gdb_osabi osabi)
 static void
 set_osabi (const char *args, int from_tty, struct cmd_list_element *c)
 {
-  if (strcmp (set_osabi_string, "auto") == 0)
+  if (streq (set_osabi_string, "auto"))
     user_osabi_state = osabi_auto;
-  else if (strcmp (set_osabi_string, "default") == 0)
+  else if (streq (set_osabi_string, "default"))
     {
       user_selected_osabi = GDB_OSABI_DEFAULT;
       user_osabi_state = osabi_user;
@@ -572,7 +572,7 @@ set_osabi (const char *args, int from_tty, struct cmd_list_element *c)
 	{
 	  enum gdb_osabi osabi = (enum gdb_osabi) i;
 
-	  if (strcmp (set_osabi_string, gdbarch_osabi_name (osabi)) == 0)
+	  if (streq (set_osabi_string, gdbarch_osabi_name (osabi)))
 	    {
 	      user_selected_osabi = osabi;
 	      user_osabi_state = osabi_user;
@@ -619,7 +619,7 @@ INIT_GDB_FILE (gdb_osabi)
   /* Register the "set osabi" command.  */
   user_osabi_state = osabi_auto;
   set_osabi_string = gdb_osabi_available_names[0];
-  gdb_assert (strcmp (set_osabi_string, "auto") == 0);
+  gdb_assert (streq (set_osabi_string, "auto"));
   add_setshow_enum_cmd ("osabi", class_support, gdb_osabi_available_names,
 			&set_osabi_string,
 			_("Set OS ABI of target."),
diff --git a/gdb/p-exp.y b/gdb/p-exp.y
index 00b67647fc56..37831be90748 100644
--- a/gdb/p-exp.y
+++ b/gdb/p-exp.y
@@ -1374,29 +1374,29 @@ yylex (void)
   switch (namelen)
     {
     case 6:
-      if (strcmp (uptokstart, "OBJECT") == 0)
+      if (streq (uptokstart, "OBJECT"))
 	{
 	  free (uptokstart);
 	  return CLASS;
 	}
-      if (strcmp (uptokstart, "RECORD") == 0)
+      if (streq (uptokstart, "RECORD"))
 	{
 	  free (uptokstart);
 	  return STRUCT;
 	}
-      if (strcmp (uptokstart, "SIZEOF") == 0)
+      if (streq (uptokstart, "SIZEOF"))
 	{
 	  free (uptokstart);
 	  return SIZEOF;
 	}
       break;
     case 5:
-      if (strcmp (uptokstart, "CLASS") == 0)
+      if (streq (uptokstart, "CLASS"))
 	{
 	  free (uptokstart);
 	  return CLASS;
 	}
-      if (strcmp (uptokstart, "FALSE") == 0)
+      if (streq (uptokstart, "FALSE"))
 	{
 	  yylval.lval = 0;
 	  free (uptokstart);
@@ -1404,13 +1404,13 @@ yylex (void)
 	}
       break;
     case 4:
-      if (strcmp (uptokstart, "TRUE") == 0)
+      if (streq (uptokstart, "TRUE"))
 	{
 	  yylval.lval = 1;
 	  free (uptokstart);
 	  return TRUEKEYWORD;
 	}
-      if (strcmp (uptokstart, "SELF") == 0)
+      if (streq (uptokstart, "SELF"))
 	{
 	  /* Here we search for 'this' like
 	     inserted in FPC stabs debug info.  */
diff --git a/gdb/p-lang.c b/gdb/p-lang.c
index f509f26e6ac2..3703e0247860 100644
--- a/gdb/p-lang.c
+++ b/gdb/p-lang.c
@@ -99,9 +99,9 @@ pascal_is_string_type (struct type *type,int *length_pos, int *length_size,
       /* Two fields: length and st.  */
       if (type->num_fields () == 2
 	  && type->field (0).name ()
-	  && strcmp (type->field (0).name (), "length") == 0
+	  && streq (type->field (0).name (), "length")
 	  && type->field (1).name ()
-	  && strcmp (type->field (1).name (), "st") == 0)
+	  && streq (type->field (1).name (), "st"))
 	{
 	  if (length_pos)
 	    *length_pos = type->field (0).loc_bitpos () / TARGET_CHAR_BIT;
@@ -119,9 +119,9 @@ pascal_is_string_type (struct type *type,int *length_pos, int *length_size,
       /* Three fields: Capacity, length and schema$ or _p_schema.  */
       if (type->num_fields () == 3
 	  && type->field (0).name ()
-	  && strcmp (type->field (0).name (), "Capacity") == 0
+	  && streq (type->field (0).name (), "Capacity")
 	  && type->field (1).name ()
-	  && strcmp (type->field (1).name (), "length") == 0)
+	  && streq (type->field (1).name (), "length"))
 	{
 	  if (length_pos)
 	    *length_pos = type->field (1).loc_bitpos () / TARGET_CHAR_BIT;
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index 3e9b1c259b83..f64c1069b531 100644
--- a/gdb/p-valprint.c
+++ b/gdb/p-valprint.c
@@ -426,9 +426,9 @@ pascal_language::value_print (struct value *val, struct ui_file *stream,
       /* Hack:  remove (char *) for char strings.  Their
 	 type is indicated by the quoted string anyway.  */
       if (type->code () == TYPE_CODE_PTR
-	  && type->name () == NULL
-	  && type->target_type ()->name () != NULL
-	  && strcmp (type->target_type ()->name (), "char") == 0)
+	  && type->name () == nullptr
+	  && type->target_type ()->name () != nullptr
+	  && streq (type->target_type ()->name (), "char"))
 	{
 	  /* Print nothing.  */
 	}
@@ -474,8 +474,7 @@ pascal_object_is_vtbl_ptr_type (struct type *type)
 {
   const char *type_name = type->name ();
 
-  return (type_name != NULL
-	  && strcmp (type_name, pascal_vtbl_ptr_name) == 0);
+  return type_name != nullptr && streq (type_name, pascal_vtbl_ptr_name);
 }
 
 /* Return truth value for the assertion that TYPE is of the type
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index 2dd36786bd3b..19698eaacbe5 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -341,8 +341,8 @@ ppc_linux_ilp32_svr4_solib_ops::in_dynsym_resolve_code (CORE_ADDR pc) const
   if (sym.minsym == nullptr)
     return false;
 
-  return (strcmp (sym.minsym->linkage_name (), "__glink") == 0
-	  || strcmp (sym.minsym->linkage_name (), "__glink_PLTresolve") == 0);
+  return (streq (sym.minsym->linkage_name (), "__glink")
+	  || streq (sym.minsym->linkage_name (), "__glink_PLTresolve"));
 }
 
 /* Follow PLT stub to actual routine.
@@ -2009,14 +2009,14 @@ ppc_floatformat_for_type (struct gdbarch *gdbarch,
 {
   if (len == 128 && name)
     {
-      if (strcmp (name, "__float128") == 0
-	  || strcmp (name, "_Float128") == 0
-	  || strcmp (name, "_Float64x") == 0
-	  || strcmp (name, "complex _Float128") == 0
-	  || strcmp (name, "complex _Float64x") == 0)
+      if (streq (name, "__float128")
+	  || streq (name, "_Float128")
+	  || streq (name, "_Float64x")
+	  || streq (name, "complex _Float128")
+	  || streq (name, "complex _Float64x"))
 	return floatformats_ieee_quad;
 
-      if (strcmp (name, "__ibm128") == 0)
+      if (streq (name, "__ibm128"))
 	return floatformats_ibm_long_double;
     }
 
@@ -2033,8 +2033,8 @@ linux_dwarf2_omit_typedef_p (struct type *target_type,
     {
       if ((target_type->code () == TYPE_CODE_FLT
 	   || target_type->code () == TYPE_CODE_COMPLEX)
-	  && (strcmp (name, "long double") == 0
-	      || strcmp (name, "complex long double") == 0))
+	  && (streq (name, "long double")
+	      || streq (name, "complex long double")))
 	{
 	  /* IEEE 128-bit floating point and IBM long double are two
 	     encodings for 128-bit values.  The DWARF debug data can't
diff --git a/gdb/ppc64-tdep.c b/gdb/ppc64-tdep.c
index 74044097c6bd..9011a3546127 100644
--- a/gdb/ppc64-tdep.c
+++ b/gdb/ppc64-tdep.c
@@ -752,7 +752,7 @@ ppc64_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
   const struct target_section *s = target_section_by_addr (targ, addr);
 
   /* Check if ADDR points to a function descriptor.  */
-  if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
+  if (s && streq (s->the_bfd_section->name, ".opd"))
     {
       /* There may be relocations that need to be applied to the .opd
 	 section.  Unfortunately, this function may be called at a time
diff --git a/gdb/probe.c b/gdb/probe.c
index 08c613bd9c7f..f9eb94d18829 100644
--- a/gdb/probe.c
+++ b/gdb/probe.c
@@ -729,7 +729,7 @@ ignore_probes_command (const char *arg, int from_tty)
       const char *idx = arg;
       std::string s = extract_arg (&idx);
 
-      if (strcmp (s.c_str (), "-reset") == 0)
+      if (streq (s.c_str (), "-reset"))
 	{
 	  if (*idx != '\0')
 	    error (_("-reset: no arguments allowed"));
@@ -739,8 +739,7 @@ ignore_probes_command (const char *arg, int from_tty)
 	  return;
 	}
 
-      if (strcmp (s.c_str (), "-verbose") == 0
-	  || strcmp (s.c_str (), "-v") == 0)
+      if (streq (s.c_str (), "-verbose") || streq (s.c_str (), "-v"))
 	{
 	  verbose_p = true;
 	  arg = idx;
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index c5d3d7e2d7e7..03388812ff89 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -1410,7 +1410,7 @@ local_setattro (PyObject *self, PyObject *name, PyObject *v)
   /* If the attribute trying to be set is the "stop" method,
      but we already have a condition set in the CLI or other extension
      language, disallow this operation.  */
-  if (strcmp (attr.get (), stop_func) == 0)
+  if (streq (attr.get (), stop_func))
     {
       const struct extension_language_defn *extlang = NULL;
 
diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c
index 26998064206e..fe191451e548 100644
--- a/gdb/python/py-lazy-string.c
+++ b/gdb/python/py-lazy-string.c
@@ -231,7 +231,7 @@ gdbpy_create_lazy_string_object (CORE_ADDR address, long length,
 
   str_obj->address = address;
   str_obj->length = length;
-  if (encoding == NULL || !strcmp (encoding, ""))
+  if (encoding == NULL || streq (encoding, ""))
     str_obj->encoding = NULL;
   else
     str_obj->encoding = xstrdup (encoding);
diff --git a/gdb/python/py-micmd.c b/gdb/python/py-micmd.c
index 0c820751c567..ab06e197d841 100644
--- a/gdb/python/py-micmd.c
+++ b/gdb/python/py-micmd.c
@@ -144,8 +144,7 @@ struct mi_command_py : public mi_command
        than changing the value of mi_command::m_name (which is not accessible
        from here) to point to the name owned by the new object, swap the names
        of the two objects, since we know they are identical strings.  */
-    gdb_assert (strcmp (new_pyobj->mi_command_name,
-			m_pyobj->mi_command_name) == 0);
+    gdb_assert (streq (new_pyobj->mi_command_name, m_pyobj->mi_command_name));
     std::swap (new_pyobj->mi_command_name, m_pyobj->mi_command_name);
 
     /* Take a reference to the new object, drop the reference to the current
@@ -385,7 +384,7 @@ micmdpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
 
 	 So, for now at least, we don't allow this.  This doesn't seem like
 	 an excessive restriction.  */
-      if (strcmp (cmd->mi_command_name, name) != 0)
+      if (!streq (cmd->mi_command_name, name))
 	{
 	  PyErr_SetString
 	    (PyExc_ValueError,
diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c
index 8765b1b383d1..bc028f1746c6 100644
--- a/gdb/python/py-param.c
+++ b/gdb/python/py-param.c
@@ -242,7 +242,7 @@ set_parameter_value (parmpy_object *self, PyObject *value)
 	if (str == NULL)
 	  return -1;
 	for (i = 0; self->enumeration[i]; ++i)
-	  if (! strcmp (self->enumeration[i], str.get ()))
+	  if (streq (self->enumeration[i], str.get ()))
 	    break;
 	if (! self->enumeration[i])
 	  {
@@ -328,8 +328,8 @@ set_parameter_value (parmpy_object *self, PyObject *value)
 		  buffer += ", ";
 		buffer = buffer + "'" + l->literal + "'";
 		if (allowed == TRIBOOL_UNKNOWN
-		    && ((value == Py_None && !strcmp ("unlimited", l->literal))
-			|| (s != nullptr && !strcmp (s, l->literal))))
+		    && ((value == Py_None && streq ("unlimited", l->literal))
+			|| (s != nullptr && streq (s, l->literal))))
 		  {
 		    val = l->use;
 		    allowed = TRIBOOL_TRUE;
diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c
index 3dcb4fba1e48..0cf0cde881c4 100644
--- a/gdb/python/py-prettyprint.c
+++ b/gdb/python/py-prettyprint.c
@@ -323,7 +323,7 @@ print_string_repr (PyObject *printer, const char *hint,
 	      length = PyBytes_Size (string.get ());
 	      type = builtin_type (gdbarch)->builtin_char;
 
-	      if (hint && !strcmp (hint, "string"))
+	      if (hint && streq (hint, "string"))
 		language->printstr (stream, type, (gdb_byte *) output,
 				    length, NULL, 0, options);
 	      else
@@ -370,8 +370,8 @@ print_children (PyObject *printer, const char *hint,
 
   /* If we are printing a map or an array, we want some special
      formatting.  */
-  is_map = hint && ! strcmp (hint, "map");
-  is_array = hint && ! strcmp (hint, "array");
+  is_map = hint && streq (hint, "map");
+  is_array = hint && streq (hint, "array");
 
   gdbpy_ref<> children (PyObject_CallMethodObjArgs (printer, gdbpy_children_cst,
 						    NULL));
diff --git a/gdb/python/py-style.c b/gdb/python/py-style.c
index aa6eccaadbe3..d149d90aaa9f 100644
--- a/gdb/python/py-style.c
+++ b/gdb/python/py-style.c
@@ -135,28 +135,27 @@ stylepy_style_from_name (const char *name, bool *has_intensity_ptr = nullptr,
       if (!sub->var.has_value ())
 	continue;
 
-      if (strcmp (sub->name, "foreground") == 0)
+      if (streq (sub->name, "foreground"))
 	{
 	  const ui_file_style::color &color
 	    = sub->var->get<ui_file_style::color> ();
 	  style.set_fg (color);
 	  has_fg = true;
 	}
-      else if (strcmp (sub->name, "background") == 0)
+      else if (streq (sub->name, "background"))
 	{
 	  const ui_file_style::color &color
 	    = sub->var->get<ui_file_style::color> ();
 	  style.set_bg (color);
 	  has_bg = true;
 	}
-      else if (strcmp (sub->name, "intensity") == 0
-	       && sub->var->type () == var_enum)
+      else if (streq (sub->name, "intensity") && sub->var->type () == var_enum)
 	{
 	  const char *intensity_str = sub->var->get<const char *> ();
 	  ui_file_style::intensity intensity = ui_file_style::NORMAL;
-	  if (strcmp (intensity_str, "bold") == 0)
+	  if (streq (intensity_str, "bold"))
 	    intensity = ui_file_style::BOLD;
-	  else if (strcmp (intensity_str, "dim") == 0)
+	  else if (streq (intensity_str, "dim"))
 	    intensity = ui_file_style::DIM;
 	  style.set_intensity (intensity);
 	  has_intensity = true;
diff --git a/gdb/python/python.c b/gdb/python/python.c
index 5474b8d644f8..6e13ab5bb3f7 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -552,7 +552,7 @@ gdbpy_parameter_value (const setting &var)
 	       l++)
 	    if (value == l->use)
 	      {
-		if (strcmp (l->literal, "unlimited") == 0)
+		if (streq (l->literal, "unlimited"))
 		  {
 		    /* Compatibility hack for API brokenness.  */
 		    if (var.type () == var_pinteger
diff --git a/gdb/record.c b/gdb/record.c
index 84a649c9e4e9..c01a1fd2bcf1 100644
--- a/gdb/record.c
+++ b/gdb/record.c
@@ -103,20 +103,20 @@ record_start (const char *method, const char *format, int from_tty)
       else
 	error (_("Invalid format."));
     }
-  else if (strcmp (method, "full") == 0)
+  else if (streq (method, "full"))
     {
       if (format == NULL)
 	execute_command_to_string ("record full", from_tty, false);
       else
 	error (_("Invalid format."));
     }
-  else if (strcmp (method, "btrace") == 0)
+  else if (streq (method, "btrace"))
     {
       if (format == NULL)
 	execute_command_to_string ("record btrace", from_tty, false);
-      else if (strcmp (format, "bts") == 0)
+      else if (streq (format, "bts"))
 	execute_command_to_string ("record btrace bts", from_tty, false);
-      else if (strcmp (format, "pt") == 0)
+      else if (streq (format, "pt"))
 	execute_command_to_string ("record btrace pt", from_tty, false);
       else
 	error (_("Invalid format."));
@@ -561,9 +561,9 @@ cmd_record_insn_history (const char *arg, int from_tty)
 
   int size = command_size_to_target_size (record_insn_history_size);
 
-  if (arg == NULL || *arg == 0 || strcmp (arg, "+") == 0)
+  if (arg == NULL || *arg == 0 || streq (arg, "+"))
     target_insn_history (size, flags);
-  else if (strcmp (arg, "-") == 0)
+  else if (streq (arg, "-"))
     target_insn_history (-size, flags);
   else
     {
@@ -678,9 +678,9 @@ cmd_record_call_history (const char *arg, int from_tty)
 
   int size = command_size_to_target_size (record_call_history_size);
 
-  if (arg == NULL || *arg == 0 || strcmp (arg, "+") == 0)
+  if (arg == NULL || *arg == 0 || streq (arg, "+"))
     target_call_history (size, flags);
-  else if (strcmp (arg, "-") == 0)
+  else if (streq (arg, "-"))
     target_call_history (-size, flags);
   else
     {
diff --git a/gdb/regformats/regdef.h b/gdb/regformats/regdef.h
index e2ef0a0b6905..dc6d8f97126f 100644
--- a/gdb/regformats/regdef.h
+++ b/gdb/regformats/regdef.h
@@ -51,7 +51,7 @@ struct reg
 
   bool operator== (const reg &other) const
   {
-    return (strcmp (name, other.name) == 0
+    return (streq (name, other.name)
 	    && offset == other.offset
 	    && size == other.size);
   }
diff --git a/gdb/reggroups.c b/gdb/reggroups.c
index d5af2ce0736b..9619aac2b8c6 100644
--- a/gdb/reggroups.c
+++ b/gdb/reggroups.c
@@ -170,7 +170,7 @@ reggroup_find (struct gdbarch *gdbarch, const char *name)
 {
   for (const struct reggroup *group : gdbarch_reggroups (gdbarch))
     {
-      if (strcmp (name, group->name ()) == 0)
+      if (streq (name, group->name ()))
 	return group;
     }
   return NULL;
diff --git a/gdb/remote-fileio.c b/gdb/remote-fileio.c
index 30afc3737ab8..0b56e1ddca93 100644
--- a/gdb/remote-fileio.c
+++ b/gdb/remote-fileio.c
@@ -1072,7 +1072,7 @@ do_remote_fileio_request (remote_target *remote, char *buf)
   else
     c = strchr (buf, '\0');
   for (idx = 0; remote_fio_func_map[idx].name; ++idx)
-    if (!strcmp (remote_fio_func_map[idx].name, buf))
+    if (streq (remote_fio_func_map[idx].name, buf))
       break;
   if (!remote_fio_func_map[idx].name)
     remote_fileio_reply (remote, -1, FILEIO_ENOSYS);
diff --git a/gdb/remote.c b/gdb/remote.c
index 88b06e688bc6..46bc584b27dc 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -2432,11 +2432,9 @@ set_memory_packet_size (const char *args, struct memory_packet_config *config,
 
   if (args == NULL)
     error (_("Argument required (integer, \"fixed\" or \"limit\")."));
-  else if (strcmp (args, "hard") == 0
-      || strcmp (args, "fixed") == 0)
+  else if (streq (args, "hard") || streq (args, "fixed"))
     fixed_p = 1;
-  else if (strcmp (args, "soft") == 0
-	   || strcmp (args, "limit") == 0)
+  else if (streq (args, "soft") || streq (args, "limit"))
     fixed_p = 0;
   else
     {
@@ -3053,7 +3051,7 @@ remote_target::remote_query_attached (int pid)
   switch (result.status ())
     {
     case PACKET_OK:
-      if (strcmp (rs->buf.data (), "1") == 0)
+      if (streq (rs->buf.data (), "1"))
 	return 1;
       break;
     case PACKET_ERROR:
@@ -3351,7 +3349,7 @@ remote_target::pass_signals (gdb::array_view<const unsigned char> pass_signals)
 	    }
 	}
       *p = 0;
-      if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
+      if (!rs->last_pass_packet || !streq (rs->last_pass_packet, pass_packet))
 	{
 	  putpkt (pass_packet);
 	  getpkt (&rs->buf);
@@ -3471,7 +3469,7 @@ remote_target::program_signals (gdb::array_view<const unsigned char> signals)
 	}
       *p = 0;
       if (!rs->last_program_signals_packet
-	  || strcmp (rs->last_program_signals_packet, packet) != 0)
+	  || !streq (rs->last_program_signals_packet, packet))
 	{
 	  putpkt (packet);
 	  getpkt (&rs->buf);
@@ -5531,12 +5529,12 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
 
     putpkt (v_mustreplyempty);
     getpkt (&rs->buf);
-    if (strcmp (rs->buf.data (), "OK") == 0)
+    if (streq (rs->buf.data (), "OK"))
       {
 	m_features.m_protocol_packets[PACKET_vFile_setfs].support
 	  = PACKET_DISABLE;
       }
-    else if (strcmp (rs->buf.data (), "") != 0)
+    else if (!streq (rs->buf.data (), ""))
       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
 	     rs->buf.data ());
   }
@@ -5631,7 +5629,7 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
       putpkt ("QNonStop:1");
       getpkt (&rs->buf);
 
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("Remote refused setting non-stop mode with: %s"),
 	       rs->buf.data ());
 
@@ -5648,7 +5646,7 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
       putpkt ("QNonStop:0");
       getpkt (&rs->buf);
 
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("Remote refused setting all-stop mode with: %s"),
 	       rs->buf.data ());
     }
@@ -5775,7 +5773,7 @@ remote_target::start_remote_1 (int from_tty, int extended_p)
 	 reply.  In the latter case, there may be more than one thread
 	 stopped --- we pull them all out using the vStopped
 	 mechanism.  */
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	{
 	  const notif_client *notif = &notif_client_stop;
 
@@ -6015,7 +6013,7 @@ remote_target::set_permissions ()
 
   /* If the target didn't like the packet, warn the user.  Do not try
      to undo the user's settings, that would just be maddening.  */
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     warning (_("Remote refused setting permissions with: %s"),
 	     rs->buf.data ());
 }
@@ -6284,7 +6282,7 @@ register_remote_support_xml (const char *xml)
 
       do
 	{
-	  if (strcmp (p, xml) == 0)
+	  if (streq (p, xml))
 	    {
 	      /* already there */
 	      xfree (copy);
@@ -6473,7 +6471,7 @@ remote_target::remote_query_supported ()
 	}
 
       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
-	if (strcmp (remote_protocol_features[i].name, p) == 0)
+	if (streq (remote_protocol_features[i].name, p))
 	  {
 	    const struct protocol_feature *feature;
 
@@ -7086,7 +7084,7 @@ extended_remote_target::attach (const char *args, int from_tty)
 	  wait_status = (char *) alloca (strlen (rs->buf.data ()) + 1);
 	  strcpy (wait_status, rs->buf.data ());
 	}
-      else if (strcmp (rs->buf.data (), "OK") != 0)
+      else if (!streq (rs->buf.data (), "OK"))
 	error (_("Attaching to %s failed with: %s"),
 	       target_pid_to_str (ptid_t (pid)).c_str (),
 	       rs->buf.data ());
@@ -7457,7 +7455,7 @@ remote_target::remote_resume_with_vcont (ptid_t scope_ptid, int step,
 	 reply will be reported asynchronously by means of a `%Stop'
 	 notification.  */
       getpkt (&rs->buf);
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("Unexpected vCont reply in non-stop mode: %s"),
 	       rs->buf.data ());
     }
@@ -7609,7 +7607,7 @@ vcont_builder::flush ()
   rs = m_remote->get_remote_state ();
   m_remote->putpkt (rs->buf);
   m_remote->getpkt (&rs->buf);
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf.data ());
 }
 
@@ -7973,7 +7971,7 @@ remote_target::remote_stop_ns (ptid_t ptid)
      come in asynchronously by notification.  */
   putpkt (rs->buf);
   getpkt (&rs->buf);
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid).c_str (),
 	   rs->buf.data ());
 }
@@ -8841,7 +8839,7 @@ remote_target::remote_notif_get_pending_events (const notif_client *nc)
       while (1)
 	{
 	  getpkt (&rs->buf);
-	  if (strcmp (rs->buf.data (), "OK") == 0)
+	  if (streq (rs->buf.data (), "OK"))
 	    break;
 	  else
 	    remote_notif_ack (this, nc, rs->buf.data ());
@@ -11237,7 +11235,7 @@ remote_target::extended_remote_disable_randomization (int val)
   reply = remote_get_noisy_reply ();
   if (*reply == '\0')
     error (_("Target does not support QDisableRandomization."));
-  if (strcmp (reply, "OK") != 0)
+  if (!streq (reply, "OK"))
     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
 }
 
@@ -11332,7 +11330,7 @@ remote_target::send_environment_packet (const char *action,
 
   putpkt (rs->buf);
   getpkt (&rs->buf);
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     warning (_("Unable to %s environment variable '%s' on remote."),
 	     action, value);
 }
@@ -11348,7 +11346,7 @@ remote_target::extended_remote_environment_support ()
     {
       putpkt ("QEnvironmentReset");
       getpkt (&rs->buf);
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	warning (_("Unable to reset environment on remote."));
     }
 
@@ -11525,7 +11523,7 @@ extended_remote_target::create_inferior (const char *exec_file,
 		 "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
       putpkt (rs->buf);
       getpkt (&rs->buf);
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("\
 Remote replied unexpectedly while setting startup-with-shell: %s"),
 	       rs->buf.data ());
@@ -12083,7 +12081,7 @@ compare_sections_command (const char *args, int from_tty)
   if (!current_program_space->exec_bfd ())
     error (_("command cannot be used without an exec file"));
 
-  if (args != NULL && strcmp (args, "-r") == 0)
+  if (args != NULL && streq (args, "-r"))
     {
       read_only = 1;
       args = NULL;
@@ -12102,7 +12100,7 @@ compare_sections_command (const char *args, int from_tty)
 	continue;		/* Skip zero-length section.  */
 
       sectname = bfd_section_name (s);
-      if (args && strcmp (args, sectname) != 0)
+      if (args && !streq (args, sectname))
 	continue;		/* Not the section selected by user.  */
 
       matched = 1;		/* Do this section.  */
@@ -12203,8 +12201,8 @@ remote_target::remote_read_qxfer (const char *object_name,
      this request.  */
   if (rs->finished_object)
     {
-      if (strcmp (object_name, rs->finished_object) == 0
-	  && strcmp (annex ? annex : "", rs->finished_annex) == 0
+      if (streq (object_name, rs->finished_object)
+	  && streq (annex ? annex : "", rs->finished_annex)
 	  && offset == rs->finished_offset)
 	return TARGET_XFER_EOF;
 
@@ -12633,7 +12631,7 @@ remote_target::rcmd (const char *command, struct ui_file *outbuf)
 	  break;
 	}
 
-      if (strcmp (buf, "OK") != 0)
+      if (!streq (buf, "OK"))
 	{
 	  for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
 	    {
@@ -14241,7 +14239,7 @@ remote_target::trace_init ()
 
   putpkt ("QTinit");
   remote_get_noisy_reply ();
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Target does not support this command."));
 }
 
@@ -14264,7 +14262,7 @@ remote_target::remote_download_command_source (int num, ULONGEST addr,
 			    rs->buf.size () - strlen (rs->buf.data ()));
       putpkt (rs->buf);
       remote_get_noisy_reply ();
-      if (strcmp (rs->buf.data (), "OK"))
+      if (!streq (rs->buf.data (), "OK"))
 	warning (_("Target does not support source download."));
 
       if (cmd->control_type == while_control
@@ -14279,7 +14277,7 @@ remote_target::remote_download_command_source (int num, ULONGEST addr,
 				rs->buf.size () - strlen (rs->buf.data ()));
 	  putpkt (rs->buf);
 	  remote_get_noisy_reply ();
-	  if (strcmp (rs->buf.data (), "OK"))
+	  if (!streq (rs->buf.data (), "OK"))
 	    warning (_("Target does not support source download."));
 	}
     }
@@ -14426,7 +14424,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
 
   putpkt (buf.data ());
   remote_get_noisy_reply ();
-  if (strcmp (rs->buf.data (), "OK"))
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Target does not support tracepoints."));
 
   /* do_single_steps (t); */
@@ -14448,7 +14446,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
 
       putpkt (buf.data ());
       remote_get_noisy_reply ();
-      if (strcmp (rs->buf.data (), "OK"))
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("Error on target while setting tracepoints."));
     }
 
@@ -14471,7 +14469,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
 
       putpkt (buf.data ());
       remote_get_noisy_reply ();
-      if (strcmp (rs->buf.data (), "OK"))
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("Error on target while setting tracepoints."));
     }
 
@@ -14490,7 +14488,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
 				buf.size () - strlen (buf.data ()));
 	  putpkt (buf.data ());
 	  remote_get_noisy_reply ();
-	  if (strcmp (rs->buf.data (), "OK"))
+	  if (!streq (rs->buf.data (), "OK"))
 	    warning (_("Target does not support source download."));
 	}
       if (b->cond_string)
@@ -14506,7 +14504,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
 				buf.size () - strlen (buf.data ()));
 	  putpkt (buf.data ());
 	  remote_get_noisy_reply ();
-	  if (strcmp (rs->buf.data (), "OK"))
+	  if (!streq (rs->buf.data (), "OK"))
 	    warning (_("Target does not support source download."));
 	}
       remote_download_command_source (b->number, loc->address,
@@ -14561,7 +14559,7 @@ remote_target::download_trace_state_variable (const trace_state_variable &tsv)
   remote_get_noisy_reply ();
   if (rs->buf[0] == '\0')
     error (_("Target does not support this command."));
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Error on target while downloading trace state variable."));
 }
 
@@ -14577,7 +14575,7 @@ remote_target::enable_tracepoint (struct bp_location *location)
   remote_get_noisy_reply ();
   if (rs->buf[0] == '\0')
     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Error on target while enabling tracepoint."));
 }
 
@@ -14593,7 +14591,7 @@ remote_target::disable_tracepoint (struct bp_location *location)
   remote_get_noisy_reply ();
   if (rs->buf[0] == '\0')
     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Error on target while disabling tracepoint."));
 }
 
@@ -14658,7 +14656,7 @@ remote_target::trace_start ()
   remote_get_noisy_reply ();
   if (rs->buf[0] == '\0')
     error (_("Target does not support this command."));
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Bogus reply from target: %s"), rs->buf.data ());
 }
 
@@ -14770,7 +14768,7 @@ remote_target::trace_stop ()
   remote_get_noisy_reply ();
   if (rs->buf[0] == '\0')
     error (_("Target does not support this command."));
-  if (strcmp (rs->buf.data (), "OK") != 0)
+  if (!streq (rs->buf.data (), "OK"))
     error (_("Bogus reply from target: %s"), rs->buf.data ());
 }
 
@@ -14898,7 +14896,7 @@ remote_target::save_trace_data (const char *filename)
   reply = remote_get_noisy_reply ();
   if (*reply == '\0')
     error (_("Target does not support this command."));
-  if (strcmp (reply, "OK") != 0)
+  if (!streq (reply, "OK"))
     error (_("Bogus reply from target: %s"), reply);
   return 0;
 }
@@ -14962,7 +14960,7 @@ remote_target::set_disconnected_tracing (int val)
       reply = remote_get_noisy_reply ();
       if (*reply == '\0')
 	error (_("Target does not support this command."));
-      if (strcmp (reply, "OK") != 0)
+      if (!streq (reply, "OK"))
 	error (_("Bogus reply from target: %s"), reply);
     }
   else if (val)
@@ -14992,7 +14990,7 @@ remote_target::set_circular_trace_buffer (int val)
   reply = remote_get_noisy_reply ();
   if (*reply == '\0')
     error (_("Target does not support this command."));
-  if (strcmp (reply, "OK") != 0)
+  if (!streq (reply, "OK"))
     error (_("Bogus reply from target: %s"), reply);
 }
 
@@ -15117,7 +15115,7 @@ remote_target::set_trace_notes (const char *user, const char *notes,
   if (*reply == '\0')
     return false;
 
-  if (strcmp (reply, "OK") != 0)
+  if (!streq (reply, "OK"))
     error (_("Bogus reply from target: %s"), reply);
 
   return true;
@@ -15135,7 +15133,7 @@ remote_target::use_agent (bool use)
       putpkt (rs->buf);
       getpkt (&rs->buf);
 
-      if (strcmp (rs->buf.data (), "OK") == 0)
+      if (streq (rs->buf.data (), "OK"))
 	{
 	  ::use_agent = use;
 	  return true;
@@ -15164,7 +15162,7 @@ check_xml_btrace_version (struct gdb_xml_parser *parser,
   const char *version
     = (const char *) xml_find_attribute (attributes, "version")->value.get ();
 
-  if (strcmp (version, "1.0") != 0)
+  if (!streq (version, "1.0"))
     gdb_xml_error (parser, _("Unsupported btrace version: \"%s\""), version);
 }
 
@@ -15260,7 +15258,7 @@ parse_xml_btrace_pt_config_cpu (struct gdb_xml_parser *parser,
 
   btrace = (struct btrace_data *) user_data;
 
-  if (strcmp (vendor, "GenuineIntel") == 0)
+  if (streq (vendor, "GenuineIntel"))
     btrace->variant.pt.config.cpu.vendor = CV_INTEL;
 
   btrace->variant.pt.config.cpu.family = *family;
@@ -16017,7 +16015,7 @@ remote_target::thread_events (bool enable)
   switch (result.status ())
     {
     case PACKET_OK:
-      if (strcmp (rs->buf.data (), "OK") != 0)
+      if (!streq (rs->buf.data (), "OK"))
 	error (_("Remote refused setting thread events: %s"), rs->buf.data ());
       rs->last_thread_events = enable;
       break;
@@ -16073,7 +16071,7 @@ remote_target::commit_requested_thread_options ()
       switch (result.status ())
 	{
 	case PACKET_OK:
-	  if (strcmp (rs->buf.data (), "OK") != 0)
+	  if (!streq (rs->buf.data (), "OK"))
 	    error (_("Remote refused setting thread options: %s"), rs->buf.data ());
 	  break;
 	case PACKET_ERROR:
@@ -16150,7 +16148,7 @@ show_remote_cmd (const char *args, int from_tty)
   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
   const ui_file_style cmd_style = command_style.style ();
   for (; list != NULL; list = list->next)
-    if (strcmp (list->name, "Z-packet") == 0)
+    if (streq (list->name, "Z-packet"))
       continue;
     else if (list->type == not_set_cmd)
       /* Alias commands are exactly like the original, except they
@@ -16562,11 +16560,11 @@ test_memory_tagging_functions ()
 
   expected = "qMemTags:0,0:0";
   create_fetch_memtags_request (packet, 0x0, 0x0, 0);
-  SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
+  SELF_CHECK (streq (packet.data (), expected.c_str ()));
 
   expected = "qMemTags:deadbeef,10:1";
   create_fetch_memtags_request (packet, 0xdeadbeef, 16, 1);
-  SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
+  SELF_CHECK (streq (packet.data (), expected.c_str ()));
 
   /* Test parsing a qMemTags reply.  */
 
@@ -16614,7 +16612,7 @@ test_memory_tagging_functions ()
   /* Test creating a qIsAddressTagged request.  */
   expected = "qIsAddressTagged:deadbeef";
   create_is_address_tagged_request (gdbarch, packet, 0xdeadbeef);
-  SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
+  SELF_CHECK (streq (packet.data (), expected.c_str ()));
 
   /* Test error reply on qIsAddressTagged request.  */
   reply = "E00";
@@ -16684,11 +16682,11 @@ test_packet_check_result ()
   packet_result result = packet_check_result (buf.data ());
 
   SELF_CHECK (result.status () == PACKET_ERROR);
-  SELF_CHECK (strcmp(result.err_msg (), "msg") == 0);
+  SELF_CHECK (streq (result.err_msg (), "msg"));
 
   result = packet_check_result ("E01");
   SELF_CHECK (result.status () == PACKET_ERROR);
-  SELF_CHECK (strcmp(result.err_msg (), "01") == 0);
+  SELF_CHECK (streq (result.err_msg (), "01"));
 
   SELF_CHECK (packet_check_result ("E1").status () == PACKET_OK);
 
@@ -16696,7 +16694,7 @@ test_packet_check_result ()
 
   result = packet_check_result ("E.");
   SELF_CHECK (result.status () == PACKET_ERROR);
-  SELF_CHECK (strcmp(result.err_msg (), "no error provided") == 0);
+  SELF_CHECK (streq (result.err_msg (), "no error provided"));
 
   SELF_CHECK (packet_check_result ("some response").status () == PACKET_OK);
 
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 8b06566582c5..4dfbd2ec2b86 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -1114,8 +1114,8 @@ riscv_register_type (struct gdbarch *gdbarch, int regnum)
       if (flen == 8
 	  && type->code () == TYPE_CODE_FLT
 	  && type->length () == flen
-	  && (strcmp (type->name (), "builtin_type_ieee_double") == 0
-	      || strcmp (type->name (), "double") == 0))
+	  && (streq (type->name (), "builtin_type_ieee_double")
+	      || streq (type->name (), "double")))
 	type = riscv_fpreg_d_type (gdbarch);
     }
 
@@ -4103,16 +4103,16 @@ riscv_tdesc_unknown_reg (struct gdbarch *gdbarch, tdesc_feature *feature,
      number that GDB has assigned them.  Then in riscv_register_name we will
      return no name for the three duplicates, this hides the duplicates from
      the user.  */
-  if (strcmp (tdesc_feature_name (feature), riscv_freg_feature.name ()) == 0)
+  if (streq (tdesc_feature_name (feature), riscv_freg_feature.name ()))
     {
       riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
       int *regnum_ptr = nullptr;
 
-      if (strcmp (reg_name, "fflags") == 0)
+      if (streq (reg_name, "fflags"))
 	regnum_ptr = &tdep->duplicate_fflags_regnum;
-      else if (strcmp (reg_name, "frm") == 0)
+      else if (streq (reg_name, "frm"))
 	regnum_ptr = &tdep->duplicate_frm_regnum;
-      else if (strcmp (reg_name, "fcsr") == 0)
+      else if (streq (reg_name, "fcsr"))
 	regnum_ptr = &tdep->duplicate_fcsr_regnum;
 
       if (regnum_ptr != nullptr)
@@ -4134,7 +4134,7 @@ riscv_tdesc_unknown_reg (struct gdbarch *gdbarch, tdesc_feature *feature,
   /* Any unknown registers in the CSR feature are recorded within a single
      block so we can easily identify these registers when making choices
      about register groups in riscv_register_reggroup_p.  */
-  if (strcmp (tdesc_feature_name (feature), riscv_csr_feature.name ()) == 0)
+  if (streq (tdesc_feature_name (feature), riscv_csr_feature.name ()))
     {
       riscv_gdbarch_tdep *tdep = gdbarch_tdep<riscv_gdbarch_tdep> (gdbarch);
       if (tdep->unknown_csrs_first_regnum == -1)
diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
index 2c628408b41d..e135df94a406 100644
--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -2173,7 +2173,7 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
 
 	  tmp = find_pc_misc_function (pc);
 	  if (tmp >= 0
-	      && strcmp (misc_function_vector[tmp].name, main_name ()) == 0)
+	      && streq (misc_function_vector[tmp].name, main_name ()))
 	    return pc + 8;
 	}
     }
@@ -2250,10 +2250,10 @@ rs6000_skip_main_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
       /* We check for ___eabi (three leading underscores) in addition
 	 to __eabi in case the GCC option "-fleading-underscore" was
 	 used to compile the program.  */
-      if (s.minsym != NULL
-	  && s.minsym->linkage_name () != NULL
-	  && (strcmp (s.minsym->linkage_name (), "__eabi") == 0
-	      || strcmp (s.minsym->linkage_name (), "___eabi") == 0))
+      if (s.minsym != nullptr
+	  && s.minsym->linkage_name () != nullptr
+	  && (streq (s.minsym->linkage_name (), "__eabi")
+	      || streq (s.minsym->linkage_name (), "___eabi")))
 	pc += 4;
     }
   return pc;
@@ -4098,8 +4098,7 @@ bfd_uses_spe_extensions (bfd *abfd)
       ptr += 12;
 
       /* The name must be "APUinfo\0".  */
-      if (name_len != 8
-	  && strcmp ((const char *) ptr, "APUinfo") != 0)
+      if (name_len != 8 && !streq ((const char *) ptr, "APUinfo"))
 	break;
       ptr += name_len;
 
@@ -8549,8 +8548,7 @@ powerpc_set_vector_abi (const char *args, int from_tty,
   for (vector_abi = POWERPC_VEC_AUTO;
        vector_abi != POWERPC_VEC_LAST;
        vector_abi++)
-    if (strcmp (powerpc_vector_abi_string,
-		powerpc_vector_strings[vector_abi]) == 0)
+    if (streq (powerpc_vector_abi_string, powerpc_vector_strings[vector_abi]))
       {
 	powerpc_vector_abi_global = (enum powerpc_vector_abi) vector_abi;
 	break;
diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
index 9f5c01afda49..522b20c97ff4 100644
--- a/gdb/rust-lang.c
+++ b/gdb/rust-lang.c
@@ -138,7 +138,7 @@ rust_underscore_fields (struct type *type)
 	  const char *field_name = field.name ();
 	  if (startswith (field_name, "__"))
 	    field_name += 2;
-	  if (strcmp (buf, field_name) != 0)
+	  if (!streq (buf, field_name))
 	    return false;
 	  field_number++;
 	}
@@ -192,7 +192,7 @@ rust_range_type_p (struct type *type)
     return true;
 
   int field_num = 0;
-  if (strcmp (type->field (0).name (), "start") == 0)
+  if (streq (type->field (0).name (), "start"))
     {
       if (type->num_fields () == 1)
 	return true;
@@ -204,7 +204,7 @@ rust_range_type_p (struct type *type)
       return false;
     }
 
-  return strcmp (type->field (field_num).name (), "end") == 0;
+  return streq (type->field (field_num).name (), "end");
 }
 
 /* Return true if TYPE is an inclusive range type, otherwise false.
@@ -254,9 +254,9 @@ rust_get_trait_object_pointer (struct value *value)
   int vtable_field = 0;
   for (int i = 0; i < 2; ++i)
     {
-      if (strcmp (type->field (i).name (), "vtable") == 0)
+      if (streq (type->field (i).name (), "vtable"))
 	vtable_field = i;
-      else if (strcmp (type->field (i).name (), "pointer") != 0)
+      else if (!streq (type->field (i).name (), "pointer"))
 	return NULL;
     }
 
@@ -379,7 +379,7 @@ rust_array_like_element_type (struct type *type)
   gdb_assert (rust_slice_type_p (type));
   for (const auto &field : type->fields ())
     {
-      if (strcmp (field.name (), "data_ptr") == 0)
+      if (streq (field.name (), "data_ptr"))
 	{
 	  struct type *base_type = field.type ()->target_type ();
 	  if (rewrite_slice_type (base_type, nullptr, 0, nullptr))
@@ -527,8 +527,7 @@ rust_language::val_print_slice
 
   /* &str is handled here; but for all other slice types it is fine to
      simply print the contents.  */
-  if (orig_type->name () != nullptr
-      && strcmp (orig_type->name (), "&str") == 0)
+  if (orig_type->name () != nullptr && streq (orig_type->name (), "&str"))
     {
       LONGEST low_bound, high_bound;
       if (get_array_bounds (type, &low_bound, &high_bound))
@@ -760,8 +759,10 @@ rust_language::value_print_inner
 
     case TYPE_CODE_INT:
       /* Recognize the unit type.  */
-      if (type->is_unsigned () && type->length () == 0
-	  && type->name () != NULL && strcmp (type->name (), "()") == 0)
+      if (type->is_unsigned ()
+	  && type->length () == 0
+	  && type->name () != nullptr
+	  && streq (type->name (), "()"))
 	{
 	  gdb_puts ("()", stream);
 	  break;
@@ -1323,14 +1324,13 @@ rust_compute_range (struct type *type, struct value *range,
     return;
 
   i = 0;
-  if (strcmp (type->field (0).name (), "start") == 0)
+  if (streq (type->field (0).name (), "start"))
     {
       *kind = RANGE_HIGH_BOUND_DEFAULT;
       *low = value_as_long (range->field (0));
       ++i;
     }
-  if (type->num_fields () > i
-      && strcmp (type->field (i).name (), "end") == 0)
+  if (type->num_fields () > i && streq (type->field (i).name (), "end"))
     {
       *kind = (*kind == (RANGE_LOW_BOUND_DEFAULT | RANGE_HIGH_BOUND_DEFAULT)
 	       ? RANGE_LOW_BOUND_DEFAULT : RANGE_STANDARD);
@@ -1874,7 +1874,7 @@ rust_language::is_string_type_p (struct type *type) const
 	  || (type->code () == TYPE_CODE_STRUCT
 	      && !rust_enum_p (type)
 	      && rust_slice_type_p (type)
-	      && strcmp (type->name (), "&str") == 0));
+	      && streq (type->name (), "&str")));
 }
 
 /* See language.h.  */
diff --git a/gdb/rust-parse.c b/gdb/rust-parse.c
index 9fc9a438a489..0c4f2a501abc 100644
--- a/gdb/rust-parse.c
+++ b/gdb/rust-parse.c
@@ -2211,7 +2211,7 @@ rust_lex_exception_test (rust_parser *parser, const char *input,
     }
   catch (const gdb_exception_error &except)
     {
-      SELF_CHECK (strcmp (except.what (), err) == 0);
+      SELF_CHECK (streq (except.what (), err));
     }
 }
 
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
index aed7ae6b9b4c..f9d7bdd04e41 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -1638,7 +1638,7 @@ s390_address_class_name_to_type_flags (struct gdbarch *gdbarch,
 				       const char *name,
 				       type_instance_flags *type_flags_ptr)
 {
-  if (strcmp (name, "mode32") == 0)
+  if (streq (name, "mode32"))
     {
       *type_flags_ptr = TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1;
       return true;
diff --git a/gdb/selftest-arch.c b/gdb/selftest-arch.c
index f52864e99fa4..f8e28f89eca9 100644
--- a/gdb/selftest-arch.c
+++ b/gdb/selftest-arch.c
@@ -27,13 +27,13 @@ namespace selftests {
 
 static bool skip_arch (const char *arch)
 {
-  if (strcmp ("powerpc:EC603e", arch) == 0
-      || strcmp ("powerpc:e500mc", arch) == 0
-      || strcmp ("powerpc:e500mc64", arch) == 0
-      || strcmp ("powerpc:titan", arch) == 0
-      || strcmp ("powerpc:vle", arch) == 0
-      || strcmp ("powerpc:e5500", arch) == 0
-      || strcmp ("powerpc:e6500", arch) == 0)
+  if (streq ("powerpc:EC603e", arch)
+      || streq ("powerpc:e500mc", arch)
+      || streq ("powerpc:e500mc64", arch)
+      || streq ("powerpc:titan", arch)
+      || streq ("powerpc:vle", arch)
+      || streq ("powerpc:e5500", arch)
+      || streq ("powerpc:e6500", arch))
     {
       /* PR 19797 */
       return true;
@@ -122,9 +122,9 @@ selftest_skip_warning_arch (struct gdbarch *gdbarch)
        Stack backtrace will not work.
      We could instead capture the output and then filter out the warning, but
      that seems more trouble than it's worth.  */
-  return (strcmp (name, "m68hc11") == 0
-	  || strcmp (name, "m68hc12") == 0
-	  || strcmp (name, "m68hc12:HCS12") == 0);
+  return (streq (name, "m68hc11")
+	  || streq (name, "m68hc12")
+	  || streq (name, "m68hc12:HCS12"));
 }
 
 } /* namespace selftests */
diff --git a/gdb/serial.c b/gdb/serial.c
index f034c1c94ebb..5624f84e996b 100644
--- a/gdb/serial.c
+++ b/gdb/serial.c
@@ -142,7 +142,7 @@ static const struct serial_ops *
 serial_interface_lookup (const char *name)
 {
   for (const serial_ops *ops : serial_ops_list)
-    if (strcmp (name, ops->name) == 0)
+    if (streq (name, ops->name))
       return ops;
 
   return NULL;
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index 0b6dc1111945..8ef2ae5e7da5 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -392,7 +392,7 @@ sh_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
   *size = kind;
 
   /* For remote stub targets, trapa #20 is used.  */
-  if (strcmp (target_shortname (), "remote") == 0)
+  if (streq (target_shortname (), "remote"))
     {
       static unsigned char big_remote_breakpoint[] = { 0xc3, 0x20 };
       static unsigned char little_remote_breakpoint[] = { 0x20, 0xc3 };
diff --git a/gdb/sol2-tdep.c b/gdb/sol2-tdep.c
index 8545ae60da47..d45de5016660 100644
--- a/gdb/sol2-tdep.c
+++ b/gdb/sol2-tdep.c
@@ -43,9 +43,10 @@
 static int
 sol2_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
-  return (name && (strcmp (name, "sigacthandler") == 0
-		   || strcmp (name, "ucbsigvechandler") == 0
-		   || strcmp (name, "__sighndlr") == 0));
+  return (name != nullptr
+	  && (streq (name, "sigacthandler")
+	      || streq (name, "ucbsigvechandler")
+	      || streq (name, "__sighndlr")));
 }
 
 /* Return whether THIS_FRAME corresponds to a Solaris sigtramp routine.  */
diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c
index b7daec8ff90b..d4367973ad59 100644
--- a/gdb/solib-aix.c
+++ b/gdb/solib-aix.c
@@ -167,7 +167,7 @@ library_list_start_list (struct gdb_xml_parser *parser,
   char *version
     = (char *) xml_find_attribute (attributes, "version")->value.get ();
 
-  if (strcmp (version, "1.0") != 0)
+  if (!streq (version, "1.0"))
     gdb_xml_error (parser,
 		   _("Library list has unsupported version \"%s\""),
 		   version);
@@ -329,7 +329,7 @@ aix_solib_ops::relocate_section_addresses (solib &so,
   const char *section_name = bfd_section_name (bfd_sect);
   auto *info = gdb::checked_static_cast<lm_info_aix *> (so.lm_info.get ());
 
-  if (strcmp (section_name, ".text") == 0)
+  if (streq (section_name, ".text"))
     {
       sec->addr = info->text_addr;
       sec->endaddr = sec->addr + info->text_size;
@@ -338,12 +338,12 @@ aix_solib_ops::relocate_section_addresses (solib &so,
 	 XCOFF headers, so we need to adjust by this much.  */
       sec->addr += bfd_sect->filepos;
     }
-  else if (strcmp (section_name, ".data") == 0)
+  else if (streq (section_name, ".data"))
     {
       sec->addr = info->data_addr;
       sec->endaddr = sec->addr + info->data_size;
     }
-  else if (strcmp (section_name, ".bss") == 0)
+  else if (streq (section_name, ".bss"))
     {
       /* The information provided by the loader does not include
 	 the address of the .bss section, but we know that it gets
@@ -615,7 +615,7 @@ static struct obj_section *
 data_obj_section_from_objfile (struct objfile *objfile)
 {
   for (obj_section &osect : objfile->sections ())
-    if (strcmp (bfd_section_name (osect.the_bfd_section), ".data") == 0)
+    if (streq (bfd_section_name (osect.the_bfd_section), ".data"))
       return &osect;
 
   return NULL;
diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c
index aaa34ec0764e..3412f6629102 100644
--- a/gdb/solib-darwin.c
+++ b/gdb/solib-darwin.c
@@ -174,7 +174,7 @@ lookup_symbol_from_bfd (bfd *abfd, const char *symname)
 
   for (const asymbol *sym : symbol_table)
     {
-      if (strcmp (sym->name, symname) == 0
+      if (streq (sym->name, symname)
 	  && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0)
 	{
 	  /* BFD symbols are section relative.  */
diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c
index 3ad6f5ab2f3e..052b170fd9a6 100644
--- a/gdb/solib-dsbt.c
+++ b/gdb/solib-dsbt.c
@@ -756,7 +756,7 @@ enable_break (void)
 	      (tmp_bfd.get (),
 	       [] (const asymbol *sym)
 	       {
-		 return strcmp (sym->name, "_dl_debug_state") == 0;
+		 return streq (sym->name, "_dl_debug_state");
 	       }));
 
       if (addr != 0)
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index 997cc175e586..4f0aac31e733 100644
--- a/gdb/solib-frv.c
+++ b/gdb/solib-frv.c
@@ -595,7 +595,7 @@ enable_break2 (void)
 	      (tmp_bfd.get (),
 	       [] (const asymbol *sym)
 	       {
-		 return strcmp (sym->name, "_dl_debug_addr") == 0;
+		 return streq (sym->name, "_dl_debug_addr");
 	       }));
 
       if (addr == 0)
@@ -1015,7 +1015,7 @@ find_canonical_descriptor_in_load_object
 	 address according to the link map and then dereferencing
 	 this address (which is a GOT entry) to obtain a descriptor
 	 address.  */
-      if ((name == 0 || strcmp (name, (*rel->sym_ptr_ptr)->name) == 0)
+      if ((name == 0 || streq (name, (*rel->sym_ptr_ptr)->name))
 	  && rel->howto->type == R_FRV_FUNCDESC)
 	{
 	  gdb_byte buf [FRV_PTR_SIZE];
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index aeb6cd30f423..8e3de4d3ea1a 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -124,7 +124,7 @@ get_lm_info_svr4 (const solib &solib)
 static bool
 svr4_same_name (const char *gdb_so_name, const char *inferior_so_name)
 {
-  if (strcmp (gdb_so_name, inferior_so_name) == 0)
+  if (streq (gdb_so_name, inferior_so_name))
     return 1;
 
   /* On Solaris, when starting inferior we think that dynamic linker is
@@ -133,18 +133,18 @@ svr4_same_name (const char *gdb_so_name, const char *inferior_so_name)
      sometimes they have identical content, but are not linked to each
      other.  We don't restrict this check for Solaris, but the chances
      of running into this situation elsewhere are very low.  */
-  if (strcmp (gdb_so_name, "/usr/lib/ld.so.1") == 0
-      && strcmp (inferior_so_name, "/lib/ld.so.1") == 0)
+  if (streq (gdb_so_name, "/usr/lib/ld.so.1")
+      && streq (inferior_so_name, "/lib/ld.so.1"))
     return 1;
 
   /* Similarly, we observed the same issue with amd64 and sparcv9, but with
      different locations.  */
-  if (strcmp (gdb_so_name, "/usr/lib/amd64/ld.so.1") == 0
-      && strcmp (inferior_so_name, "/lib/amd64/ld.so.1") == 0)
+  if (streq (gdb_so_name, "/usr/lib/amd64/ld.so.1")
+      && streq (inferior_so_name, "/lib/amd64/ld.so.1"))
     return 1;
 
-  if (strcmp (gdb_so_name, "/usr/lib/sparcv9/ld.so.1") == 0
-      && strcmp (inferior_so_name, "/lib/sparcv9/ld.so.1") == 0)
+  if (streq (gdb_so_name, "/usr/lib/sparcv9/ld.so.1")
+      && streq (inferior_so_name, "/lib/sparcv9/ld.so.1"))
     return 1;
 
   return 0;
@@ -1136,7 +1136,7 @@ svr4_library_list_start_list (struct gdb_xml_parser *parser,
     = (const char *) xml_find_attribute (attributes, "version")->value.get ();
   struct gdb_xml_value *main_lm = xml_find_attribute (attributes, "main-lm");
 
-  if (strcmp (version, "1.0") != 0)
+  if (!streq (version, "1.0"))
     gdb_xml_error (parser,
 		   _("SVR4 Library list has unsupported version \"%s\""),
 		   version);
@@ -1607,8 +1607,7 @@ svr4_fetch_objfile_link_map (struct objfile *objfile)
 static bool
 is_thread_local_section (struct bfd_section *bfd_sect)
 {
-  return ((strcmp (bfd_sect->name, ".tdata") == 0
-	   || strcmp (bfd_sect->name, ".tbss") == 0)
+  return ((streq (bfd_sect->name, ".tdata") || streq (bfd_sect->name, ".tbss"))
 	  && bfd_sect->size != 0);
 }
 
@@ -1815,7 +1814,7 @@ match_main (const char *soname)
 
   for (mainp = main_name_list; *mainp != NULL; mainp++)
     {
-      if (strcmp (soname, *mainp) == 0)
+      if (streq (soname, *mainp))
 	return (1);
     }
 
@@ -2727,7 +2726,7 @@ svr4_solib_ops::enable_break (svr4_info *info, int from_tty) const
 	       (tmp_bfd.get (),
 		[=] (const asymbol *sym)
 		{
-		  return (strcmp (sym->name, *bkpt_namep) == 0
+		  return (streq (sym->name, *bkpt_namep)
 			  && ((sym->section->flags & (SEC_CODE | SEC_DATA))
 			      != 0));
 		}));
diff --git a/gdb/solib-target.c b/gdb/solib-target.c
index 981e86b7d90d..ac965df20e94 100644
--- a/gdb/solib-target.c
+++ b/gdb/solib-target.c
@@ -161,7 +161,7 @@ library_list_start_list (struct gdb_xml_parser *parser,
     {
       const char *string = (const char *) version->value.get ();
 
-      if (strcmp (string, "1.0") != 0)
+      if (!streq (string, "1.0"))
 	gdb_xml_error (parser,
 		       _("Library list has unsupported version \"%s\""),
 		       string);
diff --git a/gdb/solib.c b/gdb/solib.c
index 0750d48f7476..22937c0fc067 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -197,7 +197,7 @@ solib_find_1 (const char *in_pathname, int *fd, bool is_solib)
 	There's no need to check for drive spec explicitly, as we only
 	get here if IN_PATHNAME is considered an absolute path.  */
       need_dir_separator = !(IS_DIR_SEPARATOR (in_pathname[0])
-			     || strcmp (TARGET_SYSROOT_PREFIX, sysroot) == 0);
+			     || streq (TARGET_SYSROOT_PREFIX, sysroot));
 
       /* Cat the prefixed pathname together.  */
       temp_pathname.reset (concat (sysroot,
@@ -551,7 +551,7 @@ solib_map_sections (solib &so)
 	 range of the shared object, assume we want the location of
 	 the .text section.  */
       if (so.addr_low == 0 && so.addr_high == 0
-	  && strcmp (p.the_bfd_section->name, ".text") == 0)
+	  && streq (p.the_bfd_section->name, ".text"))
 	{
 	  so.addr_low = p.addr;
 	  so.addr_high = p.endaddr;
diff --git a/gdb/source.c b/gdb/source.c
index 0f74a0ebd0dd..a4bced1296fc 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -341,8 +341,8 @@ select_source_symtab ()
 	      const char *name = symtab->filename ();
 	      int len = strlen (name);
 
-	      if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0
-				|| strcmp (name, "<<C++-namespaces>>") == 0)))
+	      if (!(len > 2 && (streq (&name[len - 2], ".h")
+				|| streq (name, "<<C++-namespaces>>"))))
 		new_symtab = symtab;
 	    }
 	}
@@ -836,7 +836,7 @@ openp (const char *path, openp_flags opts, const char *string,
       char *dir = dir_up.get ();
       int reg_file_errno;
 
-      if (strcmp (dir, "$cwd") == 0)
+      if (streq (dir, "$cwd"))
 	{
 	  /* Name is $cwd -- insert current directory name instead.  */
 	  filename = cwd;
@@ -855,7 +855,7 @@ openp (const char *path, openp_flags opts, const char *string,
 	     contexts.  If the user really has '$cdir' one can use './$cdir'.
 	     We can get $cdir when loading scripts.  When loading source files
 	     $cdir must have already been expanded to the correct value.  */
-	  if (strcmp (dir, "$cdir") == 0)
+	  if (streq (dir, "$cdir"))
 	    continue;
 
 	  /* Normal file name in path -- just use it.  */
diff --git a/gdb/sparc64-fbsd-tdep.c b/gdb/sparc64-fbsd-tdep.c
index 5c526df65be6..9d9c18a71831 100644
--- a/gdb/sparc64-fbsd-tdep.c
+++ b/gdb/sparc64-fbsd-tdep.c
@@ -84,7 +84,7 @@ sparc64fbsd_collect_fpregset (const struct regset *regset,
 static int
 sparc64fbsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
-  return (name && strcmp (name, "__sigtramp") == 0);
+  return (name && streq (name, "__sigtramp"));
 }
 
 static struct sparc_frame_cache *
diff --git a/gdb/sparc64-obsd-tdep.c b/gdb/sparc64-obsd-tdep.c
index 0a4763d117ad..b39b519725e9 100644
--- a/gdb/sparc64-obsd-tdep.c
+++ b/gdb/sparc64-obsd-tdep.c
@@ -298,7 +298,7 @@ sparc64obsd_trapframe_sniffer (const struct frame_unwind *self,
 
   pc = get_frame_address_in_block (this_frame);
   find_pc_partial_function (pc, &name, NULL, NULL);
-  if (name && strcmp (name, "Lslowtrap_reenter") == 0)
+  if (name && streq (name, "Lslowtrap_reenter"))
     return 1;
 
   return 0;
diff --git a/gdb/stack.c b/gdb/stack.c
index f1e3e8975f4f..3ab0090ea8a0 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -635,8 +635,9 @@ read_frame_arg (const frame_print_options &fp_opts,
 	  /* Try to remove possibly duplicate error message for ENTRYARGP even
 	     in MI mode.  */
 
-	  if (val_error && entryval_error
-	      && strcmp (val_error, entryval_error) == 0)
+	  if (val_error != nullptr
+	      && entryval_error != nullptr
+	      && streq (val_error, entryval_error))
 	    {
 	      entryval_error = NULL;
 
diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c
index 2607371c39ff..d28cee8168c3 100644
--- a/gdb/stap-probe.c
+++ b/gdb/stap-probe.c
@@ -1635,7 +1635,8 @@ get_stap_base_address (bfd *obfd, bfd_vma *base)
 
   for (asection *sect : gdb_bfd_sections (obfd))
     if ((sect->flags & (SEC_DATA | SEC_ALLOC | SEC_HAS_CONTENTS))
-	&& sect->name && !strcmp (sect->name, STAP_BASE_SECTION_NAME))
+	&& sect->name != nullptr
+	&& streq (sect->name, STAP_BASE_SECTION_NAME))
       ret = sect;
 
   if (ret == NULL)
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 44a9480d9d90..0d77d97b3afe 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -409,9 +409,9 @@ relative_addr_info_to_section_offsets (std::vector<CORE_ADDR> &section_offsets,
 static const char *
 addr_section_name (const char *s)
 {
-  if (strcmp (s, ".dynbss") == 0)
+  if (streq (s, ".dynbss"))
     return ".bss";
-  if (strcmp (s, ".sdynbss") == 0)
+  if (streq (s, ".sdynbss"))
     return ".sbss";
 
   return s;
@@ -511,8 +511,8 @@ addr_info_make_relative (section_addr_info *addrs, bfd *abfd)
 	abfd_sorted_iter++;
 
       if (abfd_sorted_iter != abfd_addrs_sorted.end ()
-	  && strcmp (addr_section_name ((*abfd_sorted_iter)->name.c_str ()),
-		     sect_name) == 0)
+	  && streq (addr_section_name ((*abfd_sorted_iter)->name.c_str ()),
+		    sect_name))
 	{
 	  int index_in_addrs;
 
@@ -1574,11 +1574,11 @@ symbol_file_command (const char *args, int from_tty)
 	      else
 		error (_("Unrecognized argument \"%s\""), arg);
 	    }
-	  else if (strcmp (arg, "-readnow") == 0)
+	  else if (streq (arg, "-readnow"))
 	    flags |= OBJF_READNOW;
-	  else if (strcmp (arg, "-readnever") == 0)
+	  else if (streq (arg, "-readnever"))
 	    flags |= OBJF_READNEVER;
-	  else if (strcmp (arg, "-o") == 0)
+	  else if (streq (arg, "-o"))
 	    {
 	      arg = built_argv[++idx];
 	      if (arg == NULL)
@@ -1586,7 +1586,7 @@ symbol_file_command (const char *args, int from_tty)
 
 	      offset = parse_and_eval_address (arg);
 	    }
-	  else if (strcmp (arg, "--") == 0)
+	  else if (streq (arg, "--"))
 	    stop_processing_options = true;
 	  else
 	    error (_("Unrecognized argument \"%s\""), arg);
@@ -2214,11 +2214,11 @@ add_symbol_file_command (const char *args, int from_tty)
 	  else
 	    error (_("Unrecognized argument \"%s\""), arg);
 	}
-      else if (strcmp (arg, "-readnow") == 0)
+      else if (streq (arg, "-readnow"))
 	flags |= OBJF_READNOW;
-      else if (strcmp (arg, "-readnever") == 0)
+      else if (streq (arg, "-readnever"))
 	flags |= OBJF_READNEVER;
-      else if (strcmp (arg, "-s") == 0)
+      else if (streq (arg, "-s"))
 	{
 	  if (argv[argcnt + 1] == NULL)
 	    error (_("Missing section name after \"-s\""));
@@ -2230,7 +2230,7 @@ add_symbol_file_command (const char *args, int from_tty)
 	  sect_opts.push_back (sect);
 	  argcnt += 2;
 	}
-      else if (strcmp (arg, "-o") == 0)
+      else if (streq (arg, "-o"))
 	{
 	  arg = argv[++argcnt];
 	  if (arg == NULL)
@@ -2239,7 +2239,7 @@ add_symbol_file_command (const char *args, int from_tty)
 	  offset = parse_and_eval_address (arg);
 	  seen_offset = true;
 	}
-      else if (strcmp (arg, "--") == 0)
+      else if (streq (arg, "--"))
 	stop_processing_options = true;
       else
 	error (_("Unrecognized argument \"%s\""), arg);
@@ -3217,7 +3217,7 @@ map_overlay_command (const char *args, int from_tty)
   /* First, find a section matching the user supplied argument.  */
   for (objfile &obj_file : current_program_space->objfiles ())
     for (obj_section &sec : obj_file.sections ())
-      if (!strcmp (bfd_section_name (sec.the_bfd_section), args))
+      if (streq (bfd_section_name (sec.the_bfd_section), args))
 	{
 	  /* Now, check to see if the section is an overlay.  */
 	  if (!section_is_overlay (&sec))
@@ -3261,7 +3261,7 @@ unmap_overlay_command (const char *args, int from_tty)
   /* First, find a section matching the user supplied argument.  */
   for (objfile &objfile : current_program_space->objfiles ())
     for (obj_section &sec : objfile.sections ())
-      if (!strcmp (bfd_section_name (sec.the_bfd_section), args))
+      if (streq (bfd_section_name (sec.the_bfd_section), args))
 	{
 	  if (!sec.ovly_mapped)
 	    error (_("Section %s is not mapped"), args);
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 258489fe8f07..a6dbb3b0603c 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -403,25 +403,25 @@ maintenance_print_symbols (const char *args, int from_tty)
 
   for (i = 0; argv != NULL && argv[i] != NULL; ++i)
     {
-      if (strcmp (argv[i], "-pc") == 0)
+      if (streq (argv[i], "-pc"))
 	{
 	  if (argv[i + 1] == NULL)
 	    error (_("Missing pc value"));
 	  address_arg = argv[++i];
 	}
-      else if (strcmp (argv[i], "-source") == 0)
+      else if (streq (argv[i], "-source"))
 	{
 	  if (argv[i + 1] == NULL)
 	    error (_("Missing source file"));
 	  source_arg = argv[++i];
 	}
-      else if (strcmp (argv[i], "-objfile") == 0)
+      else if (streq (argv[i], "-objfile"))
 	{
 	  if (argv[i + 1] == NULL)
 	    error (_("Missing objfile name"));
 	  objfile_arg = argv[++i];
 	}
-      else if (strcmp (argv[i], "--") == 0)
+      else if (streq (argv[i], "--"))
 	{
 	  /* End of options.  */
 	  ++i;
@@ -683,13 +683,13 @@ maintenance_print_msymbols (const char *args, int from_tty)
 
   for (i = 0; argv != NULL && argv[i] != NULL; ++i)
     {
-      if (strcmp (argv[i], "-objfile") == 0)
+      if (streq (argv[i], "-objfile"))
 	{
 	  if (argv[i + 1] == NULL)
 	    error (_("Missing objfile name"));
 	  objfile_arg = argv[++i];
 	}
-      else if (strcmp (argv[i], "--") == 0)
+      else if (streq (argv[i], "--"))
 	{
 	  /* End of options.  */
 	  ++i;
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 51a049836b04..812f9bcc5404 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -378,7 +378,7 @@ search_symbol_list (const char *name, int num, struct symbol **syms)
 {
   for (int i = 0; i < num; ++i)
     {
-      if (strcmp (name, syms[i]->natural_name ()) == 0)
+      if (streq (name, syms[i]->natural_name ()))
 	return syms[i];
     }
   return nullptr;
@@ -738,8 +738,8 @@ gdb_mangle_name (struct type *type, int method_id, int signature_id)
 
   is_full_physname_constructor = is_constructor_name (physname);
 
-  is_constructor = is_full_physname_constructor
-    || (newname && strcmp (field_name, newname) == 0);
+  is_constructor = (is_full_physname_constructor
+		    || (newname != nullptr && streq (field_name, newname)));
 
   if (!is_destructor)
     is_destructor = (startswith (physname, "__dt"));
@@ -1189,9 +1189,9 @@ matching_obj_sections (struct obj_section *obj_first,
       != bfd_section_vma (second) - bfd_get_start_address (second->owner))
     return false;
 
-  if (bfd_section_name (first) == NULL
-      || bfd_section_name (second) == NULL
-      || strcmp (bfd_section_name (first), bfd_section_name (second)) != 0)
+  if (bfd_section_name (first) == nullptr
+      || bfd_section_name (second) == nullptr
+      || !streq (bfd_section_name (first), bfd_section_name (second)))
     return false;
 
   /* Otherwise check that they are in corresponding objfiles.  */
@@ -1276,7 +1276,7 @@ eq_symbol_entry (const struct symbol_cache_slot *slot,
 
       if (slot->state == SYMBOL_SLOT_NOT_FOUND)
 	{
-	  if (strcmp (slot_name, name) != 0)
+	  if (!streq (slot_name, name))
 	    return 0;
 	}
       else
diff --git a/gdb/target.c b/gdb/target.c
index 77a562aa919d..34d18952dc16 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -1542,7 +1542,7 @@ memory_xfer_partial_1 (struct target_ops *ops, enum target_object object,
 
 	  auto match_cb = [=] (const struct target_section *s)
 	    {
-	      return (strcmp (section_name, s->the_bfd_section->name) == 0);
+	      return streq (section_name, s->the_bfd_section->name);
 	    };
 
 	  return section_table_xfer_memory_partial (readbuf, writebuf,
diff --git a/gdb/top.c b/gdb/top.c
index 76dc2d27fc5b..510e65c1d094 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1190,7 +1190,7 @@ gdb_add_history (const char *command)
 	  if (temp == NULL)
 	    break;
 
-	  if (strcmp (temp->line, command) == 0)
+	  if (streq (temp->line, command))
 	    {
 	      HIST_ENTRY *prev = remove_history (where_history ());
 	      command_count--;
@@ -1413,7 +1413,7 @@ There is NO WARRANTY, to the extent permitted by law.",
   /* After the required info we print the configuration information.  */
 
   gdb_printf (stream, "This GDB was configured as \"");
-  if (strcmp (host_name, target_name) != 0)
+  if (!streq (host_name, target_name))
     {
       gdb_printf (stream, "--host=%s --target=%s",
 		  host_name, target_name);
diff --git a/gdb/tracectf.c b/gdb/tracectf.c
index 3c6bf6cb5a98..aff2da55d66a 100644
--- a/gdb/tracectf.c
+++ b/gdb/tracectf.c
@@ -913,7 +913,7 @@ ctf_open_dir (const char *dirname)
 
   bt_ctf_get_event_decl_list (handle_id, ctx, &list, &count);
   for (i = 0; i < count; i++)
-    if (strcmp ("register", bt_ctf_get_decl_event_name (list[i])) == 0)
+    if (streq ("register", bt_ctf_get_decl_event_name (list[i])))
       {
 	const struct bt_ctf_field_decl * const *field_list;
 	const struct bt_declaration *decl;
@@ -922,8 +922,8 @@ ctf_open_dir (const char *dirname)
 				&count);
 
 	gdb_assert (count == 1);
-	gdb_assert (0 == strcmp ("contents",
-				 bt_ctf_get_decl_field_name (field_list[0])));
+	gdb_assert (streq ("contents",
+			   bt_ctf_get_decl_field_name (field_list[0])));
 	decl = bt_ctf_get_decl_from_field_decl (field_list[0]);
 	trace_regblock_size = bt_ctf_get_array_len (decl);
 
@@ -1231,9 +1231,9 @@ ctf_target::fetch_registers (struct regcache *regcache, int regno)
 
       name = bt_ctf_event_name (event1);
 
-      if (name == NULL || strcmp (name, "frame") == 0)
+      if (name == NULL || streq (name, "frame"))
 	break;
-      else if (strcmp (name, "register") == 0)
+      else if (streq (name, "register"))
 	{
 	  event = event1;
 	  break;
@@ -1329,9 +1329,9 @@ ctf_target::xfer_partial (enum target_object object,
 	    = bt_ctf_iter_read_event (ctf_iter);
 	  const char *name = bt_ctf_event_name (event);
 
-	  if (name == NULL || strcmp (name, "frame") == 0)
+	  if (name == NULL || streq (name, "frame"))
 	    break;
-	  else if (strcmp (name, "memory") != 0)
+	  else if (!streq (name, "memory"))
 	    {
 	      if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
 		break;
@@ -1445,9 +1445,9 @@ ctf_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
 	= bt_ctf_iter_read_event (ctf_iter);
       const char *name = bt_ctf_event_name (event);
 
-      if (name == NULL || strcmp (name, "frame") == 0)
+      if (name == NULL || streq (name, "frame"))
 	break;
-      else if (strcmp (name, "tsv") == 0)
+      else if (streq (name, "tsv"))
 	{
 	  const struct bt_definition *scope;
 	  const struct bt_definition *def;
@@ -1513,7 +1513,7 @@ ctf_get_traceframe_address (void)
 
       if (name == NULL)
 	break;
-      else if (strcmp (name, "frame") == 0)
+      else if (streq (name, "frame"))
 	{
 	  event = event1;
 	  break;
@@ -1573,7 +1573,7 @@ ctf_target::trace_find (enum trace_find_type type, int num,
       if (event == NULL || name == NULL)
 	break;
 
-      if (strcmp (name, "frame") == 0)
+      if (streq (name, "frame"))
 	{
 	  CORE_ADDR tfaddr;
 
@@ -1664,10 +1664,9 @@ ctf_target::traceframe_info ()
 
       name = bt_ctf_event_name (event);
 
-      if (name == NULL || strcmp (name, "register") == 0
-	  || strcmp (name, "frame") == 0)
+      if (name == nullptr || streq (name, "register") || streq (name, "frame"))
 	;
-      else if (strcmp (name, "memory") == 0)
+      else if (streq (name, "memory"))
 	{
 	  const struct bt_definition *scope
 	    = bt_ctf_get_top_level_scope (event,
@@ -1682,7 +1681,7 @@ ctf_target::traceframe_info ()
 
 	  info->memory.emplace_back (start, length);
 	}
-      else if (strcmp (name, "tsv") == 0)
+      else if (streq (name, "tsv"))
 	{
 	  int vnum;
 	  const struct bt_definition *scope
@@ -1704,7 +1703,7 @@ ctf_target::traceframe_info ()
       if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
 	break;
     }
-  while (name != NULL && strcmp (name, "frame") != 0);
+  while (name != NULL && !streq (name, "frame"));
 
   /* Restore the position.  */
   bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
diff --git a/gdb/tracefile-tfile.c b/gdb/tracefile-tfile.c
index 6fa1909fcec0..a6f5ae16b916 100644
--- a/gdb/tracefile-tfile.c
+++ b/gdb/tracefile-tfile.c
@@ -896,7 +896,7 @@ tfile_xfer_partial_features (const char *annex,
 			     ULONGEST offset, ULONGEST len,
 			     ULONGEST *xfered_len)
 {
-  if (strcmp (annex, "target.xml"))
+  if (!streq (annex, "target.xml"))
     return TARGET_XFER_E_IO;
 
   if (readbuf == NULL)
diff --git a/gdb/tracefile.c b/gdb/tracefile.c
index 28080e26218c..6dc699f3efe8 100644
--- a/gdb/tracefile.c
+++ b/gdb/tracefile.c
@@ -333,9 +333,9 @@ tsave_command (const char *args, int from_tty)
 
   for (; *argv; ++argv)
     {
-      if (strcmp (*argv, "-r") == 0)
+      if (streq (*argv, "-r"))
 	target_does_save = 1;
-      else if (strcmp (*argv, "-ctf") == 0)
+      else if (streq (*argv, "-ctf"))
 	generate_ctf = 1;
       else if (**argv == '-')
 	error (_("unknown option `%s'"), *argv);
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 2b6fbcbf5ae9..7f078684b142 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -2231,7 +2231,7 @@ tfind_command_1 (const char *args, int from_tty)
       else
 	frameno = traceframe_number + 1;
     }
-  else if (0 == strcmp (args, "-"))
+  else if (streq (args, "-"))
     {
       if (traceframe_number == -1)
 	error (_("not debugging trace buffer"));
@@ -2241,7 +2241,7 @@ tfind_command_1 (const char *args, int from_tty)
       frameno = traceframe_number - 1;
       }
   /* A hack to work around eval's need for fp to have been collected.  */
-  else if (0 == strcmp (args, "-1"))
+  else if (streq (args, "-1"))
     frameno = -1;
   else
     frameno = parse_and_eval_long (args);
@@ -3006,7 +3006,7 @@ cond_string_is_same (char *str1, char *str2)
   if (str1 == NULL || str2 == NULL)
     return (str1 == str2);
 
-  return (strcmp (str1, str2) == 0);
+  return (streq (str1, str2));
 }
 
 /* Look for an existing tracepoint that seems similar enough to the
diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index 272f5134d853..40db5f160ca8 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -253,7 +253,7 @@ tui_remove_some_windows ()
 {
   tui_win_info *focus = tui_win_with_focus ();
 
-  if (strcmp (focus->name (), CMD_NAME) == 0)
+  if (streq (focus->name (), CMD_NAME))
     {
       /* Try leaving the source or disassembly window.  If neither
 	 exists, just do nothing.  */
@@ -506,7 +506,7 @@ tui_layout_window::specification (ui_file *output, int depth)
 std::string
 tui_layout_window::layout_fingerprint () const
 {
-  if (strcmp (get_name (), "cmd") == 0)
+  if (streq (get_name (), "cmd"))
     return "C";
   else
     return "";
@@ -824,7 +824,7 @@ tui_layout_split::apply (int x_, int y_, int width_, int height_,
       if (preserve_cmd_win_size_p
 	  && cmd_win_already_exists
 	  && m_splits[i].layout->get_name () != nullptr
-	  && strcmp (m_splits[i].layout->get_name (), "cmd") == 0)
+	  && streq (m_splits[i].layout->get_name (), "cmd"))
 	{
 	  /* Save the old cmd window information, in case we need to
 	     restore it later.  */
@@ -1042,9 +1042,9 @@ tui_layout_split::remove_windows (const char *name)
       const char *this_name = m_splits[i].layout->get_name ();
       if (this_name == nullptr)
 	m_splits[i].layout->remove_windows (name);
-      else if (strcmp (this_name, name) == 0
-	       || strcmp (this_name, CMD_NAME) == 0
-	       || strcmp (this_name, STATUS_NAME) == 0)
+      else if (streq (this_name, name)
+	       || streq (this_name, CMD_NAME)
+	       || streq (this_name, STATUS_NAME))
 	{
 	  /* Keep.  */
 	}
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index 6d57d8fb62d2..c5cca2fdd003 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -220,7 +220,7 @@ translate (const char *name, struct tui_translate *table)
 {
   while (table->name)
     {
-      if (name && strcmp (table->name, name) == 0)
+      if (name && streq (table->name, name))
 	return table->value;
       table++;
     }
@@ -235,7 +235,7 @@ translate_acs (const char *name, struct tui_translate *table, int acs_char)
 {
   /* The ACS characters are determined at run time by curses terminal
      management.  */
-  if (strcmp (name, "acs") == 0)
+  if (streq (name, "acs"))
     return acs_char;
 
   return translate (name, table);
diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c
index fb94823f0fe8..181d5ef4fd66 100644
--- a/gdb/tui/tui.c
+++ b/gdb/tui/tui.c
@@ -428,7 +428,7 @@ tui_enable (void)
       /* If the top level interpreter is not the console/tui (e.g.,
 	 MI), enabling curses will certainly lose.  */
       interp = top_level_interpreter ()->name ();
-      if (strcmp (interp, INTERP_TUI) != 0)
+      if (!streq (interp, INTERP_TUI))
 	error (_("Cannot enable the TUI when the interpreter is '%s'"), interp);
 
       /* Don't try to setup curses (and print funny control
diff --git a/gdb/ui-style.c b/gdb/ui-style.c
index a191c753b088..ab2b0ad5de4e 100644
--- a/gdb/ui-style.c
+++ b/gdb/ui-style.c
@@ -602,8 +602,8 @@ colorsupport ()
       const char *colorterm = getenv ("COLORTERM");
       if (colors >= 16777216
 	  || (colorterm != nullptr
-	      && (!strcmp (colorterm, "truecolor")
-		  || !strcmp (colorterm, "24bit"))))
+	      && (streq (colorterm, "truecolor")
+		  || streq (colorterm, "24bit"))))
 	result.push_back (color_space::RGB_24BIT);
 
       return result;
diff --git a/gdb/unittests/child-path-selftests.c b/gdb/unittests/child-path-selftests.c
index 6f4d9990a9b8..3861e2dfde8f 100644
--- a/gdb/unittests/child-path-selftests.c
+++ b/gdb/unittests/child-path-selftests.c
@@ -31,7 +31,7 @@ child_path_check (const char *parent, const char *child, const char *expected)
   const char *result = ::child_path (parent, child);
   if (result == NULL || expected == NULL)
     return result == expected;
-  return strcmp (result, expected) == 0;
+  return streq (result, expected);
 }
 
 /* Test child_path.  */
diff --git a/gdb/unittests/cli-utils-selftests.c b/gdb/unittests/cli-utils-selftests.c
index f2d0bfe4da34..2e4cfc4dec3e 100644
--- a/gdb/unittests/cli-utils-selftests.c
+++ b/gdb/unittests/cli-utils-selftests.c
@@ -33,7 +33,7 @@ test_number_or_range_parser ()
     SELF_CHECK (!one.finished ());
     SELF_CHECK (one.get_number () == 1);
     SELF_CHECK (one.finished ());
-    SELF_CHECK (strcmp (one.cur_tok (), "") == 0);
+    SELF_CHECK (streq (one.cur_tok (), ""));
   }
 
   /* Test parsing an integer followed by a non integer.  */
@@ -43,7 +43,7 @@ test_number_or_range_parser ()
     SELF_CHECK (!one_after.finished ());
     SELF_CHECK (one_after.get_number () == 1);
     SELF_CHECK (one_after.finished ());
-    SELF_CHECK (strcmp (one_after.cur_tok (), "after") == 0);
+    SELF_CHECK (streq (one_after.cur_tok (), "after"));
   }
 
   /* Test parsing a range.  */
@@ -56,7 +56,7 @@ test_number_or_range_parser ()
 	SELF_CHECK (one_three.get_number () == i);
       }
     SELF_CHECK (one_three.finished ());
-    SELF_CHECK (strcmp (one_three.cur_tok (), "") == 0);
+    SELF_CHECK (streq (one_three.cur_tok (), ""));
   }
 
   /* Test parsing a range followed by a non-integer.  */
@@ -69,7 +69,7 @@ test_number_or_range_parser ()
 	SELF_CHECK (one_three_after.get_number () == i);
       }
     SELF_CHECK (one_three_after.finished ());
-    SELF_CHECK (strcmp (one_three_after.cur_tok (), "after") == 0);
+    SELF_CHECK (streq (one_three_after.cur_tok (), "after"));
   }
 
   /* Test a negative integer gives an error.  */
@@ -86,8 +86,8 @@ test_number_or_range_parser ()
       {
 	SELF_CHECK (ex.reason == RETURN_ERROR);
 	SELF_CHECK (ex.error == GENERIC_ERROR);
-	SELF_CHECK (strcmp (ex.what (), "negative value") == 0);
-	SELF_CHECK (strcmp (minus_one.cur_tok (), "-1") == 0);
+	SELF_CHECK (streq (ex.what (), "negative value"));
+	SELF_CHECK (streq (minus_one.cur_tok (), "-1"));
       }
   }
 
@@ -96,7 +96,7 @@ test_number_or_range_parser ()
     number_or_range_parser nan ("-whatever");
 
     SELF_CHECK (nan.finished ());
-    SELF_CHECK (strcmp (nan.cur_tok (), "-whatever") == 0);
+    SELF_CHECK (streq (nan.cur_tok (), "-whatever"));
   }
 }
 
diff --git a/gdb/unittests/copy_bitwise-selftests.c b/gdb/unittests/copy_bitwise-selftests.c
index 2a8ded1a2243..e818db09226b 100644
--- a/gdb/unittests/copy_bitwise-selftests.c
+++ b/gdb/unittests/copy_bitwise-selftests.c
@@ -82,7 +82,7 @@ check_copy_bitwise (const gdb_byte *dest, unsigned int dest_offset,
 
   /* Compare the resulting strings.  */
   expected[len] = actual[len] = '\0';
-  if (strcmp (expected, actual) != 0)
+  if (!streq (expected, actual))
     error (_("copy_bitwise %s != %s (%u+%u -> %u)"),
 	   expected, actual, source_offset, nbits, dest_offset);
 }
diff --git a/gdb/unittests/environ-selftests.c b/gdb/unittests/environ-selftests.c
index 0bfbb8140eb0..b643876b1440 100644
--- a/gdb/unittests/environ-selftests.c
+++ b/gdb/unittests/environ-selftests.c
@@ -63,7 +63,7 @@ test_init_from_host_environ ()
 
   /* Our test environment variable should be present at the
      vector.  */
-  SELF_CHECK (strcmp (env.get (gdb_selftest_env_var), "1") == 0);
+  SELF_CHECK (streq (env.get (gdb_selftest_env_var), "1"));
 }
 
 /* Test reinitialization using the host's environ.  */
@@ -80,7 +80,7 @@ test_reinit_from_host_environ ()
   int num_found = 0;
 
   for (size_t i = 0; envp[i] != NULL; ++i)
-    if (strcmp (envp[i], "GDB_SELFTEST_ENVIRON=1") == 0)
+    if (streq (envp[i], "GDB_SELFTEST_ENVIRON=1"))
       ++num_found;
   SELF_CHECK (num_found == 1);
 }
@@ -95,18 +95,18 @@ test_set_A_unset_B_unset_A_cannot_find_A_can_find_B ()
   gdb_environ env;
 
   env.set ("GDB_SELFTEST_ENVIRON_1", "aaa");
-  SELF_CHECK (strcmp (env.get ("GDB_SELFTEST_ENVIRON_1"), "aaa") == 0);
+  SELF_CHECK (streq (env.get ("GDB_SELFTEST_ENVIRON_1"), "aaa"));
   /* User-set environ var list must contain one element.  */
   SELF_CHECK (env.user_set_env ().size () == 1);
   SELF_CHECK (set_contains (env.user_set_env (),
 			    std::string ("GDB_SELFTEST_ENVIRON_1=aaa")));
 
   env.set ("GDB_SELFTEST_ENVIRON_2", "bbb");
-  SELF_CHECK (strcmp (env.get ("GDB_SELFTEST_ENVIRON_2"), "bbb") == 0);
+  SELF_CHECK (streq (env.get ("GDB_SELFTEST_ENVIRON_2"), "bbb"));
 
   env.unset ("GDB_SELFTEST_ENVIRON_1");
   SELF_CHECK (env.get ("GDB_SELFTEST_ENVIRON_1") == NULL);
-  SELF_CHECK (strcmp (env.get ("GDB_SELFTEST_ENVIRON_2"), "bbb") == 0);
+  SELF_CHECK (streq (env.get ("GDB_SELFTEST_ENVIRON_2"), "bbb"));
 
   /* The user-set environ var list must contain only one element
      now.  */
@@ -123,7 +123,7 @@ test_unset_set_empty_vector ()
   gdb_environ env;
 
   env.set ("PWD", "test");
-  SELF_CHECK (strcmp (env.get ("PWD"), "test") == 0);
+  SELF_CHECK (streq (env.get ("PWD"), "test"));
   SELF_CHECK (set_contains (env.user_set_env (), std::string ("PWD=test")));
   SELF_CHECK (env.user_unset_env ().size () == 0);
   /* The second element must be NULL.  */
@@ -164,19 +164,19 @@ test_std_move ()
   gdb_environ env2;
 
   env.set ("A", "1");
-  SELF_CHECK (strcmp (env.get ("A"), "1") == 0);
+  SELF_CHECK (streq (env.get ("A"), "1"));
   SELF_CHECK (set_contains (env.user_set_env (), std::string ("A=1")));
   SELF_CHECK (env.user_set_env ().size () == 1);
 
   env2 = std::move (env);
   SELF_CHECK (env.envp ()[0] == NULL);
-  SELF_CHECK (strcmp (env2.get ("A"), "1") == 0);
+  SELF_CHECK (streq (env2.get ("A"), "1"));
   SELF_CHECK (env2.envp ()[1] == NULL);
   SELF_CHECK (env.user_set_env ().size () == 0);
   SELF_CHECK (set_contains (env2.user_set_env (), std::string ("A=1")));
   SELF_CHECK (env2.user_set_env ().size () == 1);
   env.set ("B", "2");
-  SELF_CHECK (strcmp (env.get ("B"), "2") == 0);
+  SELF_CHECK (streq (env.get ("B"), "2"));
   SELF_CHECK (env.envp ()[1] == NULL);
 }
 
@@ -189,19 +189,19 @@ test_move_constructor ()
   gdb_environ env;
 
   env.set ("A", "1");
-  SELF_CHECK (strcmp (env.get ("A"), "1") == 0);
+  SELF_CHECK (streq (env.get ("A"), "1"));
   SELF_CHECK (set_contains (env.user_set_env (), std::string ("A=1")));
 
   gdb_environ env2 = std::move (env);
   SELF_CHECK (env.envp ()[0] == NULL);
   SELF_CHECK (env.user_set_env ().size () == 0);
-  SELF_CHECK (strcmp (env2.get ("A"), "1") == 0);
+  SELF_CHECK (streq (env2.get ("A"), "1"));
   SELF_CHECK (env2.envp ()[1] == NULL);
   SELF_CHECK (set_contains (env2.user_set_env (), std::string ("A=1")));
   SELF_CHECK (env2.user_set_env ().size () == 1);
 
   env.set ("B", "2");
-  SELF_CHECK (strcmp (env.get ("B"), "2") == 0);
+  SELF_CHECK (streq (env.get ("B"), "2"));
   SELF_CHECK (env.envp ()[1] == NULL);
   SELF_CHECK (set_contains (env.user_set_env (), std::string ("B=2")));
   SELF_CHECK (env.user_set_env ().size () == 1);
@@ -216,7 +216,7 @@ test_self_move ()
 
   /* Test self-move.  */
   env.set ("A", "1");
-  SELF_CHECK (strcmp (env.get ("A"), "1") == 0);
+  SELF_CHECK (streq (env.get ("A"), "1"));
   SELF_CHECK (set_contains (env.user_set_env (), std::string ("A=1")));
   SELF_CHECK (env.user_set_env ().size () == 1);
 
@@ -227,8 +227,8 @@ test_self_move ()
   env = std::move (env);
   DIAGNOSTIC_POP
 
-  SELF_CHECK (strcmp (env.get ("A"), "1") == 0);
-  SELF_CHECK (strcmp (env.envp ()[0], "A=1") == 0);
+  SELF_CHECK (streq (env.get ("A"), "1"));
+  SELF_CHECK (streq (env.envp ()[0], "A=1"));
   SELF_CHECK (env.envp ()[1] == NULL);
   SELF_CHECK (set_contains (env.user_set_env (), std::string ("A=1")));
   SELF_CHECK (env.user_set_env ().size () == 1);
@@ -246,7 +246,7 @@ test_set_unset_reset ()
 
   /* Set our test variable to another value.  */
   env.set ("GDB_SELFTEST_ENVIRON", "test");
-  SELF_CHECK (strcmp (env.get ("GDB_SELFTEST_ENVIRON"), "test") == 0);
+  SELF_CHECK (streq (env.get ("GDB_SELFTEST_ENVIRON"), "test"));
   SELF_CHECK (env.user_set_env ().size () == 1);
   SELF_CHECK (env.user_unset_env ().size () == 0);
 
@@ -261,7 +261,7 @@ test_set_unset_reset ()
 
   /* Re-set the test variable.  */
   env.set ("GDB_SELFTEST_ENVIRON", "1");
-  SELF_CHECK (strcmp (env.get ("GDB_SELFTEST_ENVIRON"), "1") == 0);
+  SELF_CHECK (streq (env.get ("GDB_SELFTEST_ENVIRON"), "1"));
 }
 
 static void
diff --git a/gdb/unittests/intrusive_list-selftests.c b/gdb/unittests/intrusive_list-selftests.c
index 398ca04a5198..aa68b7d21ec2 100644
--- a/gdb/unittests/intrusive_list-selftests.c
+++ b/gdb/unittests/intrusive_list-selftests.c
@@ -95,7 +95,7 @@ verify_items (const ListType &list,
       SELF_CHECK (&item == expected[i]);
 
       /* Access the item, to make sure the object is still alive.  */
-      SELF_CHECK (strcmp (item.name, expected[i]->name) == 0);
+      SELF_CHECK (streq (item.name, expected[i]->name));
 
       ++i;
     }
@@ -113,7 +113,7 @@ verify_items (const ListType &list,
       SELF_CHECK (&item == expected[i]);
 
       /* Access the item, to make sure the object is still alive.  */
-      SELF_CHECK (strcmp (item.name, expected[i]->name) == 0);
+      SELF_CHECK (streq (item.name, expected[i]->name));
     }
 
   SELF_CHECK (i == 0);
diff --git a/gdb/unittests/lookup_name_info-selftests.c b/gdb/unittests/lookup_name_info-selftests.c
index 6d56ecd4df49..8eae34d91f81 100644
--- a/gdb/unittests/lookup_name_info-selftests.c
+++ b/gdb/unittests/lookup_name_info-selftests.c
@@ -38,7 +38,7 @@ check_make_paramless (const char *file, int line,
 				completion_mode, true /* ignore_parameters */);
   const char *result = lookup_name.language_lookup_name (lang);
 
-  if (strcmp (result, expected) != 0)
+  if (!streq (result, expected))
     {
       error (_("%s:%d: make-paramless self-test failed: (completion=%d, lang=%d) "
 	       "\"%s\" -> \"%s\", expected \"%s\""),
diff --git a/gdb/unittests/scoped_mmap-selftests.c b/gdb/unittests/scoped_mmap-selftests.c
index a89f94dd47a9..06026b459cda 100644
--- a/gdb/unittests/scoped_mmap-selftests.c
+++ b/gdb/unittests/scoped_mmap-selftests.c
@@ -102,7 +102,7 @@ test_normal ()
 
     SELF_CHECK (m.get () != MAP_FAILED);
     SELF_CHECK (m.size () == 7);
-    SELF_CHECK (0 == strcmp ((char *) m.get (), "Hello!"));
+    SELF_CHECK (streq ((char *) m.get (), "Hello!"));
   }
 }
 
diff --git a/gdb/unittests/unique_xmalloc_ptr_char.c b/gdb/unittests/unique_xmalloc_ptr_char.c
index 3618ee52d42c..cd11a05e275d 100644
--- a/gdb/unittests/unique_xmalloc_ptr_char.c
+++ b/gdb/unittests/unique_xmalloc_ptr_char.c
@@ -30,8 +30,8 @@ unique_xmalloc_ptr_char ()
   gdb::unique_xmalloc_ptr<char> a = make_unique_xstrdup ("abc");
   gdb::unique_xmalloc_ptr<char> b = make_unique_xstrndup ("defghi", 3);
 
-  SELF_CHECK (strcmp (a.get (), "abc") == 0);
-  SELF_CHECK (strcmp (b.get (), "def") == 0);
+  SELF_CHECK (streq (a.get (), "abc"));
+  SELF_CHECK (streq (b.get (), "def"));
 
   std::string str = "xxx";
 
diff --git a/gdb/utils.c b/gdb/utils.c
index ef8ef87bc5b8..bbb6bcb41624 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -1359,7 +1359,7 @@ maintenance_info_screen (const char *args, int from_tty)
     = rl_variable_value ("horizontal-scroll-mode");
   bool force_horizontal_scroll_mode
     = (horizontal_scroll_mode_value != nullptr
-       && strcmp (horizontal_scroll_mode_value, "on") == 0);
+       && streq (horizontal_scroll_mode_value, "on"));
 
   const char *mode = nullptr;
   const char *reason = nullptr;
@@ -3341,7 +3341,7 @@ gdb_realpath_check_trailer (const char *input, const char *trailer)
   size_t trail_len = strlen (trailer);
 
   SELF_CHECK (len >= trail_len
-	      && strcmp (result.get () + len - trail_len, trailer) == 0);
+	      && streq (result.get () + len - trail_len, trailer));
 }
 
 static void
@@ -3383,9 +3383,9 @@ gdb_argv_as_array_view_test ()
     gdb::array_view<char *> view = argv.as_array_view ();
 
     SELF_CHECK (view.size () == 3);
-    SELF_CHECK (strcmp (view[0], "une") == 0);
-    SELF_CHECK (strcmp (view[1], "bonne") == 0);
-    SELF_CHECK (strcmp (view[2], "50") == 0);
+    SELF_CHECK (streq (view[0], "une"));
+    SELF_CHECK (streq (view[1], "bonne"));
+    SELF_CHECK (streq (view[2], "50"));
   }
 }
 
diff --git a/gdb/valops.c b/gdb/valops.c
index 494ed9aaa985..a5f16dc88f0a 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -212,10 +212,10 @@ value_cast_structs (struct type *type, struct value *v2)
 	       || t2->code () == TYPE_CODE_UNION)
 	      && !!"Precondition is that value is of STRUCT or UNION kind");
 
-  if (t1->name () != NULL
-      && t2->name () != NULL
-      && !strcmp (t1->name (), t2->name ()))
-    return NULL;
+  if (t1->name () != nullptr
+      && t2->name () != nullptr
+      && streq (t1->name (), t2->name ()))
+    return nullptr;
 
   /* Upcasting: look in the type of the source to see if it contains the
      type of the target as a superclass.  If so, we'll need to
@@ -248,7 +248,7 @@ value_cast_structs (struct type *type, struct value *v2)
 	  /* We might be trying to cast to the outermost enclosing
 	     type, in which case search_struct_field won't work.  */
 	  if (real_type->name () != NULL
-	      && !strcmp (real_type->name (), t1->name ()))
+	      && streq (real_type->name (), t1->name ()))
 	    return v;
 
 	  v = search_struct_field (t2->name (), v, real_type, 1);
@@ -2877,7 +2877,7 @@ find_overload_match (gdb::array_view<value *> args,
 		 probably a C-style function.  */
 	      if (temp_func != nullptr)
 		{
-		  if (strcmp (temp_func.get (), qualified_name) == 0)
+		  if (streq (temp_func.get (), qualified_name))
 		    func_name = NULL;
 		  else
 		    func_name = temp_func.get ();
@@ -3402,7 +3402,7 @@ enum_constant_from_type (struct type *type, const char *name)
       if (len + 2 >= name_len
 	  && fname[len - name_len - 2] == ':'
 	  && fname[len - name_len - 1] == ':'
-	  && strcmp (&fname[len - name_len], name) == 0)
+	  && streq (&fname[len - name_len], name))
 	return value_from_longest (type, type->field (i).loc_enumval ());
     }
 
@@ -3562,7 +3562,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
     {
       const char *t_field_name = t->field (i).name ();
 
-      if (t_field_name && strcmp (t_field_name, name) == 0)
+      if (t_field_name && streq (t_field_name, name))
 	{
 	  if (t->field (i).is_static ())
 	    {
@@ -3639,7 +3639,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
     {
       const char *t_field_name = TYPE_FN_FIELDLIST_NAME (t, i);
 
-      if (t_field_name && strcmp (t_field_name, name) == 0)
+      if (t_field_name && streq (t_field_name, name))
 	{
 	  int j;
 	  int len = TYPE_FN_FIELDLIST_LENGTH (t, i);
diff --git a/gdb/varobj.c b/gdb/varobj.c
index 6a0ba6c93ab8..edd94ea49630 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -2181,7 +2181,7 @@ varobj_value_get_print_value (struct value *value,
 			    = gdbpy_get_display_hint (value_formatter);
 			  if (hint)
 			    {
-			      if (!strcmp (hint.get (), "string"))
+			      if (streq (hint.get (), "string"))
 				string_print = true;
 			    }
 
diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c
index a79d1b5e02e9..38ee1d7275e8 100644
--- a/gdb/windows-tdep.c
+++ b/gdb/windows-tdep.c
@@ -1378,10 +1378,10 @@ cygwin_sigwrapper_frame_unwind::sniff (const frame_info_ptr &this_frame,
   if (name == nullptr)
     return 0;
 
-  if (strcmp (name, "_sigbe") != 0
-      && strcmp (name, "__sigbe") != 0
-      && strcmp (name, "sigdelayed") != 0
-      && strcmp (name, "_sigdelayed") != 0)
+  if (!streq (name, "_sigbe")
+      && !streq (name, "__sigbe")
+      && !streq (name, "sigdelayed")
+      && !streq (name, "_sigdelayed"))
     return 0;
 
   frame_debug_printf ("name=%s, start=%s, end=%s",
diff --git a/gdb/x86-tdep.c b/gdb/x86-tdep.c
index aa7b1213482f..1f34a6a0ffbd 100644
--- a/gdb/x86-tdep.c
+++ b/gdb/x86-tdep.c
@@ -51,7 +51,7 @@ x86_is_thunk_register_name (const char *name, const char * const *names,
 {
   int reg;
   for (reg = lo; reg < hi; ++reg)
-    if (strcmp (name, names[reg]) == 0)
+    if (streq (name, names[reg]))
       return true;
 
   return false;
@@ -72,7 +72,7 @@ x86_in_indirect_branch_thunk (CORE_ADDR pc, const char * const *register_names,
     return false;
 
   /* Check the indirect return thunk first.  */
-  if (strcmp (name, "__x86_return_thunk") == 0)
+  if (streq (name, "__x86_return_thunk"))
     return true;
 
   /* Then check a family of indirect call/jump thunks.  */
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index aec959e13751..b3d9bb97b621 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -262,20 +262,17 @@ xcoff_symfile_offsets (objfile *objfile, const section_addr_info &addrs)
   const char *first_section_name
     = bfd_section_name (objfile->sections_start[0].the_bfd_section);
 
-  if (objfile->sect_index_text == 0
-      && strcmp (first_section_name, ".text") != 0)
+  if (objfile->sect_index_text == 0 && !streq (first_section_name, ".text"))
     objfile->sect_index_text = -1;
 
-  if (objfile->sect_index_data == 0
-      && strcmp (first_section_name, ".data") != 0)
+  if (objfile->sect_index_data == 0 && !streq (first_section_name, ".data"))
     objfile->sect_index_data = -1;
 
-  if (objfile->sect_index_bss == 0
-      && strcmp (first_section_name, ".bss") != 0)
+  if (objfile->sect_index_bss == 0 && !streq (first_section_name, ".bss"))
     objfile->sect_index_bss = -1;
 
   if (objfile->sect_index_rodata == 0
-      && strcmp (first_section_name, ".rodata") != 0)
+      && !streq (first_section_name, ".rodata"))
     objfile->sect_index_rodata = -1;
 }
 
diff --git a/gdb/xml-support.c b/gdb/xml-support.c
index 76ce84122fb3..a538c16f926c 100644
--- a/gdb/xml-support.c
+++ b/gdb/xml-support.c
@@ -229,7 +229,7 @@ xml_find_attribute (std::vector<gdb_xml_value> &attributes,
 		    const char *name)
 {
   for (gdb_xml_value &value : attributes)
-    if (strcmp (value.name, name) == 0)
+    if (streq (value.name, name))
       return &value;
 
   return NULL;
@@ -270,7 +270,7 @@ gdb_xml_parser::start_element (const XML_Char *name,
   seen = 1;
   for (element = scope.elements; element && element->name;
        element++, seen <<= 1)
-    if (strcmp (element->name, name) == 0)
+    if (streq (element->name, name))
       break;
 
   if (element == NULL || element->name == NULL)
@@ -307,7 +307,7 @@ gdb_xml_parser::start_element (const XML_Char *name,
       void *parsed_value;
 
       for (p = attrs; *p != NULL; p += 2)
-	if (!strcmp (attribute->name, p[0]))
+	if (streq (attribute->name, p[0]))
 	  {
 	    val = p[1];
 	    break;
@@ -352,7 +352,7 @@ gdb_xml_parser::start_element (const XML_Char *name,
 	  for (attribute = element->attributes;
 	       attribute != NULL && attribute->name != NULL;
 	       attribute++)
-	    if (strcmp (attribute->name, *p) == 0)
+	    if (streq (attribute->name, *p))
 	      break;
 
 	  if (attribute == NULL || attribute->name == NULL)
@@ -914,7 +914,7 @@ fetch_xml_builtin (const char *filename)
   const char *const (*p)[2];
 
   for (p = xml_builtin; (*p)[0]; p++)
-    if (strcmp ((*p)[0], filename) == 0)
+    if (streq ((*p)[0], filename))
       return (*p)[1];
 
   return NULL;
diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c
index c169e8c1b211..56fb7cff57a0 100644
--- a/gdb/xml-syscall.c
+++ b/gdb/xml-syscall.c
@@ -244,13 +244,13 @@ syscall_start_syscall (struct gdb_xml_parser *parser,
 
   for (const gdb_xml_value &attr : attributes)
     {
-      if (strcmp (attr.name, "name") == 0)
+      if (streq (attr.name, "name"))
 	name = (char *) attr.value.get ();
-      else if (strcmp (attr.name, "number") == 0)
+      else if (streq (attr.name, "number"))
 	number = * (ULONGEST *) attr.value.get ();
-      else if (strcmp (attr.name, "alias") == 0)
+      else if (streq (attr.name, "alias"))
 	alias = (char *) attr.value.get ();
-      else if (strcmp (attr.name, "groups") == 0)
+      else if (streq (attr.name, "groups"))
 	groups = (char *) attr.value.get ();
       else
 	internal_error (_("Unknown attribute name '%s'."), attr.name);
diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c
index 472c604254a8..c0b1b6353157 100644
--- a/gdb/xml-tdesc.c
+++ b/gdb/xml-tdesc.c
@@ -147,7 +147,7 @@ tdesc_start_target (struct gdb_xml_parser *parser,
   char *version
     = (char *) xml_find_attribute (attributes, "version")->value.get ();
 
-  if (strcmp (version, "1.0") != 0)
+  if (!streq (version, "1.0"))
     gdb_xml_error (parser,
 		   _("Target description has unsupported version \"%s\""),
 		   version);
@@ -185,28 +185,27 @@ tdesc_start_reg (struct gdb_xml_parser *parser,
   name = (char *) attributes[ix++].value.get ();
   bitsize = * (ULONGEST *) attributes[ix++].value.get ();
 
-  if (ix < length && strcmp (attributes[ix].name, "regnum") == 0)
+  if (ix < length && streq (attributes[ix].name, "regnum"))
     regnum = * (ULONGEST *) attributes[ix++].value.get ();
   else
     regnum = data->next_regnum;
 
-  if (ix < length && strcmp (attributes[ix].name, "type") == 0)
+  if (ix < length && streq (attributes[ix].name, "type"))
     type = (char *) attributes[ix++].value.get ();
   else
     type = "int";
 
-  if (ix < length && strcmp (attributes[ix].name, "group") == 0)
+  if (ix < length && streq (attributes[ix].name, "group"))
     group = (char *) attributes[ix++].value.get ();
   else
     group = NULL;
 
-  if (ix < length && strcmp (attributes[ix].name, "save-restore") == 0)
+  if (ix < length && streq (attributes[ix].name, "save-restore"))
     save_restore = * (ULONGEST *) attributes[ix++].value.get ();
   else
     save_restore = 1;
 
-  if (strcmp (type, "int") != 0
-      && strcmp (type, "float") != 0
+  if (!streq (type, "int") && !streq (type, "float")
       && tdesc_named_type (data->current_feature, type) == NULL)
     gdb_xml_error (parser, _("Register \"%s\" has unknown type \"%s\""),
 		   name, type);
@@ -381,8 +380,8 @@ tdesc_start_field (struct gdb_xml_parser *parser,
 	gdb_xml_error (parser,
 		       _("Bitfields must live in explicitly sized types"));
 
-      if (field_type_id != NULL
-	  && strcmp (field_type_id, "bool") == 0
+      if (field_type_id != nullptr
+	  && streq (field_type_id, "bool")
 	  && start != end)
 	{
 	  gdb_xml_error (parser,
diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c
index 1916b8cfdfe4..20cb849f1f1d 100644
--- a/gdb/xstormy16-tdep.c
+++ b/gdb/xstormy16-tdep.c
@@ -515,7 +515,7 @@ xstormy16_resolve_jmp_table_entry (struct gdbarch *gdbarch, CORE_ADDR faddr)
       gdb_byte buf[2 * xstormy16_inst_size];
 
       /* Return faddr if it's not pointing into the jump table.  */
-      if (strcmp (faddr_sect->the_bfd_section->name, ".plt"))
+      if (!streq (faddr_sect->the_bfd_section->name, ".plt"))
 	return faddr;
 
       if (!target_read_memory (faddr, buf, sizeof buf))
@@ -543,12 +543,12 @@ xstormy16_find_jmp_table_entry (struct gdbarch *gdbarch, CORE_ADDR faddr)
   if (faddr_sect)
     {
       /* Return faddr if it's already a pointer to a jump table entry.  */
-      if (!strcmp (faddr_sect->the_bfd_section->name, ".plt"))
+      if (streq (faddr_sect->the_bfd_section->name, ".plt"))
 	return faddr;
 
       for (obj_section &osect : faddr_sect->objfile->sections ())
 	{
-	  if (!strcmp (osect.the_bfd_section->name, ".plt"))
+	  if (streq (osect.the_bfd_section->name, ".plt"))
 	    {
 	      CORE_ADDR addr, endaddr;
 
diff --git a/gdbserver/gdbreplay.cc b/gdbserver/gdbreplay.cc
index d2cf3977359a..50ad3be34b0f 100644
--- a/gdbserver/gdbreplay.cc
+++ b/gdbserver/gdbreplay.cc
@@ -109,7 +109,7 @@ static void
 remote_open (const char *name)
 {
 #ifndef USE_WIN32API
-  if (strcmp (name, "-") == 0)
+  if (streq (name, "-"))
     {
       remote_desc_in = 0;
       remote_desc_out = 1;
diff --git a/gdbserver/linux-arc-low.cc b/gdbserver/linux-arc-low.cc
index f3ccbbc61427..9c56af36fec7 100644
--- a/gdbserver/linux-arc-low.cc
+++ b/gdbserver/linux-arc-low.cc
@@ -299,7 +299,7 @@ is_reg_name_available_p (const struct target_desc *tdesc,
 			 const char *name)
 {
   for (const gdb::reg &reg : tdesc->reg_defs)
-    if (strcmp (name, reg.name) == 0)
+    if (streq (name, reg.name))
       return true;
   return false;
 }
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index ca20a5bca168..0246217db86c 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -6146,9 +6146,9 @@ linux_process_target::read_loadmap (const char *annex, CORE_ADDR offset,
   struct target_loadmap *data = NULL;
   unsigned int actual_length, copy_length;
 
-  if (strcmp (annex, "exec") == 0)
+  if (streq (annex, "exec"))
     addr = (int) LINUX_LOADMAP_EXEC;
-  else if (strcmp (annex, "interp") == 0)
+  else if (streq (annex, "interp"))
     addr = (int) LINUX_LOADMAP_INTERP;
   else
     return -1;
diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
index cc7c05da3074..28a3d78f747b 100644
--- a/gdbserver/linux-x86-low.cc
+++ b/gdbserver/linux-x86-low.cc
@@ -1084,7 +1084,7 @@ x86_target::process_qsupported (gdb::array_view<const char * const> features)
 	       p != NULL;
 	       p = strtok_r (NULL, ",", &saveptr))
 	    {
-	      if (strcmp (p, "i386") == 0)
+	      if (streq (p, "i386"))
 		{
 		  use_xml = 1;
 		  break;
diff --git a/gdbserver/linux-x86-tdesc.cc b/gdbserver/linux-x86-tdesc.cc
index e405612be985..1ff6936ff287 100644
--- a/gdbserver/linux-x86-tdesc.cc
+++ b/gdbserver/linux-x86-tdesc.cc
@@ -33,8 +33,7 @@ x86_linux_post_init_tdesc (target_desc *tdesc, bool is_64bit)
      However, init_target_desc requires us to override the already set
      value.  That's fine, out new string should match the old one.  */
   gdb_assert (tdesc_osabi_name (tdesc) != nullptr);
-  gdb_assert (strcmp (tdesc_osabi_name (tdesc),
-		      gdbarch_osabi_name (osabi)) == 0);
+  gdb_assert (streq (tdesc_osabi_name (tdesc), gdbarch_osabi_name (osabi)));
 #endif /* ! IN_PROCESS_AGENT */
 
 #ifdef __x86_64__
diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc
index f50c77275db8..4ace68869e50 100644
--- a/gdbserver/regcache.cc
+++ b/gdbserver/regcache.cc
@@ -221,7 +221,7 @@ find_regno_no_throw (const struct target_desc *tdesc, const char *name)
 {
   for (int i = 0; i < tdesc->reg_defs.size (); ++i)
     {
-      if (strcmp (name, find_register_by_number (tdesc, i).name) == 0)
+      if (streq (name, find_register_by_number (tdesc, i).name))
 	return i;
     }
   return {};
diff --git a/gdbserver/remote-utils.cc b/gdbserver/remote-utils.cc
index 7671206ebc1a..34801d0b76fe 100644
--- a/gdbserver/remote-utils.cc
+++ b/gdbserver/remote-utils.cc
@@ -221,7 +221,7 @@ remote_prepare (const char *name)
   socklen_t tmp;
 
   remote_is_stdio = 0;
-  if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
+  if (streq (name, STDIO_CONNECTION_NAME))
     {
       /* We need to record fact that we're using stdio sooner than the
 	 call to remote_open so start_inferior knows the connection is
@@ -322,7 +322,7 @@ remote_open (const char *name)
     error ("Only HOST:PORT is supported on this platform.");
 #endif
 
-  if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
+  if (streq (name, STDIO_CONNECTION_NAME))
     {
       fprintf (stderr, "Remote debugging using stdio\n");
 
@@ -1508,7 +1508,7 @@ look_up_one_symbol (const char *name, CORE_ADDR *addrp, int may_ask_gdb)
 
   /* Check the cache first.  */
   for (sym = proc->symbol_cache; sym; sym = sym->next)
-    if (strcmp (name, sym->name) == 0)
+    if (streq (name, sym->name))
       {
 	*addrp = sym->addr;
 	return 1;
diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index 793af6354087..ebde831d6031 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -467,11 +467,11 @@ handle_btrace_general_set (char *own_buf)
 
   try
     {
-      if (strcmp (op, "bts") == 0)
+      if (streq (op, "bts"))
 	handle_btrace_enable_bts (thread);
-      else if (strcmp (op, "pt") == 0)
+      else if (streq (op, "pt"))
 	handle_btrace_enable_pt (thread);
-      else if (strcmp (op, "off") == 0)
+      else if (streq (op, "off"))
 	handle_btrace_disable (thread);
       else
 	error (_("Bad Qbtrace operation.  Use bts, pt, or off."));
@@ -720,7 +720,7 @@ handle_general_set (char *own_buf)
 	  return;
 	}
 
-      if (strcmp (p, "0") == 0)
+      if (streq (p, "0"))
 	enabled = 0;
       else if (p[0] == '1' && (p[1] == ';' || p[1] == '\0'))
 	enabled = 1;
@@ -755,7 +755,7 @@ handle_general_set (char *own_buf)
       return;
     }
 
-  if (strcmp (own_buf, "QEnvironmentReset") == 0)
+  if (streq (own_buf, "QEnvironmentReset"))
     {
       our_environ = gdb_environ::from_host_environ ();
 
@@ -808,7 +808,7 @@ handle_general_set (char *own_buf)
       return;
     }
 
-  if (strcmp (own_buf, "QStartNoAckMode") == 0)
+  if (streq (own_buf, "QStartNoAckMode"))
     {
       remote_debug_printf ("[noack mode enabled]");
 
@@ -823,9 +823,9 @@ handle_general_set (char *own_buf)
       int req = -1;
       const char *req_str;
 
-      if (strcmp (mode, "0") == 0)
+      if (streq (mode, "0"))
 	req = 0;
-      else if (strcmp (mode, "1") == 0)
+      else if (streq (mode, "1"))
 	req = 1;
       else
 	{
@@ -878,9 +878,9 @@ handle_general_set (char *own_buf)
       char *mode = own_buf + strlen ("QAgent:");
       int req = 0;
 
-      if (strcmp (mode, "0") == 0)
+      if (streq (mode, "0"))
 	req = 0;
-      else if (strcmp (mode, "1") == 0)
+      else if (streq (mode, "1"))
 	req = 1;
       else
 	{
@@ -907,9 +907,9 @@ handle_general_set (char *own_buf)
       char *mode = own_buf + strlen ("QThreadEvents:");
       enum tribool req = TRIBOOL_UNKNOWN;
 
-      if (strcmp (mode, "0") == 0)
+      if (streq (mode, "0"))
 	req = TRIBOOL_FALSE;
-      else if (strcmp (mode, "1") == 0)
+      else if (streq (mode, "1"))
 	req = TRIBOOL_TRUE;
       else
 	{
@@ -1037,9 +1037,9 @@ handle_general_set (char *own_buf)
     {
       const char *value = own_buf + strlen ("QStartupWithShell:");
 
-      if (strcmp (value, "1") == 0)
+      if (streq (value, "1"))
 	startup_with_shell = true;
-      else if (strcmp (value, "0") == 0)
+      else if (streq (value, "0"))
 	startup_with_shell = false;
       else
 	{
@@ -1128,7 +1128,7 @@ get_features_xml (const char *annex)
      This variable is set up from the auto-generated
      init_registers_... routine for the current target.  */
 
-  if (strcmp (annex, "target.xml") == 0)
+  if (streq (annex, "target.xml"))
     {
       const char *ret = tdesc_get_features_xml (desc);
 
@@ -1144,7 +1144,7 @@ get_features_xml (const char *annex)
 
     /* Look for the annex.  */
     for (i = 0; xml_builtin[i][0] != NULL; i++)
-      if (strcmp (annex, xml_builtin[i][0]) == 0)
+      if (streq (annex, xml_builtin[i][0]))
 	break;
 
     if (xml_builtin[i][0] != NULL)
@@ -1433,19 +1433,19 @@ parse_debug_format_options (const char *arg, int is_monitor)
 
   for (const gdb::unique_xmalloc_ptr<char> &option : options)
     {
-      if (strcmp (option.get (), "all") == 0)
+      if (streq (option.get (), "all"))
 	{
 	  debug_timestamp = 1;
 	  if (is_monitor)
 	    monitor_output ("All extra debug format options enabled.\n");
 	}
-      else if (strcmp (option.get (), "none") == 0)
+      else if (streq (option.get (), "none"))
 	{
 	  debug_timestamp = 0;
 	  if (is_monitor)
 	    monitor_output ("All extra debug format options disabled.\n");
 	}
-      else if (strcmp (option.get (), "timestamp") == 0)
+      else if (streq (option.get (), "timestamp"))
 	{
 	  debug_timestamp = 1;
 	  if (is_monitor)
@@ -1727,12 +1727,12 @@ handle_monitor_command (const char *mon, char *own_buf)
 	  write_enn (own_buf);
 	}
     }
-  else if (strcmp (mon, "set debug-hw-points 1") == 0)
+  else if (streq (mon, "set debug-hw-points 1"))
     {
       show_debug_regs = 1;
       monitor_output ("H/W point debugging output enabled.\n");
     }
-  else if (strcmp (mon, "set debug-hw-points 0") == 0)
+  else if (streq (mon, "set debug-hw-points 0"))
     {
       show_debug_regs = 0;
       monitor_output ("H/W point debugging output disabled.\n");
@@ -1750,13 +1750,13 @@ handle_monitor_command (const char *mon, char *own_buf)
 	  write_enn (own_buf);
 	}
     }
-  else if (strcmp (mon, "set debug-file") == 0)
+  else if (streq (mon, "set debug-file"))
     debug_set_output (nullptr);
   else if (startswith (mon, "set debug-file "))
     debug_set_output (mon + sizeof ("set debug-file ") - 1);
-  else if (strcmp (mon, "help") == 0)
+  else if (streq (mon, "help"))
     monitor_show_help ();
-  else if (strcmp (mon, "exit") == 0)
+  else if (streq (mon, "exit"))
     exit_requested = true;
   else
     {
@@ -2179,11 +2179,11 @@ handle_qxfer_btrace (const char *annex,
       return -3;
     }
 
-  if (strcmp (annex, "all") == 0)
+  if (streq (annex, "all"))
     type = BTRACE_READ_ALL;
-  else if (strcmp (annex, "new") == 0)
+  else if (streq (annex, "new"))
     type = BTRACE_READ_NEW;
-  else if (strcmp (annex, "delta") == 0)
+  else if (streq (annex, "delta"))
     type = BTRACE_READ_DELTA;
   else
     {
@@ -2336,9 +2336,9 @@ handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
     {
       const struct qxfer *q = &qxfer_packets[i];
 
-      if (strcmp (object, q->object) == 0)
+      if (streq (object, q->object))
 	{
-	  if (strcmp (rw, "read") == 0)
+	  if (streq (rw, "read"))
 	    {
 	      unsigned char *data;
 	      int n;
@@ -2382,7 +2382,7 @@ handle_qxfer (char *own_buf, int packet_len, int *new_packet_len_p)
 	      free (data);
 	      return 1;
 	    }
-	  else if (strcmp (rw, "write") == 0)
+	  else if (streq (rw, "write"))
 	    {
 	      int n;
 	      unsigned int len;
@@ -2538,7 +2538,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
     };
 
   /* Reply the current thread id.  */
-  if (strcmp ("qC", own_buf) == 0 && !disable_packet_qC)
+  if (streq ("qC", own_buf) && !disable_packet_qC)
     {
       ptid_t ptid;
       require_running_or_return (own_buf);
@@ -2557,7 +2557,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
       return;
     }
 
-  if (strcmp ("qSymbol::", own_buf) == 0)
+  if (streq ("qSymbol::", own_buf))
     {
       scoped_restore_current_thread restore_thread;
 
@@ -2605,7 +2605,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
 
   if (!disable_packet_qfThreadInfo)
     {
-      if (strcmp ("qfThreadInfo", own_buf) == 0)
+      if (streq ("qfThreadInfo", own_buf))
 	{
 	  require_running_or_return (own_buf);
 	  init_thread_iter ();
@@ -2617,7 +2617,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
 	  return;
 	}
 
-      if (strcmp ("qsThreadInfo", own_buf) == 0)
+      if (streq ("qsThreadInfo", own_buf))
 	{
 	  require_running_or_return (own_buf);
 	  /* We're done if the process iterator hits the end of the
@@ -2638,8 +2638,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
 	}
     }
 
-  if (the_target->supports_read_offsets ()
-      && strcmp ("qOffsets", own_buf) == 0)
+  if (the_target->supports_read_offsets () && streq ("qOffsets", own_buf))
     {
       CORE_ADDR text, data;
 
@@ -3010,8 +3009,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
       return;
     }
 
-  if (strcmp (own_buf, "qAttached") == 0
-      || startswith (own_buf, "qAttached:"))
+  if (streq (own_buf, "qAttached") || startswith (own_buf, "qAttached:"))
     {
       struct process_info *process;
 
@@ -3094,7 +3092,7 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
       return;
     }
 
-  if (strcmp ("qExecAndArgs", own_buf) == 0)
+  if (streq ("qExecAndArgs", own_buf))
     {
       if (program_path.get () == nullptr)
 	sprintf (own_buf, "U");
@@ -3568,7 +3566,7 @@ handle_v_requests (char *own_buf, int packet_len, int *new_packet_len)
   client_state &cs = get_client_state ();
   if (!disable_packet_vCont)
     {
-      if (strcmp (own_buf, "vCtrlC") == 0)
+      if (streq (own_buf, "vCtrlC"))
 	{
 	  the_target->request_interrupt ();
 	  write_ok (own_buf);
@@ -4100,7 +4098,7 @@ test_memory_tagging_functions (void)
 
   expected = "m0001020304";
   SELF_CHECK (create_fetch_memtags_reply (packet.data (), bv) == true);
-  SELF_CHECK (strcmp (packet.data (), expected.c_str ()) == 0);
+  SELF_CHECK (streq (packet.data (), expected.c_str ()));
 
   /* Test parsing a QMemTags request.  */
 
@@ -4269,8 +4267,8 @@ captured_main (int argc, char *argv[])
 	    gdb_assert (optarg != nullptr);
 
 	  if (optarg == nullptr
-	      || strcmp (optarg, "-") == 0
-	      || strcmp (optarg, STDIO_CONNECTION_NAME) == 0
+	      || streq (optarg, "-")
+	      || streq (optarg, STDIO_CONNECTION_NAME)
 	      || startswith (optarg, "--")
 	      || strchr (optarg, ':') != nullptr)
 	    {
@@ -4310,8 +4308,7 @@ captured_main (int argc, char *argv[])
 	  {
 	    int original_optind = optind;
 
-	    while (argv[optind] != nullptr
-		   && strcmp (argv[optind], "--") != 0)
+	    while (argv[optind] != nullptr && !streq (argv[optind], "--"))
 	      {
 		wrapper_argv += argv[optind];
 		wrapper_argv += ' ';
@@ -4385,19 +4382,19 @@ captured_main (int argc, char *argv[])
 		 tok != nullptr;
 		 tok = strtok_r (nullptr, ",", &saveptr))
 	      {
-		if (strcmp ("vCont", tok) == 0)
+		if (streq ("vCont", tok))
 		  disable_packet_vCont = true;
-		else if (strcmp ("vConts", tok) == 0)
+		else if (streq ("vConts", tok))
 		  disable_packet_vCont_step = true;
-		else if (strcmp ("Tthread", tok) == 0)
+		else if (streq ("Tthread", tok))
 		  disable_packet_Tthread = true;
-		else if (strcmp ("qC", tok) == 0)
+		else if (streq ("qC", tok))
 		  disable_packet_qC = true;
-		else if (strcmp ("qfThreadInfo", tok) == 0)
+		else if (streq ("qfThreadInfo", tok))
 		  disable_packet_qfThreadInfo = true;
-		else if (strcmp ("T", tok) == 0)
+		else if (streq ("T", tok))
 		  disable_packet_T = true;
-		else if (strcmp ("threads", tok) == 0)
+		else if (streq ("threads", tok))
 		  {
 		    disable_packet_vCont = true;
 		    disable_packet_Tthread = true;
@@ -4495,7 +4492,7 @@ captured_main (int argc, char *argv[])
 
   const char *port = argv[optind];
   ++optind;
-  if (port != nullptr && strcmp (port, "-") == 0)
+  if (port != nullptr && streq (port, "-"))
     {
       port = STDIO_CONNECTION_NAME;
 
@@ -4529,7 +4526,7 @@ captured_main (int argc, char *argv[])
 
   /* --attach used to come after PORT, so allow it there for
        compatibility.  */
-  if (*next_arg != NULL && strcmp (*next_arg, "--attach") == 0)
+  if (*next_arg != NULL && streq (*next_arg, "--attach"))
     {
       attach = true;
       next_arg++;
diff --git a/gdbserver/thread-db.cc b/gdbserver/thread-db.cc
index 7f29788d7d79..0bdcda2ced8b 100644
--- a/gdbserver/thread-db.cc
+++ b/gdbserver/thread-db.cc
@@ -696,7 +696,7 @@ thread_db_load_search (void)
 	     where libpthread lives.  We *could* fetch the info, but we don't
 	     do that yet.  Ignore it.  */
 	}
-      else if (strcmp (this_dir, "$sdir") == 0)
+      else if (streq (this_dir, "$sdir"))
 	{
 	  if (try_thread_db_load_from_sdir ())
 	    {
diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc
index 9bedd13567a3..25a3e8ceadfe 100644
--- a/gdbserver/tracepoint.cc
+++ b/gdbserver/tracepoint.cc
@@ -2497,7 +2497,7 @@ cmd_qtdp (char *own_buf)
 	  if (tpoint->type == trap_tracepoint || tp == NULL)
 	    {
 	      install_tracepoint (tpoint, own_buf);
-	      if (strcmp (own_buf, "OK") != 0)
+	      if (!streq (own_buf, "OK"))
 		remove_tracepoint (tpoint);
 	    }
 	  else
@@ -2685,7 +2685,7 @@ cmd_qtv (char *own_buf)
   /* Only make tsv's be undefined before the first trace run.  After a
      trace run is over, the user might want to see the last value of
      the tsv, and it might not be available in a traceframe.  */
-  else if (!tracing && strcmp (tracing_stop_reason, "tnotrun") == 0)
+  else if (!tracing && streq (tracing_stop_reason, "tnotrun"))
     {
       strcpy (own_buf, "U");
       return;
@@ -3438,7 +3438,7 @@ cmd_qtstatus (char *packet)
     }
 
   /* If this was a forced stop, include any stop note that was supplied.  */
-  if (strcmp (stop_reason_rsp, "tstop") == 0)
+  if (streq (stop_reason_rsp, "tstop"))
     {
       stop_reason_rsp = (char *) alloca (strlen ("tstop:") + strlen (buf3) + 1);
       strcpy (stop_reason_rsp, "tstop:");
@@ -3803,7 +3803,7 @@ cmd_bigqtbuffer_size (char *own_buf)
   packet += strlen ("QTBuffer:size:");
 
   /* -1 is sent as literal "-1".  */
-  if (strcmp (packet, "-1") == 0)
+  if (streq (packet, "-1"))
     sval = DEFAULT_TRACE_BUFFER_SIZE;
   else
     {
@@ -3880,7 +3880,7 @@ cmd_qtnotes (char *own_buf)
 int
 handle_tracepoint_general_set (char *packet)
 {
-  if (strcmp ("QTinit", packet) == 0)
+  if (streq ("QTinit", packet))
     {
       cmd_qtinit (packet);
       return 1;
@@ -3915,12 +3915,12 @@ handle_tracepoint_general_set (char *packet)
       cmd_qtro (packet);
       return 1;
     }
-  else if (strcmp ("QTStart", packet) == 0)
+  else if (streq ("QTStart", packet))
     {
       cmd_qtstart (packet);
       return 1;
     }
-  else if (strcmp ("QTStop", packet) == 0)
+  else if (streq ("QTStop", packet))
     {
       cmd_qtstop (packet);
       return 1;
@@ -3957,7 +3957,7 @@ handle_tracepoint_general_set (char *packet)
 int
 handle_tracepoint_query (char *packet)
 {
-  if (strcmp ("qTStatus", packet) == 0)
+  if (streq ("qTStatus", packet))
     {
       cmd_qtstatus (packet);
       return 1;
@@ -3967,22 +3967,22 @@ handle_tracepoint_query (char *packet)
       cmd_qtp (packet);
       return 1;
     }
-  else if (strcmp ("qTfP", packet) == 0)
+  else if (streq ("qTfP", packet))
     {
       cmd_qtfp (packet);
       return 1;
     }
-  else if (strcmp ("qTsP", packet) == 0)
+  else if (streq ("qTsP", packet))
     {
       cmd_qtsp (packet);
       return 1;
     }
-  else if (strcmp ("qTfV", packet) == 0)
+  else if (streq ("qTfV", packet))
     {
       cmd_qtfv (packet);
       return 1;
     }
-  else if (strcmp ("qTsV", packet) == 0)
+  else if (streq ("qTsV", packet))
     {
       cmd_qtsv (packet);
       return 1;
@@ -3997,7 +3997,7 @@ handle_tracepoint_query (char *packet)
       cmd_qtbuffer (packet);
       return 1;
     }
-  else if (strcmp ("qTMinFTPILen", packet) == 0)
+  else if (streq ("qTMinFTPILen", packet))
     {
       cmd_qtminftpilen (packet);
       return 1;
diff --git a/gdbsupport/common-exceptions.h b/gdbsupport/common-exceptions.h
index b34f44a66087..040419e30df9 100644
--- a/gdbsupport/common-exceptions.h
+++ b/gdbsupport/common-exceptions.h
@@ -179,7 +179,7 @@ struct gdb_exception
 
     return (reason == other.reason
 	    && error == other.error
-	    && strcmp (msg1, msg2) == 0);
+	    && streq (msg1, msg2));
   }
 
   /* Compare two exceptions.  */
diff --git a/gdbsupport/osabi.cc b/gdbsupport/osabi.cc
index d91bbcdb7ec3..806a15997dce 100644
--- a/gdbsupport/osabi.cc
+++ b/gdbsupport/osabi.cc
@@ -71,7 +71,7 @@ osabi_from_tdesc_string (const char *name)
   int i;
 
   for (i = 0; i < ARRAY_SIZE (gdb_osabi_names); i++)
-    if (strcmp (name, gdb_osabi_names[i].pretty) == 0)
+    if (streq (name, gdb_osabi_names[i].pretty))
       {
 	/* See note above: the name table matches the indices assigned
 	   to enum gdb_osabi.  */
diff --git a/gdbsupport/signals.cc b/gdbsupport/signals.cc
index eb321805c6d3..367ca571f3db 100644
--- a/gdbsupport/signals.cc
+++ b/gdbsupport/signals.cc
@@ -98,8 +98,7 @@ gdb_signal_from_name (const char *name)
   for (sig = GDB_SIGNAL_HUP;
        sig < GDB_SIGNAL_LAST;
        sig = (enum gdb_signal) ((int) sig + 1))
-    if (signals[sig].name != NULL
-	&& strcmp (name, signals[sig].name) == 0)
+    if (signals[sig].name != nullptr && streq (name, signals[sig].name))
       return sig;
   return GDB_SIGNAL_UNKNOWN;
 }

base-commit: 07caff21f90c2f0c9b7b0e79b00b774be668594c
-- 
2.53.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-03-16 17:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-16 15:23 [PATCH] gdb, gdbserver, gdbsupport: replace many uses of strcmp with streq Simon Marchi
2026-03-16 17:18 ` Andrew Burgess
2026-03-16 17:29   ` Simon Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox