<div dir="ltr"><div>Hi</div><div><br></div><div>Thanks for your reply.<br></div><div dir="ltr"><br></div><div dir="ltr">> The evaluation order of expressions is not well defined.<br>



Using -= or += may cause difficult-to-explain portability issues across<br>



GNU ld and ld.lld.<br></div><div><br>I didn't know that.<br>Thank you for the information.<br></div><div dir="ltr"></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr"><br></div><div class="gmail_attr">Saito Yutaka</div><div dir="ltr" class="gmail_attr"><br></div><div dir="ltr" class="gmail_attr">2021年4月25日(日) 6:16 Fangrui Song <<a href="mailto:maskray@google.com" target="_blank">maskray@google.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2021-04-24, saito yutaka via llvm-dev wrote:<br>
>Hello.<br>
><br>
>I got link error when I try build code on arm target.<br>
>It seems that It could'n use "-=" operation when using arm.<br>
>The following is what we tried.<br>
><br>
>$ cat sample.c<br>
>void __init_array_start(void){};<br>
>void __init_array_end(void){};<br>
>int main()<br>
>{<br>
>     return 0;<br>
>}<br>
><br>
>$ cat sample.ld<br>
>SECTIONS<br>
>{<br>
>    sample = 0;<br>
>    sample += 1;<br>
>    sample -= 1;<br>
>    . = 0x08048000 + SIZEOF_HEADERS;<br>
>    .text : {*(.text)}<br>
>    .rodata : {*(.rodata)}<br>
>    .data : {*(.data)}<br>
>    .bss : {*(.bss)}<br>
>}<br>
><br>
># There is no error that build x86_64 target.<br>
>$ clang -fPIE -target x86_64-unknown-none-elf -nodefaultlibs sample.c -T<br>
>sample.ld<br>
><br>
># But I get a error when build arm target.<br>
>$ clang  -target arm-none-eabi -march=armv7-m -mcpu=cortex-m4<br>
>-nodefaultlibs sample.c -T sample.ld<br>
>ld.lld: error: sample.ld:5: malformed number: =<br>
>>>>     sample -= 1;<br>
>>>>             ^<br>
>clang-12: error: ld.lld command failed with exit code 1 (use -v to see<br>
>invocation)<br>
<br>
-= is not supported. ld.lld only supports +=.<br>
-= is probably too rare in the wild.<br>
<br>
Actually changing the value of a symbol is hardly a good idea.<br>
The evaluation order of expressions is not well defined.<br>
Using -= or += may cause difficult-to-explain portability issues across<br>
GNU ld and ld.lld.<br>
<br>
># The version of clang I use using is 12.<br>
>$ clang --version<br>
>clang version 12.0.0 (<a href="https://github.com/llvm/llvm-project/" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/</a><br>
>b978a93635b584db380274d7c8963c73989944a1)<br>
>Target: x86_64-unknown-linux-gnu<br>
>Thread model: posix<br>
><br>
>Is there some linker script difference depend on target?<br>
<br>
No.<br>
</blockquote></div></div>