ld(1) cannot find entry symbol _start;
Anton Shterenlikht
mexas at bristol.ac.uk
Tue Sep 28 11:14:58 UTC 2010
I'm trying to learn the very basics of the
compile - assemble - link process on FreeBSD.
Please don't shoot me.
I've this c code:
% cat tmp.c
int main() {
int a;
int b;
int c;
a = 2;
b = 3;
c=a*b;
}
which I compile into assembly language:
% gcc -v
Using built-in specs.
Target: ia64-undermydesk-freebsd
Configured with: FreeBSD/ia64 system compiler
Thread model: posix
gcc version 4.2.1 20070719 [FreeBSD]
% gcc -S tmp.c
I then assemble the object file:
% gcc -o tmp.o -c tmp.s
% file tmp.o
tmp.o: ELF 64-bit LSB relocatable, IA-64, version 1 (FreeBSD), not stripped
Then I try to link the object file into
an executable:
% ld tmp.o
ld: warning: cannot find entry symbol _start; defaulting to 20000000000000f0
Finally, when I try to run the executable,
I get segfault:
% ./a.out
Segmentation fault (core dumped)
Looking at the asm listing, there is indeed no
_start symbol:
.file "tmp.c"
.pred.safe_across_calls p1-p5,p16-p63
.text
.align 16
.global main#
.proc main#
main:
.prologue 2, 2
.vframe r2
mov r2 = r12
.body
;;
adds r15 = 8, r2
addl r14 = 2, r0
;;
st4 [r15] = r14
adds r15 = 4, r2
addl r14 = 3, r0
;;
st4 [r15] = r14
adds r14 = 8, r2
adds r15 = 4, r2
;;
ld4 r16 = [r14]
ld4 r14 = [r15]
;;
setf.sig f6 = r16
setf.sig f7 = r14
;;
xmpy.l f6 = f6, f7
;;
getf.sig r14 = f6
;;
st4 [r2] = r14
.restore sp
mov r12 = r2
br.ret.sptk.many b0
;;
.endp main#
.ident "GCC: (GNU) 4.2.1 20070719 [FreeBSD]"
What am I missing?
I'm happy to be referred to FM.
many thanks
anton
--
Anton Shterenlikht
Room 2.6, Queen's Building
Mech Eng Dept
Bristol University
University Walk, Bristol BS8 1TR, UK
Tel: +44 (0)117 331 5944
Fax: +44 (0)117 929 4423
More information about the freebsd-questions
mailing list