[PATCH] Use arrays rather than pointers for global string constants

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Use arrays rather than pointers for global string constants

Tom Tromey-4
My understanding is that it's mildly better to use a static const
array, as opposed to a "const char *", for a global string constant,
when possible.  This makes sense to me because the pointer requires a
load from an address, whereas the array is just the address.

So, I searched for these in gdb and gdbserver.  This patch fixes the
ones I found.

gdb/ChangeLog
2020-07-22  Tom Tromey  <[hidden email]>

        * unittests/memory-map-selftests.c (valid_mem_map): Now array.
        * ui-style.c (ansi_regex_text): Now array.
        * rust-exp.y (number_regex_text): Now array.
        * linespec.c (linespec_quote_characters): Now array.
        * jit.c (jit_break_name, jit_descriptor_name, reader_init_fn_sym):
        Now arrays.

gdbserver/ChangeLog
2020-07-22  Tom Tromey  <[hidden email]>

        * linux-x86-low.cc (xmltarget_i386_linux_no_xml)
        (xmltarget_amd64_linux_no_xml): Now arrays.
---
 gdb/ChangeLog                        | 9 +++++++++
 gdb/jit.c                            | 6 +++---
 gdb/linespec.c                       | 2 +-
 gdb/rust-exp.y                       | 2 +-
 gdb/ui-style.c                       | 2 +-
 gdb/unittests/memory-map-selftests.c | 2 +-
 gdbserver/ChangeLog                  | 5 +++++
 gdbserver/linux-x86-low.cc           | 4 ++--
 8 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/gdb/jit.c b/gdb/jit.c
index 024c66e7add..5634c9e2b5d 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -45,9 +45,9 @@
 
 static std::string jit_reader_dir;
 
-static const char *const jit_break_name = "__jit_debug_register_code";
+static const char jit_break_name[] = "__jit_debug_register_code";
 
-static const char *const jit_descriptor_name = "__jit_debug_descriptor";
+static const char jit_descriptor_name[] = "__jit_debug_descriptor";
 
 static void jit_inferior_init (struct gdbarch *gdbarch);
 static void jit_inferior_exit_hook (struct inferior *inf);
@@ -173,7 +173,7 @@ struct jit_reader
 static struct jit_reader *loaded_jit_reader = NULL;
 
 typedef struct gdb_reader_funcs * (reader_init_fn_type) (void);
-static const char *reader_init_fn_sym = "gdb_init_reader";
+static const char reader_init_fn_sym[] = "gdb_init_reader";
 
 /* Try to load FILE_NAME as a JIT debug info reader.  */
 
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 4a634e3aff9..72110fcba1e 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -421,7 +421,7 @@ static bool compare_msymbols (const bound_minimal_symbol &a,
 /* Permitted quote characters for the parser.  This is different from the
    completer's quote characters to allow backward compatibility with the
    previous parser.  */
-static const char *const linespec_quote_characters = "\"\'";
+static const char linespec_quote_characters[] = "\"\'";
 
 /* Lexer functions.  */
 
diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
index 4e7878f67e1..db888098c4a 100644
--- a/gdb/rust-exp.y
+++ b/gdb/rust-exp.y
@@ -123,7 +123,7 @@ static struct stoken make_stoken (const char *);
    since it is very long and this gives us a way to comment the
    sections.  */
 
-static const char *number_regex_text =
+static const char number_regex_text[] =
   /* subexpression 1: allows use of alternation, otherwise uninteresting */
   "^("
   /* First comes floating point.  */
diff --git a/gdb/ui-style.c b/gdb/ui-style.c
index 2d6640bc700..4ed08dadc32 100644
--- a/gdb/ui-style.c
+++ b/gdb/ui-style.c
@@ -23,7 +23,7 @@
 /* A regular expression that is used for matching ANSI terminal escape
    sequences.  */
 
-static const char *ansi_regex_text =
+static const char ansi_regex_text[] =
   /* Introduction.  */
   "^\033\\["
 #define DATA_SUBEXP 1
diff --git a/gdb/unittests/memory-map-selftests.c b/gdb/unittests/memory-map-selftests.c
index 42b5db6974a..0be5cb573e5 100644
--- a/gdb/unittests/memory-map-selftests.c
+++ b/gdb/unittests/memory-map-selftests.c
@@ -28,7 +28,7 @@ namespace memory_map_tests {
 
 /* A simple valid test input for parse_memory_map.  */
 
-static const char *valid_mem_map = R"(<?xml version="1.0"?>
+static const char valid_mem_map[] = R"(<?xml version="1.0"?>
 <!DOCTYPE memory-map
           PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
                  "http://sourceware.org/gdb/gdb-memory-map.dtd">
diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc
index 37d3626e1f7..eeaced8c8d5 100644
--- a/gdbserver/linux-x86-low.cc
+++ b/gdbserver/linux-x86-low.cc
@@ -58,13 +58,13 @@ static unsigned char small_jump_insn[] = { 0x66, 0xe9, 0, 0 };
 
 /* Backward compatibility for gdb without XML support.  */
 
-static const char *xmltarget_i386_linux_no_xml = "@<target>\
+static const char xmltarget_i386_linux_no_xml[] = "@<target>\
 <architecture>i386</architecture>\
 <osabi>GNU/Linux</osabi>\
 </target>";
 
 #ifdef __x86_64__
-static const char *xmltarget_amd64_linux_no_xml = "@<target>\
+static const char xmltarget_amd64_linux_no_xml[] = "@<target>\
 <architecture>i386:x86-64</architecture>\
 <osabi>GNU/Linux</osabi>\
 </target>";
--
2.26.2

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Use arrays rather than pointers for global string constants

Sourceware - gdb-patches mailing list
On Wed, 22 Jul 2020 14:36:13 -0600
Tom Tromey <[hidden email]> wrote:

> My understanding is that it's mildly better to use a static const
> array, as opposed to a "const char *", for a global string constant,
> when possible.  This makes sense to me because the pointer requires a
> load from an address, whereas the array is just the address.
>
> So, I searched for these in gdb and gdbserver.  This patch fixes the
> ones I found.
>
> gdb/ChangeLog
> 2020-07-22  Tom Tromey  <[hidden email]>
>
> * unittests/memory-map-selftests.c (valid_mem_map): Now array.
> * ui-style.c (ansi_regex_text): Now array.
> * rust-exp.y (number_regex_text): Now array.
> * linespec.c (linespec_quote_characters): Now array.
> * jit.c (jit_break_name, jit_descriptor_name, reader_init_fn_sym):
> Now arrays.

LGTM.

Kevin