D367 - A symbol is declared where it is imported, not where its code lives
decided - 2026-08-29
clock_gettime and gettimeofday are C
library functions and were written as C library functions, in
orbistoun-libc. Declaring them there broke the audit: both
were already declared in libScePosix, because that is where
a title was measured importing them.
The rule the audit enforces is one declaration per symbol, and it is right. A symbol declared twice is two libraries claiming one function, and the trace then labels a call with whichever declaration was found first.
Which of the two declarations is true
The measured one. libScePosix is where a real title
asked for these names; nothing here has observed a libc
exporting them on this platform, and inventing a second export to make
the code tidy would be inventing a fact about the target.
So the declaration stayed in libScePosix and the
implementation stayed in orbistoun-libc, bound by a
delegation entry whose two halves are the same name. That reads oddly
and is correct: these have no vendor-named twin, so the POSIX name
is the implementation's name. The delegation still earns its
place, because it is what binds a declaration in one crate to code in
another - and the existing test refuses a delegation that names
nothing.
The general shape
Where a symbol is declared is a claim about the target. Where its code lives is a claim about this repository. They are answerable separately, they were conflated because they usually coincide, and the audit is what noticed.