gcc - 为没有框架或围绕

时间:2015-07-12 10:16:08

标签: c gcc compilation

上下文

Linux 64位。 gcc 5.1

我使用gcc -O3 -march=native FLAGS -c myapp.c编译代码 注意-c开关的存在。

假设该文件有一个功能。

目标:获取生成的代码并将其放入jit编译器中。保持最大限度的优化至关重要。

我希望机器代码准备好嵌入&在我的主程序中执行。

Libgccjit还不够成熟,无法使用(我也不喜欢这个界面)

问题

是否有一个选项只能获取为函数生成的代码gcc,而不必求助于外部解析器丢弃与代码没有直接关系的框架和其他汇编信息?

愚蠢的代码示例:

    .cstring
LC0:
    .ascii "ok\0"
    .section __TEXT,__text_cold,regular,pure_instructions
LCOLDB1:
    .text
LHOTB1:
    .align 4,0x90
    .globl __Z4flopi
__Z4flopi:
LFB4:
    pushq   %rbp
LCFI0:
    movl    $0, %eax
    movl    $69, %ebp
    pushq   %rbx
LCFI1:
    leal    71(%rdi), %ebx
    leaq    LC0(%rip), %rdi
    subq    $8, %rsp
LCFI2:
    cmpl    $56, %ebx
    cmovne  %eax, %ebp
    call    _puts
    addq    $8, %rsp
LCFI3:
    leal    0(%rbp,%rbx), %eax
    popq    %rbx
LCFI4:
    popq    %rbp
LCFI5:
    ret
LFE4:
    .section __TEXT,__text_cold,regular,pure_instructions
LCOLDE1:
    .text
LHOTE1:
    .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
EH_frame1:
    .set L$set$0,LECIE1-LSCIE1
    .long L$set$0
LSCIE1:
    .long   0
    .byte   0x1
    .ascii "zR\0"
    .byte   0x1
    .byte   0x78
    .byte   0x10
    .byte   0x1
    .byte   0x10
    .byte   0xc
    .byte   0x7
    .byte   0x8
    .byte   0x90
    .byte   0x1
    .align 3
LECIE1:
LSFDE1:
    .set L$set$1,LEFDE1-LASFDE1
    .long L$set$1
LASFDE1:
    .long   LASFDE1-EH_frame1
    .quad   LFB4-.
    .set L$set$2,LFE4-LFB4
    .quad L$set$2
    .byte   0
    .byte   0x4
    .set L$set$3,LCFI0-LFB4
    .long L$set$3
    .byte   0xe
    .byte   0x10
    .byte   0x86
    .byte   0x2
    .byte   0x4
    .set L$set$4,LCFI1-LCFI0
    .long L$set$4
    .byte   0xe
    .byte   0x18
    .byte   0x83
    .byte   0x3
    .byte   0x4
    .set L$set$5,LCFI2-LCFI1
    .long L$set$5
    .byte   0xe
    .byte   0x20
    .byte   0x4
    .set L$set$6,LCFI3-LCFI2
    .long L$set$6
    .byte   0xe
    .byte   0x18
    .byte   0x4
    .set L$set$7,LCFI4-LCFI3
    .long L$set$7
    .byte   0xe
    .byte   0x10
    .byte   0x4
    .set L$set$8,LCFI5-LCFI4
    .long L$set$8
    .byte   0xe
    .byte   0x8
    .align 3
LEFDE1:
    .constructor
    .destructor
    .align 1
    .subsections_via_symbols

LC0:
    .ascii "ok\0"
__Z4flopi:
    pushq   %rbp
    movl    $0, %eax
    movl    $69, %ebp
    pushq   %rbx
    leal    71(%rdi), %ebx
    leaq    LC0(%rip), %rdi
    subq    $8, %rsp
    cmpl    $56, %ebx
    cmovne  %eax, %ebp
    call    _puts
    addq    $8, %rsp
    leal    0(%rbp,%rbx), %eax
    popq    %rbx
    popq    %rbp
    ret

不要担心链接器/装载器可能不喜欢它,我知道如何处理它。

由于

0 个答案:

没有答案