summaryrefslogtreecommitdiff
path: root/scripts/basic/bin2c.c
diff options
context:
space:
mode:
authorTautschnig, Michael <tautschn@amazon.co.uk>2016-07-04 13:55:04 (GMT)
committerMichal Marek <mmarek@suse.com>2016-07-22 12:05:40 (GMT)
commit21532b9e5bd597631cfe38d9eb34df069938065b (patch)
tree7dc2ce41d863044ee9c5ca5c727ac3d98115ac35 /scripts/basic/bin2c.c
parentddea05fa148b4d8e66498e522a616d87f9cf81e3 (diff)
downloadlinux-21532b9e5bd597631cfe38d9eb34df069938065b.tar.xz
scripts: Fix size mismatch of kexec_purgatory_size
bin2c is used to create a valid C file out of a binary file where two symbols will be globally defined: <name> and <name>_size. <name> is passed as the first parameter of the host binary. Building using goto-cc reported that the purgatory binary code (the only current user of this utility) declares kexec_purgatory_size as 'size_t' where bin2c generate <name>_size to be 'int' so in a 64-bit host where sizeof(size_t) > sizeof(int) this type mismatch will always yield the wrong value for big-endian architectures while for little-endian it will be wrong if the object laid in memory directly after kexec_purgatory_size contains non-zero value at the time of reading. This commit changes <name>_size to be size_t instead. Note: Another way to fix the problem is to change the type of kexec_purgatory_size to be 'int' as there's this check in code: (kexec_purgatory_size <= 0) Signed-off-by: Michael Tautschnig <tautschn@amazon.com> Cc: Vivek Goyal <vgoyal@redhat.com> Acked-by: Dave Young <dyoung@redhat.com> Signed-off-by: Michal Marek <mmarek@suse.com>
Diffstat (limited to 'scripts/basic/bin2c.c')
-rw-r--r--scripts/basic/bin2c.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/scripts/basic/bin2c.c b/scripts/basic/bin2c.c
index af187e6..c3d7eef 100644
--- a/scripts/basic/bin2c.c
+++ b/scripts/basic/bin2c.c
@@ -29,7 +29,8 @@ int main(int argc, char *argv[])
} while (ch != EOF);
if (argc > 1)
- printf("\t;\n\nconst int %s_size = %d;\n", argv[1], total);
+ printf("\t;\n\n#include <linux/types.h>\n\nconst size_t %s_size = %d;\n",
+ argv[1], total);
return 0;
}