Commit ac376b15 by Ian Lance Taylor

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
parent a9ca0a9d
b37a9e66ea584885043240f8f6f1d1c0284eadec 6c1f159cdcb56ebff617f6bbc6c97943a1a8a34d
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -166,7 +166,13 @@ static ucontext_t* ...@@ -166,7 +166,13 @@ static ucontext_t*
ucontext_arg(void** go_ucontext) ucontext_arg(void** go_ucontext)
{ {
uintptr_t p = (uintptr_t)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; return (ucontext_t*)p;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment