This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: How to list all symbolic names for references to global varibables and functions with objdump (for MIPS arch)?


Hi Pan,

Support for .init sections means the kernel allocates pages from the
init sections when the programs are loaded and being initialized. And
after initialization is finished, the kernel reclaims the pages for
init sections. This can reduce memory requirements significantly for
an embedded system.

Ah - OK - I understand now. It sounds like what you really want to do is to hook into the linker's section-garbage-collection mechanism. This currently allows the linker to find functions which are never used and throw them away, (providing that the program has been compiled with gcc's -ffunction-section command line option).


What you want to do is to augment the current code so that any function which is used by which is not referenced via the program's entry point(*) is placed into a special segment which the loader knows it can discard after the initialization routines have been run.

Cheers
  Nick

(*) Actually you will also have to consider termination routines as well (C++ deconstructors, .fini sections etc). These may also invoke functions in the program which are not referenced via the entry point, but which need to be present when the program exits. Possibly your kernel will have to reload the segment containing the init routines. Although if the program is exiting because it has run out of memory this might prove difficult to implement...


You know it might be a whole lot easier to abandon trying to make this an automatic mechanism and instead require that the program's creator annotate any only-used-during-init functions via some kind of attribute.
Eg if you specified that any such function had to be given a section name attribute of .init.text say, then you could arrange for your linker script to keep all code in this section separate from the normal .text section and then your kernel could know to discard this section once it is ready to invoke the program's entry point.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]