llvm ir in graalvm: multi-level, polyglot debugging...

38
LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING WITH SULONG Jacob Kreindl 2019 European LLVM Developers’ Meeting, April 8-9, 2019

Upload: others

Post on 04-Apr-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

LLVM IR IN GRAALVM:MULTI-LEVEL, POLYGLOTDEBUGGING WITH SULONG

Jacob Kreindl

2019 European LLVM Developers’ Meeting, April 8-9, 2019

Page 2: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Page 3: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Page 4: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Page 5: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Page 6: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Page 7: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Page 8: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Debuggers for

Native Code

Page 9: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Debuggers for

Native Code

Page 10: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Debuggers for

Native Code

Page 11: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MOTIVATION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 2

LLVM IR

Binary

Debuggers for

Dynamic Languages

Debuggers for

Native Code

Page 12: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM

April 9, 2019 Jacob Kreindl, EuroLLVM’19 3

LLVM IR

Page 13: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM

April 9, 2019 Jacob Kreindl, EuroLLVM’19 3

LLVM IR

Execute & Debug

Page 14: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM

April 9, 2019 Jacob Kreindl, EuroLLVM’19 3

LLVM IR

Execute & Debug

Execute

Page 15: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM

April 9, 2019 Jacob Kreindl, EuroLLVM’19 3

LLVM IR

Execute & Debug

Execute & Debug

Debug

Page 16: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM FOR DYNAMIC LANGUAGES

April 9, 2019 Jacob Kreindl, EuroLLVM’19 4

Page 17: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM FOR DYNAMIC LANGUAGES

April 9, 2019 Jacob Kreindl, EuroLLVM’19 4

Language

Front-End

Language

Front-End

Language

Front-End

Page 18: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM FOR DYNAMIC LANGUAGES

April 9, 2019 Jacob Kreindl, EuroLLVM’19 4

Language

Front-End

Language

Front-End

Language

Front-EndLanguage-Agnostic

AST

op1

op2 if

elsethen

op3 op4

Source

Location

Page 19: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

GRAALVM FOR DYNAMIC LANGUAGES

April 9, 2019 Jacob Kreindl, EuroLLVM’19 4

Debugger

Back-End

Chrome

Debugger

Netbeans

Debugger

Other

Front-Ends

Language

Front-End

Language

Front-End

Language

Front-EndLanguage-Agnostic

AST

op1

op2 if

elsethen

op3 op4

Source

Location

Page 20: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

SULONG – THE LLI IN GRAALVM

April 9, 2019 Jacob Kreindl, EuroLLVM’19 5

LLVM-IR

LLVM Front-End

(Clang, Dragonegg, …)

Sulong

Language-Agnostic

AST (IR-Level)

block

phi %8 store

42getelementptr

%1 4

Debugger

Back-End

Page 21: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

SOURCE-LEVEL DEBUGGING WITH SULONG

April 9, 2019 Jacob Kreindl, EuroLLVM’19 6

LLVM-IR Sulong

Language-Agnostic

AST (IR-Level)

+ Run-Time Debug Information

(Source-Level)

LLVM Front-End

(Clang, Dragonegg, …)

Debugger

Back-Endwith Debug

Information+ DebugInfo

Parser

block

phi %8 store

42getelementptr

%1 4

Scope &

LocationValue Tracking

(@llvm.dbg.*) Abstraction to

Source-Level

Page 22: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

DEBUGGING NATIVE EXTENSIONS OF DYNAMIC LANGUAGE PROGRAMS

April 9, 2019 Jacob Kreindl, EuroLLVM’19 7

Ruby Program

+ Native Extension

Page 23: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

DEBUGGING NATIVE EXTENSIONS OF DYNAMIC LANGUAGE PROGRAMS

April 9, 2019 Jacob Kreindl, EuroLLVM’19 7

One AST

built from multiple language front-ends

LLVM

IR

Ruby Program

+ Native Extension

Page 24: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

DEBUGGING NATIVE EXTENSIONS OF DYNAMIC LANGUAGE PROGRAMS

April 9, 2019 Jacob Kreindl, EuroLLVM’19 7

