Minor correction to my previous email:

On Tue, Sep 1, 2009 at 10:08 AM, Godmar Back<god...@gmail.com> wrote:
>
> gb...@setzer [39](~/tmp) > cat call.c
> void caller(void) {
>    extern void callee(int);
>    callee(5);
> }

This:

> gb...@setzer [40](~/tmp) > gcc -mno-push-args -S call.c

should be '-mpush-args' as in:

gb...@cyan [4](~/tmp) > gcc -S -mpush-args call.c
gb...@cyan [5](~/tmp) > cat call.s
        .file   "call.c"
        .text
.globl caller
        .type   caller, @function
caller:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        movl    $5, (%esp)
        call    callee
        leave
        ret
        .size   caller, .-caller
        .ident  "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-44)"
        .section        .note.GNU-stack,"",@progbits

The point here is that '-mpush-args' is ineffective unless
'-mno-accumulate-outgoing-args' is given, and that the documentation,
in my opinion, may be misleading by

a) not mentioning the -mno-accumulate-outgoing-args switch

b) saying that '-mpush-args' is the default when it's an ineffective
default (since the default -maccumulate-outgoing-args appears to
override it)

c) not mentioning that -maccumulate-outgoing-args is the default - in
fact, the discussion in the section of push-args/no-push-args appears
to imply that it shouldn't be the default.

Thanks.

 - Godmar

Reply via email to