mailing list of musl libc
 help / color / mirror / code / Atom feed
* ub fix in magenta
@ 2016-11-05 20:25 Szabolcs Nagy
  2016-11-05 21:14 ` Rich Felker
  0 siblings, 1 reply; 2+ messages in thread
From: Szabolcs Nagy @ 2016-11-05 20:25 UTC (permalink / raw)
  To: George Kulakowski; +Cc: musl

why do you think union based type punning is ub?
are you compiling musl as c++ code?

commit 224516687417d5e9dcbb0ba300c3e34bb47bb12b
Author: George Kulakowski <kulakowski@google.com>
Date:   2016-10-19 17:11:59 -0700

    [musl][malloc] Remove undefined behavior in malloc
    
    This bit of code computes an approximation to log2(x) by extracting the
    exponent from a float. Doing it via a union this way is bad, so memcpy
    instead.

https://fuchsia.googlesource.com/magenta/+/224516687417d5e9dcbb0ba300c3e34bb47bb12b


this makes implementation internals publicly visible, introduce
paddings and whenever you need to add new fields you will have
to break the abi again.

note that the initializers are not valid c and thus non-conforming.

commit c751172f029e96a3208b37da91fd9e020a792834
Author: George Kulakowski <kulakowski@google.com>
Date:   2016-10-13 21:31:24 -0700

    [musl] Use a single proper struct definition for pthread types
    
    There is one slight change in layout here made for simplicity's
    sake. Upstream's pthread_barrier_t overlays the _b_count and _b_inst
    fields in the 32 bit case. Since this is so rarely used (in Fuchsia
    outside of libc I pretty much only see tsan, gdb etc. test cases),
    just do the simple thing.

https://fuchsia.googlesource.com/magenta/+/c751172f029e96a3208b37da91fd9e020a792834

(i don't plan to review all changes i just wanted to see if there
was anything useful in the magenta repo for musl, havent found much
yet, but some of the changes could have been discussed upstream)


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: ub fix in magenta
  2016-11-05 20:25 ub fix in magenta Szabolcs Nagy
@ 2016-11-05 21:14 ` Rich Felker
  0 siblings, 0 replies; 2+ messages in thread
From: Rich Felker @ 2016-11-05 21:14 UTC (permalink / raw)
  To: George Kulakowski, musl

On Sat, Nov 05, 2016 at 09:25:59PM +0100, Szabolcs Nagy wrote:
> why do you think union based type punning is ub?
> are you compiling musl as c++ code?
> 
> commit 224516687417d5e9dcbb0ba300c3e34bb47bb12b
> Author: George Kulakowski <kulakowski@google.com>
> Date:   2016-10-19 17:11:59 -0700
> 
>     [musl][malloc] Remove undefined behavior in malloc
>     
>     This bit of code computes an approximation to log2(x) by extracting the
>     exponent from a float. Doing it via a union this way is bad, so memcpy
>     instead.
> 
> https://fuchsia.googlesource.com/magenta/+/224516687417d5e9dcbb0ba300c3e34bb47bb12b

It's definitely not UB (this usage is explicitly permitted by C), and
the memcpy approach is much slower (requires store/call/load) because
-ffreestanding implies -fno-builtin. I'd like to try overriding that
with -fbuiltin-memcpy or a musl-internal header that defines memcpy to
__builtin_memcpy, etc., for all files but src/string/*, but there are
various subtle issues to be concerned about.

> this makes implementation internals publicly visible, introduce
> paddings and whenever you need to add new fields you will have
> to break the abi again.
> 
> note that the initializers are not valid c and thus non-conforming.
> 
> commit c751172f029e96a3208b37da91fd9e020a792834
> Author: George Kulakowski <kulakowski@google.com>
> Date:   2016-10-13 21:31:24 -0700
> 
>     [musl] Use a single proper struct definition for pthread types
>     
>     There is one slight change in layout here made for simplicity's
>     sake. Upstream's pthread_barrier_t overlays the _b_count and _b_inst
>     fields in the 32 bit case. Since this is so rarely used (in Fuchsia
>     outside of libc I pretty much only see tsan, gdb etc. test cases),
>     just do the simple thing.
> 
> https://fuchsia.googlesource.com/magenta/+/c751172f029e96a3208b37da91fd9e020a792834

Yes, this change looks highly problematic to ABI stability.

> (i don't plan to review all changes i just wanted to see if there
> was anything useful in the magenta repo for musl, havent found much
> yet, but some of the changes could have been discussed upstream)

Thanks.

Rich


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-11-05 21:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-05 20:25 ub fix in magenta Szabolcs Nagy
2016-11-05 21:14 ` Rich Felker

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).