Patchwork RTEMS: Use __cxa_atexit by default for RTEMS

login
register
mail settings
Submitter Sebastian Huber
Date July 8, 2013, 1:29 p.m.
Message ID <1373290149-14808-1-git-send-email-sebastian.huber@embedded-brains.de>
Download mbox | patch
Permalink /patch/257558/
State New
Headers show

Comments

Sebastian Huber - July 8, 2013, 1:29 p.m.
The __cxa_atexit support is a reqirement for destructor registration of
thread-local objects.

For *-*-elf it is already enabled by default.  See comment line 810 in
"gcc/config.gcc".

Define TARGET_LIBGCC_SDATA_SECTION on PowerPC for RTEMS to ".sdata" to
place the __dso_handle.  The __dso_handle is referenced by application
code.  In case this code uses the small data section, the __dso_handle
must be there.

This patch should be committed to GCC 4.8 and 4.9.

Test results:

http://gcc.gnu.org/ml/gcc-testresults/2013-07/msg00671.html

gcc/ChangeLog
2013-07-08  Sebastian Huber  <sebastian.huber@embedded-brains.de>

	* config.gcc (*-*-rtems*): Use __cxa_atexit by default.
	* config/rs6000/rtems.h (TARGET_LIBGCC_SDATA_SECTION): Define.
---
 gcc/config.gcc            |    1 +
 gcc/config/rs6000/rtems.h |    3 +++
 2 files changed, 4 insertions(+), 0 deletions(-)
Sebastian Huber - July 31, 2013, 7:02 a.m.
Ping.

On 2013-07-08 15:29, Sebastian Huber wrote:
> The __cxa_atexit support is a reqirement for destructor registration of
> thread-local objects.
>
> For *-*-elf it is already enabled by default.  See comment line 810 in
> "gcc/config.gcc".
>
> Define TARGET_LIBGCC_SDATA_SECTION on PowerPC for RTEMS to ".sdata" to
> place the __dso_handle.  The __dso_handle is referenced by application
> code.  In case this code uses the small data section, the __dso_handle
> must be there.
>
> This patch should be committed to GCC 4.8 and 4.9.
>
> Test results:
>
> http://gcc.gnu.org/ml/gcc-testresults/2013-07/msg00671.html
>
> gcc/ChangeLog
> 2013-07-08  Sebastian Huber  <sebastian.huber@embedded-brains.de>
>
> 	* config.gcc (*-*-rtems*): Use __cxa_atexit by default.
> 	* config/rs6000/rtems.h (TARGET_LIBGCC_SDATA_SECTION): Define.
> ---
>   gcc/config.gcc            |    1 +
>   gcc/config/rs6000/rtems.h |    3 +++
>   2 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index a927964..1648dfe 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -734,6 +734,7 @@ case ${target} in
>       yes) thread_file='rtems' ;;
>     esac
>     extra_options="${extra_options} rtems.opt"
> +  default_use_cxa_atexit=yes
>     use_gcc_stdint=wrap
>     ;;
>   *-*-uclinux*)
> diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h
> index b910b5e..fb22be1 100644
> --- a/gcc/config/rs6000/rtems.h
> +++ b/gcc/config/rs6000/rtems.h
> @@ -34,6 +34,9 @@
>       }                                     \
>     while (0)
>
> +#undef TARGET_LIBGCC_SDATA_SECTION
> +#define TARGET_LIBGCC_SDATA_SECTION ".sdata"
> +
>   #undef CPP_OS_DEFAULT_SPEC
>   #define CPP_OS_DEFAULT_SPEC "%(cpp_os_rtems)"
>
>
Joel Sherrill - July 31, 2013, 12:59 p.m.
This is now committed.

Please double check me, Sebastian.

--joel

On 7/31/2013 2:02 AM, Sebastian Huber wrote:
> Ping.
>
> On 2013-07-08 15:29, Sebastian Huber wrote:
>> The __cxa_atexit support is a reqirement for destructor registration of
>> thread-local objects.
>>
>> For *-*-elf it is already enabled by default.  See comment line 810 in
>> "gcc/config.gcc".
>>
>> Define TARGET_LIBGCC_SDATA_SECTION on PowerPC for RTEMS to ".sdata" to
>> place the __dso_handle.  The __dso_handle is referenced by application
>> code.  In case this code uses the small data section, the __dso_handle
>> must be there.
>>
>> This patch should be committed to GCC 4.8 and 4.9.
>>
>> Test results:
>>
>> http://gcc.gnu.org/ml/gcc-testresults/2013-07/msg00671.html
>>
>> gcc/ChangeLog
>> 2013-07-08  Sebastian Huber  <sebastian.huber@embedded-brains.de>
>>
>> 	* config.gcc (*-*-rtems*): Use __cxa_atexit by default.
>> 	* config/rs6000/rtems.h (TARGET_LIBGCC_SDATA_SECTION): Define.
>> ---
>>    gcc/config.gcc            |    1 +
>>    gcc/config/rs6000/rtems.h |    3 +++
>>    2 files changed, 4 insertions(+), 0 deletions(-)
>>
>> diff --git a/gcc/config.gcc b/gcc/config.gcc
>> index a927964..1648dfe 100644
>> --- a/gcc/config.gcc
>> +++ b/gcc/config.gcc
>> @@ -734,6 +734,7 @@ case ${target} in
>>        yes) thread_file='rtems' ;;
>>      esac
>>      extra_options="${extra_options} rtems.opt"
>> +  default_use_cxa_atexit=yes
>>      use_gcc_stdint=wrap
>>      ;;
>>    *-*-uclinux*)
>> diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h
>> index b910b5e..fb22be1 100644
>> --- a/gcc/config/rs6000/rtems.h
>> +++ b/gcc/config/rs6000/rtems.h
>> @@ -34,6 +34,9 @@
>>        }                                     \
>>      while (0)
>>
>> +#undef TARGET_LIBGCC_SDATA_SECTION
>> +#define TARGET_LIBGCC_SDATA_SECTION ".sdata"
>> +
>>    #undef CPP_OS_DEFAULT_SPEC
>>    #define CPP_OS_DEFAULT_SPEC "%(cpp_os_rtems)"
>>
>>
>

Patch

diff --git a/gcc/config.gcc b/gcc/config.gcc
index a927964..1648dfe 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -734,6 +734,7 @@  case ${target} in
     yes) thread_file='rtems' ;;
   esac
   extra_options="${extra_options} rtems.opt"
+  default_use_cxa_atexit=yes
   use_gcc_stdint=wrap
   ;;
 *-*-uclinux*)
diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h
index b910b5e..fb22be1 100644
--- a/gcc/config/rs6000/rtems.h
+++ b/gcc/config/rs6000/rtems.h
@@ -34,6 +34,9 @@ 
     }                                     \
   while (0)
 
+#undef TARGET_LIBGCC_SDATA_SECTION
+#define TARGET_LIBGCC_SDATA_SECTION ".sdata"
+
 #undef CPP_OS_DEFAULT_SPEC
 #define CPP_OS_DEFAULT_SPEC "%(cpp_os_rtems)"