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