Top Banner
Systems and Technology Group Linux on Cell - toolchain and GDB © 2005 IBM Corporation Linux on Cell - Toolchain and GDB L2T1H1-31 Cell Programming Workshop Cell Ecosystem Solutions Enablement
51

Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Mar 23, 2018

Download

Documents

dobao
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

Linux on Cell - toolchain and GDB © 2005 IBM Corporation

Linux on Cell - Toolchain and GDB

L2T1H1-31 Cell Programming WorkshopCell Ecosystem Solutions Enablement

Page 2: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB2

Class Objectives – Things you will learn

Get to know the toolchain for the Cell BE

Learn how gdb can be used on the Cell BE architecture to debug applications

Credits– Ulrich Weigand

– Sidney Manning

Trademarks - Cell Broadband Engine ™ is a trademark of Sony Computer Entertainment, Inc.

Page 3: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB3

Class Agenda

Linux on Cell BE

GNU tool chain for Cell BE

GDB – The GNU Debugger

Using GDB on Cell

– Kernel Debugging

– Debugging SPE threads

– Debugging Cell BE applications

– Debugging Capability of Systemsim

Graphical Debugger Front-End DDD

Page 4: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB4

Linux on Cell BE

Page 5: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB5

SPE exploitation – kernel level API

Indirect programming model

Virtual file system namespace (“spufs”)

– Directories represent virtual SPE contexts

– Files provide access to SPE resources

– Memory, registers, mailboxes, signals, ...

SPE execution control

– Provided by spufs_run system call

– Synchronous execution on behalf of PPE thread

– PPE address space used for SPE DMA

– Virtual SPE contexts scheduled onto physical SPEs

mem(read, write, mmap, aio_...)

mbox(read)

ibox(read)

/spu/myvirtspu/

wbox(write)

signal1(write)

signal2(write)

signal1_type(read, write)

signal2_type(read, write)

regs(read, write)

Page 6: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB6

SPE exploitation – PPE programming interfaces

Asynchronous SPE thread API (“libspe”)– spe_create_thread, spe_wait, spe_kill, ...

– Intended to be portable across operating systems

– On Linux, implemented on top of spufs kernel API

Implementation of spe_create_thread– Allocate virtual SPE context in spufs

– Load SPE application code into context

– Start PPE thread using pthread_create

– Within new thread, commence SPE execution (spufs_run)

Page 7: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB7

SPE exploitation – SPE programming interfaces

Application start-up and termination– Start-up code sets up environment

– Entry point called with arguments from spe_create_thread

– “Stop-and-signal” instruction signals termination

Language and library features– C support, (limited) C++ support available

– Vector data types & intrinsics, SPE assembler intrinsics

– Limited library facilities available

– “System calls” to offload processing to PPE

Page 8: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB8

SPE execution control

Application

Kernel

SPE

spufs_run

set RUNNABLE stop and signal

return

Page 9: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB9

SPE execution control – signals

Application

Kernel

SPE

spufs_run system call restart

set RUNNABLE“trap”

signal handler invocation

Similar flow of control for PPE assisted SPE system calls

Page 10: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB10

GNU Toolchain for Cell BE

Page 11: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB11

GNU tool chain

PPE support– Just another PowerPC variant ...

SPE support– Just another embedded processor ...

Cell BE support– More than just PPE + SPE !

Page 12: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB12

Object file format

PPE: regular ppc/ppc64 ELF binaries

SPE: new ELF flavour EM_SPU– 32-bit big-endian

– No shared library support

– Manipulated via cross-binutils tools

Cell: combined object files– SPE executable embedded as a whole by embedspu tool

– Contained in .rodata.spuelf section in PPE object

– CESOF: support SPE->PPE symbol references

Page 13: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB13

GCC support

PPE: handled by rs6000 back end– Processor-specific tuning, pipeline description

SPE: new spu back end– Built as cross-compiler

– Handles vector data types, intrinsics

– Middle-end support: branch hints, aggressive if-conversion

– Future: GCC 4.x port exploiting auto-vectorization, SMS

Cell: no special support today– Future: single source mixed-architecture compiler?

Page 14: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB14

SPE architecture features

Instruction set architecture– 128-bit SIMD execution unit (integer + float/double)– Large unified register file (128 general-purpose registers)– Branch penalty avoidance – conditional move, branch hint– “User mode” only – channel instructions for I/O

Memory architecture– Software-managed memory (256 KB local storage + DMA)– No address translation or page protection– Load/store architecture - 16-byte alignment enforced– Local storage access cannot trap!

