NAME watchpoint - absolute address
BEFORE ./testprogs/watchpoint
RUN {{BPFTRACE}} -e "watchpoint:$(awk '{print $1}' /tmp/watchpoint_mem):8:w { printf(\"hit!\n\"); exit() }" -p {{BEFORE_PID}}
EXPECT hit!
ARCH aarch64|ppc64|ppc64le|x86_64
CLEANUP rm -f /tmp/watchpoint_mem

NAME kwatchpoint - knl absolute address
RUN {{BPFTRACE}} -e "watchpoint:0x$(awk '$3 == "jiffies" {print $1}' /proc/kallsyms):4:w { printf(\"hit\n\"); exit(); }"
EXPECT hit
ARCH aarch64|ppc64|ppc64le|x86_64
REQUIRES awk '$3 == "jiffies" {got=1} end {exit !got}' /proc/kallsyms

NAME function_arg_addr
RUN {{BPFTRACE}} -e 'watchpoint:increment+arg1:4:w { printf("hit!\n"); exit() }' -c ./testprogs/watchpoint_func
EXPECT hit!
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME async_function_arg_addr
RUN {{BPFTRACE}} -e 'asyncwatchpoint:increment+arg1:4:w { printf("hit!\n"); exit() }' -c ./testprogs/watchpoint_func
EXPECT hit!
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME function_arg_addr_process_flag
RUN {{BPFTRACE}} -e 'watchpoint:increment+arg1:4:w { printf("hit!\n"); exit() }' -p $(pidof watchpoint_func)
BEFORE ./testprogs/watchpoint_func
EXPECT hit!
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME many_function_probes
RUN {{BPFTRACE}} -e 'config = { missing_probes = "warn" } watchpoint:increment+arg0:4:w { printf("hit!\n") }' -c ./testprogs/watchpoint_func_many_probes
EXPECT WARNING: No more HW registers left
EXPECT WARNING: Unable to attach probe: watchpoint:./testprogs/watchpoint_func_many_probes:increment:4:w. Skipping.
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME unwatch
RUN {{BPFTRACE}} runtime/scripts/watchpoint_unwatch.bt -c ./testprogs/watchpoint_unwatch
EXPECT count=1
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME function_multiattach
RUN {{BPFTRACE}} runtime/scripts/watchpoint_multiattach.bt -c ./testprogs/watchpoint_func_wildcard
EXPECT count=3
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME wildcarded_function
RUN {{BPFTRACE}} -e 'config = { missing_probes = "warn" } watchpoint:increment_*+arg0:4:w { printf("hit!\n") }' -c ./testprogs/watchpoint_func_wildcard
EXPECT WARNING: No more HW registers left
EXPECT WARNING: Unable to attach probe: watchpoint:./testprogs/watchpoint_func_wildcard:increment_0:4:w. Skipping.
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME unique_probe_bodies
RUN {{BPFTRACE}} -e 'config = { missing_probes = "warn" } watchpoint:increment_*+arg0:4:w { printf("%s!\n", probe) }' -c ./testprogs/watchpoint_func_wildcard
EXPECT_REGEX .*increment_0:4:w!
ARCH aarch64|x86_64
REQUIRES_FEATURE signal

NAME execution breakpoint
RUN {{BPFTRACE}} -e 'watchpoint:0x10000000:1:x { printf("hit!\n"); exit() }' -c ./testprogs/watchpoint_exec
EXPECT hit!
ARCH aarch64|x86_64

NAME watchpoint absolute address threaded
BEFORE ./testprogs/watchpoint_threaded
RUN {{BPFTRACE}} -e 'watchpoint:0x10000000:1:w { printf("hit!\n"); exit() }' -c ./testprogs/watchpoint_threaded
EXPECT hit!
# Not all archs support mmap to our specific address, so be conservative here.
# See 08a47afa ("Fixing absolute address test issue across platforms")
ARCH x86_64
