<div dir="ltr">Should I add more test cases?<br><div><br></div><div>I don't have commit access.</div><div><br></div><div>Thanks</div><div>Erick</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 22, 2017 at 11:23 AM, Rafael Avila de Espindola <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">LGTM.<br>
<br>
It is not clear that this will work in all cases when the symbols are in<br>
different sections but is is an improvement.<br>
<br>
Do you have commit access?<br>
<br>
Cheers,<br>
Rafael<br>
<br>
Erick Reyes via Phabricator via llvm-commits<br>
<div><div class="h5"><<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> writes:<br>
<br>
> erickreyes created this revision.<br>
> erickreyes added a reviewer: lld.<br>
> erickreyes added a project: lld.<br>
> Herald added subscribers: llvm-commits, emaste.<br>
><br>
> When two linker script symbols are subtracted, the result should be absolute.<br>
><br>
> This is the behavior of binutils' ld.<br>
><br>
><br>
> Repository:<br>
>   rLLD LLVM Linker<br>
><br>
> <a href="https://reviews.llvm.org/D41477" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D41477</a><br>
><br>
> Files:<br>
>   ELF/ScriptParser.cpp<br>
>   test/ELF/linkerscript/<wbr>operators.s<br>
><br>
><br>
> Index: test/ELF/linkerscript/<wbr>operators.s<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- test/ELF/linkerscript/<wbr>operators.s<br>
> +++ test/ELF/linkerscript/<wbr>operators.s<br>
> @@ -1,6 +1,7 @@<br>
>  # REQUIRES: x86<br>
>  # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t<br>
>  # RUN: echo "SECTIONS { \<br>
> +# RUN:  _start = .; \<br>
>  # RUN:  plus = 1 + 2 + 3; \<br>
>  # RUN:  minus = 5 - 1; \<br>
>  # RUN:  div = 6 / 2; \<br>
> @@ -26,6 +27,9 @@<br>
>  # RUN:  . = 0xfff0; \<br>
>  # RUN:  datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0); \<br>
>  # RUN:  datasegmentalign2 = DATA_SEGMENT_ALIGN (0, 0); \<br>
> +# RUN:  _end = .; \<br>
> +# RUN:  minus_rel = _end - 0x10; \<br>
> +# RUN:  minus_abs = _end - _start; \<br>
>  # RUN: }" > %t.script<br>
>  # RUN: ld.lld %t --script %t.script -o %t2<br>
>  # RUN: llvm-objdump -t %t2 | FileCheck %s<br>
> @@ -53,6 +57,8 @@<br>
>  # CHECK: 00000000001000 *ABS* 00000000 commonpagesize<br>
>  # CHECK: 0000000000ffff *ABS* 00000000 datasegmentalign<br>
>  # CHECK: 0000000000fff0 *ABS* 00000000 datasegmentalign2<br>
> +# CHECK: 0000000000ffe0 .text 00000000 minus_rel<br>
> +# CHECK: 0000000000fff0 *ABS* 00000000 minus_abs<br>
><br>
>  ## Mailformed number error.<br>
>  # RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script<br>
> Index: ELF/ScriptParser.cpp<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- ELF/ScriptParser.cpp<br>
> +++ ELF/ScriptParser.cpp<br>
> @@ -151,6 +151,8 @@<br>
>  }<br>
><br>
>  static ExprValue sub(ExprValue A, ExprValue B) {<br>
> +  if (!A.isAbsolute() && !B.isAbsolute())<br>
> +    return A.getValue() - B.getValue();<br>
>    return {A.Sec, false, A.getSectionOffset() - B.getValue(), A.Loc};<br>
>  }<br>
><br>
><br>
><br>
> Index: test/ELF/linkerscript/<wbr>operators.s<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- test/ELF/linkerscript/<wbr>operators.s<br>
> +++ test/ELF/linkerscript/<wbr>operators.s<br>
> @@ -1,6 +1,7 @@<br>
>  # REQUIRES: x86<br>
>  # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t<br>
>  # RUN: echo "SECTIONS { \<br>
> +# RUN:  _start = .; \<br>
>  # RUN:  plus = 1 + 2 + 3; \<br>
>  # RUN:  minus = 5 - 1; \<br>
>  # RUN:  div = 6 / 2; \<br>
> @@ -26,6 +27,9 @@<br>
>  # RUN:  . = 0xfff0; \<br>
>  # RUN:  datasegmentalign = DATA_SEGMENT_ALIGN (0xffff, 0); \<br>
>  # RUN:  datasegmentalign2 = DATA_SEGMENT_ALIGN (0, 0); \<br>
> +# RUN:  _end = .; \<br>
> +# RUN:  minus_rel = _end - 0x10; \<br>
> +# RUN:  minus_abs = _end - _start; \<br>
>  # RUN: }" > %t.script<br>
>  # RUN: ld.lld %t --script %t.script -o %t2<br>
>  # RUN: llvm-objdump -t %t2 | FileCheck %s<br>
> @@ -53,6 +57,8 @@<br>
>  # CHECK: 00000000001000 *ABS* 00000000 commonpagesize<br>
>  # CHECK: 0000000000ffff *ABS* 00000000 datasegmentalign<br>
>  # CHECK: 0000000000fff0 *ABS* 00000000 datasegmentalign2<br>
> +# CHECK: 0000000000ffe0 .text 00000000 minus_rel<br>
> +# CHECK: 0000000000fff0 *ABS* 00000000 minus_abs<br>
><br>
>  ## Mailformed number error.<br>
>  # RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script<br>
> Index: ELF/ScriptParser.cpp<br>
> ==============================<wbr>==============================<wbr>=======<br>
> --- ELF/ScriptParser.cpp<br>
> +++ ELF/ScriptParser.cpp<br>
> @@ -151,6 +151,8 @@<br>
>  }<br>
><br>
>  static ExprValue sub(ExprValue A, ExprValue B) {<br>
> +  if (!A.isAbsolute() && !B.isAbsolute())<br>
> +    return A.getValue() - B.getValue();<br>
>    return {A.Sec, false, A.getSectionOffset() - B.getValue(), A.Loc};<br>
>  }<br>
><br>
</div></div>> ______________________________<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>
</blockquote></div><br></div>