[libc] Skip the RPC doorbell interrupt when the mailbox is uninitialized (#214037)

## Overview

`rpc::Process::notify()` guards `doorbell->value` but then
unconditionally
dereferences `doorbell->mailbox`. The two are not initialized together.
The
AMDGPU offload plugin sets `value` to the address of a field in its HSA
signal,
so it is never null, while `mailbox` is that signal's
`event_mailbox_ptr`, which
is zero unless the signal is interrupt-backed:

```c++
Value   = reinterpret_cast<uint64_t *>(&Doorbell->value);
Mailbox = reinterpret_cast<uint64_t *>(Doorbell->event_mailbox_ptr);
```

The existing guard can therefore never fire on AMDGPU, and `notify()`
stores to
a null address. Guard the mailbox store instead, which matches the
intent stated
in 4961700c1004 that the interrupt is "completely optional, as it is
ignored if
uninitialized".

The check is inside the block rather than in the outer condition because
`value`
is the pending-work counter the server observes; skipping the increment
starves
a polling server instead of fixing anything.

## Testing - (AI assisted)

New unit test covering a partially initialized doorbell and an
unconfigured one;
the former segfaults without this change.

Also verified end to end on MI350X (gfx950, ROCm 7.14, clang 23) by
rebuilding
both consumers of this header, `libc.a` and the OpenMP DeviceRTL, with
and
without the change. In-kernel `malloc`, in-kernel `printf`, and a
Fortran
array-section assignment all fault before it and complete with correct
results
after.

GitOrigin-RevId: 957ba4c5490623ea395c3a4d7db330a0917e7aef
3 files changed