Hi, I have searched the web for using lto with mspgcc, and it appears that it is not yet officially supported. However, minus one minor bug it does appear to work. The bug is if main is included in the lto then main does not show up in the binary. The obvious workaround is to place a wrapper around main. I give an example of what I mean below. The example shows that inlining across object files works (specifically the externally defined get_value is inlined in sub_main). It was compiled with mspgcc-20120911.
Can anyone comment further on the state of lto support in mspgcc? Are there any show stoppers I am likely to encounter when trying to compile more complex code than this simple example? Thanks, Matt Makefile 01 CC=/usr/mspgcc-4.7.0/bin/msp430-gcc 02 COMPILE_FLAGS+= -mmcu=msp430f1611 -O -Os -mmpy=none -Wall -Wshadow 03 04 main.firmware: main.o sub_main.o inlineable_functions.o 05 $(CC) $(COMPILE_FLAGS) -flto -o $@ $^ 06 main.o: main.c 07 $(CC) $(COMPILE_FLAGS) -c $^ 08 sub_main.o: sub_main.c 09 $(CC) $(COMPILE_FLAGS) -flto -c $^ 10 inlineable_functions.o: inlineable_functions.c 11 $(CC) $(COMPILE_FLAGS) -flto -c $^ main.c 01 extern int sub_main(void); 02 int main(void) { 03 return sub_main(); 04 } sub_main.c 01 extern int get_value(int i); 02 int sub_main(void) { 03 *((unsigned int*)200) = get_value(0); 04 return 0; 05 } inlineable_functions.c 01 int get_value(int i) { 02 return i + 10; 03 } main.firmware: file format elf32-msp430 Disassembly of section .text: 00004000 <__watchdog_support>: 4000: 55 42 20 01 mov.b &0x0120,r5 4004: 35 d0 08 5a bis #23048, r5 ;#0x5a08 4008: 82 45 00 11 mov r5, &0x1100 0000400c <__init_stack>: 400c: 31 40 00 39 mov #14592, r1 ;#0x3900 00004010 <__do_copy_data>: 4010: 3f 40 00 00 mov #0, r15 ;#0x0000 4014: 0f 93 tst r15 4016: 08 24 jz $+18 ;abs 0x4028 4018: 92 42 00 11 mov &0x1100,&0x0120 401c: 20 01 401e: 2f 83 decd r15 4020: 9f 4f 58 40 mov 16472(r15),4352(r15);0x4058(r15), 0x1100(r15) 4024: 00 11 4026: f8 23 jnz $-14 ;abs 0x4018 00004028 <__do_clear_bss>: 4028: 3f 40 00 00 mov #0, r15 ;#0x0000 402c: 0f 93 tst r15 402e: 07 24 jz $+16 ;abs 0x403e 4030: 92 42 00 11 mov &0x1100,&0x0120 4034: 20 01 4036: 1f 83 dec r15 4038: cf 43 00 11 mov.b #0, 4352(r15);r3 As==00, 0x1100(r15) 403c: f9 23 jnz $-12 ;abs 0x4030 0000403e <main>: 403e: b0 12 4c 40 call #0x404c 00004042 <__stop_progExec__>: 4042: 32 d0 f0 00 bis #240, r2 ;#0x00f0 4046: fd 3f jmp $-4 ;abs 0x4042 00004048 <__ctors_end>: 4048: 30 40 56 40 br #0x4056 0000404c <sub_main>: 404c: b2 40 0a 00 mov #10, &0x00c8 ;#0x000a 4050: c8 00 4052: 0f 43 clr r15 4054: 30 41 ret 00004056 <_unexpected_>: 4056: 00 13 reti ------------------------------------------------------------------------------ Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery and much more. Keep your Java skills current with LearnJavaNow - 200+ hours of step-by-step video tutorials by Java experts. SALE $49.99 this month only -- learn more at: http://p.sf.net/sfu/learnmore_122612 _______________________________________________ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users