This week I went insane while debugging some obscure crash in ARM + glib + logging + threads. Finding this kind of stuff on glibc scares me:
/* Atomic compare and exchange. These sequences are not actually atomic; there is a race if *MEM != OLDVAL and we are preempted between the two swaps. However, they are very close to atomic, and are the best that a pre-ARMv6 implementation can do without operating system support. LinuxThreads has been using these sequences for many years. */
at least, it’s documented 🙂
On the other hand I got enough energy for some very low-level hacking and finally got DWARF2 symbols dumping for breakpad/bug-buddy minidumps! The bad news are that it’s a _ugly_ hack on top of valgrind code, trying to de-valgrinize (and bastardazing it while doing it). However it works, and should be enough for our target in GNOME for having rich backtraces coming from people without debugging symbols and enriching them in the debug server. Also the socorro server is prepared for deployment with our (GNOME) custom modifications and nice and beautiful features:
Did I hear eye-candy? transparency? No, this is just about reading the _real_ code crashing 🙂
Here are the bits:
git-clone http://www.gnome.org/~fherrera/dumper.git git-clone http://www.gnome.org/~fherrera/socorro.git git-clone http://www.gnome.org/~fherrera/bug-buddy.git
Currently, if you want to test it you’d need to point bug-buddy to my home server or if you are brave enough, run your own socorro collector. Ah, I also started using git 🙂
Finally the last open issue to get all of this working are the package collectors: a simple piece of code that has to:
- Download all packages from a distro
- Check for updates and download them
- Extract binaries from those packages onto a temporal directories
- Feed those packagers to our symbolsuplier
And that’s all. I’ll probably start working on a RPM based one this week, but of course all your help is highly appreciated