Gentlemen.

I need some kind of assistance. I am trying to substitute function name during
the compilation procedure.
In order to do that I am:
1. creating new identifier with my name, like this:
t = get_identifier("Myfuction__ml_stub");
2. setting this name:
DECL_NAME(funcition) = t;
function is the parameter of build_function_call (tree function, tree params)
3. changing assembler name:
SET_DECL_ASSEMBLER_NAME(funcition, t);

What I have:
My sample app:

#include <stdio.h>

extern int Myfunction();

/*
int Myfunction()
{
        printf("asd");
}
*/

int main()
{
  Myfunction();
  return 0;
}

in case  the body of Myfunction is commented out, everything looks fine:
the dump:
@1      function_decl    name: @2       mngl: @3       type: @4
                         srcp: test.c:3                undefined
                         extern
@2      string_cst       strg: myfunction__ml_stub lngt: 20
@3      identifier_node  strg: myfunction__ml_stub     lngt: 19
@4      function_type    size: @5       algn: 8        retn: @6
@5      integer_cst      type: @7       low : 8
@6      integer_type     name: @8       size: @9       algn: 32
                         prec: 32       min : @10      max : @11
@7      integer_type     name: @12      unql: @13      size: @14
                         algn: 64       prec: 36       unsigned
                         min : @15      max : @16
@8      type_decl        name: @17      type: @6       srcp: <built-in>:0
@9      integer_cst      type: @7       low : 32
@10     integer_cst      type: @6       high: -1       low : -2147483648
@11     integer_cst      type: @6       low : 2147483647
@12     identifier_node  strg: bit_size_type           lngt: 13
@13     integer_type     name: @12      size: @14      algn: 64
                         prec: 36
@14     integer_cst      type: @7       low : 64
@15     integer_cst      type: @7       low : 0
@16     integer_cst      type: @7       high: 15       low : -1
@17     identifier_node  strg: int      lngt: 3


asm:
        .file   "test.c"
        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        addl    $15, %eax
        addl    $15, %eax
        shrl    $4, %eax
        sall    $4, %eax
        subl    %eax, %esp
        call    Myfunction__ml_stub
        movl    $0, %eax
        leave
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.0.2"
        .section        .note.GNU-stack,"",@progbits

so it works.

yet when the function body is not commented:

#include <stdio.h>

extern int Myfunction();

int Myfunction()
{
        printf("asd");
}

int main()
{
  Myfunction();
  return 0;
}

I have:

@1      function_decl    name: @2       type: @3       srcp: stdio.h:0
                         undefined      extern
@2      identifier_node  strg: printf__ml_stub         lngt: 15
@3      function_type    size: @4       algn: 8        retn: @5
                         prms: @6
@4      integer_cst      type: @7       low : 8
@5      integer_type     name: @8       size: @9       algn: 32
                         prec: 32       min : @10      max : @11
@6      tree_list        valu: @12
@7      integer_type     name: @13      unql: @14      size: @15
                         algn: 64       prec: 36       unsigned
                         min : @16      max : @17
@8      type_decl        name: @18      type: @5       srcp: <built-in>:0
@9      integer_cst      type: @7       low : 32
@10     integer_cst      type: @5       high: -1       low : -2147483648
@11     integer_cst      type: @5       low : 2147483647
@12     pointer_type     qual:   r      unql: @19      size: @9
                         algn: 32       ptd : @20
@13     identifier_node  strg: bit_size_type           lngt: 13
@14     integer_type     name: @13      size: @15      algn: 64
                         prec: 36
@15     integer_cst      type: @7       low : 64
@16     integer_cst      type: @7       low : 0
@17     integer_cst      type: @7       high: 15       low : -1
@18     identifier_node  strg: int      lngt: 3
@19     pointer_type     size: @9       algn: 32       ptd : @20
@20     integer_type     qual: c        name: @21      unql: @22
                         size: @4       algn: 8        prec: 8
                         min : @23      max : @24
@21     type_decl        name: @25      type: @22      srcp: <built-in>:0
@22     integer_type     name: @21      size: @4       algn: 8
                         prec: 8        min : @23      max : @24
@23     integer_cst      type: @22      high: -1       low : -128
@24     integer_cst      type: @22      low : 127
@25     identifier_node  strg: char     lngt: 4









@1      function_decl    name: @2       type: @3       srcp: test.c:0
                         undefined      extern
@2      identifier_node  strg: Myfunction__ml_stub     lngt: 19
@3      function_type    unql: @4       size: @5       algn: 8
                         retn: @6
@4      function_type    size: @5       algn: 8        retn: @6
@5      integer_cst      type: @7       low : 8
@6      integer_type     name: @8       size: @9       algn: 32
                         prec: 32       min : @10      max : @11
@7      integer_type     name: @12      unql: @13      size: @14
                         algn: 64       prec: 36       unsigned
                         min : @15      max : @16
@8      type_decl        name: @17      type: @6       srcp: <built-in>:0
@9      integer_cst      type: @7       low : 32
@10     integer_cst      type: @6       high: -1       low : -2147483648
@11     integer_cst      type: @6       low : 2147483647
@12     identifier_node  strg: bit_size_type           lngt: 13
@13     integer_type     name: @12      size: @14      algn: 64
                         prec: 36
@14     integer_cst      type: @7       low : 64
@15     integer_cst      type: @7       low : 0
@16     integer_cst      type: @7       high: 15       low : -1
@17     identifier_node  strg: int      lngt: 3



and asm:

        .file   "test.c"
        .section        .rodata
.LC0:
        .string "asd"
        .text
.globl Myfunction
        .type   Myfunction, @function
Myfunction:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        movl    $.LC0, (%esp)
        call    printf__ml_stub
        leave
        ret
        .size   Myfunction, .-Myfunction
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        addl    $15, %eax
        addl    $15, %eax
        shrl    $4, %eax
        sall    $4, %eax
        subl    %eax, %esp
        call    Myfunction
        movl    $0, %eax
        leave
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.0.2"
        .section        .note.GNU-stack,"",@progbits


so, the I still have Myfunction call instead of Myfunction__ml_stub,
which is quite annoying :-)

Who knows the ropes?

Thank you.

Reply via email to