I typed too fast *martin :)

On Fri, Aug 18, 2017 at 8:04 PM, Martell Malone <[email protected]> wrote:
> Marin, please review :)
>
> commit 726ed8e9b9eea9a2c62c46108da9e014b85dca45
> Author: Martell Malone <[email protected]>
> Date:   Fri Aug 18 19:59:20 2017 +0100
>
>     crt: Handle .ctors and .dtors within mingw-w64
>
>     When building with clang we currently assume you will be
>     linking with llvm's lld or a bleeding edge binutils.
>     In future this will become the default method once
>     binutils support has settled and bumped a few versions.
>
> diff --git a/mingw-w64-crt/crt/crtdll.c b/mingw-w64-crt/crt/crtdll.c
> index 07a18408..85035d49 100644
> --- a/mingw-w64-crt/crt/crtdll.c
> +++ b/mingw-w64-crt/crt/crtdll.c
> @@ -40,6 +40,13 @@ extern _CRTALLOC(".CRT$XIZ") _PIFV __xi_z[];
>  extern _CRTALLOC(".CRT$XCA") _PVFV __xc_a[];
>  extern _CRTALLOC(".CRT$XCZ") _PVFV __xc_z[];
>
> +#ifdef __clang__
> +__attribute__ (( __section__ (".ctors"), __used__ ,
> aligned(sizeof(void *)))) const void * __CTOR_LIST__ = (void *) -1;
> +__attribute__ (( __section__ (".dtors"), __used__ ,
> aligned(sizeof(void *)))) const void * __DTOR_LIST__ = (void *) -1;
> +__attribute__ (( __section__ (".ctors$zzz"), __used__ ,
> aligned(sizeof(void *)))) const void * __CTOR_END__ = (void *) 0;
> +__attribute__ (( __section__ (".dtors$zzz"), __used__ ,
> aligned(sizeof(void *)))) const void * __DTOR_END__ = (void *) 0;
> +#endif
> +
>  /* TLS initialization hook.  */
>  extern const PIMAGE_TLS_CALLBACK __dyn_tls_init_callback;
>
> diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
> index ae37e0fe..e3a84784 100644
> --- a/mingw-w64-crt/crt/crtexe.c
> +++ b/mingw-w64-crt/crt/crtexe.c
> @@ -60,6 +60,13 @@ extern _CRTALLOC(".CRT$XIZ") _PIFV __xi_z[];
>  extern _CRTALLOC(".CRT$XCA") _PVFV __xc_a[];
>  extern _CRTALLOC(".CRT$XCZ") _PVFV __xc_z[];
>
> +#ifdef __clang__
> +__attribute__ (( __section__ (".ctors"), __used__ ,
> aligned(sizeof(void *)))) const void * __CTOR_LIST__ = (void *) -1;
> +__attribute__ (( __section__ (".dtors"), __used__ ,
> aligned(sizeof(void *)))) const void * __DTOR_LIST__ = (void *) -1;
> +__attribute__ (( __section__ (".ctors$zzz"), __used__ ,
> aligned(sizeof(void *)))) const void * __CTOR_END__ = (void *) 0;
> +__attribute__ (( __section__ (".dtors$zzz"), __used__ ,
> aligned(sizeof(void *)))) const void * __DTOR_END__ = (void *) 0;
> +#endif
> +
>  /* TLS initialization hook.  */
>  extern const PIMAGE_TLS_CALLBACK __dyn_tls_init_callback;
>
> diff --git a/mingw-w64-crt/crt/gccmain.c b/mingw-w64-crt/crt/gccmain.c
> index fc0e3500..bf035d77 100644
> --- a/mingw-w64-crt/crt/gccmain.c
> +++ b/mingw-w64-crt/crt/gccmain.c
> @@ -16,6 +16,31 @@ void __do_global_dtors (void);
>  void __do_global_ctors (void);
>  void __main (void);
>
> +#ifdef __clang__
> +extern func_ptr __CTOR_END__[];
> +extern func_ptr __DTOR_END__[];
> +
> +void __do_global_dtors (void)
> +{
> +  static func_ptr *p = __DTOR_LIST__ + 1;
> +  while(p < __DTOR_END__) {
> +    if (*p) (*(p)) ();
> +      p++;
> +  }
> +}
> +
> +void __do_global_ctors (void)
> +{
> +  static func_ptr *p = __CTOR_END__ - 1;
> +  while(p > __CTOR_LIST__) {
> +    if (*p) (*(p)) ();
> +      p--;
> +  }
> +  atexit (__do_global_dtors);
> +}
> +
> +#else
> +
>  void
>  __do_global_dtors (void)
>  {
> @@ -47,6 +72,8 @@ __do_global_ctors (void)
>    atexit (__do_global_dtors);
>  }
>
> +#endif
> +
>  static int initialized = 0;
>
>  void
>
> On Fri, Aug 18, 2017 at 7:52 PM, Martell Malone <[email protected]> 
> wrote:
>> In that case I will be back with a patch shortly for you to review.
>> It might look ugly because of a large __clang__ ifdef block but should work.
>>
>> On Fri, Aug 18, 2017 at 7:50 PM, Martin Storsjö <[email protected]> wrote:
>>>
>>> On Fri, 18 Aug 2017, Martell Malone wrote:
>>>
>>>> David, I also want to remove KEEP (*(.ctors)); which seems to cause a bug
>>>> when linking in conjunction with KEEP (*(SORT_BY_NAME(.ctors.*))) and our
>>>> new mingw-w64 markers. I have details in this email on binutils ml.
>>>> https://sourceware.org/ml/binutils/2017-08/msg00078.html
>>>> I have to create a minified test case for this to get approval to remove
>>>> that line.
>>>>
>>>> Martin, I am fine with adding a __clang__ guard around the implementation
>>>> if we want to land it now rather then keeping it out of tree?
>>>> Kai any objections?
>>>
>>>
>>> That'd be great yeah. Once we can build at least simple C apps without any
>>> out-of-tree patches, it'll be a much lower barrier for entry for a lot of
>>> more people.
>>>
>>> IIRC Kai at least ok'd the patch once last year.
>>>
>>>
>>> // Martin
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> Mingw-w64-public mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>>
>>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to