A series of power outage killed one of my machine, and left my server off for a few hours yesterday and the day before yesterday. Things have stabilised now.

I'm sorry for the inconvenience.


crosstool-ng-1.0.0 is out!

I consider crosstool-NG to be stable enough that I can release a 1.0.0. I've been using it extensively, and the generated toolchains, for at least MIPS, ARM and x86. There are no big issue remaining, while some minor tweaks may remain.

Of course there is still a lot of work to do! Most notably, securing NPTL (glibc right now, uClibc RSN), the ARM-EABI, the experimental Super-H and IA64, adding new targets, following the tools version (we're starting to lag on some).

But it was highly time there were a new release:

  • the previous one was on 20070917, that is 4 months ago;
  • a 1.0.0 release gives some kind of confidence.

As usual, see the Changelog for what's been done.


We're moving! Sandrine and I have bought a house! We're moving end of February, but until then that leaves us packing, painting and taking walls down (obviously, not those we did paint! ;-) ).

Woo! That's going to sound good!

I already don't have much time to work on crosstool-NG, on frfs, on the e800, and my other projects, and I will have much less in the forthcoming weeks… But I will try to allocate a few hours here and then to my computer-related stuff.

On my server side, now… I'm so fed up with my hardware failing over and over again that I'm planning to move my site onto a hosted server. I need a very low price, with only a few GiB space, and a processor decent enough to serve this WiKi and my subversion repository. DediBox offers a quite capable low-end server, while OVH has a lower-end server for a little better price.


X-mas is gone until next year! Yes! Got rid of that one (I hate X-mas time).

The failing disk on my server has been replaced yesterday about mid-day. This has implied a down-time of about 24 hours, the time necessary to migrate and check the data, and check the server is still working, plus a little sleep in the middle! Sorry for the inconvenience.


One of the hard-disk in my server is slowly but surely starting to fail. Some sectors are bad, but it doesn't say anything about it… Sad… I'll have to replace it very soon. This implies some off-time from time to time. Sorry about it.


crosstool-ng-0.3.2 is out! As usual, see the Changelog for what's been done.


Woohoo! crosstool-NG has seen its 500th commit tonight! Yeah!


My projects are slowing down a little these days, because I have drifted to other duties.

My girlfriend and I are searching a house to buy :-). But this takes time: looking at adds, having an appointement, visiting the house, thinking about it, rejecting it, over and over again until one matches our tastes, our ideas on the future, and the money we can get :-/.

I also have some other projects spawning or being reborn: my PDA is being resurected to boot Linux natively (WIP), I want to try to revive the BluePAD story, the BZH novel is suffering from lack of attention, plus some minor tasks here and then which leaves my major projects drifting…

But you still are welcome to report any success story or disapointement with the existing crosstool-NG or frfs :-).


This page looks more and more like a crosstool-NG announcement page.

This is time to remedy this state, and to announce frfs! ;-)

frfs aims at implementing a fully functional in-RAM filesystem using the FUSE framework. Its main goals are speed, minimal memory overhead, extensibility, and simplicity: it should be easy and straightforward to understand what the code does.

Put in other words, I'm playing with FUSE. frfs serves as a learning ground on how FUSE works, and how it can be leveraged to provide a solid, in-RAM, collaborative file system. In the project page for frfs, you'll see what frfs can do as of today, and what my future plans are.

frfs-0.0.3 is out! As usual, see the Changelog for what's been done.


crosstool-ng-0.3.1 is out! As usual, see the Changelog for what's been done.


crosstool-ng-0.3.0 is out! As usual, see the Changelog for what's been done.


crosstool-ng-0.2.2 is out! As usual, see the Changelog for what's been done.


crosstool-ng-0.2.1 is out! As usual, see the Changelog for what's been done.


Holidays are not really started yet, and here is crosstool-ng-0.2.0!

Versions are coming at a really fast pace these days. I know. This could sound stupid, but I don't think so. Here's why:

I still consider crosstool-NG alpha software: it Works For Me (TM), but has not been stressed enough yet. In this phase, I discover small bugs and add small features on a daily basis; big bugs and big features are rather on a weekly basis, but still there. So I tag (svn-wise) my work pretty often. As I have a tag, I release it. Plain simple.