Page 15: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB15

SPE Application Binary Interface

Register usage– R0: link register, R1: stack pointer, R2: volatile– R3-R79: function arguments & return value, volatile– R80-R127: local variables, non-volatile

Stack frame

Back chainLink register save area

Overflow argument areaLocal variable spaceRegister save area

Previous back chain

SP

Page 16: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB16

GDB – The GNU Debugger

Page 17: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB17

GDB – The GNU Debugger

Core features– Run, stop, and continue target applications

• Breakpoints, watchpoints, and catchpoints• Alter execution, e.g. perform inferior function calls

– Examine and modify target application state• Register and memory contents, stack backtraces• Symbolic debugging, high-level language support

– Modes of operation• Native: run application on same system as debugger• Remote: attach to remote target system via stub• Post-mortem: analyze core files after crash

Page 18: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB18

GDB implementation – structure

Basic structure– User interface (line mode, text mode, GUI)

– Symbol side (“everything you can do without live process”)

– Target side (access to/manipulation of process state)

Target side back-end interfaces– Architecture vector

• Instruction set, registers, ABI, stack unwinding, ...– Target vector

• Access to memory & registers, execution control, ...

Page 19: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB19

GDB implementation – architecture vector

Instruction set– Disassembler, breakpoints, software single-step

Registers– Names, sizes, contents of special registers

ABI– High-level language data types

– Function calling convention (for inferior calls)

Stack unwinding– Prologue analyzers, stack frame detection

Page 20: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB20

GDB implementation – target vector

Process control– Start/stop processes

– Attach to/detach from running processes

State manipulation– Access inferior registers & memory

– Manage threads of inferior process

Execution control– Resume execution, single-step, wait for events

– Manage HW-assisted breakpoints, watchpoints, ...

Page 21: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB21

GDB implementation – Linux target

Target vector– Generally based on the ptrace system call

• PT_ATTACH/PT_DETACH for process control• PT_CONT/PT_SINGLESTEP for execution control• PT_PEEKDATA/PT_POKEDATA to access memory• PT_PEEKUSR/PT_POKEUSR to access registers

– Analyze target libpthread data structures for thread control

Architecture vector– Depends on architecture Linux is running is on

– More than 20 architectures supported

Page 22: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB22

Using GDB on Cell

Page 23: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB23

Using GDB on Cell - OverviewKernel debugging

– Downloading and cross compiling GDB for PPC– Kernel configure options– Attaching and debugging the Linux kernel using System Sim’s debug port

Debug Native executable running on the Simulator– Debugging options– Use of command scripts to track variables

Debug a standalone SPU application– Its just as easy debugging a native application

Debug a BE application– Environment variables required– Limitations

Simulation Features– Tracking memory corruption

gdb documentation http://www.gnu.org/software/gdb/documentation

Page 24: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB24

Kernel Debugging

Page 25: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB25

Kernel Debugging - Overview

Cell sdk allows to debug a cell Linux kernel running inside the simulator

gdb version supporting PowerPC64 is required– on PowerPC systems already installed

– on Intel systems download and compile

Kernel needs to be compiled with debug option

Page 26: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB26

Download and build gdb for 64bit PowerPC Architecture

## Commands to download and build gdb for ppc64.#

mkdir -p basemkdir -p objwget -c ftp://ftp.gnu.org/pub/gnu/gdb/gdb-6.3.tar.bz2 -P basetar jxvf base/gdb-6.3.tar.bz2pushd obj../gdb-6.3/configure --target=powerpc64-linuxmake allmake installpopd obj

Page 27: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB27

Preparing the Linux Kernel for debug on x86 systems

Change working directory to objsim directorycd <SDK_ROOT>/cbe_linux/src/kernel/objsim

Configure the KernelARCH=powerpc PLATFORM=cell \

CROSS_COMPILER=/opt/sce/toolchain-3.2/ppu/bin/ppu \

make xconfig– Go to Kernel Hacking / Kernel Debugging– Check box “Compile the kernel with debug info”

Disable Optimization for selected files– CFLAGS_spu_ptrace.c = -O0 -g

Rebuild the kernelcd <sdkroot>/cbe_linux/src/kernel directory

make

this will install the kernel into <sdkroot>/systemsim-cell-release/images/cell

Page 28: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB28

Starting a Kernel Debug SessionStart simulator with new kernel

– path to kernel loaded is• current directory or <sdkroot>/systemsim-cell-

release/images/cellAttach to the simulator’s debug stub

– click “Service GDB” in the simulator’s main window– cd <sdkroot>/cbe_linux/src/kernel/objsim– Start GDB using graphical front-end ddd

• ddd –debugger ./gdb \cbe_linux/src/kernel/objsim/vmlinux

– Set breakpoint and attach gdb to the simulator• (gdb) break start_kernel• (gdb) target remote :2345• (gdb) continue

Page 29: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB29

GDB withBreakpoint in Kernel

Page 30: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB30

Native Debugging

- debugging an executable running in the simulator- debugging on Cell BE

Page 31: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB31

Debugging SPE threads

Current implementation: spu-gdb– Available as part of the Cell BE SDK

Supported operating modes– Debug stand-alone SPE binary

• Kernel support via binfmt_misc required• Allows to execute the full GDB test suite

– Attach to single SPE thread of running Cell application• Use simplified by debug assists in libspe runtime: print Linux

PID of SPE thread on startup and wait for GDB attach– Remote debugging via gdbserver

Page 32: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB32

SPE debugger – process state access

DebuggedSPE thread

Linux kernel Debugger

PPE registers

PPE memory

SPE registers

SPE memory

ptrace

spufs

Access PPE state via ptrace, and analyze it

Result: PPE thread is blocked inside spufs_run system call on spufs directory D

Access SPE state of context in spufs directory D via spufs file operations

Page 33: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB33

SPE debugger – execution control

Application

Kernel

SPE

spufs_run system call re-issued

set RUNNABLE“breakpoint”

return from ptrace call

Debuggerptrace (PT_CONT)

Handling identical to PPE thread execution control

Page 34: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB34

SPE debugger – executable file mapping

Problem: Which executable to load symbols from?– PPE executable: specified on gdb command line

– PPE shared object: retrieved from ld.so data structures

– SPE executable: retrieved from libspe data structures

How does it work?– Directory name in spufs encodes libspe thread ID

– Thread ID points to data structure in PPE memory

– Data contains spe_program_handle_t used to start SPE

– Handle refers to SPE executable present in PPE memory

Page 35: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB35

SPE debugger – runtime library debug assists

SPU_INFO=1– Implemented within libspe runtime library

– When loading SPE ELF executable, prints messageLoading SPE program : NNNSPU LS Entry Addr : NNN

– Before starting up new SPE thread, prints messageStarting SPE thread 0x..., to attach debugger use: spu-gdb -p NNN

SPU_DEBUG_START=1

– Includes everything done by SPU_INFO=1

– Waits until debugger is attached (or signal received)

Page 36: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB36

Debugging an Executable Running in the Simulator

Debugging can be done locally or remote

gdb for sdk 1.0.1

– rpm spu-gdb-2.3-bsc2.1.ppc.rpm

– is installed on sysroot disk (gets mounted in simulator)

If you downloaded gdb to debug the kernel you can configure gdbserver to debug remotely.

CC=/opt/sce/toolchain-2.3/ppu/bin/ppu32-gcc ../../../gdb-6.3/gdb/gdbserver/configure –target powerpc-linux

– Use the same debugger you used to debug the kernel to drive the remote session.

– Remember that bogus net must be configured or remote debug sessions will not work.

Page 37: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB37

Standalone SPU debugging

very similar to debugging a PowerPC application

the Cell SDK 1.0.1 ships with spu-gdb preloadedspu-gdb <program_name>

easy way to get a handle on spu programs that have no external dependencies

good way to learn what some of the vector intrinsic operations do to your data

Page 38: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB38

DebuggingSPU binaries

Page 39: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2005 IBM CorporationLinux on Cell - toolchain and GDB39

Debugging Cell BE Applications

Page 40: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB40

BE application DebuggingMust use either native gdb or spu-gdb depending on what part of the application you are debugging.

– Use standard gdb to debug the PowerPC threads.

– Use spu-gdb to debug the SPU threads.

– SPU_DEBUG_START – Tells the libspe to start your sputhreads in the stopped state.

SPU_DEBUG_START=1 <be_program> &

– start you application in the background to be able to attach to the spu thread

Limitations:

– Can only attach to one thread at a time.

Page 41: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB41

Example: Bus Error due to DMA

error

Page 42: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB42

Native Debugging on CBEA

Debugging can be done locally or remote

The same mechanisms are available as for using gdb on Systemsim

– spu-gdb <spu_binary>

– SPU_DEBUG_START=1 <be_program> &

Debuggers

– /usr/bin/gdb gdb for PPU

– /usr/bin/spu-gdb gdb for SPU

rpm for spu-gdb

– spu-gdb-3.2-2.ppc.rpm

Page 43: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB43

Using the graphical Front-End DDD

Page 44: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB44

Graphical Debugger Front-End DDD

Prerequisites general Linux system– Fedora Core 5 including X11 (install via yum)

Prerequisites Cell BE– the Cell SDK 1.0.1

• (http://www.bsc.es/projects/deepcomputing/linuxoncell/)• sdk 1.0.1 includes the debugger

– gcc for PPU and SPU– gdb for PPU and SPU– glibc– ddd

Documentation: http://www.gnu.org/manual/ddd/

For rpm package numbers see next page

Page 45: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB45

PRMs tested with FC5Gcc

[root@localhost yum.repos.d]# rpm -qa | grep gcc

gcc-4.1.0-3

libgcc-4.1.0-3

libgcc-4.1.0-3

ppu-gcc-3.2-2

spu-gcc-3.2-2

ppu-gcc-c++-3.2-2

spu-gcc-c++-3.2-2

Glibc

[root@localhost yum.repos.d]# rpm -qa | grep glibc

glibc-devel-2.4-4

glibc-common-2.4-4

glibc-2.4-4

glibc-headers-2.4-4

glibc-devel-2.4-4

glibc-2.4-4

glibc-kernheaders-3.0-5.2

Gdb

[root@localhost yum.repos.d]# rpm -qa | grep gdb

spu-gdb-3.2-2

gdb-6.3.0.0-1.122

gdb-6.3.0.0-1.122

Ddd

[root@localhost ~]# rpm -qa | grep -i DDD

ddd-3.3.11-5.2

Page 46: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB46

Check that SPU support is active

spufs must be mounted– not necessarily by default for the latest kernel versions– Check with mount

• will show all mounted file systems• Should include “/spu on /spu type spufs (rw)”

if spufs is not mounted– check if /spu exists, if not mkdir /spu as root– mount -t spufs /spu /spu– or add to /etc/fstab

Page 47: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB47

Debug PPU and SPU Applications

PPU application– debug as usual

SPU application– Start application with debug support for SPU

• SPU_DEBUG_START=1 <PPU-Program> &– change into the spu source file directory– start the debug session

• Assuming that spu-gdb is installed in /usr/bin• ddd --debugger /usr/bin/spu-gdb simple_spu -p 24701

Page 48: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB48

Example: Starting Cell BE Application for Debug

Command to start Cell BE application

SPE thread started, command for debugging

Page 49: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB49

Example: Starting DDD

Starting the ddd with spu support

Page 50: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB50

Example: DDD Window

Source file, included in sdk

ddd command window

ddd source file window

breakpoint

spu-gdb command window

Page 51: Linux on Cell - Toolchain and GDB - ECE/CIScavazos/cisc879/papers/T… ·  · 2015-02-127 Linux on Cell - toolchain and GDB © 2005 IBM Corporation ... Local variable space Register

Systems and Technology Group

© 2006 IBM CorporationLinux on Cell - toolchain and GDB51

(c) Copyright International Business Machines Corporation 2005.All Rights Reserved. Printed in the United Sates September 2005.

The following are trademarks of International Business Machines Corporation in the United States, or other countries, or both. IBM IBM Logo Power Architecture

Other company, product and service names may be trademarks or service marks of others.

All information contained in this document is subject to change without notice. The products described in this document are NOT intended for use in applications such as implantation, life support, or other hazardous uses where malfunction could result in death, bodily injury, or catastrophic property damage. The information contained in this document does not affect or change IBM product specifications or warranties. Nothing in this document shall operate as an express or implied license or indemnity under the intellectual property rights of IBM or third parties. All information contained in this document was obtained in specific environments, and is presented as an illustration. The results obtained in other operating environments may vary.

While the information contained herein is believed to be accurate, such information is preliminary, and should not be relied upon for accuracy or completeness, and no representations or warranties of accuracy or completeness are made.

THE INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED ON AN "AS IS" BASIS. In no event will IBM be liable for damages arising directly or indirectly from any use of the information contained in this document.

IBM Microelectronics Division The IBM home page is http://www.ibm.com1580 Route 52, Bldg. 504 The IBM Microelectronics Division home page is Hopewell Junction, NY 12533-6351 http://www.chips.ibm.com