I had played with this a little, and discovered (as you did) the necessity
of including the -mmcu option for the linker (without it, certain constants
such as the stack address get a default value that's wrong unless you're
targeting an MSP430F110 or something similar).  I got to the point where I
could duplicate the problem by attempting to link an executable with the
combined object file:

CFLAGS="-Wall -Os -mmcu=cc430x5137"
msp430-gcc ${CFLAGS} -c m.c
msp430-gcc ${CFLAGS} -c add2.c
msp430-gcc ${CFLAGS} -c putchar.c
msp430-ld -mcc430x5137 -r -o add.so m.o add2.o
msp430-gcc ${CFLAGS} -o a.out putchar.o add.so

Would you please file a tracker bug report on the mspgcc project?  I'll see
what I can do to make the above work with mspgcc4, though can't promise that
the result will satisfy Contiki's symbol resolution needs.

Peter

On Wed, Dec 22, 2010 at 10:47 PM, Martin <deve...@gmail.com> wrote:

> Chris Liechti <cliechti <at> gmx.net> writes:
>
> >
> >
> > Am 21.12.2010 14:09, schrieb devebox:
> > >> msp430-gcc -Wall -Os -c m.c -o m.o
> > >> msp430-gcc -Wall -Os -c add2.c -o add2.o
> > >> msp430-ld -r --unresolved-symbols=ignore-in-object-files --strip-all
> > > -o m.cm m.o add2.o
> >
> > note that the C compiler uses things from the libraries libc and libgcc.
> > when you call "ld" these are not added automatically. the symbols are
> > missing (zero) in your readelf outout because you don't link the
> libraries.
> >
> > it's recommended to use also "gcc" as command for the linking. it
> > automatically adds the required libs. thus, just replace "msp430-ld"
> > with "msp430-gcc".
> >
> > chris
> >
> >
> ------------------------------------------------------------------------------
> > Forrester recently released a report on the Return on Investment (ROI) of
> > Google Apps. They found a 300% ROI, 38%-56% cost savings, and break-even
> > within 7 months.  Over 3 million businesses have gone Google with Google
> Apps:
> > an online email calendar, and document program that's accessible from
> your
> > browser. Read the Forrester report: http://p.sf.net/sfu/googleapps-sfnew
> >
>
>
> Hi Chris,
>
> Thanks much for the tip. I intentionally wanted to leave out the standard
> libraries. I am compiling a loadable module for the contiki OS. The OS core
> contains definitions of lib symbols and it provides a dynamic linker/loader
> that is suppose to hook up the undefined symbols in my module with the
> definitions in core. I used the "--unresolved-symbol" option for this
> reason.
>
> To check if missing lib is indeed the culprit, I replaced msp430-ld with
> msp430-gcc, but also added -Wl, and -mmcu options to pass options to the
> linker,
> and to avoid a complain about "the region .text is full".
>
> > make m.cm
> msp430-gcc -mmcu=msp430x1611 -Wall -Os -c m.c -o m.o
> msp430-gcc -mmcu=msp430x1611 -Wall -Os -c add2.c -o add2.o
> msp430-gcc -mmcu=msp430x1611 -Wl,-r \
>        -Wl,--unresolved-symbols=ignore-in-object-files \
>        -Wl,--strip-all -o m.cm m.o add2.o
>
> > readelf -a m.cm
> Relocation section '.rela.text' at offset 0x9a8 contains 63 entries:
>  Offset     Info    Type            Sym.Value  Sym. Name + Addend
> 00000008  00000d05 R_MSP430_16_BYTE  00000752   _etext + 0
> 0000000c  00002a05 R_MSP430_16_BYTE  00000000   __data_start + 0
> 00000010  00002605 R_MSP430_16_BYTE  00000000   _edata + 0
> 00000022  00001e05 R_MSP430_16_BYTE  00000000   __bss_start + 0
> 00000026  00001305 R_MSP430_16_BYTE  00000000   __bss_end + 0
> 00000038  00002103 R_MSP430_16       00000078   main + 0
> 0000003c  00001a03 R_MSP430_16       0000003e   _unexpected_ + 0
> 0000007a  00002505 R_MSP430_16_BYTE  00003900   __stack + 0
> 00000082  00000105 R_MSP430_16_BYTE  00000000   .text + 0       (A)
> 00000086  00000c05 R_MSP430_16_BYTE  000000ca   printf + 0
> 0000008e  00002705 R_MSP430_16_BYTE  000000b2   add2 + 0
> 00000094  00000105 R_MSP430_16_BYTE  00000000   .text + 19      (B)
> 00000098  00000c05 R_MSP430_16_BYTE  000000ca   printf + 0
> 000000a0  00000e03 R_MSP430_16       00000724   __stop_progExec__ + 0
> 000000ba  00000105 R_MSP430_16_BYTE  00000000   .text + 0       (C)
> 000000be  00000c05 R_MSP430_16_BYTE  000000ca   printf + 0
> 000000d4  00000b05 R_MSP430_16_BYTE  00000000   putchar + 0
> 000000d8  00001c05 R_MSP430_16_BYTE  00000140   vuprintf + 0
> 000000f4  00000403 R_MSP430_16       00000000   .bss + 0
> 000000fc  00000303 R_MSP430_16       00000000   .data + 0
> 00000122  00000403 R_MSP430_16       00000000   .bss + 0
> (truncated)
>
>
> However, I still get the zero addend at (C) which is the argument to
> the printf statement in add2.c.
>
> I wondered if this problem is specific to msp430, so I tried to compile
> that some source files for avr:
>
> > make m.cm
> avr-gcc -mmcu=atmega1284p -Wall -O2 -c m.c -o m.o
> avr-gcc -mmcu=atmega1284p -Wall -O2 -c add2.c -o add2.o
> avr-gcc -mmcu=atmega1284p -O2 -Wl,-r \
>        -Wl,--unresolved-symbols=ignore-in-object-files \
>        -Wl,--strip-all -o m.cm m.o add2.o
>
> > readelf -r m.cm
> (trancrated)
> 000000a6  00000203 R_AVR_13_PCREL    00000000   .text + ac
> 000000ac  00002106 R_AVR_LO8_LDI     00000000   __data_end + 0
> 000000b0  00000202 R_AVR_7_PCREL     00000000   .text + a8
> 000000c2  00002712 R_AVR_CALL        000000ce   main + 0
> 000000c6  00003312 R_AVR_CALL        000006c2   exit + 0
> 000000ce  00000203 R_AVR_13_PCREL    00000000   .text + d0
> 000000d0  00000203 R_AVR_13_PCREL    00000000   .text + d2
> 000000d2  00000106 R_AVR_LO8_LDI     00000000   .data + 0   (A)
> 000000d4  00000107 R_AVR_HI8_LDI     00000000   .data + 0
> 000000e6  00000712 R_AVR_CALL        00000152   printf + 0
> 000000f6  00003412 R_AVR_CALL        00000120   add2 + 0
> 000000fa  00000203 R_AVR_13_PCREL    00000000   .text + fc
> 000000fc  00000203 R_AVR_13_PCREL    00000000   .text + fe
> 000000fe  00000106 R_AVR_LO8_LDI     00000000   .data + 19  (B)
> 00000100  00000107 R_AVR_HI8_LDI     00000000   .data + 19
> 0000010e  00000712 R_AVR_CALL        00000152   printf + 0
> 00000126  00000203 R_AVR_13_PCREL    00000000   .text + 128
> 00000128  00000203 R_AVR_13_PCREL    00000000   .text + 12a
> 0000012a  00000106 R_AVR_LO8_LDI     00000000   .data + 38  (C)
> 0000012c  00000107 R_AVR_HI8_LDI     00000000   .data + 38
> 0000013a  00000712 R_AVR_CALL        00000152   printf + 0
> 000006c4  00000203 R_AVR_13_PCREL    00000000   .text + 6c4
> 000000b2  00001307 R_AVR_HI8_LDI     00000000   __bss_end + 0
> 000000b4  00002606 R_AVR_LO8_LDI     00000000   __bss_start + 0
> 000000b6  00002607 R_AVR_HI8_LDI     00000000   __bss_start + 0
> 000000b8  00000203 R_AVR_13_PCREL    00000000   .text + bc
> 000000bc  00001306 R_AVR_LO8_LDI     00000000   __bss_end + 0
> (trancated)
>
> In this case avr-gcc decided to put the printf arguments into the .data
> section, but otherwise the addends are correct for all three printf
> statements.
>
> I use gcc version 3.2.3, but I also tried mspgcc4 (with gcc version 4.4.3)
> and got the same results.
>
> Please kindly let me know if I'm missing something. Thanks a lot.
>
>
> Martin
>
>
>
>
>
>
> ------------------------------------------------------------------------------
> Learn how Oracle Real Application Clusters (RAC) One Node allows customers
> to consolidate database storage, standardize their database environment,
> and,
> should the need arise, upgrade to a full multi-node Oracle RAC database
> without downtime or disruption
> http://p.sf.net/sfu/oracle-sfdevnl
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to