tty: gracefully handle proctree_lock locking
Instead of relocking tty to get the proctree_lock and experiencing the
race due to the relock, take the proctree_lock in advance for ioctl
commands that need it. The affected commands, TIOCNOTTY, TIOCSCTTY,
and TIOCSPGRP, must not be overridden by the specific tty drivers,
so the common handling is cleaner.
Reviewed by: kevans (previous version), markj
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D59132
[WebAssembly] Avoid scanning unrelated debug values (NFCI) (#218378)
RegStackify looks for debug values when moving an instruction.
But when a debug use comes before the definition, it may collect values
for a lot of unrelated variables until the end of the block.
Stop early once all relevant values have been found instead.
(cherry picked from commit 5bff640ac99dc29ab61cb55bdfc9b992d09b5a85)
[DWARFLinker] Walk each shared subtree's dependencies once (#218072)
cdc31cfa66f0 made every root that references an already-marked subtree
re-walk that subtree to record the completeness dependencies it
contributes, which is what makes the recorded dependency set complete
and independent of thread interleaving. That walk replaced the
isAlreadyMarked short-circuit which had kept marking linear, so a widely
shared subtree is re-parsed and re-resolved once per referencing root.
Linking a RelWithDebInfo clang went from 27s to 67s of wall time and
from 242s to 1447s of CPU, peak memory grew from 35GB to 63GB, and 7.0
billion dependencies were recorded for an unchanged dSYM.
Record only that a root carries the subtree's dependencies and walk each
distinct subtree once. All of a subtree's dependencies demote the same
root, so the expansion stops at the first one that does.
A subtree contributes two kinds of dependency. One kind is recorded
under the root referencing the subtree, varies with that root, and is
[24 lines not shown]
[lldb][API] Fix SBEnvironment crash when Set is called with a nullptr. (#218906)
Crashed because std::string is constructed with a nullptr. Wrap with
`llvm::StringRef`.
Add a unittest
(cherry picked from commit 69db8489be2f4e3cb1cf3f874403481d206b545c)
[clang-format] Harden star and amp annotation (#212856)
At this point we can't (or won't) decide wether this is a template
argument or just an expression, opt out of the specialized (and in the
test cases wrong) assignment.
Fixes #212622
(cherry picked from commit af15d15f9bbd5ac5d3f020d270b38ffe01b0a72a)
[clang-format][NFC] Apply review comments (#218142)
That were missed while merging #212856.
(cherry picked from commit 8dba93818258d95c46fa2c17e902a8256e4d91b5)
[Driver] Reject the joined form -exxx (#219658)
PR #69114 changed -e to JoinedOrSeparate so that the new --entry aliases
would work. This also accepts -exxx, silently treating a typo or GCC's
-export-dynamic as an entry name (rejected by #72804).
Make -e Separate again.
[orc-rt] Drop reserveMemory's /dev/zero fallback. (#219656)
Just use MAP_ANON / MAP_ANONYMOUS as available.
Also replaces <sys/errno.h> with <errno.h> and drops the now-unused
<fcntl.h>.
[LV] Invalidate cost model before code-gen (NFC) (#217556)
The planner previously held a reference to the
LoopVectorizationCostModel, which is only needed while planning and
computing the best VF. Change the member to a std::unique_ptr so the
planner owns it, and release it via a new clearCostModel() before
executing the best plan. This prevents code generation from relying on
cost-modeling decisions, surfacing any violations.
This patch also migrates one remaining cost-model lookup during codegen
(whether partial alias masks are used) to be VPlan-based (via
findIncomingAliasMask)
Note that there is one case remaining that needs migrating to VPlan yet.
That is checking if an epilogue is allowed.
PR: https://github.com/llvm/llvm-project/pull/217556
libssl: fix API misuse in legacy finished handling
This looks like a potential out of bounds read or allowing trailing garbage
in peer_finished. It's harmless because CBS_len() is compared against the
s->s3->hs.peer_finished_len a few lines up, thus it is only cosmetic.
discussed with jsing
ok kenjiro
uaudio: Ignore transfer completions if audio is halted
When audio is halted, the pipes are closed and the corresponding usb
transfer completion functions are called immediately. For certain
devices the status of the feedback pipe is USBD_NORMAL_COMPLETION,
which triggers further processing of the received data.
Fixes the harmless "uaudio0: sync play xfer, err = 6" messages on
the console.
[fuzzer] Restrict merge-sigusr.test to Linux (#216702)
The `fuzzer/merge-sigusr.test` test causes the whole `ninja check-all`
run on NetBSD to be killed with `SIGUSR2`.
It turns out the test is highly Linux-specific in at least two ways:
- The `setsid` command doesn't exist on any of Darwin, FreeBSD, and
NetBSD.
- `ps -o sess= <pid>` is highly unportable, too:
- FreeBSD `ps` doesn't have the `sess` keyword at all.
- NetBSD `ps` does, but with different semantics: it's the session
pointer, not the session id as on Linux, which leads to randomly killing
unrelated processes.
Therefore this patch restricts the test to Linux instead of simply
[3 lines not shown]
[sanitizer] Skip hanging tests on FreeBSD (#216703)
Three sanitizer tests hang indefinitely on FreeBSD:
```
MemorySanitizer-X86_64 :: fork.cpp
SanitizerCommon-tsan-x86_64-FreeBSD :: Posix/fork_threaded.c
ThreadSanitizer-x86_64 :: fork_multithreaded.cpp
```
All of them loop and don't time out, so they need to be terminated
manually for `ninja check-all` to complete. To avoid this, this patch
skips the affected tests.
Tested on `x86_64-pc-freebsd15.1`, `x86_64-pc-netbsd11.0` and
`x86_64-pc-linux-gnu`.
[orc-rt] Add a scheme for system-specific code. (#219648)
System-specific code was written two ad-hoc ways: .cpp files selected by
CMake, and Unix/*.inc textually included behind #if ladders.
Those operations are now declared in orc-rt-internal/support/sys/, with
one implementation per capability directory (posix/, darwin/, windows/).
CMake composes capability lists rather than selecting an OS list. E.g.
POSIX targets get posix/ plus their OS directory. A file belongs in a
shared list only if it is uniform across that list's members; where a
function needs an OS conditional it moves into an OS-specific directory
instead. The "Target OS ... unsupported" #error ladders go away with the
textual includes -- components no longer include system code at all, so
the diagnostic belongs in CMake.
hostOS* becomes the orc_rt::sys namespace, matching llvm::sys.
Cache invalidation is the exception, since it wants to inline: it is
declared in sys/CacheControl.h, which selects a per-system definition
header. Its generic path now uses __builtin___clear_cache instead of
declaring __clear_cache, which forced an opaque call.
[Clang][C++29] Template pack indexing (#218738)
This partially implement p3670r4
(https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3670r4.pdf) I
haven't implemented mangling yet, it part to limit the scope of this
change which is somewhat larger than I thought it would be.
This introduces a new uncommon template name storage kind that stores a
pattern and the expanded parameter, like we do for types and
expressions.
The rest is fairly mechanical.
The feature is backported to C++98 (for type template parameters).
Funnilly, the backport of pack indexing of types was never actually
tested in C++98 mode and did not work.
It should be fixed by this PR but I'll write tests for it as a follow
up.
[8 lines not shown]