July 29th, 2012
I had some surprisingly well-timed holiday booked this week so I decided to visit a nearby(ish) castle at Rochester. The last time I came here I was a small child and all I remember is being terrified by how tall and massive it was. Some shrinkage has occurred over the last twenty years. Still it’s a very pleasant castle and nicely preserved too. Worth visiting, although there’s not a whole lot else to do in Rochester.
Some photos I took (not my best):
Come back for more castle next week!
July 21st, 2012
Mutants!
![P1050609](https://www.doof.me.uk/wp-content/uploads/2012/07/P1050609-450x382.jpg)
July 15th, 2012
Got this really cute hemp chalk bag. Climbing is all about the fashion.
![pouch_scale](https://www.doof.me.uk/wp-content/uploads/2012/07/pouch_scale-387x450.jpeg)
July 8th, 2012
It’s kind of annoying to have to go back and run GDB after your program crashes. Here’s a signal handler I’ve been using which drops you into GDB straight away:
static void gdb_sighandler(int sig, siginfo_t *info)
{
char exe[256];
if (readlink("/proc/self/exe", exe, sizeof(exe)) < 0) {
perror("readlink");
exit(EXIT_FAILURE);
}
char pid[16];
snprintf(pid, sizeof(pid), "%d", getpid());
pid_t p = fork();
if (p == 0) {
execl("/usr/bin/gdb", "gdb", "-ex", "cont",
exe, pid, NULL);
perror("execl");
exit(EXIT_FAILURE);
}
else if (p < 0) {
perror("fork");
exit(EXIT_FAILURE);
}
else {
// Allow a little time for GDB to start before
// dropping into the default signal handler
sleep(1);
signal(sig, SIG_DFL);
}
}
This probably breaks all sorts of rules on what you shouldn’t do in a signal handler but hey, it was going to crash anyway. Resetting the handler to SIG_DFL at the end is important or you’ll end up stuck in a loop when you try to quit GDB. Install it for all the unpleasant signals like this:
struct sigaction sa;
sa.sa_sigaction = (void*)gdb_sighandler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART | SA_SIGINFO;
sigaction(SIGSEGV, &sa, NULL);
sigaction(SIGUSR1, &sa, NULL);
sigaction(SIGFPE, &sa, NULL);
sigaction(SIGBUS, &sa, NULL);
sigaction(SIGILL, &sa, NULL);
sigaction(SIGABRT, &sa, NULL);
It’s probably worth checking whether GDB is already running before you do this. On Linux you can check this by trying to ptrace yourself: if it succeeds then a debugger isn’t attached.
static int is_debugger_running(void)
{
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid == 0) {
int ppid = getppid();
if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) {
waitpid(ppid, NULL, 0);
ptrace(PTRACE_CONT, NULL, NULL);
ptrace(PTRACE_DETACH, getppid(), NULL, NULL);
exit(0);
}
else
exit(1);
}
else {
int status;
waitpid(pid, &status, 0);
return WEXITSTATUS(status);
}
}
July 7th, 2012
Title says it all: some red flowers in a field last weekend:
![red_flowers_scale](https://www.doof.me.uk/wp-content/uploads/2012/07/red_flowers_scale-450x300.jpeg)
I don’t know what sort they are :-(. Also a big stone in a place appropriately called Ibstone:
![stone_scale](https://www.doof.me.uk/wp-content/uploads/2012/07/stone_scale-450x300.jpeg)
Wikipedia thinks the stone is marking the Bucks/Oxfordshire border, which is a bit mundane.
Also I’ve decided that driving is among the most stressful and miserable experiences known to mankind. I have no idea how people can do this all day and actually enjoy it…
UPDATE: a reader informs me that the flowers are poppies.