GraalVM

Debugger

Back-End

One AST

built from multiple language front-ends

LLVM

IR

Ruby Program

+ Native Extension

Page 25: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

Debugging a C-Extension for a Ruby Program with Sulong/TruffleRuby

DEMO

Page 26: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

IR-LEVEL DEBUGGING WITH SULONG

April 9, 2019 Jacob Kreindl, EuroLLVM’19 9

LLVM-IR Sulong

Language-Agnostic

Program Representation

+ Run-Time Debug Information

LLVM Front-End

(Clang, Dragonegg, …)

Debugger

Back-End

+ .ll Parser

op1

op2 if

elsethen

op3 op4

Location

in ll-File

Abstraction to

IR-Level

.bc + .ll File

Page 27: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MEMORY ACCESS IN SULONG

April 9, 2019 Jacob Kreindl, EuroLLVM’19 10

Page 28: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MEMORY ACCESS IN SULONG

Native Mode

All allocations on the native heap

Using java.lang.Unsafe

Accessing illegal memory leads to

Segfault

April 9, 2019 Jacob Kreindl, EuroLLVM’19 10

{ i32, i32 }* 0x00abcdef

42 84

may not be

allocated

Page 29: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

MEMORY ACCESS IN SULONG

Native Mode

All allocations on the native heap

Using java.lang.Unsafe

Accessing illegal memory leads to

Segfault

Sandboxed Mode

All allocations as Java objects

Only in GraalVM Enterprise Edition

Guaranteed memory safety

April 9, 2019 Jacob Kreindl, EuroLLVM’19 10

{ i32, i32 }* 0x00abcdef

42 84

{ i32, i32 }* <managed>

{ i32, i32 } <managed>

i32 42

i32 84

may not be

allocated

Always safe

to access

Page 30: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

Debugging & Tracing a C-Program at IR-Level with Managed Sulong

DEMO

Page 31: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

YOU CAN TRY IT YOURSELF

Download GraalVM at https://www.graalvm.org/

GraalVM Community Edition is Open Source: https://github.com/oracle/graal

April 9, 2019 Jacob Kreindl, EuroLLVM’19 12

Page 32: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

IN CONCLUSION

April 9, 2019 Jacob Kreindl, EuroLLVM’19 13

Execute & Debug

LLVM IR

Page 33: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

IN CONCLUSION

Same Debugger Front-End

for all Languages

April 9, 2019 Jacob Kreindl, EuroLLVM’19 13

Execute & Debug

LLVM IR

Page 34: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

IN CONCLUSION

Same Debugger Front-End

for all Languages

Source-Level Stepping & Breakpoints

April 9, 2019 Jacob Kreindl, EuroLLVM’19 13

Execute & Debug

LLVM IR

Page 35: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

IN CONCLUSION

Same Debugger Front-End

for all Languages

Source-Level Stepping & Breakpoints

Cross-Language Symbol Inspection

April 9, 2019 Jacob Kreindl, EuroLLVM’19 13

Execute & Debug

LLVM IR

Page 36: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

IN CONCLUSION

Same Debugger Front-End

for all Languages

Source-Level Stepping & Breakpoints

Cross-Language Symbol Inspection

IR-Level Debugging

April 9, 2019 Jacob Kreindl, EuroLLVM’19 13

Execute & Debug

LLVM IR

Page 37: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle
Page 38: LLVM IR IN GRAALVM: MULTI-LEVEL, POLYGLOT DEBUGGING …llvm.org/devmtg/2019-04/slides/TechTalk-Kreindl-LLVM_IR... · 2019-10-30 · April 9, 2019 Jacob Kreindl, EuroLLVM’19 15 Truffle

SYSTEM OVERVIEW

April 9, 2019 Jacob Kreindl, EuroLLVM’19 15

Truffle

JVM + Graal

GraalVM

Interpreter for Dynamic Language(TruffleRuby, GraalPython,

Code in Dynamic Language(Ruby, Python,

Sulong

LLVM-IR+ Debug Information

Native Extension(C/C++, Fortran,

Truffle Debugger

Chrome Debugger