• Andrii Nakryiko's avatar
    libbpf: Support BTF loading and raw data output in both endianness · 3289959b
    Andrii Nakryiko authored
    Teach BTF to recognized wrong endianness and transparently convert it
    internally to host endianness. Original endianness of BTF will be preserved
    and used during btf__get_raw_data() to convert resulting raw data to the same
    endianness and a source raw_data. This means that little-endian host can parse
    big-endian BTF with no issues, all the type data will be presented to the
    client application in native endianness, but when it's time for emitting BTF
    to persist it in a file (e.g., after BTF deduplication), original non-native
    endianness will be preserved and stored.
    
    It's possible to query original endianness of BTF data with new
    btf__endianness() API. It's also possible to override desired output
    endianness with btf__set_endianness(), so that if application needs to load,
    say, big-endian BTF and store it as little-endian BTF, it's possible to
    manually override this. If btf__set_endianness() was used to change
    endianness, btf__endianness() will reflect overridden endianness.
    
    Given there are no known use cases for supporting cross-endianness for
    .BTF.ext, loading .BTF.ext in non-native endianness is not supported.
    Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200929043046.1324350-3-andriin@fb.com
    3289959b
btf.h 10.9 KB