init_priority attribute and libstdc++

Václav Zeman vhaisman@gmail.com
Mon Aug 18 19:05:00 GMT 2014


Ooops. Wrong list. Sorry.

On 18.8.2014 21:00, Václav Zeman wrote:
> On 18.8.2014 13:25, Jonathan Wakely wrote:
>> I'm on my phone so can't send plain text mail to the list, or check the
>> code, but I'm pretty sure the answer is 101
>>
>> Anything lower than that is reserved for the implementation so libstdc++
>> would use that. Nothing in string or vector needs dynamic init anyway IIRC
> 
> Some paths of my library's initialization might try to print warnings or
> errors. I have hit a SIGSEGV with the following test case, which uses
> std::cerr:
> 
> ~~~~
> #include <iostream>
> 
> struct S1
> {
>     S1() { std::cerr << __FUNCTION__ << "\n"; }
> } static s1 __attribute__ ((__init_priority__ (65535/2)));
> 
> 
> int
> main ()
> {
>   return 0;
> }
> ~~~~
> 
> The stack trace is
> 
> ~~~~
> #0  0x00007ffff7b6a559 in std::ostream::sentry::sentry(std::ostream&) ()
> from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
> #1  0x00007ffff7b6ac19 in std::basic_ostream<char,
> std::char_traits<char> >& std::__ostream_insert<char,
> std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>
>> &, char const*, long)
>     () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
> #2  0x00007ffff7b6b077 in std::basic_ostream<char,
> std::char_traits<char> >& std::operator<< <std::char_traits<char>
>> (std::basic_ostream<char, std::char_traits<char> >&, char const*) ()
>    from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
> #3  0x000000000040081d in S1::S1 (this=0x601172 <s1>) at test.cxx:5
> #4  0x00000000004007d6 in __static_initialization_and_destruction_0
> (__initialize_p=1, __priority=32767) at test.cxx:6
> #5  0x00000000004007eb in _GLOBAL__sub_I.32767_main(void) () at test.cxx:13
> #6  0x000000000040087d in __libc_csu_init ()
> #7  0x00007ffff7731e55 in __libc_start_main (main=0x40077d <main()>,
> argc=1, argv=0x7fffffffe2c8, init=0x400830 <__libc_csu_init>,
> fini=<optimized out>, rtld_fini=<optimized out>,
>     stack_end=0x7fffffffe2b8) at libc-start.c:246
> #8  0x00000000004006b9 in _start ()
> ~~~~
> 
> Is this expected?
> 
>>
>> On Aug 17, 2014 8:56 PM, "Václav Zeman" <vhaisman@gmail.com
>> <mailto:vhaisman@gmail.com>> wrote:
>>
>>     Hi.
>>
>>     I want to use the init_priority(prio) attribute
>>     (https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html#C_002b_002b-Attributes)
>>     to initialize stuff in my library early so that users of the library can
>>     use the library during their own static objects construction. However,
>>     my library uses standard C++ library facilities like std::string,
>>     std::vector<>, etc. The question is:
>>
>>     What is the lowest priority for init_priority attribute that I can use
>>     to still have libstdc++ initialize itself before my library is
>>     initialized?
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 230 bytes
Desc: OpenPGP digital signature
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20140818/4fca1af3/attachment.sig>


More information about the Libstdc++ mailing list