/
lld The LLVM Linker lld The LLVM Linker

lld The LLVM Linker - PowerPoint Presentation

cheryl-pisano
cheryl-pisano . @cheryl-pisano
Follow
398 views
Uploaded On 2016-04-04

lld The LLVM Linker - PPT Presentation

Friday April 13 2012 2012 LLVM Euro Michael Spencer What is lld Friday April 13 2012 2012 LLVM Euro Michael Spencer A system linker Produce final libraries and executables no other tools or runtime ID: 273768

llvm 2012 friday spencer 2012 llvm spencer friday april euro michael atom lld linker model type passes graph code

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "lld The LLVM Linker" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

lld

The LLVM Linker

Friday, April 13, 2012

2012 LLVM Euro - Michael SpencerSlide2

What is lld?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

A system linker

Produce final

libraries and executables

, no other tools or runtime

required

Understands platform

ABISlide3

What is lld?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

A system linker

Modular

and embeddable

Designed as a set of libraries

As with all LLVM/Clang tools, the main executable code is quite short.

Can be embedded into other tools such as custom language compilers

.Slide4

What is lld?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

A system linker

Modular

and

embeddable

Portable (both host and target)

Currently tested on Mac, Linux, and Windows

Target specific code is isolated for both OS and CPU architectureSlide5

What is lld?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

A system linker

Modular

and

embeddable

Portable (both host and target)

Compatible

Driver to support multiple styles (gnu-

ld

, ld64,

link.exe

)

Supports ELF, COFF (including

MinGW

)

,

Mach-O

, and LLVM IR

Support for a restricted subset of linker scripts is plannedSlide6

What is lld?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

A system linker

Modular

and

embeddable

Portable (both host and target)

Compatible

Extensible

Both LLVM IR and atom graph passes can be

addedSlide7

Why a new linker?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Performance

Linking is a speed bump in the way of fast iteration

gold may be fast, but gnu-

ld

and

link.exe

are not, and gold is ELF

onlySlide8

Why a new linker?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Performance

Portability

gold and gnu-

ld

are

UNIX-oriented

,

link.exe

is Windows only, and ld64 is Darwin only.Slide9

Why a new linker?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Performance

Portability

Reliable cross linking

No single linker can currently be used to reliably cross linkSlide10

What makes lld different?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Atom Model

An atom is an indivisible chunk of code or data

It has a set of attributes such as type, name, and scope

It has a list of references to other atoms

References represent relocations and other relationships such as grouping

.Slide11

Atom Model

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

An

atom is an indivisible chunk of code or

data

An atomSlide12

Atom Model

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

It has a set of attributes such as type, name, and

scope

name: main

type: code

scope: global

type: data

scope: static

content: "Hello, World!"

But not all atoms have namesSlide13

Atom Model

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

It has a list of references to other atoms

name: main

type: code

scope: global

type: data

scope: static

content: "Hello, World!"

name: printf

def: undefinedSlide14

Atom Model

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

References represent relocations and other relationships such as grouping.

name: main

type: code

scope: global

type: data

scope: static

content: "Hello, World!"

name: printf

def: undefined

offset: 12

type: R_X86_64_32S

offset: 24

type: R_X86_64_PC32

addend: -4Slide15

What makes lld different?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Atom Model

LLVM IR and atom graph passes

In addition to the standard LLVM passes, other passes can run at pre and post LLVM IR link phases

lld passes can be run over the atom graph at different stages of the link

Branch island generation

Order file

C+

+ Open Multi-Methods…Slide16

What makes lld different?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Atom Model

LLVM IR and atom graph passes

Uniform

text, binary, and in memory

representation

lld supports a

human-readable

YAML input and output format to aid in testing and debuggingSlide17

Uniform Representation

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

# RUN: lld-core %s 2>&1 | FileCheck %s

# CHECK: duplicate symbol

---

atoms:

- name

: _foo

scope: global

type: data

---

atoms:

- name

: _foo

scope

: global

type

: code

...Slide18

What makes lld different?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Atom Model

LLVM IR and atom graph passes

Uniform

text, binary, and in memory

representation

lld supports a human readable YAML input and output format to aid in testing and

debugging

lld also adds a binary representation of the in memory atom model

The purpose of this is purely for speed

The goal is for LLVM to eventually produce these nativelySlide19

What makes lld different?

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Atom Model

LLVM IR and atom graph passes

Uniform

text, binary, and in memory

representation

C++11

lld has been developed using C++11 from the

beginning

Dogfooding Clang and

libc

++

Makes it easier to write faster code

C++11 atomics and memory model for multithreadingSlide20

Project Status

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Atom graph and resolving work with YAML as input and output

lld native binary reading and writing

COFF

and

Mach-O are already in progress

The Mach-O writer can produce a Hello World executable from multiple YAML filesSlide21

Patches Welcome

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

Open Projects

http://

lld.llvm.org

/

open_projects.htmlSlide22

Questions?

bigcheesegs@gmail.com

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer