GCC start address location.

Brian Witt aleks@spoda.gentoo.com
Fri May 16 13:57:00 GMT 1997

I'm using GCC2.7 and binutsil 2.7 to target a little 68010 system
(AT&T 3b1 without UNIX).  The executables I download need to
start at $3000, which I am able to do.  However, when I use
objdump, all the dis-assembled addresses start at 0, even though
the jumps and load/store addresses are correct.


	GCC 2.7.0 (no patches)
	BinUtils 2.7 (no patches)

I would like to know what to tell the linker to locate the VMA
and LMA to $3000 also.  I'm using _Ttext 0x03000 to locate things.
I was using a linker script but the got unwiedly.  It does work
correctly, it just this utility output that is wierd.  I drive
"ld" directly, instead of using GCC.

float % 68-objdump -d -r --show-raw-insn my_os.dli
    00000114 <__start-2eec> 4e b9 00 00 3c 06  jsr 00003c06 <___main>
( $3000 - $2eec = $114 )

When I get header info from "objdump" it reveals:

float % 68-ld -V
ld version 2.7 (with BFD 2.7)
  Supported emulations:
float % 68-objdump -h my_os.dli

my_os.dli:     file format a.out-zero-big

Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000c8c  00000000  00000000  00000020  2**2
                  CONTENTS, ALLOC, LOAD, CODE
  1 .data         00000020  00000c8c  00000c8c  00000cac  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000002c  00000cac  00000cac  00000000  2**2
float % 

Both VMA and LMA are $0 for .text, when they should be $03000.

I link with this (inside a script):
ld -N -Ttext 0x03000 -Map mapfile -o $DEST $LIB/crt0.o $OBJS \
	-lspede -lgcc -lspede

A portion of the linker map.

Memory Configuration

Name             Origin             Length
*default*        0x00000000         0xffffffff

Linker script and memory map

Address of section .text set to 0x3000
LOAD /usr/local/spede/gcc68/m68k-unknown-aout/lib/crt0.o
LOAD t1.o
LOAD /usr/local/spede/gcc68/m68k-unknown-aout/lib/libspede.a
LOAD /usr/local/spede/gcc68/m68k-unknown-aout/lib/libgcc.a
LOAD /usr/local/spede/gcc68/m68k-unknown-aout/lib/libspede.a
                0x00000000                PROVIDE (__stack, 0x0)
                0x00002000                .=0x2000

.text           0x00003000      0xc8c
 .text          0x00003000       0x6c /usr/local/spede/gcc68/m68k-unknown-aout/l
                0x00003000                _start
                0x0000306a                GDBexit
 .text          0x0000306c       0xb4 t1.o

    :		    :			:
 .bss           0x00003cac        0x8 /usr/local/spede/gcc68/m68k-unknown-aout/l
 .bss           0x00003cb4        0x4 /usr/local/spede/gcc68/m68k-unknown-aout/l
 COMMON         0x00003cb8       0x10 t1.o
                0x00003cb8                latest
 COMMON         0x00003cc8       0x10 /usr/local/spede/gcc68/m68k-unknown-aout/l
                0x00003cc8                __DTOR_LIST__
                0x00003cd0                __CTOR_LIST__
                0x00003cd8                _end=ALIGN(0x4)
                0x00003cd8                __end=ALIGN(0x4)
OUTPUT(my_os.dli a.out-zero-big)

--- The railroad train will come no more.
--- brian witt

More information about the crossgcc mailing list