mailing list of musl libc
 help / color / mirror / code / Atom feed
* musl-llvm and crtbegin/crtend
@ 2014-04-22 21:53 writeonce
  2014-04-22 22:38 ` Rich Felker
  0 siblings, 1 reply; 5+ messages in thread
From: writeonce @ 2014-04-22 21:53 UTC (permalink / raw)
  To: musl

Greetings,

First issue, and probably an easy fix, is the link to crtbegin.S and 
crtend.S on the musl wiki page entitled BuildingLLVM.  The current links 
are broken, and should (probably) point to 
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/csu/ (the actual files are 
under arch/{$ARCH}

More importantly, though: from very recent communication on the clang 
developer list, it is my understanding that the NetBSD crtbegin/crtend 
are the _de facto_ standard for self-hosting clang toolchains.  If that 
is the case, does anyone know of a special license exception pertaining 
to these files?  If I read the license correctly, then every binary 
containing the resulting crtbegin.o and crtend.o would have to include a 
copy of the license with its documentation.  If there is such exception, 
then I'd suggest that the wiki page includes a link to it.

Kind regards,
zg



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

* Re: musl-llvm and crtbegin/crtend
  2014-04-22 21:53 musl-llvm and crtbegin/crtend writeonce
@ 2014-04-22 22:38 ` Rich Felker
  2014-04-23  8:47   ` writeonce
  0 siblings, 1 reply; 5+ messages in thread
From: Rich Felker @ 2014-04-22 22:38 UTC (permalink / raw)
  To: musl

On Tue, Apr 22, 2014 at 05:53:14PM -0400, writeonce@midipix.org wrote:
> Greetings,
> 
> First issue, and probably an easy fix, is the link to crtbegin.S and
> crtend.S on the musl wiki page entitled BuildingLLVM.  The current
> links are broken, and should (probably) point to
> http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/csu/ (the actual files
> are under arch/{$ARCH}
> 
> More importantly, though: from very recent communication on the
> clang developer list, it is my understanding that the NetBSD
> crtbegin/crtend are the _de facto_ standard for self-hosting clang
> toolchains.  If that is the case, does anyone know of a special
> license exception pertaining to these files?  If I read the license
> correctly, then every binary containing the resulting crtbegin.o and
> crtend.o would have to include a copy of the license with its
> documentation.  If there is such exception, then I'd suggest that
> the wiki page includes a link to it.

I'm not aware of this, but you might want to check and see if this
junk is even needed. My understanding is that these files do nothing
useful whatsoever unless you're using the old _init/_fini based
ctor/dtor system. GCC at least has switched to generating __init_array
and __fini_array which are much saner and I would guess clang has too.

Note that these files aren't needed at all for pure C code anyway,
only for C++, GNU C, or other langs with static ctors/dtors.

Rich


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

* Re: musl-llvm and crtbegin/crtend
  2014-04-22 22:38 ` Rich Felker
@ 2014-04-23  8:47   ` writeonce
  2014-04-23 14:47     ` Rich Felker
  0 siblings, 1 reply; 5+ messages in thread
From: writeonce @ 2014-04-23  8:47 UTC (permalink / raw)
  To: musl

On 04/22/2014 06:38 PM, Rich Felker wrote:
> On Tue, Apr 22, 2014 at 05:53:14PM -0400, writeonce@midipix.org wrote:
>> Greetings,
>>
>> First issue, and probably an easy fix, is the link to crtbegin.S and
>> crtend.S on the musl wiki page entitled BuildingLLVM.  The current
>> links are broken, and should (probably) point to
>> http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/csu/ (the actual files
>> are under arch/{$ARCH}
>>
>> More importantly, though: from very recent communication on the
>> clang developer list, it is my understanding that the NetBSD
>> crtbegin/crtend are the _de facto_ standard for self-hosting clang
>> toolchains.  If that is the case, does anyone know of a special
>> license exception pertaining to these files?  If I read the license
>> correctly, then every binary containing the resulting crtbegin.o and
>> crtend.o would have to include a copy of the license with its
>> documentation.  If there is such exception, then I'd suggest that
>> the wiki page includes a link to it.
> I'm not aware of this, but you might want to check and see if this
> junk is even needed. My understanding is that these files do nothing
> useful whatsoever unless you're using the old _init/_fini based
> ctor/dtor system. GCC at least has switched to generating __init_array
> and __fini_array which are much saner and I would guess clang has too.
>
> Note that these files aren't needed at all for pure C code anyway,
> only for C++, GNU C, or other langs with static ctors/dtors.
>
> Rich
>
>
Thanks, Rich.  From the sources of gcc (4.6 -- 4.8) and llvm/clang (3.4 
-- trunk) it appears that gcc introduced __init_array in version 4.7;  
when used, __do_global_ctors_aux is absent, however the implementation 
of __do_global_dtors_aux is still there (in crtbegin.o).

When clang invokes the linker, it asks for crtbegin.o and crtend.o to be 
included regardless of the executable type (c/c++), which might be worth 
a patch (clang/lib/Driver/Tools.cpp).  On the other hand, it does 
support __init_array (by default, I believe, and also through 
-fuse-init-array), and there are also relevant bits in the code for 
llvm's native linker (lld).

Given that clang also supports the old ctor/dtor system (through 
-fno-use-init-array), the status of crtbegin/crtend seems to be still 
relevant.

zg


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

* Re: musl-llvm and crtbegin/crtend
  2014-04-23  8:47   ` writeonce
@ 2014-04-23 14:47     ` Rich Felker
  2014-04-23 15:46       ` writeonce
  0 siblings, 1 reply; 5+ messages in thread
From: Rich Felker @ 2014-04-23 14:47 UTC (permalink / raw)
  To: musl

On Wed, Apr 23, 2014 at 04:47:55AM -0400, writeonce@midipix.org wrote:
> Thanks, Rich.  From the sources of gcc (4.6 -- 4.8) and llvm/clang
> (3.4 -- trunk) it appears that gcc introduced __init_array in
> version 4.7;  when used, __do_global_ctors_aux is absent, however
> the implementation of __do_global_dtors_aux is still there (in
> crtbegin.o).
> 
> When clang invokes the linker, it asks for crtbegin.o and crtend.o
> to be included regardless of the executable type (c/c++), which
> might be worth a patch (clang/lib/Driver/Tools.cpp).  On the other
> hand, it does support __init_array (by default, I believe, and also
> through -fuse-init-array), and there are also relevant bits in the
> code for llvm's native linker (lld).
> 
> Given that clang also supports the old ctor/dtor system (through
> -fno-use-init-array), the status of crtbegin/crtend seems to be
> still relevant.

My point was just that if you're using exclusively new .o files built
with init-array, I think it's possible to compile without crtbegin.o
and crtend.o (or equivalently, with empty .o files dropped in their
place).

Rich


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

* Re: musl-llvm and crtbegin/crtend
  2014-04-23 14:47     ` Rich Felker
@ 2014-04-23 15:46       ` writeonce
  0 siblings, 0 replies; 5+ messages in thread
From: writeonce @ 2014-04-23 15:46 UTC (permalink / raw)
  To: musl

On 04/23/2014 10:47 AM, Rich Felker wrote:
> On Wed, Apr 23, 2014 at 04:47:55AM -0400, writeonce@midipix.org wrote:
>> Thanks, Rich.  From the sources of gcc (4.6 -- 4.8) and llvm/clang
>> (3.4 -- trunk) it appears that gcc introduced __init_array in
>> version 4.7;  when used, __do_global_ctors_aux is absent, however
>> the implementation of __do_global_dtors_aux is still there (in
>> crtbegin.o).
>>
>> When clang invokes the linker, it asks for crtbegin.o and crtend.o
>> to be included regardless of the executable type (c/c++), which
>> might be worth a patch (clang/lib/Driver/Tools.cpp).  On the other
>> hand, it does support __init_array (by default, I believe, and also
>> through -fuse-init-array), and there are also relevant bits in the
>> code for llvm's native linker (lld).
>>
>> Given that clang also supports the old ctor/dtor system (through
>> -fno-use-init-array), the status of crtbegin/crtend seems to be
>> still relevant.
> My point was just that if you're using exclusively new .o files built
> with init-array, I think it's possible to compile without crtbegin.o
> and crtend.o (or equivalently, with empty .o files dropped in their
> place).
>
> Rich
>
>
Thanks for clarifying this, I'll test this with both systems (gcc & 
llvm) and get back to the list.
zg



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

end of thread, other threads:[~2014-04-23 15:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-22 21:53 musl-llvm and crtbegin/crtend writeonce
2014-04-22 22:38 ` Rich Felker
2014-04-23  8:47   ` writeonce
2014-04-23 14:47     ` Rich Felker
2014-04-23 15:46       ` writeonce

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).