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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.