Merge change 6551

* changes:
  Implement global, local, and stack based float and double variables.
diff --git a/adb/commandline.c b/adb/commandline.c
index 41b340a..ad1021c 100644
--- a/adb/commandline.c
+++ b/adb/commandline.c
@@ -152,7 +152,7 @@
         "\n"
         "networking:\n"
         "  adb ppp <tty> [parameters]   - Run PPP over USB.\n"
-        " Note: you should not automatically start a PDP connection.\n"
+        " Note: you should not automatically start a PPP connection.\n"
         " <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1\n"
         " [parameters] - Eg. defaultroute debug dump local notty usepeerdns\n"
         "\n"
diff --git a/adb/usb_linux.c b/adb/usb_linux.c
index 32ce0a9..95c2ce6 100644
--- a/adb/usb_linux.c
+++ b/adb/usb_linux.c
@@ -269,26 +269,46 @@
                     if (device->iSerialNumber) {
                         struct usbdevfs_ctrltransfer  ctrl;
                         __u16 buffer[128];
-                        int result;
+                        __u16 languages[128];
+                        int i, result;
+                        int languageCount = 0;
 
-                        memset(buffer, 0, sizeof(buffer));
+                        memset(languages, 0, sizeof(languages));
                         memset(&ctrl, 0, sizeof(ctrl));
 
+                            // read list of supported languages
                         ctrl.bRequestType = USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE;
                         ctrl.bRequest = USB_REQ_GET_DESCRIPTOR;
-                        ctrl.wValue = (USB_DT_STRING << 8) | device->iSerialNumber;
+                        ctrl.wValue = (USB_DT_STRING << 8) | 0;
                         ctrl.wIndex = 0;
-                        ctrl.wLength = sizeof(buffer);
-                        ctrl.data = buffer;
+                        ctrl.wLength = sizeof(languages);
+                        ctrl.data = languages;
 
                         result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
-                        if (result > 0) {
-                            int i;
-                                // skip first word, and copy the rest to the serial string, changing shorts to bytes.
-                            result /= 2;
-                            for (i = 1; i < result; i++)
-                                serial[i - 1] = buffer[i];
-                            serial[i - 1] = 0;
+                        if (result > 0)
+                            languageCount = (result - 2) / 2;
+
+                        for (i = 1; i <= languageCount; i++) {
+                            memset(buffer, 0, sizeof(buffer));
+                            memset(&ctrl, 0, sizeof(ctrl));
+
+                            ctrl.bRequestType = USB_DIR_IN|USB_TYPE_STANDARD|USB_RECIP_DEVICE;
+                            ctrl.bRequest = USB_REQ_GET_DESCRIPTOR;
+                            ctrl.wValue = (USB_DT_STRING << 8) | device->iSerialNumber;
+                            ctrl.wIndex = languages[i];
+                            ctrl.wLength = sizeof(buffer);
+                            ctrl.data = buffer;
+
+                            result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
+                            if (result > 0) {
+                                int i;
+                                    // skip first word, and copy the rest to the serial string, changing shorts to bytes.
+                                result /= 2;
+                                for (i = 1; i < result; i++)
+                                    serial[i - 1] = buffer[i];
+                                serial[i - 1] = 0;
+                                break;
+                            }
                         }
                     }
 
diff --git a/logcat/event-log-tags b/logcat/event-log-tags
index 8b49fa8..4dabbbc 100644
--- a/logcat/event-log-tags
+++ b/logcat/event-log-tags
@@ -21,7 +21,7 @@
 # 2: long
 # 3: string
 # 4: list
-# 
+#
 # The data unit is a number taken from the following list:
 # 1: Number of objects
 # 2: Number of bytes
@@ -58,11 +58,11 @@
 # This is logged when the partial wake lock (keeping the device awake
 # regardless of whether the screen is off) is acquired or released.
 2729 power_partial_wake_state (releasedorAcquired|1|5),(tag|3)
-# This is logged when battery goes from discharging to charging. 
+# This is logged when battery goes from discharging to charging.
 # It lets us count the total amount of time between charges and the discharge level
 2730 battery_discharge (duration|2|3),(minLevel|1|6),(maxLevel|1|6)
 #
-# Leave IDs through 2739 for more power logs 
+# Leave IDs through 2739 for more power logs
 #
 
 # This event is logged when the location service uploads location data.
@@ -180,9 +180,9 @@
 30010 am_proc_bound (PID|1|5),(Process Name|3)
 # Application process died
 30011 am_proc_died (PID|1|5),(Process Name|3)
-# The Activity Manager failed to pause the given activity. 
+# The Activity Manager failed to pause the given activity.
 30012 am_failed_to_pause (Token|1|5),(Wanting to pause|3),(Currently pausing|3)
-# Attempting to pause the current activity 
+# Attempting to pause the current activity
 30013 am_pause_activity (Token|1|5),(Component Name|3)
 # Application process has been started
 30014 am_proc_start (PID|1|5),(UID|1|5),(Process Name|3),(Type|3),(Component|3)
@@ -282,28 +282,28 @@
 # Connectivity state changed:
 # [31-13] Reserved for future use
 # [12- 9] Network subtype (for mobile network, as defined by TelephonyManager)
-# [ 8- 3] Detailed state ordinal (as defined by NetworkInfo.DetailedState)   
+# [ 8- 3] Detailed state ordinal (as defined by NetworkInfo.DetailedState)
 # [ 2- 0] Network type (as defined by ConnectivityManager)
 50020 connectivity_state_changed (custom|1|5)
 
 # Wi-Fi network state changed:
 # [31- 6] Reserved for future use
-# [ 5- 0] Detailed state ordinal (as defined by NetworkInfo.DetailedState)   
+# [ 5- 0] Detailed state ordinal (as defined by NetworkInfo.DetailedState)
 50021 wifi_network_state_changed (network_state|1|5)
 
 # Wi-Fi supplicant state changed:
 # [31- 6] Reserved for future use
-# [ 5- 0] Supplicant state ordinal (as defined by SupplicantState)   
+# [ 5- 0] Supplicant state ordinal (as defined by SupplicantState)
 50022 wifi_supplicant_state_changed (supplicant_state|1|5)
 
 # Wi-Fi driver state changed:
 # [31- 1] Reserved for future use
-# [ 0- 0] Driver start (1) or stopped (0)   
+# [ 0- 0] Driver start (1) or stopped (0)
 50023 wifi_driver_state_changed (driver_state|1|5)
 
 # Wi-Fi interface configuration state changed:
 # [31- 1] Reserved for future use
-# [ 0- 0] Interface configuration succeeded (1) or failed (0)   
+# [ 0- 0] Interface configuration succeeded (1) or failed (0)
 50024 wifi_interface_configuration_state_changed (IP_configuration|1|5)
 
 # Wi-Fi supplicant connection state changed:
@@ -353,7 +353,7 @@
 #//device/dalvik/libcore/luni/src/main/native/org_apache_harmony_luni_platform_OSNetworkSystem.c
 51000 socket_stats (send|1|2),(recv|1|2),(ip|1|5),(port|1|5),(close|1|5)
 
-# db stats.  0 is query, 1 is write (may become more fine grained in the 
+# db stats.  0 is query, 1 is write (may become more fine grained in the
 # future)
 52000 db_operation (name|3),(op_type|1|5),(time|2|3)
 
@@ -373,6 +373,7 @@
 
 # aggregation service
 70200 aggregation (aggregation time|2|3)
+70201 aggregation_test (field1|1|2),(field2|1|2),(field3|1|2),(field4|1|2),(field5|1|2)
 
 # NOTE - the range 1000000-2000000 is reserved for partners and others who
 # want to define their own log tags without conflicting with the core platform.