undefined reference to `c_rtems_main' with rtems-ss-20011025 and posix bsp

Matthew J Fletcher amimjf at connectfree.co.uk
Wed Nov 21 23:17:22 UTC 2001


Hi,.

just to let you know that under rtems-ss-20011025 and the posix bsp you cant 
link properly against 'c_rtems_main', (from main.c), librtemsall.a does 
contain main.o,... so it built ok,.

(there is a load of information bellow, but i will cut to the chase now)

i checked that c_rtems_main, (in main.c) is transformed to main() correctly
and it was,.. (see objdump bellow)

i dont know quite how the link process got muddled so that bootcard.c
was looking for c_rtems_main() instead of main(), but a quick hack 
to call main() instead of c_rtems_main and everything works just fine.

in case it helps this all worked just fine with rtems-ss-20010126.

#
a fairly usless error message,..
#

gmake[5]: Entering directory `/xfs/rtems-build/c/posix/tests/samples/hello'
mkdir o-optimize
gcc --pipe -B../../../../../ -B../../../../../posix/lib/ -specs bsp_specs 
-qrtems     -ansi -fasm   -D_BSD_SOURCE    -O2 -g -Wall  -o o-optimize/init.o 
-c ../../../../../../rtems-ss-20011025/c/src/tests/samples/hello/init.c
../../../../../../rtems-ss-20011025/c/src/tests/samples/hello/init.c: In 
function `Init':
../../../../../../rtems-ss-20011025/c/src/tests/samples/hello/init.c:33: 
warning: implicit declaration of function `exit'
gcc --pipe -B../../../../../ -B../../../../../posix/lib/ -specs bsp_specs 
-qrtems -g -Wall  -ansi -fasm   -D_BSD_SOURCE     -L ../../../../../posix/lib 
  -O2  -o o-optimize/hello.exe o-optimize/init.o 
../../../../../posix/lib/no-dpmem.rel ../../../../../posix/lib/no-event.rel 
../../../../../posix/lib/no-msg.rel ../../../../../posix/lib/no-mp.rel 
../../../../../posix/lib/no-part.rel ../../../../../posix/lib/no-signal.rel 
../../../../../posix/lib/no-timer.rel ../../../../../posix/lib/no-rtmon.rel
../../../../../posix/lib/librtemsall.a(bootcard.o): In function `boot_card':
/xfs/rtems-build/c/posix/lib/libbsp/unix/posix/startup/../../../../../../../../rtems-ss-20011025/c/src/lib/libbsp/shared/bootcard.c:127: 
undefined reference to `c_rtems_main'
collect2: ld returned 1 exit status


#
#
just to get some more information i tired,...

objdump -atxS librtemsall.a > outfile

and c_rtems_main() seems to have turned into 
main(),..  correctly so no problem there,.
#
#


main.o:     file format elf32-i386
r--r--r-- 504/535  50740 Nov 21 21:29 2001 main.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000

SYMBOL TABLE:
00000000 l    df *ABS*	00000000 main.c
00000000 l    d  .text	00000000
00000000 l    d  .data	00000000
00000000 l    d  .bss	00000000
00000000 l    d  .rodata.str1.1	00000000
00000000 l       .rodata.str1.1	00000000 .LC0
00000000 l    d  .stab	00000000 
00000000 l    d  .stabstr	00000000
00000000 l    d  .comment	00000000 
00000000 g     F .text	00000074 main
00000000         *UND*	00000000 rtems_argc
00000000         *UND*	00000000 rtems_argv
00000000         *UND*	00000000 bsp_start
00000004       O *COM*	00000004 rtems_progname
00000000         *UND*	00000000 bsp_isr_level
00000000         *UND*	00000000 rtems_initialize_executive_late
00000000         *UND*	00000000 stdout
00000000         *UND*	00000000 fflush
00000000         *UND*	00000000 stderr
00000000         *UND*	00000000 bsp_cleanup


Disassembly of section .text:

00000000 <main>:
int main(
  int argc,
  char **argv
)
{
   0:	55                   	push   %ebp
   1:	89 e5                	mov    %esp,%ebp
   3:	56                   	push   %esi
   4:	53                   	push   %ebx
   5:	8b 75 0c             	mov    0xc(%ebp),%esi
   8:	8b 5d 08             	mov    0x8(%ebp),%ebx
   b:	83 e4 f0             	and    $0xfffffff0,%esp
  rtems_argc = argc;
   e:	89 1d 00 00 00 00    	mov    %ebx,0x0
			10: R_386_32	rtems_argc
  rtems_argv = argv;
  14:	89 35 00 00 00 00    	mov    %esi,0x0
			16: R_386_32	rtems_argv

  bsp_start();
  1a:	e8 fc ff ff ff       	call   1b <main+0x1b>
			1b: R_386_PC32	bsp_start

  if ((argc > 0) && argv && argv[0])
  1f:	85 db                	test   %ebx,%ebx
  21:	7e 45                	jle    68 <main+0x68>
  23:	85 f6                	test   %esi,%esi
  25:	74 41                	je     68 <main+0x68>
  27:	8b 06                	mov    (%esi),%eax
  29:	85 c0                	test   %eax,%eax
  2b:	74 3b                	je     68 <main+0x68>
      rtems_progname = argv[0];
  2d:	a3 00 00 00 00       	mov    %eax,0x0
			2e: R_386_32	rtems_progname
  else
      rtems_progname = "RTEMS";

  /*
   *  Start multitasking
   */

  rtems_initialize_executive_late( bsp_isr_level );
  32:	83 ec 0c             	sub    $0xc,%esp
  35:	8b 35 00 00 00 00    	mov    0x0,%esi
			37: R_386_32	bsp_isr_level
  3b:	56                   	push   %esi
  3c:	e8 fc ff ff ff       	call   3d <main+0x3d>
			3d: R_386_PC32	rtems_initialize_executive_late

  /*
   * Returns when multitasking is stopped
   * This allows our destructors to get run normally
   */

  fflush( stdout );
  41:	5b                   	pop    %ebx
  42:	8b 0d 00 00 00 00    	mov    0x0,%ecx
			44: R_386_32	stdout
  48:	51                   	push   %ecx
  49:	e8 fc ff ff ff       	call   4a <main+0x4a>
			4a: R_386_PC32	fflush
  fflush( stderr );
  4e:	5a                   	pop    %edx
  4f:	a1 00 00 00 00       	mov    0x0,%eax
			50: R_386_32	stderr
  54:	50                   	push   %eax
  55:	e8 fc ff ff ff       	call   56 <main+0x56>
			56: R_386_PC32	fflush

  bsp_cleanup();
  5a:	e8 fc ff ff ff       	call   5b <main+0x5b>
			5b: R_386_PC32	bsp_cleanup

  return 0;
}
  5f:	8d 65 f8             	lea    0xfffffff8(%ebp),%esp
  62:	5b                   	pop    %ebx
  63:	31 c0                	xor    %eax,%eax
  65:	5e                   	pop    %esi
  66:	5d                   	pop    %ebp
  67:	c3                   	ret    
  68:	c7 05 00 00 00 00 00 	movl   $0x0,0x0
  6f:	00 00 00 
			6a: R_386_32	rtems_progname
			6e: R_386_32	.LC0
  72:	eb be                	jmp    32 <main+0x32>
  74:	8d b6 00 00 00 00    	lea    0x0(%esi),%esi
  7a:	8d bf 00 00 00 00    	lea    0x0(%edi),%edi

mallocfreespace.o:     file format elf32-i386
r--r--r-- 504/535  52668 Nov 21 21:29 2001 mallocfreespace.o
architecture: i386, flags 0x00000011:
HAS_RELOC, HAS_SYMS
start address 0x00000000

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000030  00000000  00000000  00000040  2**4
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000070  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000070  2**2
                  ALLOC
  3 .stab         00002bec  00000000  00000000  00000070  2**2
                  CONTENTS, RELOC, READONLY, DEBUGGING
  4 .stabstr      00009de2  00000000  00000000  00002c5c  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .comment      00000012  00000000  00000000  0000ca3e  2**0
                  CONTENTS, READONLY
SYMBOL TABLE:
00000000 l    df *ABS*	00000000 mallocfreespace.c
00000000 l    d  .text	00000000
00000000 l    d  .data	00000000 
00000000 l    d  .bss	00000000
00000000 l    d  .stab	00000000 
00000000 l    d  .stabstr	00000000
00000000 l    d  .comment	00000000 
00000000 g     F .text	00000028 malloc_free_space
00000000         *UND*	00000000 RTEMS_Malloc_Heap
00000000         *UND*	00000000 rtems_region_get_information



regards

---
Matthew J Fletcher              	amimjf at connectfree.co.uk
Software Engineering		Matthew.Fletcher at student.shu.ac.uk
www.amimjf.org		    	ICQ amimjf 44193496

Since when did ignorance become a point of view ??
---




More information about the users mailing list