Hi Song, On 08/21/2018 10:53 AM, Ravi Bangoria wrote: > Hi Song, > >> However, if I start a.out AFTER enabling the uprobe, there is something wrong: >> >> root@virt-test:~# ~/a.out >> 11 >> semaphore 0 <<< this should be non-zero, as the uprobe is already enabled In this testcase, semaphore variable is stored into .bss: $ nm test | grep semaphore 0000000010010c5e B semaphore $ readelf -SW ./test | grep "data\|bss" [22] .data PROGBITS 0000000010010c58 000c58 000004 00 WA 0 0 1 [23] .bss NOBITS 0000000010010c5c 000c5c 000004 00 WA 0 0 2 I'm not so sure but I guess .bss data initialization happens after calling uprobe_mmap() and thus you are seeing semaphore as 0. To verify this, if I force to save semaphore into data section by assigning non-zero value to it: volatile short semaphore = 1 $ nm test | grep semaphore 0000000010010c5c D semaphore $ readelf -SW ./test | grep "data\|bss" [22] .data PROGBITS 0000000010010c58 000c58 000006 00 WA 0 0 2 [23] .bss NOBITS 0000000010010c5e 000c5e 000002 00 WA 0 0 1 increment/decrement works fine. Ravi