probe syscall.bind!, nd_syscall.bind
{
    if (pid() != target()) next

    sa = my_addr_uaddr
    family = 0xffff
    data = 42

    // Compare sa_family and sa_data using the target binary

    cast_family = @cast(sa, "sockaddr", @1)->sa_family
    if (family == cast_family)
        println("binary sa_family OK")
    else
        printf("binary sa_family %#x != %#x\n", family, cast_family)

    cast_data = @cast(sa, "sockaddr", @1)->sa_data[0]
    if (data == cast_data)
        println("binary sa_data OK")
    else
        printf("binary sa_data %d != %d\n", data, cast_data)

    // Compare sa_family and sa_data using a generated user module

    cast_family = @cast(sa, "sockaddr", "<sys/socket.h>")->sa_family
    if (family == cast_family)
        println("header sa_family OK")
    else
        printf("header sa_family %#x != %#x\n", family, cast_family)

    cast_data = @cast(sa, "sockaddr", "<sys/socket.h>")->sa_data[0]
    if (data == cast_data)
        println("header sa_data OK")
    else
        printf("header sa_data %d != %d\n", data, cast_data)
}