This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit b3b2c3e07f25af4745c8d467cb4ad60abb65a982
Author: Marco Casaroli <[email protected]>
AuthorDate: Sat Oct 17 19:59:15 2026 +0200

    Documentation/binfmt: Describe the script binary format.
    
    CONFIG_BINFMT_SCRIPT adds a binary format for files that start with
    "#!". The binary loader page did not list it.
    
    Add the script format to the list of formats. Add a section that gives
    the form of the first line, the argument list of the interpreter, the
    limits and the errors. Add the option to the configuration variables.
    
    Assisted-by: Claude Code:claude-opus-5-5
    Signed-off-by: Marco Casaroli <[email protected]>
---
 Documentation/os/binfmt/index.rst | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/Documentation/os/binfmt/index.rst 
b/Documentation/os/binfmt/index.rst
index 9cb18d3a36e..ab5757a06b3 100644
--- a/Documentation/os/binfmt/index.rst
+++ b/Documentation/os/binfmt/index.rst
@@ -30,6 +30,8 @@ At present, the following binary formats are support by NuttX:
   - **NXFLAT**. NuttX NXFLAT formatted files. More information about the
     NXFLAT binary format can be found in the :ref:`NXFLAT
     documentation <nxflat>`.
+  - **Scripts**. A file that starts with ``#!`` is run by the interpreter
+    that its first line names. See `Scripts`_ below.
 
 **Executables and Libraries** The generic binary loader logic does not
 care what it is that it being loaded. It could load an executable
@@ -48,6 +50,30 @@ However, the NuttX binary loader is an independent 
development and
 shares nothing with the Linux binary loader other the same name and the
 same basic functionality.
 
+Scripts
+=======
+
+With ``CONFIG_BINFMT_SCRIPT`` (default ``n``), ``exec()`` and
+``posix_spawn()`` can run a file whose first line has this form::
+
+  #!<interpreter> [<argument>]
+
+The loader starts the interpreter with the argument list that Linux uses::
+
+  <interpreter> [<argument>] <script> <argv[1]> ...
+
+``<script>`` is the path of the script that was loaded, also when it was
+found through ``PATH``. The interpreter ends at the first white space. The
+rest of the line, without the white space around it, is one optional
+argument. The loader reads at most 127 bytes of the first line.
+
+The interpreter must be a file that another binary format can load, for
+example an ELF program or a builtin application. The interpreter can be a
+script too, up to four levels. A deeper chain fails with ``ELOOP``. A
+missing interpreter fails with ``ENOENT``. The script format is tried after
+all other formats, so a file that no format accepts fails with
+``ENOEXEC``.
+
 Binary Loader Interface
 =======================
 
@@ -356,6 +382,8 @@ Configuration Variables
   - ``CONFIG_BINFMT_DISABLE``: By default, support for loadable binary formats 
is built.
     This logic may be suppressed be defining this setting.
   - ``CONFIG_BINFMT_CONSTRUCTORS``: Build in support for C++ constructors in 
loaded modules.
+  - ``CONFIG_BINFMT_SCRIPT``: Run files that start with ``#!`` through the
+    interpreter that they name. Default: ``n``.
   - ``CONFIG_SYMTAB_ORDEREDBYNAME``: Symbol tables are order by name (rather 
than value).
   - ``CONFIG_SYMTAB_DECORATED``: Symbols will have a leading underscore in 
object files.
 

Reply via email to