Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22065

What might be the point in putting a variable exactly in the "STACK" section with __attribute__ ((section("STACK"))?

$
0
0

In gcc doc one reason is given for using section. This reason is to map to special hardware. But this seems to be not my case.

So I have given a task to modify a shared library that we use on our project. It is a Linux library. There is variable declarations in the library that puzzeles me. They look like this (roughly):

static int my_var_1 __attribute__((section("STACK"))) = 0;


Update 1:
There are a dozen of variables defined in this way (__attribute__((section("STACK"))))


Update 2:
my_var_1 is not a constant. my_var_1 might be changed in code during initialization:
my_var_1 = atoi(getenv("MY_VAR_1") ? getenv("MY_VAR_1") : "0");

later in the library it is used like this:

inline void do_something() __attribute__((always_inline));
inline void do_something()
{
  if (my_var_1)
    do_something_else();
}


What might be the point in using __attribute__((section("STACK")))? I understand that section tells the compiler to put a variable in the particular section. However what might be the point in putting static int exactly in the "STACK" section?


Update 3
These lines are excerpt from the output from readelf -t my_lib.so
  [23] .got.plt
       PROGBITS         00000000002103f0  00000000000103f0  0
       00000000000003a8 0000000000000008  0                 8
       [0000000000000003]: WRITE, ALLOC
  [24] .data
       PROGBITS         00000000002107a0  00000000000107a0  0
       00000000000000b0 0000000000000000  0                 16
       [0000000000000003]: WRITE, ALLOC
  [25] STACK
       PROGBITS         0000000000210860  0000000000010860  0
       00000000000860e0 0000000000000000  0                 32
       [0000000000000003]: WRITE, ALLOC
  [26] .bss
       NOBITS           0000000000296940  0000000000096940  0
       0000000000000580 0000000000000000  0                 32
       [0000000000000003]: WRITE, ALLOC


Update 4
Managed to get information from the author of the shared library. __attribute__((section("STACK"))) was added since he had not managed to build the library on Solaris. Then he found this workaround. Before the workaround the definition of the my_var_1 was like:
int my_var_1 = 0;

and everything was OK. Then he changed it since my_var_1 was in fact needed only in this translation unit:

static int my_var_1 = 0;

And after that change he did not manage to build the library on Solaris. So he added __attribute__((section("STACK"))) and it helped somehow.



Viewing all articles
Browse latest Browse all 22065

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>