diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-09-09 16:39:44 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2016-09-09 16:39:44 +0000 |
commit | ac376b15df246bc673b0e14074a4f19d39762480 (patch) | |
tree | b38452d48d41a4ced2a23d9cc03ac7fd867d297c /libgo/runtime | |
parent | a9ca0a9d025cdd0e046b8e0b89fd2f2e3721e203 (diff) | |
download | gcc-ac376b15df246bc673b0e14074a4f19d39762480.zip gcc-ac376b15df246bc673b0e14074a4f19d39762480.tar.gz gcc-ac376b15df246bc673b0e14074a4f19d39762480.tar.bz2 |
runtime: use alignof to check alignment of ucontext_t
Use alignof rather than assuming a 16 byte alignment.
Reviewed-on: https://go-review.googlesource.com/28913
From-SVN: r240047
Diffstat (limited to 'libgo/runtime')
-rw-r--r-- | libgo/runtime/proc.c | 8 |
1 files changed, 7 insertions, 1 deletions
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; } |