Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] wrong address when linking simple ARM test application
@ 2007-05-02 16:21 Ken Cecka
  2007-05-07 16:09 ` Ken Cecka
  0 siblings, 1 reply; 2+ messages in thread
From: Ken Cecka @ 2007-05-02 16:21 UTC (permalink / raw)
  To: buildroot

Hi,

May need to go to a GCC list for this, but I thought I'd start here.  I've
constructed a very minimal standalone ARM test application that I am trying
to load into SRAM on an ARM1136JFS target.  The SRAM is at address
0x1fffc000, and I am trying to link my elf file at that address, but when I
go to download it, the debugger tries to write to address 0x1fff8000.

When I look at the elf file using objdump, I see that all the sections are
at 0x1fffc000, but there's a program header at 0x1fff8000.  Why does the
header have this address, and how can I fix it?

Source files and objdump output are copied below.

Thanks,
Ken

---- Begin Makefile ----

TOOLCHAIN=/home/kcecka/projects/zasfiles/buildroot/build_arm/staging_dir
PREFIX=arm-linux-
AS=$(TOOLCHAIN)/bin/$(PREFIX)as
CC=$(TOOLCHAIN)/bin/$(PREFIX)gcc
CXX=$(TOOLCHAIN)/bin/$(PREFIX)g++
LD=$(TOOLCHAIN)/bin/$(PREFIX)ld
OBJDUMP=$(TOOLCHAIN)/bin/$(PREFIX)objdump
STRIP=$(TOOLCHAIN)/bin/$(PREFIX)strip

ASFLAGS=-gdwarf-2
CFLAGS=-gdwarf-2
LDFLAGS=-Ttext 0x1fffc000 --defsym stack=0x1fffffff

all: testapp.elf testapp.srec testapp.elf.s

testapp.elf: start.o main.o
        $(LD) $(LDFLAGS) -o $@ $^

%.elf.s: %.elf
        $(OBJDUMP) --disassemble-all $< > $@

%.srec: %.elf
        cp $< $@
        $(STRIP) -O srec $@

---- end Makefile ----

---- begin start.s ----

        .text
        .global _start
        .global main
_start:
        LDR r13, =stack
        BL main
stall:
        B stall

---- end start.s ----

---- begin main.c ----

int foo(int);

int bar(int);


int main()
{
        int i = 0;

        i = foo(i);

        while(1)
                i = bar(i);
}

int foo(int i)
{
        return i+1;
}

int bar(int i)
{
        return i;
}

---- end main.c ----

---- begin objdump output ----

$ arm-linux-objdump -x testapp.elf

testapp.elf:     file format elf32-littlearm
testapp.elf
architecture: arm, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x1fffc000

Program Header:
    LOAD off    0x00000000 vaddr 0x1fff8000 paddr 0x1fff8000 align 2**15
         filesz 0x00004098 memsz 0x00004098 flags r-x
private flags = 4000002: [Version4 EABI] [has entry point]

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000098  1fffc000  1fffc000  00004000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .comment      00000012  00000000  00000000  00004098  2**0
                  CONTENTS, READONLY
  2 .debug_aranges 00000040  00000000  00000000  000040b0  2**3
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 0000002b  00000000  00000000  000040f0  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   00000132  00000000  00000000  0000411b  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000098  00000000  00000000  0000424d  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   00000074  00000000  00000000  000042e5  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000070  00000000  00000000  0000435c  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_loc    0000007e  00000000  00000000  000043cc  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .ARM.attributes 00000010  00000000  00000000  0000444a  2**0
                  CONTENTS, READONLY
SYMBOL TABLE:
1fffc000 l    d  .text  00000000 .text
00000000 l    d  .comment       00000000 .comment
00000000 l    d  .debug_aranges 00000000 .debug_aranges
00000000 l    d  .debug_pubnames        00000000 .debug_pubnames
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
00000000 l    d  .debug_line    00000000 .debug_line
00000000 l    d  .debug_frame   00000000 .debug_frame
00000000 l    d  .debug_loc     00000000 .debug_loc
00000000 l    d  .ARM.attributes        00000000 .ARM.attributes
00000000 l    d  *ABS*  00000000 .shstrtab
00000000 l    d  *ABS*  00000000 .symtab
00000000 l    d  *ABS*  00000000 .strtab
1fffc008 l       .text  00000000 stall
00000000 l    df *ABS*  00000000 main.c
1fffc098 g       *ABS*  00000000 __exidx_end
20004098 g       *ABS*  00000000 _bss_end__
20004098 g       *ABS*  00000000 __bss_start__
1fffc098 g       *ABS*  00000000 __exidx_start
1fffffff g       *ABS*  00000000 stack
20004098 g       *ABS*  00000000 __bss_end__
1fffc000 g       .text  00000000 _start
20004098 g       *ABS*  00000000 __bss_start
1fffc010 g     F .text  0000003c main
20004098 g       *ABS*  00000000 __end__
1fffc04c g     F .text  00000028 foo
20004098 g       *ABS*  00000000 _edata
20004098 g       *ABS*  00000000 _end
1fffc074 g     F .text  00000024 bar
20004098 g       *ABS*  00000000 __data_start

---- end objdump output ----

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Buildroot] wrong address when linking simple ARM test application
  2007-05-02 16:21 [Buildroot] wrong address when linking simple ARM test application Ken Cecka
@ 2007-05-07 16:09 ` Ken Cecka
  0 siblings, 0 replies; 2+ messages in thread
