Inline static data causes a section type conflict

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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)



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux