<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">On 05/06/2015 03:06 PM, Sean Silva
      wrote:<br>
      <br>
      [snip]</div>
    <blockquote
cite="mid:CAHnXoa=jWsoPou-=OwhOHyh_6WPWnoMgL1wmz2pAHL8GA+sk5Q@mail.gmail.com"
      type="cite">
      <div dir="ltr"><span class=""></span>
        <div class="gmail_extra">
          <div class="gmail_quote">
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
              <div dir="ltr">
                <div class="gmail_extra">
                  <div class="gmail_quote">
                    <div>The real use case is on platforms, like ARM,
                      where control registers are mapped to a specific
                      address range.  Then it is useful to put an object
                      that deals with the control registers at a
                      specific address. 
                      __attribute__((address(0x1234))) can be replaced
                      with a platform specific linker script.  Which is
                      better?  I don't know, I haven't spent any
                      time comparing them. </div>
                  </div>
                </div>
              </div>
            </blockquote>
            <div><br>
            </div>
            <div>There is another important use of linker scripts,
              namely having a notion of separate load and virtual
              addresses. This is important for e.g. an initialized .data
              section which is stored in ROM, but needs to be copied to
              writable memory.</div>
            <div><br>
            </div>
            <div>For more information on linker scripts, see my post
              "linker script findings": <a moz-do-not-send="true"
                href="http://marc.info/?l=llvm-dev&m=135698146015498&w=2">http://marc.info/?l=llvm-dev&m=135698146015498&w=2</a></div>
            <br>
          </div>
        </div>
      </div>
    </blockquote>
    [snip]<br>
    <br>
    Nice write up Sean.<br>
    I'd like to second the notion that linker scripts are important,
    especially in the embedded/kernel world. I use linker scripts to
    give addresses to register blocks and to put R/W initialized data in
    flash that can be copied to RAM on start up.<br>
    One cool thing about putting register addresses in linker scripts is
    that you can change the placement of registers without having to
    rebuild the source. For example, I have a small embedded kernel that
    can run in both MMU and non-MMU mode. In the former case the
    peripheral registers are mapped into the kernel's virtual address
    space, in the latter case they are placed at their actual address.
    It is nice to be able to do that without having to recompile
    drivers.<br>
    <br>
    Having said that, I would be all for a new linker script format. I
    find the GNU linker's scripts counter intuitive and hard to read.
    The lack of linker scripts is the main thing that keeps me from
    being able to use lld right now.<br>
    <br>
    -Rich<br>
  </body>
</html>