return 0;
 }
 
+extern int extra_prog_load_log_flags;
+
 static int check_load(const char *file, enum bpf_prog_type type)
 {
        struct bpf_prog_load_attr attr;
        memset(&attr, 0, sizeof(struct bpf_prog_load_attr));
        attr.file = file;
        attr.prog_type = type;
-       attr.log_level = 4;
+       attr.log_level = 4 | extra_prog_load_log_flags;
        attr.prog_flags = BPF_F_TEST_RND_HI32;
        err = bpf_prog_load_xattr(&attr, &obj, &prog_fd);
        bpf_object__close(obj);
 
 
        fflush(stdout); /* exports env.log_buf & env.log_cnt */
 
-       if (env.verbose || test->force_log || failed) {
+       if (env.verbosity > VERBOSE_NONE || test->force_log || failed) {
                if (env.log_cnt) {
                        env.log_buf[env.log_cnt] = '\0';
                        fprintf(env.stdout, "%s", env.log_buf);
        { "verifier-stats", ARG_VERIFIER_STATS, NULL, 0,
          "Output verifier statistics", },
        { "verbose", ARG_VERBOSE, "LEVEL", OPTION_ARG_OPTIONAL,
-         "Verbose output (use -vv for extra verbose output)" },
+         "Verbose output (use -vv or -vvv for progressively verbose output)" },
        {},
 };
 
 static int libbpf_print_fn(enum libbpf_print_level level,
                           const char *format, va_list args)
 {
-       if (!env.very_verbose && level == LIBBPF_DEBUG)
+       if (env.verbosity < VERBOSE_VERY && level == LIBBPF_DEBUG)
                return 0;
        vprintf(format, args);
        return 0;
        return 0;
 }
 
+extern int extra_prog_load_log_flags;
+
 static error_t parse_arg(int key, char *arg, struct argp_state *state)
 {
        struct test_env *env = state->input;
                env->verifier_stats = true;
                break;
        case ARG_VERBOSE:
+               env->verbosity = VERBOSE_NORMAL;
                if (arg) {
                        if (strcmp(arg, "v") == 0) {
-                               env->very_verbose = true;
+                               env->verbosity = VERBOSE_VERY;
+                               extra_prog_load_log_flags = 1;
+                       } else if (strcmp(arg, "vv") == 0) {
+                               env->verbosity = VERBOSE_SUPER;
+                               extra_prog_load_log_flags = 2;
                        } else {
                                fprintf(stderr,
                                        "Unrecognized verbosity setting ('%s'), only -v and -vv are supported\n",
                                return -EINVAL;
                        }
                }
-               env->verbose = true;
                break;
        case ARGP_KEY_ARG:
                argp_usage(state);
        env.stdout = stdout;
        env.stderr = stderr;
 
-       if (env.verbose) {
+       if (env.verbosity > VERBOSE_NONE) {
                /* nothing to do, output to stdout by default */
                return;
        }
 
 #include <bpf/libbpf.h>
 #include <string.h>
 
+int extra_prog_load_log_flags = 0;
+
 int bpf_prog_test_load(const char *file, enum bpf_prog_type type,
                       struct bpf_object **pobj, int *prog_fd)
 {
        attr.prog_type = type;
        attr.expected_attach_type = 0;
        attr.prog_flags = BPF_F_TEST_RND_HI32;
+       attr.log_level = extra_prog_load_log_flags;
 
        return bpf_prog_load_xattr(&attr, pobj, prog_fd);
 }
        load_attr.license = license;
        load_attr.kern_version = kern_version;
        load_attr.prog_flags = BPF_F_TEST_RND_HI32;
+       load_attr.log_level = extra_prog_load_log_flags;
 
        return bpf_load_program_xattr(&load_attr, log_buf, log_buf_sz);
 }