<div dir="ltr">My observation is different; gold handles numbers starting with 0x as a binary of arbitrary size in hexstring. How did you test it?</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 4, 2016 at 6:35 AM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Note that gold also parses the hex string as a 32 bit value.<br>
<br>
Cheers,<br>
Rafael<br>
<br>
<br>
On 3 August 2016 at 19:25, Rui Ueyama via llvm-commits<br>
<div class="HOEnZb"><div class="h5"><<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: ruiu<br>
> Date: Wed Aug  3 18:25:15 2016<br>
> New Revision: 277680<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=277680&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=277680&view=rev</a><br>
> Log:<br>
> Make filler expression compatible with gold.<br>
><br>
> Previously, a decimal filler expression is interpreted as a byte value.<br>
> Gold on the other hand use it as a 32-bit big-endian value.<br>
> This patch fixes the compatibility issue.<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D23142" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D23142</a><br>
><br>
> Modified:<br>
>     lld/trunk/ELF/LinkerScript.cpp<br>
>     lld/trunk/test/ELF/<wbr>linkerscript/linkerscript-<wbr>sections-padding.s<br>
><br>
> Modified: lld/trunk/ELF/LinkerScript.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=277680&r1=277679&r2=277680&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/ELF/<wbr>LinkerScript.cpp?rev=277680&<wbr>r1=277679&r2=277680&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- lld/trunk/ELF/LinkerScript.cpp (original)<br>
> +++ lld/trunk/ELF/LinkerScript.cpp Wed Aug  3 18:25:15 2016<br>
> @@ -843,18 +843,19 @@ std::vector<uint8_t> ScriptParser::readO<br>
>    if (!Tok.startswith("="))<br>
>      return {};<br>
>    next();<br>
> +<br>
> +  // Read a hexstring of arbitrary length.<br>
>    if (Tok.startswith("=0x"))<br>
>      return parseHex(Tok.substr(3));<br>
><br>
> -  // This must be a decimal.<br>
> -  unsigned int Value;<br>
> -  if (Tok.substr(1).getAsInteger(<wbr>10, Value)) {<br>
> -    setError("filler should be a decimal/hexadecimal value");<br>
> +  // Read a decimal or octal value as a big-endian 32 bit value.<br>
> +  // Why do this? I don't know, but that's what gold does.<br>
> +  uint32_t V;<br>
> +  if (Tok.substr(1).getAsInteger(0, V)) {<br>
> +    setError("invalid filler expression: " + Tok);<br>
>      return {};<br>
>    }<br>
> -  if (Value > 255)<br>
> -    setError("only single bytes decimal are supported for the filler now");<br>
> -  return {static_cast<unsigned char>(Value)};<br>
> +  return { uint8_t(V >> 24), uint8_t(V >> 16), uint8_t(V >> 8), uint8_t(V) };<br>
>  }<br>
><br>
>  void ScriptParser::readProvide(bool Hidden) {<br>
><br>
> Modified: lld/trunk/test/ELF/<wbr>linkerscript/linkerscript-<wbr>sections-padding.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/linkerscript-sections-padding.s?rev=277680&r1=277679&r2=277680&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/ELF/<wbr>linkerscript/linkerscript-<wbr>sections-padding.s?rev=277680&<wbr>r1=277679&r2=277680&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- lld/trunk/test/ELF/<wbr>linkerscript/linkerscript-<wbr>sections-padding.s (original)<br>
> +++ lld/trunk/test/ELF/<wbr>linkerscript/linkerscript-<wbr>sections-padding.s Wed Aug  3 18:25:15 2016<br>
> @@ -20,10 +20,10 @@<br>
>  # NO: 00000120  66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<br>
><br>
>  ## Decimal value.<br>
> -# RUN: echo "SECTIONS { .mysec : { *(.mysec*) } =99 }" > %t.script<br>
> +# RUN: echo "SECTIONS { .mysec : { *(.mysec*) } =777 }" > %t.script<br>
>  # RUN: ld.lld -o %t.out --script %t.script %t<br>
>  # RUN: hexdump -C %t.out | FileCheck -check-prefix=DEC %s<br>
> -# DEC: 00000120  66 63 63 63 63 63 63 63  63 63 63 63 63 63 63 63<br>
> +# DEC: 00000120  66 00 03 09 00 00 03 09 00 00 03 09 00 00 03 09<br>
><br>
>  ## Invalid hex value:<br>
>  # RUN: echo "SECTIONS { .mysec : { *(.mysec*) } =0x99XX }" > %t.script<br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>