Snap for 6844436 from 262c28b52f817309994f1f501556627e562eab50 to simpleperf-release

Change-Id: I4fb8f6b9aa5fad8d874f8ffb0036cc3978414ba2
diff --git a/arch/x86/include/asm/zimage.h b/arch/x86/include/asm/zimage.h
index 391adc0..43c8599 100644
--- a/arch/x86/include/asm/zimage.h
+++ b/arch/x86/include/asm/zimage.h
@@ -22,7 +22,6 @@
 #define COMMAND_LINE_MAGIC  0xA33F
 
 /* limits */
-#define BZIMAGE_MAX_SIZE   16*1024*1024     /* 15MB */
 #define ZIMAGE_MAX_SIZE    512*1024         /* 512k */
 #define SETUP_MAX_SIZE     32768
 
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index 588bc2f..b65c619 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -220,14 +220,7 @@
 		       SETUP_MAX_SIZE - setup_size);
 	}
 
-	if (big_image) {
-		if (kernel_size > BZIMAGE_MAX_SIZE) {
-			printf("Error: bzImage kernel too big! "
-				"(size: %ld, max: %d)\n",
-				kernel_size, BZIMAGE_MAX_SIZE);
-			return 0;
-		}
-	} else if ((kernel_size) > ZIMAGE_MAX_SIZE) {
+	if (big_image == false && (kernel_size) > ZIMAGE_MAX_SIZE) {
 		printf("Error: zImage kernel too big! (size: %ld, max: %d)\n",
 		       kernel_size, ZIMAGE_MAX_SIZE);
 		return 0;
@@ -366,6 +359,33 @@
 }
 
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
+static char hex_to_char(uint8_t nibble) {
+	if (nibble < 10) {
+		return '0' + nibble;
+	} else {
+		return 'a' + nibble - 10;
+	}
+}
+// Helper function to convert 32bit int to a hex string
+static void hex_to_str(char* str, ulong input) {
+	str[0] = '0'; str[1] = 'x';
+	size_t str_idx = 2;
+	uint32_t byte_extracted;
+	uint8_t nibble;
+        // Assume that this is on a little endian system.
+	for(int byte_idx = 3; byte_idx >= 0; byte_idx--) {
+		byte_extracted = ((0xFF << (byte_idx*8)) & input) >> (byte_idx*8);
+		nibble = byte_extracted & 0xF0;
+		nibble = nibble >> 4;
+		nibble = nibble & 0xF;
+		str[str_idx] = hex_to_char(nibble);
+		str_idx++;
+		nibble = byte_extracted & 0xF;
+		str[str_idx] = hex_to_char(nibble);
+		str_idx++;
+	}
+	str[str_idx] = 0;
+}
 int android_bootloader_boot_kernel(const struct andr_boot_info_t *boot_info)
 {
 	ulong kernel_address;
@@ -380,9 +400,9 @@
 		return -1;
 
 	kernel_address = android_image_get_kload(boot_info);
-	sprintf(kernel_addr_str, "0x%lx", kernel_address);
-	sprintf(ramdisk_addr_str, "0x%lx", ramdisk_address);
-	sprintf(ramdisk_len_str, "0x%lx", ramdisk_len);
+	hex_to_str(kernel_addr_str, kernel_address);
+	hex_to_str(ramdisk_addr_str, ramdisk_address);
+	hex_to_str(ramdisk_len_str , ramdisk_len);
 
 	printf("Booting kernel at %s with fdt at %s ramdisk %s (%s bytes)...\n\n\n",
 		kernel_addr_str, env_get("fdtaddr"), ramdisk_addr_str, ramdisk_len_str);