libcoroutine: PowerPC Mac対応

G4 Dualが手に入ったので早速portする。

ucontextの内部構造体にアクセスしてうにゃうにゃな部分がppcだとうまく動かないらしいので、setjmp()による実装にfallbackしといた。
あとgcc拡張の__threadキーワードもppcだとサポートされてないみたいなので、pthread経由で自前でグローバル変数をthread local storageに差し替え。

結構やばげなマクロ:

#ifdef CORO_REQUIRE_GLOBALCB
#ifdef USE_PTHREAD
#include <pthread.h>

static pthread_key_t globalkeyCB;
static pthread_once_t globalkeyonce = PTHREAD_ONCE_INIT;

#define ACQUIRE_GLOBALCB CallbackBlock* globalpCallbackBlock = (CallbackBlock*) pthread_getspecific(globalkeyCB);
#define globalCallbackBlock (*globalpCallbackBlock)
#else
#define ACQUIRE_GLOBALCB ;
static __thread CallbackBlock globalCallbackBlock;
#endif
#endif