We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,
I have two M0 projects. The first project has only one assembly file startup.s. The second project has one assembly file and one C file. When I checked the memory map file of the second project (shown below), there are some extra object codes included in the final binary in addition to startup.o and a.o. I presume they are related to C libararies. Can someone describe what they are for? Are these libaries required? If not required do we have a way to exclude them?
Thanks a lot.
--- Memory map of project 1: startup.s ----
Memory Map of the image
Image Entry point : 0x00000041
Load Region LR_1 (Base: 0x00000000, Size: 0x0000015c, Max: 0xffffffff, ABSOLUTE)
Execution Region ER_RO (Base: 0x00000000, Size: 0x0000015c, Max: 0xffffffff, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x00000000 0x00000040 Data RO 3 RESET startup.o 0x00000040 0x0000011c Code RO 4 * .text startup.o
--- Memory map of project 2: startup.s & a.c ---
Image Entry point : 0x0000020d
Load Region LR_1 (Base: 0x00000000, Size: 0x0000027c, Max: 0xffffffff, ABSOLUTE)
Execution Region ER_RO (Base: 0x00000000, Size: 0x00000274, Max: 0xffffffff, ABSOLUTE)
0x00000000 0x0000004c Data RO 20 RESET startup.o 0x0000004c 0x00000008 Code RO 30 * !!!main c_p.l(__main.o) 0x00000054 0x0000003c Code RO 195 !!!scatter c_p.l(__scatter.o) 0x00000090 0x0000001a Code RO 197 !!handler_copy c_p.l(__scatter_copy.o) 0x000000aa 0x00000002 PAD 0x000000ac 0x0000001c Code RO 199 !!handler_zi c_p.l(__scatter_zi.o) 0x000000c8 0x00000006 Code RO 68 .ARM.Collect$$libinit$$00000000 c_p.l(libinit.o) 0x000000ce 0x00000000 Code RO 77 .ARM.Collect$$libinit$$00000006 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 79 .ARM.Collect$$libinit$$00000008 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 81 .ARM.Collect$$libinit$$0000000A c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 84 .ARM.Collect$$libinit$$0000000D c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 86 .ARM.Collect$$libinit$$0000000F c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 88 .ARM.Collect$$libinit$$00000011 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 90 .ARM.Collect$$libinit$$00000013 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 92 .ARM.Collect$$libinit$$00000015 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 94 .ARM.Collect$$libinit$$00000017 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 96 .ARM.Collect$$libinit$$00000019 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 98 .ARM.Collect$$libinit$$0000001B c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 100 .ARM.Collect$$libinit$$0000001D c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 102 .ARM.Collect$$libinit$$0000001F c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 104 .ARM.Collect$$libinit$$00000021 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 108 .ARM.Collect$$libinit$$00000028 c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 110 .ARM.Collect$$libinit$$0000002A c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 112 .ARM.Collect$$libinit$$0000002C c_p.l(libinit2.o) 0x000000ce 0x00000000 Code RO 114 .ARM.Collect$$libinit$$0000002E c_p.l(libinit2.o) 0x000000ce 0x00000002 Code RO 115 .ARM.Collect$$libinit$$0000002F c_p.l(libinit2.o) 0x000000d0 0x00000002 Code RO 136 .ARM.Collect$$libshutdown$$00000000 c_p.l(libshutdown.o) 0x000000d2 0x00000000 Code RO 150 .ARM.Collect$$libshutdown$$00000003 c_p.l(libshutdown2.o) 0x000000d2 0x00000000 Code RO 153 .ARM.Collect$$libshutdown$$00000006 c_p.l(libshutdown2.o) 0x000000d2 0x00000000 Code RO 156 .ARM.Collect$$libshutdown$$00000009 c_p.l(libshutdown2.o) 0x000000d2 0x00000000 Code RO 158 .ARM.Collect$$libshutdown$$0000000B c_p.l(libshutdown2.o) 0x000000d2 0x00000000 Code RO 161 .ARM.Collect$$libshutdown$$0000000E c_p.l(libshutdown2.o) 0x000000d2 0x00000002 Code RO 162 .ARM.Collect$$libshutdown$$0000000F c_p.l(libshutdown2.o) 0x000000d4 0x00000000 Code RO 32 .ARM.Collect$$rtentry$$00000000 c_p.l(rtentry.o) 0x000000d4 0x00000000 Code RO 35 .ARM.Collect$$rtentry$$00000002 c_p.l(rtentry2.o) 0x000000d4 0x00000004 Code RO 52 .ARM.Collect$$rtentry$$00000005 c_p.l(rtentry5.o) 0x000000d8 0x00000000 Code RO 37 .ARM.Collect$$rtentry$$00000009 c_p.l(rtentry2.o) 0x000000d8 0x00000004 Code RO 38 .ARM.Collect$$rtentry$$0000000A c_p.l(rtentry2.o) 0x000000dc 0x00000000 Code RO 40 .ARM.Collect$$rtentry$$0000000C c_p.l(rtentry2.o) 0x000000dc 0x00000008 Code RO 41 .ARM.Collect$$rtentry$$0000000D c_p.l(rtentry2.o) 0x000000e4 0x00000004 Code RO 53 .ARM.Collect$$rtentry$$00002716 c_p.l(rtentry5.o) 0x000000e8 0x00000002 Code RO 73 .ARM.Collect$$rtexit$$00000000 c_p.l(rtexit.o) 0x000000ea 0x00000000 Code RO 119 .ARM.Collect$$rtexit$$00000002 c_p.l(rtexit2.o) 0x000000ea 0x00000004 Code RO 120 .ARM.Collect$$rtexit$$00000003 c_p.l(rtexit2.o) 0x000000ee 0x00000006 Code RO 121 .ARM.Collect$$rtexit$$00000004 c_p.l(rtexit2.o) 0x000000f4 0x00000118 Code RO 1 .text a.o 0x0000020c 0x00000024 Code RO 21 * .text startup.o 0x00000230 0x00000006 Code RO 28 .text c_p.l(heapauxi.o) 0x00000236 0x0000000c Code RO 60 .text c_p.l(exit.o) 0x00000242 0x00000002 PAD 0x00000244 0x0000000c Code RO 128 .text c_p.l(sys_exit.o) 0x00000250 0x00000002 Code RO 139 .text c_p.l(use_no_semi.o) 0x00000252 0x00000000 Code RO 141 .text c_p.l(indicate_semi.o) 0x00000252 0x00000002 PAD 0x00000254 0x00000020 Data RO 193 Region$$Table anon$$obj.o
Hi wshen,
I think the 2nd case includes another startup file which had been provided by the compiler. Are the procedure of compiling for both projects same? If you use GCC, how about adding the '-nostdlib' option to the command line?
Best regards,Yasuhiko Koumoto.