Use -ftls-model=local-exec for RTEMS by default?
Iain Sandoe
idsandoe@googlemail.com
Fri Jul 22 11:35:41 GMT 2022
> On 22 Jul 2022, at 12:19, Sebastian Huber <sebastian.huber@embedded-brains.de> wrote:
>
> On 21.07.22 10:03, Iain Sandoe wrote:
>>> This sounds like an interesting approach in the long run, however, I need a short term solution which I can back port to GCC 10, 11, and 12. I guess I will add a
>>>
>>> MULTILIB_EXTRA_OPTS = ftls-model=local-exec
>>>
>>> to all RTEMS multilib configurations.
>>>
>>> In general I think the target hooks are hard to customize for operating systems.
>> (IMO) It can be not too tricky - Darwin customises several - you just have to override the default definition in your target-specific header and provide the replacement e.g ( override in config/darwin.h, replacement in config/darwin.cc):
>> #undef TARGET_ENCODE_SECTION_INFO
>> #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
>
> The problem is that in this case you need a target-specific copy and paste solution. For example lets suppose you want to use
>
> #define CC1_SPEC "%{!ftls-model=*:-ftls-model=local-exec}"
>
> for RTEMS (in gcc/config/rtems.h), then you have a problem on for example microblaze (gcc/config/microblaze/microblaze.h):
>
> #ifndef CC1_SPEC
> #define CC1_SPEC " \
> %{G*} \
> %(subtarget_cc1_spec) \
> %{mxl-multiply-high:-mcpu=v6.00.a} \
> "
> #endif
>
> or nios2 (gcc/config/nios2/nios2.h):
>
> #define CC1_SPEC "%{G*}"
>
> For each target you would have to check if you have to provide some extra times for CC1_SPEC through copy and paste.
Yes, there is a curious ‘inversion’ process where, to the OS, the architectures are sub-targets, but to the GCC implementation the OSs are sub-targets of the arch, it can be possible to work around this by declaring SUBTARGET_SPEC_XXXX and then appending that to the various users. However, it could be that even that will not work easily in this case.
Iain
More information about the Gcc
mailing list