Inline static data causes a section type conflict

Benedek Thaler thalerbenedek@gmail.com
Wed Feb 17 16:39:00 GMT 2016


On Sun, Jan 31, 2016 at 9:06 PM, Benedek Thaler <thalerbenedek@gmail.com> wrote:
> Hi,
>
> I want to put some user defined data into a custom section to be read
> by the application and an offline analyser at the same time. Assuming
> the following sample:
>
> const int* get_data()
> {
>   __attribute__((section(".custom")))
>   static const int data = 123;
>
>   return & data;
> }
>
> inline const int* inline_get_data()
> {
>   __attribute__((section(".custom")))
>   static const int inline_data = 123;
>
>   return & inline_data;
> }
>
> int main()
> {
>   (void) get_data();
>   (void) inline_get_data();
>   return 0;
> }
>
> The value of data and inline_data will appear in the section .custom.
> Clang compiles this example and produces the correct result, just as
> MSVC does, when the __attributes__ are replaced by corresponding
> pragmas.
>
> Unfortunately, GCC 5.2 gives the following error:
>
> error: inline_data causes a section type conflict with data
>
> The problem boils down to the fact that the two variables have
> different linkage (data is in a section flagged with `a`, the section
> of inline_data is flagged with `aG`). GCC 4.9 also fails the same way
> if the second function is not marked as inline but is a template (GCC
> 5.2 compiles that).
>
> GCC 5.2 also compiles fine if one section name is temporarily changed
> and manually fixed in the generated assembly.
>
> Why is this happening? Is it expected? Is there any known workaround
> for this issue? I have no control over the function signature, the
> *data variables are produced by a macro provided by me, and they can
> appear anywhere.
>
> Thanks,
> Benedek
>
> (On SO: http://stackoverflow.com/questions/35091862/inline-data-causes-a-section-type-conflict)

Is there any expert on this matter missed this message I can directly contact?

Thanks,
Benedek



More information about the Gcc-help mailing list