Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH 0/2] [gdb] Two regformats/regdat.sh fixes
@ 2026-08-28 12:04 Tom de Vries
  2026-08-28 12:04 ` [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean Tom de Vries
  2026-08-28 12:04 ` [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh Tom de Vries
  0 siblings, 2 replies; 9+ messages in thread
From: Tom de Vries @ 2026-08-28 12:04 UTC (permalink / raw)
  To: gdb-patches

The first patch makes the script shellcheck clean.

The second patch fixes an unbound variable error.

Tom de Vries (2):
  [gdb] Make regformats/regdat.sh shellcheck-clean
  [gdb] Fix unbound variable in regformats/regdat.sh

 gdb/contrib/shellcheck.sh |  1 -
 gdb/regformats/regdat.sh  | 35 ++++++++++++++++++-----------------
 2 files changed, 18 insertions(+), 18 deletions(-)


base-commit: 1469a04f30917ef6a2bf4afc73e442b836574563
-- 
2.51.0


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

* [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean
  2026-08-28 12:04 [PATCH 0/2] [gdb] Two regformats/regdat.sh fixes Tom de Vries
@ 2026-08-28 12:04 ` Tom de Vries
  2026-08-28 12:43   ` Simon Marchi
  2026-08-28 13:34   ` Andreas Schwab
  2026-08-28 12:04 ` [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh Tom de Vries
  1 sibling, 2 replies; 9+ messages in thread
From: Tom de Vries @ 2026-08-28 12:04 UTC (permalink / raw)
  To: gdb-patches

Make regformats/regdat.sh shellcheck-clean:
- use read -r
- use $()
- ignore intentional word-splitting
- add missing quotes
- use $(())

Handle a shellcheck error in this:
...
  if eval test \"\${${r}}\" = \"\ \"
...
by simplifying to:
...
  eval "rvalue=\$$r"
  if test "${rvalue:-}" = " "
...

Note that shellcheck can't detect that rvalue is assigned to, so we use
'${parameter:-word}' to use default value "", to silence a SC2154 [1].

Also, handle a shellcheck error in this:
...
  eval ${r}=""
...
by simplifying to:
...
  eval "$r=''"
...

Tested on x86_64-linux using:
...
$ for f in $(find gdb/regformats -name "*.dat"); do \
      sh gdb/regformats/regdat.sh \
          $f \
	  gdbsupport/osabi.def \
	  $(echo $f | sed 's%/%-%g'); \
  done
...
and comparing the generated files with and without this patch.

[1] https://www.shellcheck.net/wiki/SC2154
---
 gdb/contrib/shellcheck.sh |  1 -
 gdb/regformats/regdat.sh  | 25 ++++++++++++++-----------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/gdb/contrib/shellcheck.sh b/gdb/contrib/shellcheck.sh
index f7f7bf9efbf..a3e80a553f4 100755
--- a/gdb/contrib/shellcheck.sh
+++ b/gdb/contrib/shellcheck.sh
@@ -47,7 +47,6 @@ for f in "$@"; do
 	    | gdb/contrib/gdb-add-index.sh \
 	    | gdb/gdb_buildall.sh \
 	    | gdb/gdb_mbuild.sh \
-	    | gdb/regformats/regdat.sh \
 	    | gdb/testsuite/lib/pdtrace.in)
 	    # Skip unclean files.
 	    continue
diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
index b57b76132aa..01f2dabe459 100755
--- a/gdb/regformats/regdat.sh
+++ b/gdb/regformats/regdat.sh
@@ -25,7 +25,7 @@ do_read ()
 {
     type=""
     entry=""
-    while read line
+    while read -r line
     do
 	if test "${line}" = ""
 	then
@@ -42,9 +42,11 @@ ${line}"
 	    # The semantics of IFS varies between different SH's.  Some
 	    # treat ``::' as three fields while some treat it as just too.
 	    # Work around this by eliminating ``::'' ....
-	    line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`"
+	    line="$(echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g')"
 
 	    OFS="${IFS}" ; IFS="[:]"
+	    # Word-splitting on read variable is required.
+	    # shellcheck disable=SC2086
 	    eval read ${read} <<EOF
 ${line}
 EOF
@@ -54,9 +56,10 @@ EOF
 	    # that ended up with just that space character.
 	    for r in ${read}
 	    do
-		if eval test \"\${${r}}\" = \"\ \"
+		eval "rvalue=\$$r"
+		if test "${rvalue:-}" = " "
 		then
-		    eval ${r}=""
+		    eval "$r=''"
 		fi
 	    done
 
@@ -71,7 +74,7 @@ EOF
     fi
 }
 
-if test ! -r $1; then
+if test ! -r "$1"; then
   echo "$0: Could not open $1." 1>&2
   exit 1
 fi
@@ -105,8 +108,8 @@ EOF
 }
 
 
-exec > new-$3
-copyright $1
+exec > new-"$3"
+copyright "$1"
 echo '#include "regdef.h"'
 echo '#include "tdesc.h"'
 echo
@@ -119,7 +122,7 @@ xmlosabi=x
 expedite=x
 feature=x
 osabi=unknown
-exec < $1
+exec < "$1"
 while do_read
 do
   if test "${type}" = "name"; then
@@ -162,13 +165,13 @@ do
     echo "  tdesc_create_reg (feature, \"${entry}\","
     echo "  0, 0, NULL, ${type}, NULL);"
 
-    offset=`expr ${offset} + ${type}`
-    i=`expr $i + 1`
+    offset=$((offset + type))
+    i=$((i + 1))
   fi
 done
 
 echo
-echo "static const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };"
+echo "static const char *expedite_regs_${name}[] = { \"$(echo "${expedite}" | sed 's/,/", "/g')\", 0 };"
 
 echo "#ifndef IN_PROCESS_AGENT"
 if test "${feature}" != x; then
-- 
2.51.0


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

* [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh
  2026-08-28 12:04 [PATCH 0/2] [gdb] Two regformats/regdat.sh fixes Tom de Vries
  2026-08-28 12:04 ` [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean Tom de Vries
@ 2026-08-28 12:04 ` Tom de Vries
  2026-08-28 12:46   ` Simon Marchi
  1 sibling, 1 reply; 9+ messages in thread
From: Tom de Vries @ 2026-08-28 12:04 UTC (permalink / raw)
  To: gdb-patches

While testing the previous patch, I noticed the following difference:
...
$ sh ./gdb/regformats/regdat.sh \
      gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx64l.dat \
      gdbsupport/osabi.def \
      tmp.txt
$ ./gdb/regformats/regdat.sh \
      gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx64l.dat \
      gdbsupport/osabi.def \
      tmp.txt
./gdb/regformats/regdat.sh: line 33: comment: unbound variable
...

The difference is due to the start of regdat.sh:
...
 #!/bin/sh -u
...
where -u is enabling the unbound variable check.

In the first variant, this setting is ignored.

Fix this by using "set -u" instead, making sure that the unbound variable
check is done for both variants.

The comment variable is not used in a meaningful way, so fix the unbound
variable error by removing it.

Tested in the same way as the preceding patch.
---
 gdb/regformats/regdat.sh | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
index 01f2dabe459..f93270ba0ca 100755
--- a/gdb/regformats/regdat.sh
+++ b/gdb/regformats/regdat.sh
@@ -1,4 +1,4 @@
-#!/bin/sh -u
+#!/bin/sh
 
 # Register protocol definitions for GDB, the GNU debugger.
 # Copyright (C) 2001-2026 Free Software Foundation, Inc.
@@ -18,6 +18,8 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+set -u
+
 # Format of the input files
 read="type entry"
 
@@ -28,15 +30,11 @@ do_read ()
     while read -r line
     do
 	if test "${line}" = ""
-	then
-	    continue
-	elif test "${line}" = "#" -a "${comment}" = ""
 	then
 	    continue
 	elif expr "${line}" : "#" > /dev/null
 	then
-	    comment="${comment}
-${line}"
+	    continue
 	else
 
 	    # The semantics of IFS varies between different SH's.  Some
-- 
2.51.0


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

* Re: [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean
  2026-08-28 12:04 ` [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean Tom de Vries
@ 2026-08-28 12:43   ` Simon Marchi
  2026-08-28 14:40     ` Tom de Vries
  2026-08-28 13:34   ` Andreas Schwab
  1 sibling, 1 reply; 9+ messages in thread
From: Simon Marchi @ 2026-08-28 12:43 UTC (permalink / raw)
  To: Tom de Vries, gdb-patches



On 2026-08-28 08:04, Tom de Vries wrote:
> Make regformats/regdat.sh shellcheck-clean:
> - use read -r
> - use $()
> - ignore intentional word-splitting
> - add missing quotes
> - use $(())
> 
> Handle a shellcheck error in this:
> ...
>   if eval test \"\${${r}}\" = \"\ \"
> ...
> by simplifying to:
> ...
>   eval "rvalue=\$$r"
>   if test "${rvalue:-}" = " "
> ...
> 
> Note that shellcheck can't detect that rvalue is assigned to, so we use
> '${parameter:-word}' to use default value "", to silence a SC2154 [1].
> 
> Also, handle a shellcheck error in this:
> ...
>   eval ${r}=""
> ...
> by simplifying to:
> ...
>   eval "$r=''"
> ...
> 
> Tested on x86_64-linux using:
> ...
> $ for f in $(find gdb/regformats -name "*.dat"); do \
>       sh gdb/regformats/regdat.sh \
>           $f \
> 	  gdbsupport/osabi.def \
> 	  $(echo $f | sed 's%/%-%g'); \
>   done
> ...
> and comparing the generated files with and without this patch.

LGTM, thanks.

Approved-By: Simon Marchi <simon.marchi@efficios.com>

Random thought: I wonder why we don't check in the result of running
regdat.sh in the repo, like we do for gdbarch-gen.{c,h},
target-delegates-gen.c, and the features directory.  The output doesn't
change from build to build, and that would make it easy to see that your
patch did not produce any change in the output files.

Simon

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

* Re: [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh
  2026-08-28 12:04 ` [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh Tom de Vries
@ 2026-08-28 12:46   ` Simon Marchi
  2026-08-28 14:19     ` Tom de Vries
  0 siblings, 1 reply; 9+ messages in thread
From: Simon Marchi @ 2026-08-28 12:46 UTC (permalink / raw)
  To: Tom de Vries, gdb-patches



On 2026-08-28 08:04, Tom de Vries wrote:
> While testing the previous patch, I noticed the following difference:
> ...
> $ sh ./gdb/regformats/regdat.sh \
>       gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx64l.dat \
>       gdbsupport/osabi.def \
>       tmp.txt
> $ ./gdb/regformats/regdat.sh \
>       gdb/regformats/rs6000/powerpc-isa205-ppr-dscr-vsx64l.dat \
>       gdbsupport/osabi.def \
>       tmp.txt
> ./gdb/regformats/regdat.sh: line 33: comment: unbound variable
> ...
> 
> The difference is due to the start of regdat.sh:
> ...
>  #!/bin/sh -u
> ...
> where -u is enabling the unbound variable check.
> 
> In the first variant, this setting is ignored.
> 
> Fix this by using "set -u" instead, making sure that the unbound variable
> check is done for both variants.
> 
> The comment variable is not used in a meaningful way, so fix the unbound
> variable error by removing it.
> 
> Tested in the same way as the preceding patch.

LGTM, thanks.

Approved-By: Simon Marchi <simon.marchi@efficios.com>

> ---
>  gdb/regformats/regdat.sh | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
> index 01f2dabe459..f93270ba0ca 100755
> --- a/gdb/regformats/regdat.sh
> +++ b/gdb/regformats/regdat.sh
> @@ -1,4 +1,4 @@
> -#!/bin/sh -u
> +#!/bin/sh
>  
>  # Register protocol definitions for GDB, the GNU debugger.
>  # Copyright (C) 2001-2026 Free Software Foundation, Inc.
> @@ -18,6 +18,8 @@
>  # You should have received a copy of the GNU General Public License
>  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  
> +set -u
> +
>  # Format of the input files
>  read="type entry"
>  
> @@ -28,15 +30,11 @@ do_read ()
>      while read -r line
>      do
>  	if test "${line}" = ""
> -	then
> -	    continue
> -	elif test "${line}" = "#" -a "${comment}" = ""
>  	then
>  	    continue
>  	elif expr "${line}" : "#" > /dev/null
>  	then
> -	    comment="${comment}

Unrelated comment: I'd like if we could standardize on

  if ...; then
  for ... in ...; do
  while ...; do

instead of

  if ...
  then

  for ... in ...
  do

  while ...
  do

I think it's more common, easier to read and takes less unnecessary
lines.

Simon

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

* Re: [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean
  2026-08-28 12:04 ` [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean Tom de Vries
  2026-08-28 12:43   ` Simon Marchi
@ 2026-08-28 13:34   ` Andreas Schwab
  2026-08-28 14:04     ` Tom de Vries
  1 sibling, 1 reply; 9+ messages in thread
From: Andreas Schwab @ 2026-08-28 13:34 UTC (permalink / raw)
  To: Tom de Vries; +Cc: gdb-patches

On Aug 28 2026, Tom de Vries wrote:

> +		    eval "$r=''"

You don't need the quotes on the rhs.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."

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

* Re: [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean
  2026-08-28 13:34   ` Andreas Schwab
@ 2026-08-28 14:04     ` Tom de Vries
  0 siblings, 0 replies; 9+ messages in thread
From: Tom de Vries @ 2026-08-28 14:04 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: gdb-patches

On 8/28/26 3:34 PM, Andreas Schwab wrote:
> On Aug 28 2026, Tom de Vries wrote:
> 
>> +		    eval "$r=''"
> 
> You don't need the quotes on the rhs.
> 

True, I just like the explicit rhs.

Thanks,
- Tom

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

* Re: [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh
  2026-08-28 12:46   ` Simon Marchi
@ 2026-08-28 14:19     ` Tom de Vries
  0 siblings, 0 replies; 9+ messages in thread
From: Tom de Vries @ 2026-08-28 14:19 UTC (permalink / raw)
  To: Simon Marchi, gdb-patches

On 8/28/26 2:46 PM, Simon Marchi wrote:
> Unrelated comment: I'd like if we could standardize on
> 
>    if ...; then
>    for ... in ...; do
>    while ...; do
> 
> instead of
> 
>    if ...
>    then
> 
>    for ... in ...
>    do
> 
>    while ...
>    do
> 
> I think it's more common, easier to read and takes less unnecessary
> lines.

Agreed.  I almost started doing this manually, but suddenly remembered 
that pretty-printers exist.

I've used shfmt ( 
https://sourceware.org/pipermail/gdb-patches/2026-August/229822.html ).

I also tried out beautysh (which would have been easy to integrate into 
pre-commit, because it's python), but it doesn't seem to fix this style.

I also tried out bash --pretty-print, but it has run-away indentation 
and doesn't seem to support customization.

Thanks,
- Tom

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

* Re: [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean
  2026-08-28 12:43   ` Simon Marchi
@ 2026-08-28 14:40     ` Tom de Vries
  0 siblings, 0 replies; 9+ messages in thread
From: Tom de Vries @ 2026-08-28 14:40 UTC (permalink / raw)
  To: Simon Marchi, gdb-patches

On 8/28/26 2:43 PM, Simon Marchi wrote:
> Random thought: I wonder why we don't check in the result of running
> regdat.sh in the repo, like we do for gdbarch-gen.{c,h},
> target-delegates-gen.c, and the features directory.  The output doesn't
> change from build to build, and that would make it easy to see that your
> patch did not produce any change in the output files.

Good question, hadn't thought about it.

I suppose not checking in an intermediate result means you never use 
something stale, so I guess it comes down to how you want to prevent that.

Thanks,
- Tom


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

end of thread, other threads:[~2026-08-28 14:41 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-28 12:04 [PATCH 0/2] [gdb] Two regformats/regdat.sh fixes Tom de Vries
2026-08-28 12:04 ` [PATCH 1/2] [gdb] Make regformats/regdat.sh shellcheck-clean Tom de Vries
2026-08-28 12:43   ` Simon Marchi
2026-08-28 14:40     ` Tom de Vries
2026-08-28 13:34   ` Andreas Schwab
2026-08-28 14:04     ` Tom de Vries
2026-08-28 12:04 ` [PATCH 2/2] [gdb] Fix unbound variable in regformats/regdat.sh Tom de Vries
2026-08-28 12:46   ` Simon Marchi
2026-08-28 14:19     ` Tom de Vries

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