RTEMS C++ global constructor for Sparc
Joel Sherrill
joel.sherrill at OARcorp.com
Tue Apr 1 15:44:38 UTC 2014
OK.. replying to self..
I made some changes locally and now have the examples-v2 sample
cxx_throw nearly running. I am down to the spurious exception handler
getting invoked on sis for exception 263 which I don't know what that
is. [1]
Does this run in gdb or exception mean anything to anyone?
(gdb) r
Starting program:
/home/joel/rtems-4.11-work/examples-v2/cxx/cxx_throw/o-optimize/cxx_throw.exe
Hey I'm in base class constructor number 1 for 0x2068384.
Hey I'm in base class constructor number 2 for 0x206837c.
Hey I'm in derived class constructor number 3 for 0x206837c.
*** CONSTRUCTOR/DESTRUCTOR TEST ***
Hey I'm in base class constructor number 4 for 0x20730f0.
Hey I'm in base class constructor number 5 for 0x20730f8.
Hey I'm in base class constructor number 6 for 0x2073100.
Hey I'm in base class constructor number 7 for 0x2073108.
Hey I'm in derived class constructor number 8 for 0x2073108.
Testing a C++ I/O stream
before try block
Breakpoint 1, _Terminate (
the_source=the_source at entry=RTEMS_FATAL_SOURCE_EXCEPTION,
is_internal=is_internal at entry=false, the_error=the_error at entry=34011320)
at ../../../../../../rtems/c/src/../../cpukit/score/src/interr.c:36
36 {
(gdb) bt
#0 _Terminate (the_source=the_source at entry=RTEMS_FATAL_SOURCE_EXCEPTION,
is_internal=is_internal at entry=false, the_error=the_error at entry=34011320)
at ../../../../../../rtems/c/src/../../cpukit/score/src/interr.c:36
#1 0x0203c454 in rtems_fatal (
source=source at entry=RTEMS_FATAL_SOURCE_EXCEPTION,
error=error at entry=34011320)
at ../../../../../../rtems/c/src/../../cpukit/sapi/src/fatal2.c:34
#2 0x02035f48 in bsp_spurious_handler (trap=263, isf=0x20721d8)
at
../../../../../../../../rtems/c/src/lib/libbsp/sparc/erc32/startup/spurious.c:131
#3 0x0205fda4 in dont_fix_pil2 ()
at
../../../../../../../../rtems/c/src/lib/libbsp/sparc/erc32/../../sparc/shared/irq_asm.S:476
#4 0x0205fda4 in dont_fix_pil2 ()
at
../../../../../../../../rtems/c/src/lib/libbsp/sparc/erc32/../../sparc/shared/irq_asm.S:476
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
#0 _Terminate (the_source=the_source at entry=RTEMS_FATAL_SOURCE_EXCEPTION,
is_internal=is_internal at entry=false, the_error=the_error at entry=34011320)
at ../../../../../../rtems/c/src/../../cpukit/score/src/interr.c:36
#1 0x0203c454 in rtems_fatal (
source=source at entry=RTEMS_FATAL_SOURCE_EXCEPTION,
error=error at entry=34011320)
at ../../../../../../rtems/c/src/../../cpukit/sapi/src/fatal2.c:34
#2 0x02035f48 in bsp_spurious_handler (trap=263, isf=0x20721d8)
at
../../../../../../../../rtems/c/src/lib/libbsp/sparc/erc32/startup/spurious.c:131
#3 0x0205fda4 in dont_fix_pil2 ()
at
../../../../../../../../rtems/c/src/lib/libbsp/sparc/erc32/../../sparc/shared/irq_asm.S:476
#4 0x0205fda4 in dont_fix_pil2 ()
at
../../../../../../../../rtems/c/src/lib/libbsp/sparc/erc32/../../sparc/shared/irq_asm.S:476
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
[1] I am not feeling 100% well and am at home today. So don't have
access to everything not inclination to hunt.
On 4/1/2014 10:21 AM, Joel Sherrill wrote:
> I am confused. Did you build RTEMS with --enable-cxx?
>
> Did you make the linkcmds changes discussed?
>
> In RTEMS, the C++ global constructors are called by the first thread
> that executes. Before that, almost anything a constructor is allowed
> to do that is not pure computation or memory initialization would
> not be valid because the OS and tasking are not running.
>
> There is a call in _Thread_Handler to the constructor execution method.
> The name varies by target so it is a macro named INIT. A few lines of code
> later the user init task is invoked.
>
> Let's keep this on rtems-users so others benefit from the discussion.
>
> --joel
> On 3/27/2014 9:00 PM, Thomas (Gmail) wrote:
>> On referencing, I misunderstood that _init() call not C++ constructor
>> function because there is not C++ constructor function in crti.o.
>>
>> Today, after I make object dump file about elf file(cxx_throw.exe), I
>> checked that below objdump information. It included ++ constructor as
>> like below;
>>
>> 02066130 <_init>:
>> 2066130:9d e3 bf a0 save %sp, -96, %sp
>> 2066134:7f fe 6c 60 call 20012b4 <frame_dummy>
>> 2066138:01 00 00 00 nop
>> 206613c:7f ff e8 99 call 20603a0 <__do_global_ctors_aux>
>> 2066140:01 00 00 00 nop
>> 2066144:81 e8 00 00 restore
>> 2066148:81 c3 e0 08 retl
>> 206614c:01 00 00 00 nop
>>
>> I am sorry for my misunderstanding.
>>
>> Best Regards
>>
>>
>> 2014-03-28 10:19 GMT+09:00 Thomas (Gmail) <thomas73.kim at gmail.com
>> <mailto:thomas73.kim at gmail.com>>:
>>
>> Please check that my modification is correct.
>>
>> I modified linkcmds.base according to your comment.
>>
>> (Before)
>> KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
>> KEEP (*(SORT(.ctors.*)))
>> KEEP (*(.ctors))
>> KEEP (*crtbegin.o(.dtors))
>> KEEP (*crtbegin?.o(.dtors))
>> KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
>> KEEP (*(SORT(.dtors.*)))
>> KEEP (*(.dtors))
>>
>> (After)
>> KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
>> KEEP (*(SORT(.ctors.*)))
>> KEEP (*(.ctors*))
>> KEEP (*crtbegin.o(.dtors))
>> KEEP (*crtbegin?.o(.dtors))
>> KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
>> KEEP (*(SORT(.dtors.*)))
>> KEEP (*(.dtors*))
>>
>> Also, I compared map file.
>>
>> (Before)
>> *(.ctors)
>> .ctors 0x0206040c 0x4
>> /opt/rtems-4.11/lib/gcc/sparc-rtems4.11/4.8.2/crtend.o
>> *crtbegin.o(.dtors)
>> .dtors 0x02060410 0x4
>> /opt/rtems-4.11/lib/gcc/sparc-rtems4.11/4.8.2/crtbegin.o
>> *crtbegin?.o(.dtors)
>> *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
>> *(SORT(.dtors.*))
>> *(.dtors)
>>
>> (After)
>> *(.ctors*)
>> .ctors 0x0206040c 0x4
>> /opt/rtems-4.11/lib/gcc/sparc-rtems4.11/4.8.2/crtend.o
>> *crtbegin.o(.dtors)
>> .dtors 0x02060410 0x4
>> /opt/rtems-4.11/lib/gcc/sparc-rtems4.11/4.8.2/crtbegin.o
>> *crtbegin?.o(.dtors)
>> *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
>> *(SORT(.dtors.*))
>> *(.dtors*)
>>
>> Best Regards
>>
>>
>> 2014-03-28 2:00 GMT+09:00 Joel Sherrill
>> <joel.sherrill at oarcorp.com <mailto:joel.sherrill at oarcorp.com>>:
>>
>> I am out of the country and teaching this week. Trying adding an
>> "*" after ctors and before the parentheses. Ditto for dtors
>> so it wild
>> card matches.
>>
>> Look at how .text has a * on it
>> On 3/27/2014 10:25 AM, Thomas (Gmail) wrote:
>>> I am tring to compare linkcmd.base and toolchain's
>>> elf32_sparc.x.
>>> But, I am difficult to modify linkcmd.base for this.
>>>
>>> Please could you send to me the revised linkcmd.base file ?
>>>
>>>
>>>
>>> 2014-03-27 18:18 GMT+09:00 Joel Sherrill
>>> <joel.sherrill at oarcorp.com <mailto:joel.sherrill at oarcorp.com>>:
>>>
>>> libgcc2 is already in the toolset. This almost 100%
>>> certainly is a small
>>> bug in
>>> c/src/lib/libbsp/sparc/shared/startup/linkcmds.base. Look
>>> at how the .ctors are referenced in the files
>>> elf32_sparc.x* installed
>>> as part of the toolset in
>>> $prefix/sparc-rtems4.11/lib/ldscripts. They
>>> have "." and a "*" in the KEEP lines. I don't think we
>>> have that.
>>>
>>> The problem was almost certainly introduced with
>>> function sections
>>> being used and I missed a wildcard on the ctor/dtor lines.
>>>
>>> On 3/27/2014 3:04 AM, Thomas (Gmail) wrote:
>>>> On referencing, I am a beginner regarding this.
>>>>
>>>> As I know from googling information, name of the
>>>> section for constructor is in .ctors section in
>>>> linkcmds.base.
>>>> below reference code is from gcc-4.8.2/libgcc/libgcc2.c
>>>> because __do_global_ctors() function is in libgcc2.c, I
>>>> tried to add libgcc.a in rtems building environment.
>>>> but, I didn't complete.
>>>>
>>>> < libgcc2.c >
>>>> ----------------------------------------------------------------------------------------------------
>>>> /* Run all the global destructors on exit from the
>>>> program. */
>>>> void
>>>> __do_global_ctors (void)
>>>> {
>>>> #ifdef EH_FRAME_SECTION_NAME
>>>> {
>>>> static struct object object;
>>>> __register_frame_info (__EH_FRAME_BEGIN__, &object);
>>>> }
>>>> #endif
>>>> DO_GLOBAL_CTORS_BODY;
>>>> atexit (__do_global_dtors);
>>>> }
>>>> -------------------------------------------------------------------------------------
>>>>
>>>> < gbl-ctors.h>
>>>> -------------------------------------------------------------------------------------
>>>> /* Some systems use a different strategy for finding the ctors.
>>>> For example, svr3. */
>>>> #ifndef DO_GLOBAL_CTORS_BODY
>>>> #define DO_GLOBAL_CTORS_BODY \
>>>> do { \
>>>> unsigned long nptrs = (unsigned long) __CTOR_LIST__[0]; \
>>>> unsigned i; \
>>>> if (nptrs == (unsigned long)-1) \
>>>> for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++); \
>>>> for (i = nptrs; i >= 1; i--) \
>>>> __CTOR_LIST__[i] (); \
>>>> } while (0)
>>>> #endif
>>>> -------------------------------------------------------------------------------------
>>>>
>>>>
>>>> 2014-03-27 16:33 GMT+09:00 Joel Sherrill
>>>> <joel.sherrill at oarcorp.com
>>>> <mailto:joel.sherrill at oarcorp.com>>:
>>>>
>>>>
>>>> On 3/27/2014 2:30 AM, Sebastian Huber wrote:
>>>> > On 2014-03-27 06:28, Thomas (Gmail) wrote:
>>>> >> I am tring to add libgcc.a in linking process
>>>> for calling __do_global_ctors().
>>>> > If you have to do this by hand, then your build
>>>> process is broken. How did you
>>>> > get the RTEMS tool chain? Which RTEMS version do
>>>> you use?
>>>> >
>>>> >> Please could you let me know how to add libgcc.a
>>>> in RTEMS building environment ?
>>>> >>
>>>> >> If this approach is not correct, please let me
>>>> know correct how-to-do for C++
>>>> >> global constructor for Sparc.
>>>> > It should work out of the box.
>>>> >
>>>> Just out of curiosity what is the name of the
>>>> section that the
>>>> constructor is in?
>>>>
>>>> When I turned on function sections, it may now be
>>>> in .initXXX instead of
>>>> just .init.
>>>> This would mean that an asterisk is needed in the
>>>> linkcmds.base for init
>>>> and fini
>>>> to pick up all the methods. There is a KEEP()
>>>> around them which I
>>>> thought might
>>>> be the issue.
>>>>
>>>> --
>>>> Joel Sherrill, Ph.D. Director of
>>>> Research & Development
>>>> joel.sherrill at OARcorp.com
>>>> <mailto:joel.sherrill at OARcorp.com> On-Line
>>>> Applications Research
>>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>>> Support Available (256) 722-9985
>>>>
>>>>
>>>
>>> --
>>> Joel Sherrill, Ph.D. Director of Research & Development
>>> joel.sherrill at OARcorp.com <mailto:joel.sherrill at OARcorp.com> On-Line Applications Research
>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>> Support Available (256) 722-9985
>>>
>>>
>>
>> --
>> Joel Sherrill, Ph.D. Director of Research & Development
>> joel.sherrill at OARcorp.com <mailto:joel.sherrill at OARcorp.com> On-Line Applications Research
>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>> Support Available (256) 722-9985
>>
>>
>>
>
> --
> Joel Sherrill, Ph.D. Director of Research & Development
> joel.sherrill at OARcorp.com On-Line Applications Research
> Ask me about RTEMS: a free RTOS Huntsville AL 35805
> Support Available (256) 722-9985
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20140401/53a58be5/attachment-0001.html>
More information about the users
mailing list