summaryrefslogtreecommitdiffstats
path: root/include/linux/flat.h
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2019-06-13 03:08:55 -0400
committerGreg Ungerer <gerg@kernel.org>2019-06-23 19:16:47 -0400
commit34b4664ac4824d6c7a8b29db24b18733df07b2f4 (patch)
treeb94e0eccb77f806991a97477d09f30ff2ba91b1b /include/linux/flat.h
parent3f8b76a66e0d49e3afaba595b9762c126448e783 (diff)
binfmt_flat: use fixed size type for the on-disk format
So far binfmt_flat has only been supported on 32-bit platforms, so the variable size of the fields didn't matter. But the upcoming RISC-V nommu port supports 64-bit CPUs, and we now have a conflict between the elf2flt creation tool that always uses 32-bit fields and the kernel that uses (unsigned) long field. Switch to the userspace view as the rest of the binfmt_flat format is completely architecture neutral, and binfmt_flat isn't the right binary format for huge executables to start with. While we're at it also ensure these fields are using __be types as they big endian and are byte swapped when loaded. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
Diffstat (limited to 'include/linux/flat.h')
-rw-r--r--include/linux/flat.h44
1 files changed, 22 insertions, 22 deletions
diff --git a/include/linux/flat.h b/include/linux/flat.h
index 19c586b74b99..d586bb6e64a7 100644
--- a/include/linux/flat.h
+++ b/include/linux/flat.h
@@ -24,26 +24,26 @@
24 */ 24 */
25 25
26struct flat_hdr { 26struct flat_hdr {
27 char magic[4]; 27 char magic[4];
28 unsigned long rev; /* version (as above) */ 28 __be32 rev; /* version (as above) */
29 unsigned long entry; /* Offset of first executable instruction 29 __be32 entry; /* Offset of first executable instruction
30 with text segment from beginning of file */ 30 with text segment from beginning of file */
31 unsigned long data_start; /* Offset of data segment from beginning of 31 __be32 data_start; /* Offset of data segment from beginning of
32 file */ 32 file */
33 unsigned long data_end; /* Offset of end of data segment 33 __be32 data_end; /* Offset of end of data segment from beginning
34 from beginning of file */ 34 of file */
35 unsigned long bss_end; /* Offset of end of bss segment from beginning 35 __be32 bss_end; /* Offset of end of bss segment from beginning
36 of file */ 36 of file */
37 37
38 /* (It is assumed that data_end through bss_end forms the bss segment.) */ 38 /* (It is assumed that data_end through bss_end forms the bss segment.) */
39 39
40 unsigned long stack_size; /* Size of stack, in bytes */ 40 __be32 stack_size; /* Size of stack, in bytes */
41 unsigned long reloc_start; /* Offset of relocation records from 41 __be32 reloc_start; /* Offset of relocation records from beginning of
42 beginning of file */ 42 file */
43 unsigned long reloc_count; /* Number of relocation records */ 43 __be32 reloc_count; /* Number of relocation records */
44 unsigned long flags; 44 __be32 flags;
45 unsigned long build_date; /* When the program/library was built */ 45 __be32 build_date; /* When the program/library was built */
46 unsigned long filler[5]; /* Reservered, set to zero */ 46 __u32 filler[5]; /* Reservered, set to zero */
47}; 47};
48 48
49#define FLAT_FLAG_RAM 0x0001 /* load program entirely into RAM */ 49#define FLAT_FLAG_RAM 0x0001 /* load program entirely into RAM */
@@ -67,15 +67,15 @@ struct flat_hdr {
67#define OLD_FLAT_RELOC_TYPE_BSS 2 67#define OLD_FLAT_RELOC_TYPE_BSS 2
68 68
69typedef union { 69typedef union {
70 unsigned long value; 70 u32 value;
71 struct { 71 struct {
72#if defined(__LITTLE_ENDIAN_BITFIELD) || \ 72#if defined(__LITTLE_ENDIAN_BITFIELD) || \
73 (defined(mc68000) && !defined(CONFIG_COLDFIRE)) 73 (defined(mc68000) && !defined(CONFIG_COLDFIRE))
74 signed long offset : 30; 74 s32 offset : 30;
75 unsigned long type : 2; 75 u32 type : 2;
76# elif defined(__BIG_ENDIAN_BITFIELD) 76# elif defined(__BIG_ENDIAN_BITFIELD)
77 unsigned long type : 2; 77 u32 type : 2;
78 signed long offset : 30; 78 s32 offset : 30;
79# else 79# else
80# error "Unknown bitfield order for flat files." 80# error "Unknown bitfield order for flat files."
81# endif 81# endif