Also, the project is now referenced on FreshMeat, and I want people to gain interest. If people see that a new project does have activity, they get more tempted to jump in than if the project appears stalled.

So I will continue releasing as soon as I have some new working stuff.

For now…


crosstool-ng strikes again! 0.1.2 is out!


Bah, I can't help working on crosstool-ng! Here's another version: 0.1.1


crosstool-ng gains a minor version! crosstool-ng-0.1.0 is out!


I didn't quite properly finish the previous entry (about l2tp). So here's the end of my rant about it…

So we don't have proper tunneling solutions, do we?

In fact, there is one. It's called vtun. vtun is versatile: it can tunnel many things: ethernet (using tap), IP (using tun), ppp or even a tty or a pipe, using either TCP or UDP as transport stream. It can compress and/or encrypt the tunnel. All of these very easily configured and setup.

Unfortunately, vtun uses its own, proprietary protocol. It is undocumented as far as I could see (although one of the tasks for 3.0.1 is writting better documentation), and it does not implement any of the l2tp RFCs.

But it just works.

Now I was very disapointed when setting it up. It should not have required very powerfull machines, but I failed to tunnel a multicast stream in my setup. As a reminder, I want to connect two physical ethernet interfaces on two distant machines, via a WiFi link, with the transport being transparent to the streams going through (aka a virtual switch), as per the following sketch:

    Some service                          (WRT54GL)
               |                        ,-(WiFi AP)-.
          LAN  |                       /             \                       Some peripheral
         | | | |                      /    802.11g    \                      |
