Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Sun, 20 Jul 2014 01:26:29 +0300
From: Stefan Kristiansson <>
Subject: How to build a musl toolchain for or1k

Now when or1k support has landed in musl, I thought I'd take the opportunity to
give some notes on how to build a toolchain for it (and also, Rich asked me to).

Up until now, I've been building the toolchain I've been using 'by hand'
without any musl specific patches to gcc, but this isn't really a viable
option in the long run.
So, instead, I've adopted the musl-cross way of building the toolchain.

There's a couple of problems, some of which musl-cross can handle out of
the box, and one that it can't.
First, although we have upstreamed or1k support to binutils, it
was done quite recently, so the support hasn't hit any official release yet.
But musl-cross can make use of the binutil snapshots, so not a big deal.
Second, there's no or1k support in the Linux kernel headers tarball,
so unpatched vanilla headers have to be used.
And third, our gcc port isn't upstreamed yet (our biggest issue is rounding
up contributors to assign copyright to FSF, but we're working on that).

To get around the third issue, I modified musl-cross to fetch gcc from an
arbitrary location.

I've pushed this modified version together with the necessary changes for or1k
and a custom to this repo:

So, all that is needed in order to build a or1k-linux-musl toolchain should
be to run ./ from that repo.

And some notes about emulators and kernel for or1k.
There's support in qemu for or1k, but the atomic instructions required for musl
has not yet been added to that, but we have a functional simulator (or1ksim)
with support for them.

git clone -b or1k-master git://
./configure --target=or1k-elf
make && make install

Mainline kernel is missing support for a couple of features required
by musl (mostly related to the atomic instructions). I've added
support for them, but sending out patches for them is yet to be done.
In the meantime, they are all present in the smp branch of

git clone -b smp git://
make ARCH=openrisc musl_defconfig
make ARCH=openrisc

There's an initramfs included in that, so with or1ksim installed, it
should be possible to boot with:
or1k-elf-sim -f arch/openrisc/or1ksim.cfg vmlinux
and then from another terminal
telnet localhost 10084

This became pretty lengthy, but if nothing else, now I've got some
instructions in a public place to point people to. =P


Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.