Date: Tue, 28 Sep 2010 12:14:55 +0100 From: Anton Shterenlikht <mexas@bristol.ac.uk> To: freebsd-questions@freebsd.org Subject: ld(1) cannot find entry symbol _start; Message-ID: <20100928111455.GA58901@mech-cluster241.men.bris.ac.uk>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100928111455.GA58901>