error: 'SEGMENT_SIZE' undeclared with arm-eabi-gcc toolchain
Hi all,
Occurs following error with arm-eabi-gcc toolchain (gcc version 4.4.3 - GCC). But there is no error with arm-none-linux-gnueabi-gcc toolchain (gcc version 4.4.1 - Sourcery G++ Lite 2009q3)...
fs/binfmt_aout.c: In function 'load_aout_binary':fs/binfmt_aout.c:255: error: 'SEGMENT_SIZE' undeclared (first use in this function)fs/binfmt_aout.c:255: error: (Each undeclared identifier is reported only oncefs/binfmt_aout.c:255: error: for each function it appears in.) make[2]: *** [fs/binfmt_aout.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [fs] Error 2
Any idea?
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.
Quoted 16 lines · Kukjin Kim
Hi all,
Occurs following error with arm-eabi-gcc toolchain (gcc version 4.4.3 - GCC). But there is no error with arm-none-linux-gnueabi-gcc toolchain (gcc version 4.4.1 - Sourcery G++ Lite 2009q3)...
fs/binfmt_aout.c: In function 'load_aout_binary':fs/binfmt_aout.c:255: error: 'SEGMENT_SIZE' undeclared (first use in this function)fs/binfmt_aout.c:255: error: (Each undeclared identifier is reported only oncefs/binfmt_aout.c:255: error: for each function it appears in.) make[2]: *** [fs/binfmt_aout.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [fs] Error 2
Quoted 1 line
Any idea?
Yes. This comes from the N_DATADDR() macro, defined in include/linux/a.out.h as follows:
|#define N_DATADDR(x) \ | (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ | : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
Then, looking at _N_SEGMENT_ROUND() in the same file:
|#define _N_SEGMENT_ROUND(x) ALIGN(x, SEGMENT_SIZE)
Here it is. Now, why isn't SEGMENT_SIZE defined? Well that's where things get way more hairy than they are already (caution, barf bag recommended):
|/* Address of data segment in memory after it is loaded. | Note that it is up to you to define SEGMENT_SIZE | on machines not listed here. */ |#if defined(vax) || defined(hp300) || defined(pyr) |#define SEGMENT_SIZE page_size |#endif |#ifdef sony |#define SEGMENT_SIZE 0x2000 |#endif /* Sony. */ |#ifdef is68k |#define SEGMENT_SIZE 0x20000 |#endif |#if defined(m68k) && defined(PORTAR) |#define PAGE_SIZE 0x400 |#define SEGMENT_SIZE PAGE_SIZE |#endif | |#ifdef linux |#ifdef __KERNEL__ |#include <asm/page.h> |#else |#include <unistd.h> |#endif |#if defined(__i386__) || defined(__mc68000__) |#define SEGMENT_SIZE 1024 |#else |#ifndef SEGMENT_SIZE |#ifdef __KERNEL__ |#define SEGMENT_SIZE PAGE_SIZE |#else |#define SEGMENT_SIZE getpagesize() |#endif |#endif |#endif |#endif
So the clue you're looking for is probably on the 18th line above.
BTW, no one is using a.out on ARM anymore. You should really consider removing CONFIG_BINFMT_AOUT from your config.
Nicolas
Quoted 2 lines · Nicolas Pitre
On Fri, 30 Mar 2012, Kukjin Kim wrote:
[...]
Hi Nicolas,
Quoted 2 lines
So the clue you're looking for is probably on the 18th line above.
Ah Yep, I see.
Quoted 3 lines
BTW, no one is using a.out on ARM anymore. You should really consider removing
CONFIG_BINFMT_AOUTfrom your config.
Oh, now s3c2410_defconfig has it. OK, let me fix it.
Thank you for your time and kindly explanation.
Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.