Internet | | | |               WiFi link             WiFi link               |   LAN
       | | | | |                   |                     |                   | | | | |
  .---|_|_|_|_|_|-----------------|_|---.           .---|_|-----------------|_|_|_|_|_|---.
  |    | \_ _/ | vlan2             |    |           |    |             vlan2 | \__ __/    |
  |    |   v   |                   |    |           |    |                   |    v       |
  |    |   |   `--(br1)--<tap0     |    |           |    |     tap0>--(br1)--'    |       |
  |    |   |                       |    |           |    |                        |       |
  |    |   | vlan0                 |    |           |    |                  vlan0 |       |
  |    |   `---------(br0)---------'    |           |    `----------(br0)---------'       |
  |    |               |                |           |                           (WRT54GL) |
  |    | vlan1        / \               |           `-------------------------------------'
  |    `-------------( R )              |
  |                   \_/               |      R: routing maechanism, with masquerading and port forwarding
  |                          (WL-500GD) |   tap0: one of the tunnel end-point, as provided by vtun
  `-------------------------------------'  vlanX: vlans as tagged by a managed switch

So I want to connect "some peripheral" to "some service".

Unfortunately, I couldn't manage to tunnel a 4Mibps multicast stream over a vtun tunnel between my WRT54GL and my ASUS WL500GD.

But vtun might not be the sole culprit. During investigations, I saw that almost all TCP or UDP packets between any two of my WiFi clients were duped. From the AP to any client, there was no duplication, while there is between any two clients. Strange… I will have to speak with the OpenWRT guys first, I guess…

Then, some packets are dropped at the layer 3 (iptables) in Linux, while it should simply be bridged.


Coming back to this tunneling problem of mine. In fact, I couldn't find any decent l2tp implementation for linux.

  • RFC 3931 is definitely not implemented at all
  • RFC 2661 is only partially implemented
    • l2tpns only provides the NS end point, although it does it well
    • l2tpd is officially dead
    • rp-l2tp (l2tpd's replacement from Roaring Penguin) hasn't seen any commit for more than 3 years
    • l2tp hasn't seen any commit in the last 5 years


After this morning's coding session, crosstool-ng-0.0.4 is out! Enjoy!

After this afternoon's coding session, crosstool-ng-0.0.5 is out! Enjoy!


Recently, I have come across a problem that's not easy to solve.

Listing of constraints:

  • I have two machines,
  • both machines have a physical, ethernet network interface,
  • both machines have a WiFi network interface,
  • both machines are connected to the other with a WiFi link (hoping through an AP),
  • both machines have an IP link to the other (over the WiFi link),
  • I have no control whatsoever on the data coming in/out through the two ethernet interfaces,
  • I need data coming in through an ethernet interface go out through the second, and conversely.


  • I want to kinda bridge the two ethernet interfaces, using a kind of virtual switch.

So I rumaged a bit, and ultimately thought of l2tp (layer 2 tunneling protocol, RFC 3931). Sounds quite good! I would only need to create a tunnel between the two machines, over the WiFi link, and bridge (as per the Linux meaning) the interfaces with the corresponding end of the tunnel on each machine. So far, so good!

Alas! In Linux, we have no implementation of RFC 3931, only partially functional implementations of RFC 2661 (superceded by 3931), and all implementations require a ppp session on top the l2 tunnel… :-( I can't afford a ppp session, or better, I don't need one. Plus a ppp link almost require an IP to each end, wich I really don't need either.

Looks like we're missing a very interesting feature here… I'll dig a little longer, but I fear I'll have to spawn something…

More on this later…


Whaoo! crosstool-ng has seen its 200th commit this evening! And three releases so far. Plus, NPTL with glibc and for x86 is working now. :-)

I'm somewhat proud of that, even if there is still work to be done.

Note: the single act of building an NPTL-enabled glibc takes ages, even on a decently modern computer: about 23 minutes on my Athlon 64 x2! Amazing! :-(

20070520, early, early, early in the morning

Bah, as I supposed, building a toolchain with gcc-4.2.0 is a pain… :-( Bah, time for bed, I guess… :-)

20070519, late, late, late in the night...

ARRGGHHHH…. I've got big problems with my ARM toolchains: duplicate symbols for soft floating point emulation functions… Darned gcc, it doesn't build those functions in the first pass so the C library can use them, but it does build them later in the second pass, when the C library is already built. Damned. :-( Fortunately, the other targets (MIPS and x86) aren't affected, as they don't make use of the softfloat library, and gcc does provide these functions in the first place. :-/

Plus there is this brand new gcc-4.2.0, but I guess it is no better than the previous versions… :-(

By the way, I was reading the old entries. The one dated 20070422 stated I had no motrobike. That's now wrong! I've a really neat Honda "Seven Fifty" CB750F2. Yeah, man! :-D More on this wonder later on another page…


Waoo. Been a pretty long time since last update… As I feared, I don't have enough time to follow this blog too frequently… :-(

Anyway, still working on crosstool-NG. I'm starting adding debug facilities, such as gdb as a starting point. Will follow, dmalloc, and some others.

This to say that I'm quite fed up with the ./configure stuff. Building a cross-gdb implies a native build for the gdb itself, plus a cross-build for the gdbserver. Quite a mess. Building a cross-gdb should produce the gdbserver automagically, but it doesn't. What would the use of a cross-gdb without the server? Looks like the GNU folks are being stupid in their heads… Bah… :-(


Ah! Today's my birthday! I got a pair of boots for the motorbike! Yeah! :-) I'm still missing the motorbike, though… :-(

Anyway, got some time to work on crosstool-NG to support MIPS targets. What a mess is MIPS! I thought that ARM was already non-trivial, but MIPS beats it by quite a length! Pheww…. :-(


First release ever of crosstool-NG: 0.0.1 is out!

Why 0.0.1, will you say? Because crosstool-NG is quite alpha, still. It lacks many architecture support, is poorly tested on some arch it already supports (Time, give me time! I need time!), and because I like to start small, and rise at a correct pace…

Anyway, enjoy!

svn co http://ymorin.is-a-geek.org/svn/crosstool-ng/tags/crosstool-ng-0.0.1


Haha! I found a way to remove the TOC on a per-page basis! It's not documented, but you can use the ~~NOTOC~~ keyword at the begining of your page, and the TOC automagically disapears! Yeah! :-)

Now, for a TOC that is not expanded by default… :?:


I'm really fed up with my DSL box. It does not update my dyndns account any more. It's a really brain-dead box. SHIT! I have to workaround all its defects, which really starts annoying me. Really. I'm annoyed. Yes, I am. Don't push me.


I have switched my hard drive tonight. The old PATA, 60GiB one was dying, so I changed it for a 80GiB SATA disk (just for my system and home, all the data is on another drive). When moving the system from the old drive to the new one, there was I/O errors on one file, namely /var/log/wtmp. I was short from losing actual data, it seems!

For once, something that ends up OK. :-)


I was looking for a simple yet efficient script-like language. I've found LUA (LOO-ah). It looks promising in that it's similar to C, yet alowing more complex constructs, such as dictionaries (associative arrays), and providing a framework for extensions, such as classes and inheritance, and boasts a garbage collector. All in about 150KiB! http://www.lua.org/


The hard drive on my main machine (not the server) is going klong-clic. It is 7 years old, of which most of the time up. Time to update from ATAPI to SATA, I guess.


Arrgghh! ext3 is a journalled filesystem. Nonetheless, there is still that obsolete feature of "maximum mounts count" and "interval" checks on this filesystem! WHY? Don't even ext3 developers trust their filesystem? I don't want that! Oh well, tune2fs -i 0 -c 0


I'm desparately trying to enable the nice URL feature of dokuwiki, but I can't find a way to enable it… Ah. I should have read the documentation a bit more thouroughly. I was missing the mod_rewrite in apache.conf. For once, an easy-to-solve issue! :-)


I've lost one of my SVN repositories! SHIT! It was the crosstool one, so I lost ALL of my history of my work on crosstool-NG.

It sucks. Really.

Meanwhile, I created a new repository, and am in the process of building a working backup procedure, when the previous one was defective… Between the apache+dokuwiki bug last monday, this SVN failure, I'll start beginning to think I'm cursed… :-(


Finally got around putting some more conservative rules in my firewall. That should stop those attackers for a while. That's wonderfull what netfilter is able to do for you! Unfortunately, it is a bit complex, and setting rules the correct way is, well, far from easy. My rule-of-thumb-of-the-day: always have a keyboard and a monitor at hand… :-)


It seems we can't make too strong assumptions on bash: old versions don't have printf -v; the one on MacOS X doesn't have set -E, and seems to choke on for((expr1; expr2; expr3)); do list; done. Bah, let's bash bash:-(

Ah, and while we're bashing, guess what the following source in a dokuwiki page does:

''for((expr1; expr2; expr3))''

Here is the answer: for1). Here is the explanation 2)

My system has been under heavy ssh attack yesterday. Time for an IDS, I guess… :-(

Google is indexing my svn repository. How stupid… Time for a robots.txt, I guess…

<box left round orange|WARNING!!!> Using any Debian tool to update your system is doomed to fail.
I've spent about two hours fixing my apache and dokuwiki installation because of a relatively minor update. SHIT. :-( </box>


I just notice that testing changes should be done prior to checking them in. Bah…


Apparently, calling gcc -shared -Wl,-nostdlib -o foo.so a.o b.o is not the same as calling ld -shared -nostdlib -o foo.so a.o b.o. Another reason why gcc is broken.

Incidentaly, I discovered that libfloat does not need crti.o. Calling ld directly is the way to go to have proper an cleaner linking.


This is the first entry to my activity log. I will try to have it up-to-date with my development stuff, but I'm not good at doing this…

While working on crosstool-NG and ARM and soft-float, I've come to the conclusion that gcc is really borked.

Why on Earth does gcc have support for emulating floating point operations and does not link it in?

As a workaround for a broken compiler, we have to use the (ageing) libfloat library, which emulates floating point arithmetics in software. But the story does not end here. Read on!

To be able to build a toolchain, we need, in order:

  1. kernel headers
  2. binutils
  3. C library headers
  4. bootstrap gcc
  5. C library
  6. final gcc

Well, that should be it! Unfortunately, the C library needs floating point arithmetics. Good, lets add libfloat before C library. Alas, that does not work as libfloat needs crti.o (and crtn, I presume). But those are provided by… the C library! Chicken and egg problem, isn't it?

Now you'd think: "would gcc have crti and crtn, by chance?" YES! It does! But it doesn't build nor install them… No way.


1) expr1; expr2; expr3
2) Yes, even between dual single quotes, it gets parsed. Let's assume this is a feature… :-(
ressources/log_old.txt · Last modified: 20090128.011040 by ymorin
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki