(一) 在Console下查詢的方法:
1. "Remove unused sections" 就只是remove unused sections.
user可以自行檢查被移除function及data。
可以利用 linker option的--print-gc-sections來印出被remove的sections, 例如
$ gcc test.c -ffunction-sections -Wl,--gc-sections,--print-gc-sections
/usr/bin/ld: Removing unused section '.rodata' in file '/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o'
/usr/bin/ld: Removing unused section '.data' in file '/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o'
/usr/bin/ld: Removing unused section '.data' in file '/usr/lib/gcc/i686-linux-gnu/4.6.1/crtbegin.o'
/usr/bin/ld: Removing unused section '.text.foo' in file '/tmp/cc19xY66.o' ß foo function被移除
會發生不預期的移除, 通常是像 if/else的condition可以在compiling time推算出來, 所以被gcc當成dead code optimize掉
(二) 如何將上述的指令加在Andesight裡?
附件有一個example,大家可以匯入Andesight後試試。
設定如下:
(1) 在Andes C Compiler/Miscellaneous裡加上 -ffunction-sections -fdata-sections
Attachment:
p1.png [ 12.72 KiB | Viewed 10947 times ]
(2) 取消勾選Remove unused sections (因為我把原本的選項拆開來設定
Remove unused sections即為 -ffunction-sections -fdata-sections及--gc-sections)
Attachment:
p2.png [ 22.54 KiB | Viewed 10947 times ]
(3) 在Andes C Linker/Muscellaneous裡加上這2個option (按下綠色的十字button可增加)
Attachment:
p3.png [ 23.55 KiB | Viewed 10947 times ]
(4)我的原始碼
Code:
#include <stdio.h>
#include <stdlib.h>
int int1=34;
int int2=56;
void foo(void);
void foo2(void);
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}
void foo()
{
puts("foo"); /* prints !!!Hello World!!! */
}
void foo2()
{
puts("foo2"); /* prints !!!Hello World!!! */
}
(5) Build code得到結果如下。原本的int1 int2 foo1 foo2都被刪掉了
Attachment:
p4.png [ 10.54 KiB | Viewed 10947 times ]
(6)在project出現紅色x不用理會它。只是因為有輸出message。
它還是能正常產生結果。有.adx檔輸出。
Attachment:
p5.png [ 4.94 KiB | Viewed 10947 times ]
完整example code下載
Attachment:
hello2.7z [19.77 KiB]
Downloaded 997 times