+# Test .debug_info can reference .debug_ranges entries without ordering the
+# offsets strictly as increasing.
+
+ .text
+start:
+ .byte 1
+sub:
+ .byte 2
+end:
+
+ .section .debug_ranges,"",@progbits
+range:
+
+range_sub:
+ .long sub, end
+ .long 0, 0 # range terminator
+
+range_cu:
+ .long start, end
+ .long 0, 0 # range terminator
+
+ .section .debug_info,"",@progbits
+ .long debugE - debugS # Length of Compilation Unit Info
+debugS:
+ .value 0x2 # DWARF version number
+ .long abbrev0 # Offset Into Abbrev. Section
+ .byte 0x4 # Pointer Size (in bytes)
+
+ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit)
+ .long range_cu - range # DW_AT_ranges
+
+ .uleb128 0x2 # (DIE (0x6d) DW_TAG_subprogram)
+ .ascii "A\0" # DW_AT_name
+ .long range_sub - range # DW_AT_ranges
+debugE:
+
+ .section .debug_abbrev,"",@progbits
+abbrev0:
+ .uleb128 0x1 # (abbrev code)
+ .uleb128 0x11 # (TAG: DW_TAG_compile_unit)
+ .byte 0x0 # DW_children_no
+ .uleb128 0x55 # (DW_AT_ranges)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .byte 0x0
+ .byte 0x0
+
+ .uleb128 0x2 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x55 # (DW_AT_ranges)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .byte 0x0
+ .byte 0x0
+
+ .byte 0x0 # abbrevs terminator