<div dir="ltr">You need to create a linker script file and use that to control where things go.<div><br></div><div>The linker controls things using object files and sections. By default, functions go into .text sections. There are compiler options which cause each function to go into a separate section.</div><div><br></div><div>The syntax in the linker script files is a bit arcane.<br></div><div><a href="https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_chapter/ld_3.html#SEC6">https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_chapter/ld_3.html#SEC6</a><br></div><div><br></div><div>Here's an example linker file used on an STM32F103 microcontroller and it places the isr vectors at address 0x8002000.</div><div><a href="https://github.com/dhylands/stm32-test/blob/master/board-STM32F103-Mini/STM32F103RBTx_FLASH.ld">https://github.com/dhylands/stm32-test/blob/master/board-STM32F103-Mini/STM32F103RBTx_FLASH.ld</a><br></div><div><br></div><div>This linker file shows putting particular object files into a particular section:</div><div><a href="https://github.com/micropython/micropython/blob/master/ports/stm32/boards/common_ifs.ld#L35">https://github.com/micropython/micropython/blob/master/ports/stm32/boards/common_ifs.ld#L35</a><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 30, 2020 at 12:55 PM Clayton Timmons via DPRGlist <<a href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>I'm searching for an answer to a simple question.  My friend Google tried to help but so far Google hasn't given me a good answer.   I'm hoping some savvy DPRG member probably has the wisdom I seek.       </div><div><br></div><div><br></div><br><div>I'm using a microchip processor writing code in C.   The code consists of several C source files which are compiled into object code then linked together.  Something like this simplified example.</div><div><br></div><div>gcc -c   foo.c             <<<  compile C code into object file</div><div>gcc -c   bar.c             <<<  compile C code into object file</div><div><br></div><div>gcc   foo.o  bar.o   -o  foobar.cof     <<<  link all object files together</div><div><br></div><div>The final output is in cof format which is converted to hex format used by the programmer.   There is a map file created by the linker which allows me to see where all the C functions end up in memory, something like this.</div><div><br></div><div>External Symbols in Program Memory (by address):<br><br></div><div>                     .  .  .</div><div>                  0x003b18                  _foo<br>                     .  .  . </div><div>                  0x003e1e                  _bar<br> <br></div><div>  <br></div><div>My question is -   How can I force the linker to put a specific function at a specific location?     Say I want the function bar to start at 0x004000.</div><div><br></div><div>There should be some compiler or linker directives to accomplish that.</div><div><br></div><div>Any help is appreciated.</div><div><br></div><div>-Clay Timmons-</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div> <br></div></div>
_______________________________________________<br>
DPRGlist mailing list<br>
<a href="mailto:DPRGlist@lists.dprg.org" target="_blank">DPRGlist@lists.dprg.org</a><br>
<a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" rel="noreferrer" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Dave Hylands<br>Peachland, BC, Canada<br><a href="http://www.davehylands.com" target="_blank">http://www.davehylands.com</a></div></div></div>