What should architectures that don't have a MMU do?

On Mon, Aug 10, 2026 at 7:42 AM Marco C. <[email protected]> wrote:

> Hello,
>
> https://github.com/apache/nuttx/pull/19562
>
> Currently, in NuttX, fork() and vfork() do the same thing. The child shares
> .data, .bss and the heap with the parent. The child also runs at the same
> time as the parent. This is the behaviour of vfork(), not of fork().
>
> A program that uses POSIX fork() compiles and runs. But the child writes
> into the variables of the parent. There is no error message.
>
> This pull request gives each function its own behaviour. It is a breaking
> change. It removes fork() from all architectures. unistd.h no longer
> declares fork(), so a call to fork() now fails to build. Each architecture
> can add fork() again later, with the correct behaviour (which requires
> MMU). This is step 1 of the plan in issue #19540.
>
> vfork() keeps its behaviour. These architectures now have vfork(): ARM
> 32-bit, ARM64, RISC-V and x86_64 in all build modes; SIM, but not on
> Windows; MIPS32. The kernel builds of ARM 32-bit, ARM64 and x86_64 are new.
>
> Please test vfork() on your board. CI builds this branch, but CI does not
> run vfork() on hardware. This patch changes the address environments, the
> stack setup and the register context of each architecture. I tested 24
> configurations with QEMU and two on real hardware.
>
> Do these steps:
>
> 1. Get this branch and apache/nuttx-apps#3685.
> 2. Build your configuration.
> 3. Run ostest.
>
> The vfork() test is the first test. It writes this line:
>
> vfork_test: Child 5 ran and exited before the parent resumed
>
> Send the target, the build mode and this line. A report of a failure is as
> useful as a report of a pass. Comments on the semantics are also welcome.
>
> Thank you,
> Marco Casaroli
>

Reply via email to