From: Ken Cecka <ceckak@alumni.washington.edu>
To: buildroot@busybox.net
Subject: [Buildroot] wrong address when linking simple ARM test application
Date: Mon, 07 May 2007 09:09:46 -0700 [thread overview]
Message-ID: <f1nj0b$pck$1@sea.gmane.org> (raw)
In-Reply-To: f1adr8$d8g$1@sea.gmane.org
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 ----
prev parent reply other threads:[~2007-05-07 16:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-02 16:21 [Buildroot] wrong address when linking simple ARM test application Ken Cecka
2007-05-07 16:09 ` Ken Cecka [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='f1nj0b$pck$1@sea.gmane.org' \
--to=ceckak@alumni.washington.edu \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox