Skip to content
  • Andrii Nakryiko's avatar
    3289959b
    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
    libbpf: Support BTF loading and raw data output in both endianness
    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
Loading