From: Ken Cecka @ 2007-05-07 16:09 UTC (permalink / raw)
  To: buildroot

Following up on this with the resolution.  Rex Ashbaugh worked through this
with me and pointed out that the buildroot toolchain links in
linux-specific runtime code by default.  I am trying to build a completely
standalone application, and apparently this was causing problems.  The
solution was to add the '-nostartup' flag to LDFLAGS.

Ken

Ken Cecka wrote:

> Hi,
> 
> May need to go to a GCC list for this, but I thought I'd start here.  I've
> constructed a very minimal standalone ARM test application that I am
> trying
> to load into SRAM on an ARM1136JFS target.  The SRAM is at address
> 0x1fffc000, and I am trying to link my elf file at that address, but when
> I go to download it, the debugger tries to write to address 0x1fff8000.
> 
> When I look at the elf file using objdump, I see that all the sections are
> at 0x1fffc000, but there's a program header at 0x1fff8000.  Why does the
> header have this address, and how can I fix it?
> 
> Source files and objdump output are copied below.
> 
> Thanks,
> Ken
> 
> ---- Begin Makefile ----
> 
> TOOLCHAIN=/home/kcecka/projects/zasfiles/buildroot/build_arm/staging_dir
> PREFIX=arm-linux-
> AS=$(TOOLCHAIN)/bin/$(PREFIX)as
> CC=$(TOOLCHAIN)/bin/$(PREFIX)gcc
> CXX=$(TOOLCHAIN)/bin/$(PREFIX)g++
> LD=$(TOOLCHAIN)/bin/$(PREFIX)ld
> OBJDUMP=$(TOOLCHAIN)/bin/$(PREFIX)objdump
> STRIP=$(TOOLCHAIN)/bin/$(PREFIX)strip
> 
> ASFLAGS=-gdwarf-2
> CFLAGS=-gdwarf-2
> LDFLAGS=-Ttext 0x1fffc000 --defsym stack=0x1fffffff
> 
> all: testapp.elf testapp.srec testapp.elf.s
> 
> testapp.elf: start.o main.o
>         $(LD) $(LDFLAGS) -o $@ $^
> 
> %.elf.s: %.elf
>         $(OBJDUMP) --disassemble-all $< > $@
> 
> %.srec: %.elf
>         cp $< $@
>         $(STRIP) -O srec $@
> 
> ---- end Makefile ----
> 
> ---- begin start.s ----
> 
>         .text
>         .global _start
>         .global main
> _start:
>         LDR r13, =stack
>         BL main
> stall:
>         B stall
> 
> ---- end start.s ----
> 
> ---- begin main.c ----
> 
> int foo(int);
> 
> int bar(int);
> 
> 
> int main()
> {
>         int i = 0;
> 
>         i = foo(i);
> 
>         while(1)
>                 i = bar(i);
> }
> 
> int foo(int i)
> {
>         return i+1;
> }
> 
> int bar(int i)
> {
>         return i;
> }
> 
> ---- end main.c ----
> 
> ---- begin objdump output ----
> 
> $ arm-linux-objdump -x testapp.elf
> 
> testapp.elf:     file format elf32-littlearm
> testapp.elf
> architecture: arm, flags 0x00000112:
> EXEC_P, HAS_SYMS, D_PAGED
> start address 0x1fffc000
> 
> Program Header:
>     LOAD off    0x00000000 vaddr 0x1fff8000 paddr 0x1fff8000 align 2**15
>          filesz 0x00004098 memsz 0x00004098 flags r-x
> private flags = 4000002: [Version4 EABI] [has entry point]
> 
> Sections:
> Idx Name          Size      VMA       LMA       File off  Algn
>   0 .text         00000098  1fffc000  1fffc000  00004000  2**2
>                   CONTENTS, ALLOC, LOAD, READONLY, CODE
>   1 .comment      00000012  00000000  00000000  00004098  2**0
>                   CONTENTS, READONLY
>   2 .debug_aranges 00000040  00000000  00000000  000040b0  2**3
>                   CONTENTS, READONLY, DEBUGGING
>   3 .debug_pubnames 0000002b  00000000  00000000  000040f0  2**0
>                   CONTENTS, READONLY, DEBUGGING
>   4 .debug_info   00000132  00000000  00000000  0000411b  2**0
>                   CONTENTS, READONLY, DEBUGGING
>   5 .debug_abbrev 00000098  00000000  00000000  0000424d  2**0
>                   CONTENTS, READONLY, DEBUGGING
>   6 .debug_line   00000074  00000000  00000000  000042e5  2**0
>                   CONTENTS, READONLY, DEBUGGING
>   7 .debug_frame  00000070  00000000  00000000  0000435c  2**2
>                   CONTENTS, READONLY, DEBUGGING
>   8 .debug_loc    0000007e  00000000  00000000  000043cc  2**0
>                   CONTENTS, READONLY, DEBUGGING
>   9 .ARM.attributes 00000010  00000000  00000000  0000444a  2**0
>                   CONTENTS, READONLY
> SYMBOL TABLE:
> 1fffc000 l    d  .text  00000000 .text
> 00000000 l    d  .comment       00000000 .comment
> 00000000 l    d  .debug_aranges 00000000 .debug_aranges
> 00000000 l    d  .debug_pubnames        00000000 .debug_pubnames
> 00000000 l    d  .debug_info    00000000 .debug_info
> 00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
> 00000000 l    d  .debug_line    00000000 .debug_line
> 00000000 l    d  .debug_frame   00000000 .debug_frame
> 00000000 l    d  .debug_loc     00000000 .debug_loc
> 00000000 l    d  .ARM.attributes        00000000 .ARM.attributes
> 00000000 l    d  *ABS*  00000000 .shstrtab
> 00000000 l    d  *ABS*  00000000 .symtab
> 00000000 l    d  *ABS*  00000000 .strtab
> 1fffc008 l       .text  00000000 stall
> 00000000 l    df *ABS*  00000000 main.c
> 1fffc098 g       *ABS*  00000000 __exidx_end
> 20004098 g       *ABS*  00000000 _bss_end__
> 20004098 g       *ABS*  00000000 __bss_start__
> 1fffc098 g       *ABS*  00000000 __exidx_start
> 1fffffff g       *ABS*  00000000 stack
> 20004098 g       *ABS*  00000000 __bss_end__
> 1fffc000 g       .text  00000000 _start
> 20004098 g       *ABS*  00000000 __bss_start
> 1fffc010 g     F .text  0000003c main
> 20004098 g       *ABS*  00000000 __end__
> 1fffc04c g     F .text  00000028 foo
> 20004098 g       *ABS*  00000000 _edata
> 20004098 g       *ABS*  00000000 _end
> 1fffc074 g     F .text  00000024 bar
> 20004098 g       *ABS*  00000000 __data_start
> 
> ---- end objdump output ----

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-05-07 16:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-02 16:21 [Buildroot] wrong address when linking simple ARM test application Ken Cecka
2007-05-07 16:09 ` Ken Cecka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox