Mark Ashby

[CW6.1] Undefined Reference Linker Error

Discussion created by Mark Ashby on Mar 7, 2006
Latest reply on Mar 8, 2006 by Mark Ashby
Hi Everyone,
  Newbie time again.
 
I'm getting an error when compiling a CPP application with references to a "C" file wrapper for an assembly routine. The declaration is in a "h" file and the definition is in an "c" file. The "LINKER" error is undefined reference to the "C" function call "mcf5xxx_irq_enable".
If I force a CPP compile then the error moves to the unreferenced assembly call "asm_set_ipl".
How do I get this to compile properly?

Attached is the full project.

Thanks

MainBoot.cpp
#include "Common.h"
#include "MCF5xxx.h"

int main(int /* argc */, char /* **argc */)
{
    mcf5xxx_irq_enable();
    return 0;
}


MCF5xxx.h
...
void mcf5xxx_irq_enable (void);
...


MCF5xxx.c
...
void mcf5xxx_irq_enable (void)
{
asm_set_ipl(0);
}
...


mcf5xxx.s
...
.global asm_set_ipl
.global _asm_set_ipl
...
asm_set_ipl:
_asm_set_ipl:
link A6,#-8
movem.l D6-D7,(SP)

move.w SR,D7 /* current sr */

move.l D7,D0 /* prepare return value */
andi.l #0x0700,D0 /* mask out IPL */
lsr.l #8,D0 /* IPL */

move.l 8(A6),D6 /* get argument */
andi.l #0x07,D6 /* least significant three bits */
lsl.l #8,D6 /* move over to make mask */

andi.l #0x0000F8FF,D7 /* zero out current IPL */
or.l D6,D7 /* place new IPL in sr */
move.w D7,SR

movem.l (SP),D6-D7
lea 8(SP),SP
unlk A6
rts
...
 
Message Edited by t.dowe on 2009-09-04 11:28 AM

Outcomes