我正在用 armcc 编译一个项目:
它有以下标志:
ASFLAGS := -g --cpu Cortex-R5 --fpu None $(addprefix -i,$(INCL)) --apcs /interwork
ASFLAGS += --diag_error=warning,193
CFLAGS := -g --cpu Cortex-R5 --split_sections --c99 --gnu --depend_dir=$(OBJ_PATH) --no_depend_system_headers --md
CFLAGS += --enum_is_int
CFLAGS += --diag_error=warning,193,1301,2530 --remarks
CFLAGS += --diag_suppress=2815
CFLAGS += --diag_remark=1215
#CFLAGS += -O0
CFLAGS += -O3
CFLAGS += -DROM
CFLAGS += -Otime
CFLGAS += -O3
$(TARTGET):="Mytarget"
LDFLAGS := $(INSTRUCTION) --info=totals --info=unused --info=sizes --callgraph --map --symbols --scatter=$(SCAT_FILE) --list $(TARGET).map
LDFLAGS += --datacompressor=off --library_type=microlib --entry=0xFFFF0000
这会生成一个地图文件,我也有 fromelf 二进制文件来生成 asm。
fromelf $(TARGET).axf -c > $(TARGET).asm
但是在输出 *.map(memory) 文件中
如果设置了 Optimization3 (-O3) 标志,我将无法看到我在主函数下添加到构建中的 API 名称,删除它会恢复 api 名称
例如来源:main.c
main()
{
test_func()
}
*.map(与 O3)
main 0xffff2218 ARM Code 152 main.o(i.main)
util_print 0xffff22c0 ARM Code 40 util_print.o(i.util_print)
harm_reset_handler 0xffff22ec ARM Code 0 host_reset.o(reset)
来源:*.map(带 -O0)
main 0xffff2218 ARM Code 152
main.o(i.main)
test_func 0xffff22c0 ARM Code 40 test_func.o(i.test_func)
util_print 0xffff22ec ARM Code 40 util_print.o(i.util_print)
harm_reset_handler 0xffff24f4 ARM Code 0 host_reset.o(reset)
我的问题是有没有办法在 -O3 打开的情况下生成地图文件,但 *.map 和 *.asm 文件中仍然没有缺少函数符号?