]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
selftests: bpf: modify urandom_read and link it non-statically
authorIvan Vecera <ivecera@redhat.com>
Fri, 15 Mar 2019 20:04:14 +0000 (21:04 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 22 Mar 2019 02:37:30 +0000 (19:37 -0700)
After some experiences I found that urandom_read does not need to be
linked statically. When the 'read' syscall call is moved to separate
non-inlined function then bpf_get_stackid() is able to find
the executable in stack trace and extract its build_id from it.

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/Makefile
tools/testing/selftests/bpf/urandom_read.c

index 25d3939eb840d6c7b2461ddcbb1b153a4d7fbcb9..edd59707cb1f3cf363fb7bc25a444b13a287cb5c 100644 (file)
@@ -70,7 +70,7 @@ TEST_CUSTOM_PROGS = $(OUTPUT)/urandom_read
 all: $(TEST_CUSTOM_PROGS)
 
 $(OUTPUT)/urandom_read: $(OUTPUT)/%: %.c
-       $(CC) -o $@ -static $< -Wl,--build-id
+       $(CC) -o $@ $< -Wl,--build-id
 
 BPFOBJ := $(OUTPUT)/libbpf.a
 
index 9de8b7cb4e6df6b5929c915566dff74163efbcf2..db781052758d3774b42cb891b86b09320e3d95d5 100644 (file)
@@ -7,11 +7,19 @@
 
 #define BUF_SIZE 256
 
+static __attribute__((noinline))
+void urandom_read(int fd, int count)
+{
+       char buf[BUF_SIZE];
+       int i;
+
+       for (i = 0; i < count; ++i)
+               read(fd, buf, BUF_SIZE);
+}
+
 int main(int argc, char *argv[])
 {
        int fd = open("/dev/urandom", O_RDONLY);
-       int i;
-       char buf[BUF_SIZE];
        int count = 4;
 
        if (fd < 0)
@@ -20,8 +28,7 @@ int main(int argc, char *argv[])
        if (argc == 2)
                count = atoi(argv[1]);
 
-       for (i = 0; i < count; ++i)
-               read(fd, buf, BUF_SIZE);
+       urandom_read(fd, count);
 
        close(fd);
        return 0;