[lld] 8653db9 - [lld-macho][test] Make reloc-subtractor.s robust

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 20 20:50:10 PDT 2023


Author: Fangrui Song
Date: 2023-06-20T20:50:06-07:00
New Revision: 8653db9503774c0f70a5ae3858ceaf180815fe3b

URL: https://github.com/llvm/llvm-project/commit/8653db9503774c0f70a5ae3858ceaf180815fe3b
DIFF: https://github.com/llvm/llvm-project/commit/8653db9503774c0f70a5ae3858ceaf180815fe3b.diff

LOG: [lld-macho][test] Make reloc-subtractor.s robust

The test requires that LLVM integreated assembler generates
SUBTRACTOR/UNSIGNED relocations for `.long _minuend_1 - _subtrahend_1`.
This currently works by luck because:

* `_minuend_1` and `_subtrahend_1` are in different fragments (separated by a MCFillFragment)
* and the result is known to be negative at parsing time.

D153096 will change the assembler to fold `.long _minuend_1 - _subtrahend_1` to
a constant, giving ld -order_file no chance to change the result.

To fix the test, move the referenced labels after the label differences to block
constant folding.

Note: you may think the model is somewhat broken and it is. The
.subsections_via_symbols mechanism does not block such constant folding. In
reality SUBTRACTOR/UNSIGNED is for references to another section, which does not
have the problem.

Reviewed By: #lld-macho, smeenai

Differential Revision: https://reviews.llvm.org/D153382

Added: 
    

Modified: 
    lld/test/MachO/reloc-subtractor.s

Removed: 
    


################################################################################
diff  --git a/lld/test/MachO/reloc-subtractor.s b/lld/test/MachO/reloc-subtractor.s
index 550f27d352b57..24702731a2a2f 100644
--- a/lld/test/MachO/reloc-subtractor.s
+++ b/lld/test/MachO/reloc-subtractor.s
@@ -33,15 +33,6 @@ L_.minuend:
   .space 16
 
 .section __DATA,bar
-_minuend_1:
-  .space 16
-_minuend_2:
-  .space 16
-_subtrahend_1:
-  .space 16
-_subtrahend_2:
-  .space 16
-
 _sub1:
   .long _minuend_1 - _subtrahend_1
   .space 12
@@ -58,6 +49,16 @@ _sub5:
   .quad L_.minuend - _subtrahend_1 + 1
   .space 8
 
+.section __DATA,bar
+_minuend_1:
+  .space 16
+_minuend_2:
+  .space 16
+_subtrahend_1:
+  .space 16
+_subtrahend_2:
+  .space 16
+
 .text
 .p2align 2
 _main:


        


More information about the llvm-commits mailing list