[Instrumentor] Support multiple runtime bitcodes (#216333)
Replace the runtime_bitcode string option with runtime_bitcodes, an
ordered list of runtime bitcode files. Each file is parsed and linked
into the instrumented module in list order, so a runtime can be split
into separate modules, e.g., shared state and callbacks, without merging
them into one file first.
---------
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[libc] Establish clean baseline for implementation-in-namespace (#231639)
Scope libc/src/.clang-tidy down to llvmlibc-implementation-in-namespace
with WarningsAsErrors to establish a 100% green baseline.
Add NOLINT comments to replaceable global allocation functions in
new.cpp which must reside in the global namespace. Disable default
clang-analyzer checks in libc/.clang-tidy with a leading '-*'.
Assisted-by: Automated tooling, human reviewed.
NAS-144450 / 27.0.0 / Fix alerts test (by themylogin) (#20007)
Wait for `VolumeStatus` alert by class instead of source. If another
alert from that source appears (e.g., boot pool status alert), the test
breaks because `volume` key is not there:
```
def wait_for_alert(timeout=120):
for _ in range(timeout):
for alert in call("alert.list"):
if (
alert["source"] == "VolumeStatus"
and alert["args"]["volume"] == pool_name
^^^^^^^^^^^^^^^^^^^^^^^
and alert["args"]["state"] == "DEGRADED"
):
E KeyError: 'volume'
```
Original PR: https://github.com/truenas/middleware/pull/20006
Co-authored-by: themylogin <themylogin at gmail.com>
NAS-144445 / 27.0.0 / Properly wait for oneshot alerts in tests (by themylogin) (#20008)
`alert.oneshot_create` does not create the alert instantaneously because
it waits for alerts lock. Some of our tests do not expect that,
resulting in flakiness. The worst case is `test_root_password_disabled`
which also failed cleanup and left the system misconfigured.
Original PR: https://github.com/truenas/middleware/pull/20002
Co-authored-by: themylogin <themylogin at gmail.com>
[SCEV] Derive x >=s 0 from x <u y when y is non-negative
If x <u y and y <=u 2^(n-1) (e.g. y >=s 0), then x >=s 0.
Prove this in SCEV's isImpliedCondBalancedTypes so a guard
like "start <u len" proves start >=s 0. This also covers
x <=u y with y up to INT_MAX, which reaches the implication
code canonicalized as x <u y + 1.
The query is proven from the derived fact via
isImpliedCondOperands, so weaker bounds (x >=s c, c <= 0) follow
too.
y is checked via ranges only, to keep compile time low.
Co-Authored-By: Claude Sonnet 5.5 <noreply at anthropic.com>
www/qt6-webengine: do not special-case the version of node on i386.
In the past the build of this port would hang when using the
then-current www/node22 on i386, but a test build on 14.4-i386
with multiple parallel jobs went fine.
PR: 299234
Approved by: kde (makc)
[SCEV][NFC] Precommit tests for x <u y && y >=s 0 implying x >=s 0
SCEV derives x <s y from x <u y && y >=s 0, but not x >=s 0, so a loop
guarded by "start <u len" with a non-negative len does not prove
start >=s 0.
Add unit tests for isImpliedCond and the end-to-end guard queries, and
an IndVars lit test.
Checks SCEV cannot prove yet are marked FIXME.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
powerpc: Avoid deadlock when CPUs exchange threads
The PowerPC context switch waited for the incoming thread to leave
blocked_lock before releasing the outgoing thread. If two CPUs selected
each other's running threads concurrently, both CPUs waited for the
other to perform the release and neither could progress. This appeared
as intermittent boot hangs under QEMU MTTCG when taskqueue threads were
bound to opposite CPUs.
8df2e5421468 ("powerpc: put the isync inside the TD_LOCK()...")
attempted to fix the same hang by moving isync into the polling loop.
That did not address the circular wait: isync cannot cause either CPU to
execute the release store after the loop. It only added context
synchronization to failed iterations and changed timing. Move isync back
to the successful exit, which preserves acquire ordering for subsequent
context loads.
Match the ordering used by other architectures: publish the outgoing
thread's new lock before waiting for the incoming thread. Apply the
[20 lines not shown]
Rename attribute and clean up qualifying set of instructions
"no-async" was based on an imprecise use of the word "async", which also
confused me during its implementation, so I also removed
unintentionally-added intrinsics from the set of intrinsics this
attribute checks for.