Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Sep 2010 11:25:54 +0000
From:      Paul B Mahol <onemda@gmail.com>
To:        Anton Shterenlikht <mexas@bristol.ac.uk>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: ld(1) cannot find entry symbol _start;
Message-ID:  <AANLkTinyPcdLnPjesfoDQ1_3t%2B7ie%2BWoozf3_bB-yK5s@mail.gmail.com>
In-Reply-To: <20100928111455.GA58901@mech-cluster241.men.bris.ac.uk>
References:  <20100928111455.GA58901@mech-cluster241.men.bris.ac.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
On 9/28/10, Anton Shterenlikht <mexas@bristol.ac.uk> wrote:
> 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

You are missing something in above command.
> 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
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTinyPcdLnPjesfoDQ1_3t%2B7ie%2BWoozf3_bB-yK5s>