Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[platform/kernel/linux-starfive.git] / tools / testing / selftests / bpf / btf_helpers.c
index b5941d5..1c1c2c2 100644 (file)
@@ -26,11 +26,12 @@ static const char * const btf_kind_str_mapping[] = {
        [BTF_KIND_FLOAT]        = "FLOAT",
        [BTF_KIND_DECL_TAG]     = "DECL_TAG",
        [BTF_KIND_TYPE_TAG]     = "TYPE_TAG",
+       [BTF_KIND_ENUM64]       = "ENUM64",
 };
 
 static const char *btf_kind_str(__u16 kind)
 {
-       if (kind > BTF_KIND_TYPE_TAG)
+       if (kind > BTF_KIND_ENUM64)
                return "UNKNOWN";
        return btf_kind_str_mapping[kind];
 }
@@ -139,14 +140,32 @@ int fprintf_btf_type_raw(FILE *out, const struct btf *btf, __u32 id)
        }
        case BTF_KIND_ENUM: {
                const struct btf_enum *v = btf_enum(t);
+               const char *fmt_str;
 
-               fprintf(out, " size=%u vlen=%u", t->size, vlen);
+               fmt_str = btf_kflag(t) ? "\n\t'%s' val=%d" : "\n\t'%s' val=%u";
+               fprintf(out, " encoding=%s size=%u vlen=%u",
+                       btf_kflag(t) ? "SIGNED" : "UNSIGNED", t->size, vlen);
                for (i = 0; i < vlen; i++, v++) {
-                       fprintf(out, "\n\t'%s' val=%u",
+                       fprintf(out, fmt_str,
                                btf_str(btf, v->name_off), v->val);
                }
                break;
        }
+       case BTF_KIND_ENUM64: {
+               const struct btf_enum64 *v = btf_enum64(t);
+               const char *fmt_str;
+
+               fmt_str = btf_kflag(t) ? "\n\t'%s' val=%lld" : "\n\t'%s' val=%llu";
+
+               fprintf(out, " encoding=%s size=%u vlen=%u",
+                       btf_kflag(t) ? "SIGNED" : "UNSIGNED", t->size, vlen);
+               for (i = 0; i < vlen; i++, v++) {
+                       fprintf(out, fmt_str,
+                               btf_str(btf, v->name_off),
+                               ((__u64)v->val_hi32 << 32) | v->val_lo32);
+               }
+               break;
+       }
        case BTF_KIND_FWD:
                fprintf(out, " fwd_kind=%s", btf_kflag(t) ? "union" : "struct");
                break;