lkml.org 
[lkml]   [2012]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: 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


    \
     
     \ /
      Last update: 2012-03-31 07:01    [W:0.023 / U:96.176 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site