* [PATCH v2] [pre-commit] Add file mode check
@ 2026-06-05 11:21 Tom de Vries
2026-06-15 8:18 ` Tom de Vries
2026-06-17 17:37 ` Tom Tromey
0 siblings, 2 replies; 4+ messages in thread
From: Tom de Vries @ 2026-06-05 11:21 UTC (permalink / raw)
To: gdb-patches
Claude Code mentioned in a review that a source file was marked executable.
I've submitted a patch to fix this [1].
Detect this problem using pre-commit to prevent it from re-occurring.
The state before commit 15363a3be77 ("[gdb] Drop executable mode in some
files") gives us (abbreviated output using "..."):
...
$ pre-commit run check-file-mode --all-files
check-file-mode.........................................................Failed
- hook id: check-file-mode
- exit code: 1
100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.h
100755 ... gdb/testsuite/gdb.fortran/nested-funcs.f90
100755 ... gdb/testsuite/gdb.fortran/oop_extend_type.f90
100755 ... gdb/amd64-tdep.c
100755 ... gdb/testsuite/lib/compiler.cc
100755 ... gdb/testsuite/gdb.fortran/nested-funcs.exp
100755 ... gdb/testsuite/gdb.fortran/vla-type.f90
100755 ... gdb/testsuite/gdb.arch/amd64-lam.c
100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.exp
100755 ... gdb/testsuite/gdb.testsuite/gdb_test_multiple-lbl.gdb
100755 ... gdb/testsuite/gdb.btrace/exception.exp
100755 ... gdb/testsuite/gdb.fortran/vla-type.exp
100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.c
100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c
100755 ... gdb/testsuite/gdb.fortran/oop_extend_type.exp
100755 ... gdb/testsuite/gdb.fortran/print_type.exp
...
Shell-checked new script gdb/contrib/check-file-mode.sh.
Changes in v2:
- make sure git failure makes the script fail
- make case statement more readable
Versions:
- v1 https://sourceware.org/pipermail/gdb-patches/2026-June/227791.html
[1] https://sourceware.org/pipermail/gdb-patches/2026-June/227780.html
---
.pre-commit-config.yaml | 5 ++++
gdb/contrib/check-file-mode.sh | 47 ++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+)
create mode 100755 gdb/contrib/check-file-mode.sh
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fe8466433ac..d75468d0b48 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -112,6 +112,11 @@ repos:
additional_dependencies: ["pyyaml"]
always_run: true
require_serial: true
+ - id: check-file-mode
+ name: check-file-mode
+ language: script
+ entry: gdb/contrib/check-file-mode.sh
+ files: '^(gdb|gdbserver|gdbsupport)/.*$'
- repo: https://github.com/nmoroze/tclint
rev: v0.8.0
hooks:
diff --git a/gdb/contrib/check-file-mode.sh b/gdb/contrib/check-file-mode.sh
new file mode 100755
index 00000000000..a6e05535e73
--- /dev/null
+++ b/gdb/contrib/check-file-mode.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# Copyright (C) 2026 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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 -e
+set -o pipefail
+
+no_exec_files=()
+for f in "$@"; do
+ case $f in
+ */*.py \
+ | */*.sh \
+ | */configure \
+ | gdb/gstack-1.in \
+ | gdb/gcore-1.in \
+ | gdb/po/gdbtext \
+ | gdb/make-init-c \
+ | gdb/testsuite/lib/notty-wrap \
+ | gdb/testsuite/lib/pdtrace.in )
+ continue
+ ;;
+ *)
+ no_exec_files=("${no_exec_files[@]}" "$f")
+ ;;
+ esac
+done
+
+if [ ${#no_exec_files[@]} -eq 0 ]; then
+ exit 0
+fi
+
+# Flag files that are executable, but not meant to be executable.
+
+git ls-files --stage -- "${no_exec_files[@]}" \
+ | (! grep '^100755 ')
base-commit: 3a5657bd3f26111214e70d3882150b06c9e45dff
--
2.51.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] [pre-commit] Add file mode check
2026-06-05 11:21 [PATCH v2] [pre-commit] Add file mode check Tom de Vries
@ 2026-06-15 8:18 ` Tom de Vries
2026-06-17 17:37 ` Tom Tromey
1 sibling, 0 replies; 4+ messages in thread
From: Tom de Vries @ 2026-06-15 8:18 UTC (permalink / raw)
To: gdb-patches
On 6/5/26 1:21 PM, Tom de Vries wrote:
> Claude Code mentioned in a review that a source file was marked executable.
>
> I've submitted a patch to fix this [1].
>
> Detect this problem using pre-commit to prevent it from re-occurring.
>
> The state before commit 15363a3be77 ("[gdb] Drop executable mode in some
> files") gives us (abbreviated output using "..."):
> ...
> $ pre-commit run check-file-mode --all-files
> check-file-mode.........................................................Failed
> - hook id: check-file-mode
> - exit code: 1
>
> 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.h
> 100755 ... gdb/testsuite/gdb.fortran/nested-funcs.f90
> 100755 ... gdb/testsuite/gdb.fortran/oop_extend_type.f90
> 100755 ... gdb/amd64-tdep.c
> 100755 ... gdb/testsuite/lib/compiler.cc
> 100755 ... gdb/testsuite/gdb.fortran/nested-funcs.exp
> 100755 ... gdb/testsuite/gdb.fortran/vla-type.f90
> 100755 ... gdb/testsuite/gdb.arch/amd64-lam.c
> 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.exp
> 100755 ... gdb/testsuite/gdb.testsuite/gdb_test_multiple-lbl.gdb
> 100755 ... gdb/testsuite/gdb.btrace/exception.exp
> 100755 ... gdb/testsuite/gdb.fortran/vla-type.exp
> 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.c
> 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c
> 100755 ... gdb/testsuite/gdb.fortran/oop_extend_type.exp
> 100755 ... gdb/testsuite/gdb.fortran/print_type.exp
> ...
>
> Shell-checked new script gdb/contrib/check-file-mode.sh.
>
With the current state of trunk, we have:
...
$ pre-commit run check-file-mode --all-files
check-file-mode..........................................................Failed
- hook id: check-file-mode
- exit code: 1
100755 1da0c04366da292f1f70931cfd08fe6fcc2d8faf 0 gdb/microblaze-linux-nat.c
...
So it looks like we really need this check.
I've pushed this.
Thanks,
- Tom
> Changes in v2:
> - make sure git failure makes the script fail
> - make case statement more readable
>
> Versions:
> - v1 https://sourceware.org/pipermail/gdb-patches/2026-June/227791.html
>
> [1] https://sourceware.org/pipermail/gdb-patches/2026-June/227780.html
> ---
> .pre-commit-config.yaml | 5 ++++
> gdb/contrib/check-file-mode.sh | 47 ++++++++++++++++++++++++++++++++++
> 2 files changed, 52 insertions(+)
> create mode 100755 gdb/contrib/check-file-mode.sh
>
> diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
> index fe8466433ac..d75468d0b48 100644
> --- a/.pre-commit-config.yaml
> +++ b/.pre-commit-config.yaml
> @@ -112,6 +112,11 @@ repos:
> additional_dependencies: ["pyyaml"]
> always_run: true
> require_serial: true
> + - id: check-file-mode
> + name: check-file-mode
> + language: script
> + entry: gdb/contrib/check-file-mode.sh
> + files: '^(gdb|gdbserver|gdbsupport)/.*$'
> - repo: https://github.com/nmoroze/tclint
> rev: v0.8.0
> hooks:
> diff --git a/gdb/contrib/check-file-mode.sh b/gdb/contrib/check-file-mode.sh
> new file mode 100755
> index 00000000000..a6e05535e73
> --- /dev/null
> +++ b/gdb/contrib/check-file-mode.sh
> @@ -0,0 +1,47 @@
> +#!/bin/bash
> +
> +# Copyright (C) 2026 Free Software Foundation, Inc.
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# 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 -e
> +set -o pipefail
> +
> +no_exec_files=()
> +for f in "$@"; do
> + case $f in
> + */*.py \
> + | */*.sh \
> + | */configure \
> + | gdb/gstack-1.in \
> + | gdb/gcore-1.in \
> + | gdb/po/gdbtext \
> + | gdb/make-init-c \
> + | gdb/testsuite/lib/notty-wrap \
> + | gdb/testsuite/lib/pdtrace.in )
> + continue
> + ;;
> + *)
> + no_exec_files=("${no_exec_files[@]}" "$f")
> + ;;
> + esac
> +done
> +
> +if [ ${#no_exec_files[@]} -eq 0 ]; then
> + exit 0
> +fi
> +
> +# Flag files that are executable, but not meant to be executable.
> +
> +git ls-files --stage -- "${no_exec_files[@]}" \
> + | (! grep '^100755 ')
>
> base-commit: 3a5657bd3f26111214e70d3882150b06c9e45dff
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] [pre-commit] Add file mode check
2026-06-05 11:21 [PATCH v2] [pre-commit] Add file mode check Tom de Vries
2026-06-15 8:18 ` Tom de Vries
@ 2026-06-17 17:37 ` Tom Tromey
2026-06-17 18:39 ` Tom de Vries
1 sibling, 1 reply; 4+ messages in thread
From: Tom Tromey @ 2026-06-17 17:37 UTC (permalink / raw)
To: Tom de Vries; +Cc: gdb-patches
>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
Tom> +git ls-files --stage -- "${no_exec_files[@]}" \
Tom> + | (! grep '^100755 ')
I was curious why this check in particular is used.
Is there something that would ensure that an executable file would only
have this mode?
thanks,
Tom
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] [pre-commit] Add file mode check
2026-06-17 17:37 ` Tom Tromey
@ 2026-06-17 18:39 ` Tom de Vries
0 siblings, 0 replies; 4+ messages in thread
From: Tom de Vries @ 2026-06-17 18:39 UTC (permalink / raw)
To: Tom Tromey; +Cc: gdb-patches
On 6/17/26 7:37 PM, Tom Tromey wrote:
>>>>>> "Tom" == Tom de Vries <tdevries@suse.de> writes:
>
> Tom> +git ls-files --stage -- "${no_exec_files[@]}" \
> Tom> + | (! grep '^100755 ')
>
> I was curious why this check in particular is used.
> Is there something that would ensure that an executable file would only
> have this mode?
>
Here ( https://git-scm.com/docs/gitdatamodel ) it says:
...
In the output above, Git displays the file type of each tree entry using
a format that’s loosely modelled on Unix file modes (100644 is "regular
file", 100755 is "executable file", 120000 is "symbolic link", 040000 is
"directory", and 160000 is "gitlink").
...
So yes, that seems to be the case.
Thanks,
- Tom
> thanks,
> Tom
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-06-17 18:39 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-05 11:21 [PATCH v2] [pre-commit] Add file mode check Tom de Vries
2026-06-15 8:18 ` Tom de Vries
2026-06-17 17:37 ` Tom Tromey
2026-06-17 18:39 ` 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