The crash happens because vsnprintf is called twice on the same va_list. That's not legal. It happens to work on i386, but it will crash on amd64. The patch should instead do: va_list va; va_start(ap, fmt); va_copy(va, ap); vsnprintf(p2->p_comm, sizeof(p2->p_comm), fmt, va); vsnprintf(td->td_name, sizeof(td->td_name), fmt, ap); Ryan Stone