lld Friday, April 13, The LLVM Linker 2012 What is lld? A system - - PowerPoint PPT Presentation

lld
SMART_READER_LITE
LIVE PREVIEW

lld Friday, April 13, The LLVM Linker 2012 What is lld? A system - - PowerPoint PPT Presentation

2012 LLVM Euro - Michael Spencer lld Friday, April 13, The LLVM Linker 2012 What is lld? A system linker Produce final libraries and executables, no other tools or runtime required Understands platform ABI 2012 LLVM Euro -


slide-1
SLIDE 1

lld

The LLVM Linker

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer

slide-2
SLIDE 2

What is lld?

Friday, April 13, 2012 2012 LLVM Euro - Michael Spencer

¨ A system linker

¤ Produce final libraries and executables, no other tools

  • r runtime required

¤ Understands platform ABI

slide-3
SLIDE 3

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.

slide-4
SLIDE 4

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

architecture

slide-5
SLIDE 5

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

planned

slide-6
SLIDE 6

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 added

slide-7
SLIDE 7

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 only

slide-8
SLIDE 8

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.

slide-9
SLIDE 9

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

link

slide-10
SLIDE 10

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.

slide-11
SLIDE 11

Atom Model

Friday, April 13, 2012 2012 LLVM Euro - Michael Spencer

¨ An atom is an indivisible chunk of code or data

An atom

slide-12
SLIDE 12

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 names

slide-13
SLIDE 13

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: undefined

slide-14
SLIDE 14

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

  • ffset: 12

type: R_X86_64_32S

  • ffset: 24

type: R_X86_64_PC32 addend: -4

slide-15
SLIDE 15

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

n Branch island generation n Order file n C++ Open Multi-Methods…

slide-16
SLIDE 16

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

slide-17
SLIDE 17

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 ...

slide-18
SLIDE 18

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

n The purpose of this is purely for speed n The goal is for LLVM to eventually produce these natively

slide-19
SLIDE 19

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 multithreading

slide-20
SLIDE 20

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 files

slide-21
SLIDE 21

Patches Welcome

Friday, April 13, 2012 2012 LLVM Euro - Michael Spencer

¨ Open Projects

¤ http://lld.llvm.org/open_projects.html

slide-22
SLIDE 22

Questions?

bigcheesegs@gmail.com

Friday, April 13, 2012

2012 LLVM Euro - Michael Spencer