函数源码

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source File:kernel\bpf\btf.c Create Date:2022-07-27 14:36:48
首页 Copyright©Brick

2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
static void btf_struct_seq_show(const struct btf *btf, const struct btf_type *t,
                u32 type_id, void *data, u8 bits_offset,
                struct seq_file *m)
{
    const char *seq = BTF_INFO_KIND(t->info) == BTF_KIND_UNION ? "|" : ",";
    const struct btf_member *member;
    u32 i;
 
    seq_puts(m, "{");
    for_each_member(i, t, member) {
        const struct btf_type *member_type = btf_type_by_id(btf,
                                member->type);
        const struct btf_kind_operations *ops;
        u32 member_offset, bitfield_size;
        u32 bytes_offset;
        u8 bits8_offset;
 
        if (i)
            seq_puts(m, seq);
 
        member_offset = btf_member_bit_offset(t, member);
        bitfield_size = btf_member_bitfield_size(t, member);
        bytes_offset = BITS_ROUNDDOWN_BYTES(member_offset);
        bits8_offset = BITS_PER_BYTE_MASKED(member_offset);
        if (bitfield_size) {
            btf_bitfield_seq_show(data + bytes_offset, bits8_offset,
                          bitfield_size, m);
        } else {
            ops = btf_type_ops(member_type);
            ops->seq_show(btf, member_type, member->type,
                      data + bytes_offset, bits8_offset, m);
        }
    }
    seq_puts(m, "}");
}