libbpf: simplify endianness check
Rewrite endianness check to use "more canonical" way, using compiler-defined macros, similar to few other places in libbpf. It also is more obvious and shorter. Acked-by: Song Liu <songliubraving@fb.com> Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
Родитель
be5c5d4e9d
Коммит
12ef5634a8
|
@ -607,31 +607,18 @@ errout:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
bpf_object__check_endianness(struct bpf_object *obj)
|
||||
static int bpf_object__check_endianness(struct bpf_object *obj)
|
||||
{
|
||||
static unsigned int const endian = 1;
|
||||
|
||||
switch (obj->efile.ehdr.e_ident[EI_DATA]) {
|
||||
case ELFDATA2LSB:
|
||||
/* We are big endian, BPF obj is little endian. */
|
||||
if (*(unsigned char const *)&endian != 1)
|
||||
goto mismatch;
|
||||
break;
|
||||
|
||||
case ELFDATA2MSB:
|
||||
/* We are little endian, BPF obj is big endian. */
|
||||
if (*(unsigned char const *)&endian != 0)
|
||||
goto mismatch;
|
||||
break;
|
||||
default:
|
||||
return -LIBBPF_ERRNO__ENDIAN;
|
||||
}
|
||||
|
||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||
if (obj->efile.ehdr.e_ident[EI_DATA] == ELFDATA2LSB)
|
||||
return 0;
|
||||
|
||||
mismatch:
|
||||
pr_warning("Error: endianness mismatch.\n");
|
||||
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||
if (obj->efile.ehdr.e_ident[EI_DATA] == ELFDATA2MSB)
|
||||
return 0;
|
||||
#else
|
||||
# error "Unrecognized __BYTE_ORDER__"
|
||||
#endif
|
||||
pr_warning("endianness mismatch.\n");
|
||||
return -LIBBPF_ERRNO__ENDIAN;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче