ELLCC

GNU Tools

Binutils

GDB

QEMU

Can't build with ecc. Global register variable.

Targets

arm

microblaze

mips

nios2

ppc

ppc64

i386

sparc

x86_64

Target Environments

QEMU

Linux (linux)

uClinux

TimeSys

kernel.org

Minix (minix)

RTOS (rtos)

Stand Alone (sa)

Partikle (partikle)

Goals

Multi-target

Targets

arm

microblaze

mips

nios2

ppc

ppc64

i386

sparc

x86_64

Self hosting

Multi-host

Linux

Cygwin

Mingw?

Libraries

C

os

libos.a is a library interfacing the standard C library to the various operating systems supported by ELLCC.

linux

minix

rtos

partikle

compiler-rt

This library contains processor specific compiler support functions. This library contains functions that are called by code generated by the compiler, but generally not called directly from user programs. For example, floating point functions for those processors for those processors without hardware floating point support.

Targets

arm

microblaze

mips

nios2

ppc

ppc64

i386

sparc

x86_64

C++

Communication

Testing

Requirements

Unit Testing

Change Tracking

Regression Testing

System Builder

Muilti-target linking

Inter-thread communication

Milestones

Internal

Unified binutils compiled by clang

Unified GDB

Debugging with QEMU:

(gdb) set gnutarget elf32-powerpc

(gdb) set endian big

The target is assumed to be big endian

(gdb) set arch powerpc:e500

The target architecture is assumed to be powerpc:e500

(gdb) target remote :1234

LLVM/Clang modifications for cross compilation

Targets

arm

Runs bzip2.

microblaze

Runs bzip2.

mips

Runs bzip2.

nios2

Need to update the code generator.

ppc

Runs bzip2.

ppc64

Bzip2 runs.

QEMU does not have full signal handling support.

i386

Runs bzip2.

sparc

Compiler hangs during inline asm code generation.

x86_64

libecc

Nios2 code generator

Nios2 QEMU

Regression test suite

External

Release 1.0

Command line tools only. Linux only?

Nios2 added to LLVM tree

Nios2 added to QEMU tree

ecc

LLVM

/usr/share/doc/subversion-1.6.13/svn_load_dirs.pl -svn_username rich -svn_password **** -t svn-<current-rev> http://ellcc.org/svn/vendor/llvm current llvm

/usr/share/doc/subversion-1.6.13/svn_load_dirs.pl -svn_username rich -svn_password **** -t svn-<current-rev> http://ellcc.org/svn/vendor/clang current clang

The next commands should be executed above a checkout of the latest trunk llvm (where <last rev> is the last tagged import before svn-<current-rev> above.

svn merge http://ellcc.org/svn/vendor/llvm/svn-<last rev> http://ellcc.org/svn/vendor/llvm/current llvm

cd libecc/src

svn merge http://ellcc.org/svn/vendor/compiler-rt/svn-<last rev> http://ellcc.org/svn/vendor/compiler-rt/current llvm

cd llvm/tools

svn merge http://ellcc.org/svn/vendor/clang/svn-<last rev> http://ellcc.org/svn/vendor/clang/current clang

To find merge files to fix:

find . -name "*merge-*.r*" | grep -v svn

To get specific debug information: -mllvm -debug-only=mblaze-reg-info

Nios2 Support

clang

Static Analysis

Directory Structure

bin

gnu

libecc

include

Include directory search order

The compiler is usually invoked with a name like arm-linux-ecc. This naming convention specifies that target processor (target) and target operating system (os) as the first two components of the name. All include search paths are relative to the directory containing the tool (bin). The default include file search path is:

<bin>/../libecc/include/<target>/<os>

<bin>/../libecc/include/<target>

<bin>/../libecc/include/<os>

<bin>/../libecc/include

arm

linux

sa

microblaze

linux

sa

mips

linux

sa

nios2

linux

sa

ppc

linux

sa

ppc64

linux

sa

i386

linux

sa

sparc

linux

sa

x86_64

linux

sa

linux

sa

lib

The lib/<target>/<os> directories contain operating system specific libraries and well as the default linker scripts, "target.ld".

The target.ld scripts are those provided after a build of binutils, slightly modified. They are found in gnu/obj/binutils/ld/ldscripts after the binutils build. We use the ".x" versions.

arm

linux

sa

microblaze

linux

sa

mips

linux

sa

nios2

linux

sa

ppc

linux

sa

ppc64

linux

sa

i386

linux

sa

sparc

linux

sa

x86_64

linux

sa

llvm

Eclipse