From owner-freebsd-hackers@FreeBSD.ORG Fri Mar 5 15:42:43 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E150C16A4CF for ; Fri, 5 Mar 2004 15:42:43 -0800 (PST) Received: from smtp017.mail.yahoo.com (smtp017.mail.yahoo.com [216.136.174.114]) by mx1.FreeBSD.org (Postfix) with SMTP id BAB5443D1D for ; Fri, 5 Mar 2004 15:42:43 -0800 (PST) (envelope-from skuma17@yahoo.com) Received: from unknown (HELO yahoo.com) (skuma17@24.49.116.224 with plain) by smtp017.mail.yahoo.com with SMTP; 5 Mar 2004 23:42:43 -0000 Message-ID: <4049108F.5080703@yahoo.com> Date: Fri, 05 Mar 2004 18:43:11 -0500 From: Chungwei Hsiung User-Agent: Mozilla Thunderbird 0.5 (X11/20040208) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Greg 'groggy' Lehey References: <4048CA38.6040203@yahoo.com> <20040305233209.GO67801@wantadilla.lemis.com> In-Reply-To: <20040305233209.GO67801@wantadilla.lemis.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Mailman-Approved-At: Sat, 06 Mar 2004 04:56:47 -0800 cc: freebsd-hackers@freebsd.org cc: Chungwei Hsiung Subject: Re: Strange instructions in compiler output X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Mar 2004 23:42:44 -0000 Greg 'groggy' Lehey wrote: >On Friday, 5 March 2004 at 13:43:04 -0500, Chungwei Hsiung wrote: > > >>Hello.. >>I am super new to this list, and I have a simple question that I don't >>know why it does that. I have a simple test program. I compile it, and >>gdb to disassemble main. I got the following.. >> >>0x80481f8
: push %ebp >>0x80481f9 : mov %esp,%ebp >>0x80481fb : sub $0x8,%esp >>0x80481fe : and $0xfffffff0,%esp >>0x8048201 : mov $0x0,%eax >>0x8048206 : sub %eax,%esp >>0x8048208 : movl $0x804a6ce,0xfffffff8(%ebp) >>0x804820f : movl $0x0,0xfffffffc(%ebp) >>0x8048216 : sub $0x4,%esp >>0x8048219 : push $0x0 >>0x804821b : lea 0xfffffff8(%ebp),%eax >>0x804821e : push %eax >>0x804821f : pushl 0xfffffff8(%ebp) >>0x8048222 : call 0x804823c >>0x8048227 : add $0x10,%esp >>0x804822a : mov $0x0,%eax >>0x804822f : leave >>0x8048230 : ret >> >>I don't know if at line 5, we move zero to %eax. why do we need to sub >>%eax, %esp? why do we need to substract 0 from the stack pointer?? >>Any help is really appreciated. >> >> > >This is probably because you didn't optimize the output. You'd be >surprised how many redundant instructions the compiler puts in under >these circumstances. Try optimizing and see what the code looks like. > >If this *was* done with optimization, let's see the source code. > >Greg >-- >Note: I discard all HTML mail unseen. >Finger grog@FreeBSD.org for PGP public key. >See complete headers for address and phone numbers. > > Hello.. thank you very much for the reply I actually don't know how to use the optimization. I just compile it with gcc 3.2.2, and use gdb to disassemble main to get this assembly. Is it possible I can get the non-redundent output? here is the code I compile.. #include int main(void) { char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve(name[0], name, NULL); return(0); } best regards Chungwei