Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: Constructors

2004-09-25 by dave_albert

Note that you will also need to modify your linker script.  Mine has
the following immediately after the .text segment:


                /* Build table of global constructors to call */
                __CTOR_LIST__ = .;
                *(.ctors)
                LONG(0)
                __CTOR_END__ = .;

                /* Build table of global destructors to call on exit*/
                __DTOR_LIST__ = .;
                *(.dtors)
                LONG(0)
                __DTOR_END__ = .;


--- In lpc2000@yahoogroups.com, "dave_albert" <david_albert@h...> wrote:
> You're absolutely right...thanks Karl!
> 
> Clearly my constructors aren't doing any comparisons that set the zero
> flag (since this works for me)
> 
> per Karl's comment, the comparison of r5 to zero should be done again
> after the constructor returns and before the bne... and then there are
> probably more elegant solutions.
> 
> --- In lpc2000@yahoogroups.com, "Karl Olsen" <kro@p...> wrote:
> > --- In lpc2000@yahoogroups.com, "dave_albert" <david_albert@h...> 
> > wrote:
> > > Here's a snippet of code I use to call C++ constructors in crt0.S
> > > I call it after clearing .bss and initializing .data:
> > > 
> > > 
> > >      /* Call global C++ object constructors */
> > > 
> > >      ldr     r4, =__CTOR_LIST__      @ Null terminated list of ctors
> > > Ctor_Loop:      
> > >      ldr     r5, [r4], #+4           @ Fetch constructor address
> > >      cmp     r5, #0                  @ Test for end of list
> > >      addne   lr, pc, #4              @ Save return address
> > >      movne   pc, r5                  @ Call constructor
> > >      bne     Ctor_Loop               @ Continue for all constructors
> > > 
> > 
> > Won't the called constructor likely modify the zero flag so that 
> > the "bne Ctor_Loop" might terminate the loop prematurely?
> > 
> > Karl Olsen

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.