加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

-emit-llvm在Linux中

发布时间:2020-12-13 19:18:56 所属栏目:Linux 来源:网络整理
导读:我是LLVM的新手,并试图在 Linux上生成一个人类可读的.ll文件.我安装了llvm-gcc但是我看到它只能生成汇编代码(-S选项).有什么方法可以获得llvm online compiler生成的内容吗? 这就是我在Linux上使用-S -emit-llvm所得到的: .file "hello.c" .ident "GCC: (U
我是LLVM的新手,并试图在 Linux上生成一个人类可读的.ll文件.我安装了llvm-gcc但是我看到它只能生成汇编代码(-S选项).有什么方法可以获得llvm online compiler生成的内容吗?

这就是我在Linux上使用-S -emit-llvm所得到的:

.file   "hello.c"

    .ident  "GCC: (Ubuntu/Linaro 4.5.1-7ubuntu2) 4.5.1 LLVM: "

    .text
    .globl  main
    .align  16,0x90
    .type   main,@function
main:
    pushl   %ebp
    movl    %esp,%ebp
    subl    $8,%esp
    movl    $.L.str,4(%esp)
    movl    $1,(%esp)
    call    __printf_chk
    xorl    %eax,%eax
    addl    $8,%esp
    popl    %ebp
    ret
.Ltmp0:
    .size   main,.Ltmp0-main

    .type   .L.str,@object
    .section    .rodata.str1.1,"aMS",@progbits,1
.L.str:
    .asciz   "hello worldn"
    .size   .L.str,13

    .section    .note.GNU-stack,"",@progbits

这就是我想要得到的:

; ModuleID = '/tmp/webcompile/_7829_0.bc'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-linux-gnu"

@.str = private constant [12 x i8] c"hello world0",align 1 ; <[12 x i8]*> [#uses=1]

define i32 @main() nounwind {
entry:
  %0 = tail call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str,i64 0,i64 0)) nounwind ; <i32> [#uses=0]
  ret i32 0
}

declare i32 @puts(i8* nocapture) nounwind

在Windows上,我使用相同的命令成功获取此文件:llvm-gcc -S -emit-llvm hello.c.

解决方法

在llvm-gcc的ubuntu包装中有些东西可怕破碎. llvm-gcc的版本是4.2.1,但在这里我们看到4.5.请报告Ubuntu错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读