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:
		
							parent
							
								
									be5c5d4e9d
								
							
						
					
					
						commit
						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; | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| 
 | ||||
| mismatch: | ||||
| 	pr_warning("Error: endianness mismatch.\n"); | ||||
| #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ | ||||
| 	if (obj->efile.ehdr.e_ident[EI_DATA] == ELFDATA2LSB) | ||||
| 		return 0; | ||||
| #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; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user