Date: Fri, 24 Aug 2001 01:01:39 +0100 From: Steve Roome <stephen_roome@yahoo.com> To: freebsd-hackers@freebsd.org Subject: function calls/rets in assembly Message-ID: <20010824010139.E365@dylan.home>
next in thread | raw e-mail | index | archive | help
Hi, I'm having some problems with (what ought to be) fairly straightforward assembly, mainly I think, with how FreeBSD (4.3, but does that matter ?) does function calls (which don't work for me!) How exactly should functions work in assembly, afaict, the following C : void printasint(int p) { printf ("print this %d\n", (int)p);} should become : printasint: ## set up stack frame ## is this necessary, it was in the mailing lists ?? ## popl %ebp ## mov %ebp, %edx ## okay, so these two lines shouldn't be necessary either popl %eax pushl %eax ## as they don't do anything (do they, am I missing something??) pushl $.LC0 call printf ## but where do I figure out where to "ret" to ?? ret .endofprintasint: .size printasint,.endofprintasint - printasint Unfortunately, my code dies horribly, with illegal insruction, or somesuch, so I assume I'm returning to never never land, rather than where I was called from (but I'm not really sure how function calls are supposed to be handled, because the stuff that gcc -S comes out with is mad.. e.g. my functions start addl $12, %esp subl $-8, %esp Which if I change to : addl $12, %esp causes a segfault.. (is that obvious, it doesn't seem to be ?) Last time I did any large amount of assembly it was on the ARM, 10 years ago, so please excuse my ignorance, I'm trying !!! Tia, Steve Roome To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010824010139.E365>