<div dir="ltr">As a concrete suggestion, here is code for deciding how many bytes of padding to emit.<div><br></div><div>For the case of .align 2 (4 byte alignment), it will emit a minimum of 3 and a maximum of 6 bytes of padding. For .align 4 it emit a minimum of 15 and a maximum of 30 bytes of padding.</div><div><div><br></div><div><div>/*</div><div>  RISC-V align.</div><div><br></div><div>  Goals:</div><div>  1) align to the desired amount in the generated object file.</div><div>  2) provide enough extra padding that alignment can be maintained in the face of</div><div>     code size changes, by only making the padding smaller, never bigger.</div><div>*/</div><div><br></div><div>void emit_padding(uintptr_t sz);</div><div><br></div><div>uintptr_t align(uintptr_t oldPos, int logAligment){</div><div>    uintptr_t alignment = 1 << logAligment, mask = alignment - 1;</div><div>    uintptr_t newPos = (oldPos + mask) & mask;</div><div>    if ((newPos - oldPos) < mask) newPos += alignment;</div><div>    emit_padding(newPos - oldPos);</div><div>    return newPos;</div><div>}</div></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jul 12, 2017 at 9:07 PM, Rafael Avila de Espindola via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">PkmX via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> writes:<br>
> Note that RISC-V also handles alignment as part of relaxation, so it<br>
> isn't really optional. For example:<br>
><br>
> _start:<br>
>     mv      a0, a0<br>
>     .p2align 2<br>
>     li      a0, 0<br>
><br>
> The assembler inserts a 3-byte padding (note: this behavior isn't<br>
> merged yet, see: <a href="https://github.com/riscv/riscv-binutils-gdb/pull/88" rel="noreferrer" target="_blank">https://github.com/riscv/<wbr>riscv-binutils-gdb/pull/88</a>):<br>
<br>
</span>Why 3 bytes? The assembler knows the section alignment.<br>
<br>
I can see why another relaxation would require alignments to be<br>
revisited, but it should be possible to link without any relaxations,<br>
no?<br>
<br>
Cheers,<br>
Rafael<br>
<div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</div></div></blockquote></div><br></div>