On 4/1/22 8:29 PM, Andrii Nakryiko wrote: > Extend urandom_read helper binary to include USDTs of 4 combinations: > semaphore/semaphoreless (refcounted and non-refcounted) and based in > executable or shared library. We also extend urandom_read with ability > to report it's own PID to parent process and wait for parent process to > ready itself up for tracing urandom_read. We utilize popen() and > underlying pipe properties for proper signaling. > > Once urandom_read is ready, we add few tests to validate that libbpf's > USDT attachment handles all the above combinations of semaphore (or lack > of it) and static or shared library USDTs. Also, we validate that libbpf > handles shared libraries both with PID filter and without one (i.e., -1 > for PID argument). > > Having the shared library case tested with and without PID is important > because internal logic differs on kernels that don't support BPF > cookies. On such older kernels, attaching to USDTs in shared libraries > without specifying concrete PID doesn't work in principle, because it's > impossible to determine shared library's load address to derive absolute > IPs for uprobe attachments. Without absolute IPs, it's impossible to > perform correct look up of USDT spec based on uprobe's absolute IP (the > only kind available from BPF at runtime). This is not the problem on > newer kernels with BPF cookie as we don't need IP-to-ID lookup because > BPF cookie value *is* spec ID. > > So having those two situations as separate subtests is good because > libbpf CI is able to test latest selftests against old kernels (e.g., > 4.9 and 5.5), so we'll be able to disable PID-less shared lib attachment > for old kernels, but will still leave PID-specific one enabled to validate > this legacy logic is working correctly. > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > --- Acked-by: Dave Marchevsky <davemarchevsky@xxxxxx>