Messages in this thread | | | Date | Sat, 31 Mar 2012 00:58:47 -0400 (EDT) | From | Nicolas Pitre <> | Subject | Re: error: 'SEGMENT_SIZE' undeclared with arm-eabi-gcc toolchain |
| |
On Fri, 30 Mar 2012, Kukjin Kim wrote:
> 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 once > fs/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?
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
| |