[llvm-dev] DragonEgg for GCC v8.x and LLVM v6.x is just able to work
Leslie Zhai via llvm-dev
llvm-dev at lists.llvm.org
Sun Aug 20 20:31:34 PDT 2017
Hi LLVM and GCC developers,
My sincere thanks will goto:
* Duncan, the core developer of llvm-gcc and dragonegg
http://llvm.org/devmtg/2009-10/Sands_LLVMGCCPlugin.pdf
* David, the innovator and developer of GCC
https://dmalcolm.fedorapeople.org/gcc/global-state/requirements.html
and others who give me kind response for teaching me patiently and
carefully about how to migrate GCC v4.8.x to GCC v8.x (git-20170818)
DragonEgg has been migrated to GCC v8.x and LLVM v6.x (svn-r311142), but
also able to work for GCC v4.8.x and LLVM v3.3
https://reviews.llvm.org/D35667 and it is just able to work now, for
example:
CC=/opt/gcc-git/bin/gcc
LC=/opt/llvm-svn/bin/llvm-config
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$($LC --libdir)
GCC=$CC LLVM_CONFIG=$LC ENABLE_LLVM_PLUGINS=1 DRAGONEGG_DEBUG=1 make -j4
$CC -fplugin=./dragonegg.so \
-fplugin-arg-dragonegg-debug-pass-arguments \
-ftime-report \
-fverbose-asm \
-fplugin-arg-dragonegg-enable-gcc-optzns \
-fplugin-arg-dragonegg-emit-ir \
-S \
test/hello.c \
-wrapper gdb,--args
hello.s (LLVM IR, the extension name is not important)
; ModuleID = 'test/hello.c'
source_filename = "test/hello.c"
target triple = "x86_64-redhat-linux"
module asm "\09.ident\09\22GCC: (GNU) 6.4.1 20170727 (Red Hat 6.4.1-1)
LLVM: 3.9.1\22"
@__func__.2210 = internal local_unnamed_addr constant [4 x i8] c"foo\00"
@.cst = private local_unnamed_addr constant [24 x i8] c"DEBUG: %s, line
%d: %s\0A\00", align 8
@.cst.1 = private local_unnamed_addr constant [13 x i8]
c"test/hello.c\00", align 8
@.cst.2 = private local_unnamed_addr constant [12 x i8] c"Leslie
Zhai\00", align 8
@.cst.3 = private local_unnamed_addr constant [20 x i8] c"%s: Hello
World %d\0A\00", align 8
; Function Attrs: nounwind uwtable
define void @foo(...) unnamed_addr #0 {
entry:
%"ssa point" = bitcast i32 0 to i32
br label %"<bb 2>"
"<bb 2>": ; preds = %entry
%0 = call i32 (i8*, ...) @printf(i8* noalias getelementptr inbounds
([24 x i8], [24 x i8]* @.cst, i64 0, i64 0), [13 x i8]* @.cst.1, i32 4,
[4 x i8]* @__func__.2210) #1
br label %return
return: ; preds = %"<bb 2>"
ret void
}
declare i32 @printf(i8*, ...)
; Function Attrs: nounwind uwtable
define i32 @main(i32 %argc, i8** %argv) unnamed_addr #0 {
entry:
%argc_addr = alloca i32, align 4
%argv_addr = alloca i8**, align 8
%n = alloca i32
%s = alloca i8*
%"<retval>" = alloca i32
%"alloca point" = bitcast i32 0 to i32
store i32 %argc, i32* %argc_addr, align 1
store i8** %argv, i8*** %argv_addr, align 1
%"ssa point" = bitcast i32 0 to i32
br label %"<bb 2>"
"<bb 2>": ; preds = %entry
%0 = call i32 (i8*, ...) @printf(i8* noalias getelementptr inbounds
([20 x i8], [20 x i8]* @.cst.3, i64 0, i64 0), i8* getelementptr
inbounds ([12 x i8], [12 x i8]* @.cst.2, i64 0, i64 0), i32 1) #1
br label %"<L0>"
"<L0>": ; preds = %"<bb 2>"
store i32 0, i32* %"<retval>", align 1
br label %return
return: ; preds = %"<L0>"
%1 = load i32, i32* %"<retval>", align 4
ret i32 %1
}
attributes #0 = { nounwind uwtable "no-frame-pointer-elim-non-leaf"="true" }
attributes #1 = { nounwind }
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"PIE Level", i32 2}
$ llc hello.s
.text
.file "hello.s"
# Start of file scope inline
assembly
.ident "GCC: (GNU) 6.4.1 20170727 (Red Hat 6.4.1-1) LLVM: 3.9.1"
# End of file scope inline assembly
.globl foo
.p2align 4, 0x90
.type foo, at function
foo: # @foo
.cfi_startproc
# BB#0: # %entry
pushq %rbp
.Ltmp0:
.cfi_def_cfa_offset 16
.Ltmp1:
.cfi_offset %rbp, -16
movq %rsp, %rbp
.Ltmp2:
.cfi_def_cfa_register %rbp
movl $.L.cst, %edi
movl $.L.cst.1, %esi
movl $4, %edx
movl $__func__.2210, %ecx
xorl %eax, %eax
callq printf
popq %rbp
retq
.Lfunc_end0:
.size foo, .Lfunc_end0-foo
.cfi_endproc
.globl main
.p2align 4, 0x90
.type main, at function
main: # @main
.cfi_startproc
# BB#0: # %entry
pushq %rbp
.Ltmp3:
.cfi_def_cfa_offset 16
.Ltmp4:
.cfi_offset %rbp, -16
movq %rsp, %rbp
.Ltmp5:
.cfi_def_cfa_register %rbp
subq $32, %rsp
movl %edi, -8(%rbp)
movq %rsi, -16(%rbp)
movl $.L.cst.3, %edi
movl $.L.cst.2, %esi
movl $1, %edx
xorl %eax, %eax
callq printf
movl $0, -4(%rbp)
movl -4(%rbp), %eax
addq $32, %rsp
popq %rbp
retq
.Lfunc_end1:
.size main, .Lfunc_end1-main
.cfi_endproc
.type __func__.2210, at object # @__func__.2210
.section .rodata,"a", at progbits
__func__.2210:
.asciz "foo"
.size __func__.2210, 4
.type .L.cst, at object # @.cst
.p2align 3
.L.cst:
.asciz "DEBUG: %s, line %d: %s\n"
.size .L.cst, 24
.type .L.cst.1, at object # @.cst.1
.p2align 3
.L.cst.1:
.asciz "test/hello.c"
.size .L.cst.1, 13
.type .L.cst.2, at object # @.cst.2
.p2align 3
.L.cst.2:
.asciz "Leslie Zhai"
.size .L.cst.2, 12
.type .L.cst.3, at object # @.cst.3
.p2align 3
.L.cst.3:
.asciz "%s: Hello World %d\n"
.size .L.cst.3, 20
.section ".note.GNU-stack","", at progbits
$ clang hello.s.s
$ ./a.out
Leslie Zhai: Hello World 1
WIP:
* fix issues https://github.com/xiangzhai/dragonegg/issues
* gengtype not support macro
https://gcc.gnu.org/ml/gcc/2017-07/msg00045.html
--
Regards,
Leslie Zhai - a LLVM developer https://reviews.llvm.org/p/xiangzhai/
More information about the llvm-dev
mailing list