From d1cf1d9dddf3d53d8b1fb08033bd6504f7374349 Mon Sep 17 00:00:00 2001 From: Seung-Woo Kim Date: Tue, 7 Jan 2020 14:27:37 +0900 Subject: [PATCH] usb: thor: fix possible alignment issues With gcc9, address-of-packed-member warnings are shown. Fix the issues by using packed structure. Change-Id: Ia375a212e112a935eefaa7ea6105b0bbceae52a3 Ref: https://patchwork.ozlabs.org/patch/1218603/ Signed-off-by: Seung-Woo Kim --- property/usb/cdc_descriptor.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/property/usb/cdc_descriptor.c b/property/usb/cdc_descriptor.c index bf27148..6dba80f 100644 --- a/property/usb/cdc_descriptor.c +++ b/property/usb/cdc_descriptor.c @@ -8,6 +8,8 @@ #define THOR_VENDOR_NUM 0x04E8 #define THOR_PRODUCT_NUM 0x685D +typedef struct { __le16 val; } __attribute__((aligned(16))) __le16_packed; + static struct usb_device_descriptor thor_device_desc_high __align (32)= { .bLength = sizeof(thor_device_desc_high), .bDescriptorType = USB_DT_DEVICE, @@ -272,14 +274,15 @@ unsigned char *thor_get_config_desc(unsigned int speed) return (unsigned char *) &function_desc_buf; } -static void str2wide (char *str, u16 * wide) +static void str2wide (char *str, void *wide) { int i; + __le16_packed *tmp = wide; for (i = 0; i < strlen (str) && str[i]; i++){ #if defined(__LITTLE_ENDIAN) - wide[i] = (u16) str[i]; + tmp[i].val = (u16) str[i]; #elif defined(__BIG_ENDIAN) - wide[i] = ((u16)(str[i])<<8); + tmp[i].val = ((u16)(str[i])<<8); #else #error "__LITTLE_ENDIAN or __BIG_ENDIAN undefined" #endif -- 2.7.4