Skip to content

Commit 2952095

Browse files
vapiertorvalds
authored andcommitted
flat: tweak default stack alignment
The recent commit 1f0ce8b ("mm: Move ARCH_SLAB_MINALIGN and ARCH_KMALLOC_MINALIGN to <linux/slab_def.h>") which moved the ARCH_SLAB_MINALIGN default into the global header inadvertently broke FLAT for a bunch of systems. Blackfin systems now fail on any FLAT exec with: Unable to read code+data+bss, errno 14 When your /init is a FLAT binary, obviously this can be annoying ;). This stems from the alignment usage in the FLAT loader. The behavior before was that FLAT would default to ARCH_SLAB_MINALIGN only if it was defined, and this was only defined by arches when they wanted a larger alignment value. Otherwise it'd default to pointer alignment. Arguably, this is kind of hokey that the FLAT is semi-abusing defines it shouldn't. So let's merge the two alignment requirements so the floor is never 0. Signed-off-by: Mike Frysinger <[email protected]> Cc: David McCullough <[email protected]> Cc: Greg Ungerer <[email protected]> Cc: Paul Mundt <[email protected]> Cc: Michal Simek <[email protected]> Cc: Hirokazu Takata <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: David Howells <[email protected]> Cc: David Woodhouse <[email protected]> Cc: Pekka Enberg <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 12c46b3 commit 2952095

File tree

1 file changed

+1
-5
lines changed

1 file changed

+1
-5
lines changed

fs/binfmt_flat.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,7 @@
6868
* Here we can be a bit looser than the data sections since this
6969
* needs to only meet arch ABI requirements.
7070
*/
71-
#ifdef ARCH_SLAB_MINALIGN
72-
#define FLAT_STACK_ALIGN (ARCH_SLAB_MINALIGN)
73-
#else
74-
#define FLAT_STACK_ALIGN (sizeof(void *))
75-
#endif
71+
#define FLAT_STACK_ALIGN max_t(unsigned long, sizeof(void *), ARCH_SLAB_MINALIGN)
7672

7773
#define RELOC_FAILED 0xff00ff01 /* Relocation incorrect somewhere */
7874
#define UNLOADED_LIB 0x7ff000ff /* Placeholder for unused library */

0 commit comments

Comments
 (0)