diff options
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | libgo/runtime/proc.c | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 99e32ce..261a79a 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -b37a9e66ea584885043240f8f6f1d1c0284eadec +6c1f159cdcb56ebff617f6bbc6c97943a1a8a34d The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c index 7e2b172..6ac8857 100644 --- a/libgo/runtime/proc.c +++ b/libgo/runtime/proc.c @@ -166,7 +166,13 @@ static ucontext_t* ucontext_arg(void** go_ucontext) { uintptr_t p = (uintptr_t)go_ucontext; - p = (p + 15) &~ (uintptr_t)0xf; + size_t align = __alignof__(ucontext_t); + if(align > 16) { + // We only ensured space for up to a 16 byte alignment + // in libgo/go/runtime/runtime2.go. + runtime_throw("required alignment of ucontext_t too large"); + } + p = (p + align - 1) &~ (uintptr_t)(align - 1); return (ucontext_t*)p; } |