Blame view

buildroot/buildroot-2016.08.1/package/android-tools/0006-fix-big-endian-build.patch 2 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  Fix build on big endian systems
  
  The usb_linux_client.c file defines cpu_to_le16/32 by using the C
  library htole16/32 function calls. However, cpu_to_le16/32 are used
  when initializing structures, i.e in a context where a function call
  is not allowed.
  
  It works fine on little endian systems because htole16/32 are defined
  by the C library as no-ops. But on big-endian systems, they are
  actually doing something, which might involve calling a function,
  causing build failures.
  
  To solve this, we simply open-code cpu_to_le16/32 in a way that allows
  them to be used when initializing structures.
  
  Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
  
  Index: b/core/adb/usb_linux_client.c
  ===================================================================
  --- a/core/adb/usb_linux_client.c
  +++ b/core/adb/usb_linux_client.c
  @@ -34,8 +34,15 @@
   #define MAX_PACKET_SIZE_FS	64
   #define MAX_PACKET_SIZE_HS	512
   
  -#define cpu_to_le16(x)  htole16(x)
  -#define cpu_to_le32(x)  htole32(x)
  +#if __BYTE_ORDER == __LITTLE_ENDIAN
  +# define cpu_to_le16(x) (x)
  +# define cpu_to_le32(x) (x)
  +#else
  +# define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
  +# define cpu_to_le32(x) \
  +	((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >>  8) | \
  +	 (((x) & 0x0000ff00u) <<  8) | (((x) & 0x000000ffu) << 24))
  +#endif
   
   struct usb_handle
   {
  Index: b/core/adbd/usb_linux_client.c
  ===================================================================
  --- a/core/adbd/usb_linux_client.c
  +++ b/core/adbd/usb_linux_client.c
  @@ -34,8 +34,15 @@
   #define MAX_PACKET_SIZE_FS	64
   #define MAX_PACKET_SIZE_HS	512
   
  -#define cpu_to_le16(x)  htole16(x)
  -#define cpu_to_le32(x)  htole32(x)
  +#if __BYTE_ORDER == __LITTLE_ENDIAN
  +# define cpu_to_le16(x) (x)
  +# define cpu_to_le32(x) (x)
  +#else
  +# define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
  +# define cpu_to_le32(x) \
  +	((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >>  8) | \
  +	 (((x) & 0x0000ff00u) <<  8) | (((x) & 0x000000ffu) << 24))
  +#endif
   
   struct usb_handle
   {