<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 03/10/2017 10:19 AM, James Henderson
      via llvm-dev wrote:<br>
    </div>
    <blockquote
cite="mid:CABqSp3nHuhB_uEbvGhvUBcDq-PAcDz7EtAoPHyk8PsGhFtzKNg@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <div dir="ltr">
        <div>
          <div>
            <div>Hi,<br>
              <br>
            </div>
            I was doing some experiments with LLD and noticed that it
            pads out OutputSections with null bytes in all cases (as far
            as I could tell). However, for executable sections on some
            targets, 0x00 forms part of an executable instruction that
            is not nop. In particular, for x86_64 targets at least, the
            sequence 0x00 0x00 is an add instruction. This can result in
            confusing disassembly.<br>
            <br>
          </div>
          For example, on x86_64, given a simple InputSection that is a
          single "0xc3 retq" instruction, and given an alignment of 16
          bytes, 15 null bytes are inserted between the end of that
          InputSection and the next. In the disassembly I then see the
          retq instruction followed by a series of adds, the last of
          which actually consumes 1 or more bytes of the next section to
          form a valid instruction, which can in turn throw off the
          disassembly of the following instructions at the start of the
          next section.<br>
          <br>
          What do people think about using a target-specific nop
          instruction sequence to pad executable sections? Another
          possible option, on x86_64 at least (I haven't investigated
          other targets), is to use the 0xcc interrupt instruction.<br>
        </div>
      </div>
    </blockquote>
    <br>
    As I understand it, filling with nops has undesirable security
    consequences. As you suggest, using some trap sequence is probably
    better.<br>
    <br>
     -Hal <br>
    <br>
    <blockquote
cite="mid:CABqSp3nHuhB_uEbvGhvUBcDq-PAcDz7EtAoPHyk8PsGhFtzKNg@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>Regards,<br>
          <br>
        </div>
        <div>James<br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>