1. This forum section is a read-only archive which contains old newsgroup posts. If you wish to post a query, please do so in one of our main forum sections (here). This way you will get a faster, better response from the members on Motherboard Point.

GNU linker script question

Discussion in 'Embedded' started by Jim, Dec 10, 2005.

  1. Jim

    Jim Guest

    Hi,

    I'm working on an embedded project at home using GNU gcc & ld. I need
    to burn a function into a particular flash rom address. My attempt
    will be to place the function in its own file and define a section
    like:

    SECTIONS {
    MySection 0x10000:
    {
    MyFile.o
    }
    _MySectionEnd = . ;
    }

    Then, in my app, I should be able to refer to _MySectionEnd to get the
    end address of the function. I'm pretty sure this, or a variant will
    work (my syntax might not be 100% as I'm an ld newbie).

    But, is there a better way? Also, while this is OK for one, or a few
    functions, it would be a pain if I ever had to do a lot of 'em. I know
    there's a "section" attribute for gnu C, so I was wondering if I can
    create one or more MySection1 and _MySection1End symbol pairs in a
    linker script and somehow place each function at the desired section
    while all functions reside in one file?


    Thanks for the ideas!



    Jim
     
    Jim, Dec 10, 2005
    #1
    1. Advertisements

  2. Jim

    Jim Guest

    Just to avoid a bunch of comments correcting me, the linker script
    above turned out to be more like:

    .text :
    {
    MyFunc.o (.text)
    _MyFuncEnd = .;
    *(.text)
    *(.rodata)
    . = ALIGN(0x4) ;
    __etext = .;
    } > ram


    Jim

    p.s.
    I did finally find something about causing gcc to create each function
    in it's own section as if it were in its own file, but it didn't say
    how you knew what the section names would be. I'm guessing it would be
    a derivative of the function name.
     
    Jim, Dec 11, 2005
    #2
    1. Advertisements

  3. Jim

    ammonton Guest

    Yes, go to <http://www.devrs.com/gba/ccode.php#cmisc> and download the
    crtls package for an example of how it can be done.

    -a
     
    ammonton, Dec 11, 2005
    #3
  4. Jim

    David Brown Guest

    If you are only looking for the end address of a single function, then
    you could put that function in its own named section (look in the gcc
    manual for "function attributes"). I've done this on several targets
    for putting flash routines in a separate section so that they run from
    ram rather than flash.
     
    David Brown, Dec 12, 2005
    #4
  5. Jim

    Jim Guest

    Jim, Dec 13, 2005
    #5
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.