# RUN: llvm-mc -filetype=obj -arch mipsel %s | llvm-readobj -r | FileCheck %s

# Test the order of records in the relocation table.
#
# MIPS has a few relocations that have an AHL component in the expression used
# to evaluate them. This AHL component is an addend with the same number of
# bits as a symbol value but not all of our ABI's are able to supply a
# sufficiently sized addend in a single relocation.
#
# The O32 ABI for example, uses REL relocations which store the addend in the
# section data. All the relocations with AHL components affect 16-bit fields
# so the addend is limited to 16-bit. This ABI resolves the limitation by
# linking relocations (e.g. R_MIPS_HI16 and R_MIPS_LO16) and distributing the
# addend between the linked relocations. The ABI mandates that such relocations
# must be next to each other in a particular order (e.g. R_MIPS_HI16 must be
# followed by a matching R_MIPS_LO16) but the rule is less strict in practice.
#
# See MipsELFObjectWriter.cpp for a full description of the rules.
#
# TODO: Add mips16 and micromips tests.

# HILO 1: HI/LO already match
	.section .mips_hilo_1, "ax", @progbits
	lui $2, %hi(sym1)
	addiu $2, $2, %lo(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_1 {
# CHECK-NEXT:    0x0 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x4 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 2: R_MIPS_HI16 must be followed by a matching R_MIPS_LO16.
	.section .mips_hilo_2, "ax", @progbits
	addiu $2, $2, %lo(sym1)
	lui $2, %hi(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_2 {
# CHECK-NEXT:    0x4 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 3: R_MIPS_HI16 must be followed by a matching R_MIPS_LO16.
#         The second relocation matches if the symbol is the same.
	.section .mips_hilo_3, "ax", @progbits
	addiu $2, $2, %lo(sym1)
	lui $2, %hi(sym2)
	addiu $2, $2, %lo(sym2)
	lui $2, %hi(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_3 {
# CHECK-NEXT:    0xC R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x4 R_MIPS_HI16 sym2
# CHECK-NEXT:    0x8 R_MIPS_LO16 sym2
# CHECK-NEXT:  }

# HILO 3b: Same as 3 but a different starting order.
	.section .mips_hilo_3b, "ax", @progbits
	addiu $2, $2, %lo(sym1)
	lui $2, %hi(sym1)
	addiu $2, $2, %lo(sym2)
	lui $2, %hi(sym2)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_3b {
# CHECK-NEXT:    0x4 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:    0xC R_MIPS_HI16 sym2
# CHECK-NEXT:    0x8 R_MIPS_LO16 sym2
# CHECK-NEXT:  }

# HILO 4: R_MIPS_HI16 must be followed by a matching R_MIPS_LO16.
#         The second relocation matches if the symbol is the same and the
#         offset is the same.
	.section .mips_hilo_4, "ax", @progbits
	addiu $2, $2, %lo(sym1)
	addiu $2, $2, %lo(sym1+4)
	lui $2, %hi(sym1+4)
	lui $2, %hi(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_4 {
# CHECK-NEXT:    0xC R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x8 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x4 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 5: R_MIPS_HI16 must be followed by a matching R_MIPS_LO16.
#         The second relocation matches if the symbol is the same and the
#         offset is greater or equal. Exact matches are preferred so both
#         R_MIPS_HI16's match the same R_MIPS_LO16.
	.section .mips_hilo_5, "ax", @progbits
	lui $2, %hi(sym1)
	lui $2, %hi(sym1)
	addiu $2, $2, %lo(sym1+1)
	addiu $2, $2, %lo(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_5 {
# CHECK-NEXT:    0x8 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x0 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x4 R_MIPS_HI16 sym1
# CHECK-NEXT:    0xC R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 6: R_MIPS_HI16 must be followed by a matching R_MIPS_LO16.
#         The second relocation matches if the symbol is the same and the
#         offset is greater or equal. Smaller offsets are preferred so both
#         R_MIPS_HI16's still match the same R_MIPS_LO16.
	.section .mips_hilo_6, "ax", @progbits
	lui $2, %hi(sym1)
	lui $2, %hi(sym1)
	addiu $2, $2, %lo(sym1+2)
	addiu $2, $2, %lo(sym1+1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_6 {
# CHECK-NEXT:    0x8 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x0 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x4 R_MIPS_HI16 sym1
# CHECK-NEXT:    0xC R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 7: R_MIPS_HI16 must be followed by a matching R_MIPS_LO16.
#         The second relocation matches if the symbol is the same and the
#         offset is greater or equal so that the carry bit is correct. The two
#         R_MIPS_HI16's therefore match different R_MIPS_LO16's.
	.section .mips_hilo_7, "ax", @progbits
	addiu $2, $2, %lo(sym1+1)
	addiu $2, $2, %lo(sym1+6)
	lui $2, %hi(sym1+4)
	lui $2, %hi(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_7 {
# CHECK-NEXT:    0xC R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x8 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x4 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 8: R_MIPS_LO16's may be orphaned.
	.section .mips_hilo_8, "ax", @progbits
	lw $2, %lo(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_8 {
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 8b: Another example of 8. The R_MIPS_LO16 at 0x4 is orphaned.
	.section .mips_hilo_8b, "ax", @progbits
	lw $2, %lo(sym1)
	lw $2, %lo(sym1)
	lui $2, %hi(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_8b {
# CHECK-NEXT:    0x8 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x4 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 9: R_MIPS_HI16's don't need a matching R_MIPS_LO16 to immediately follow
#         so long as there is one after the R_MIPS_HI16 somewhere. This isn't
#         permitted by the ABI specification but has been allowed in practice
#         for a very long time. The R_MIPS_HI16's should be ordered by the
#         address they affect for purely cosmetic reasons.
	.section .mips_hilo_9, "ax", @progbits
	lw $2, %lo(sym1)
	lui $2, %hi(sym1)
	lui $2, %hi(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_9 {
# CHECK-NEXT:    0x4 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x8 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:  }

# HILO 10: R_MIPS_HI16's must have a matching R_MIPS_LO16 somewhere though.
#          When this is impossible we have two possible bad behaviours
#          depending on the linker implementation:
#          * The linker silently computes the wrong value using a partially
#            matching R_MIPS_LO16.
#          * The linker rejects the relocation table as invalid.
#          The latter is preferable since it's far easier to detect and debug so
#          check that we encourage this behaviour by putting invalid
#          R_MIPS_HI16's at the end of the relocation table where the risk of a
#          partial match is very low.
	.section .mips_hilo_10, "ax", @progbits
	lui $2, %hi(sym1)
	lw $2, %lo(sym1)
	lui $2, %hi(sym2)
	lui $2, %hi(sym3)
	lw $2, %lo(sym3)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_hilo_10 {
# CHECK-NEXT:    0x0 R_MIPS_HI16 sym1
# CHECK-NEXT:    0x4 R_MIPS_LO16 sym1
# CHECK-NEXT:    0xC R_MIPS_HI16 sym3
# CHECK-NEXT:    0x10 R_MIPS_LO16 sym3
# CHECK-NEXT:    0x8 R_MIPS_HI16 sym2
# CHECK-NEXT:  }

# Now do the same tests for GOT/LO.
# The rules only apply to R_MIPS_GOT16 on local symbols which are also
# rewritten into section relative relocations.

# GOTLO 1: GOT/LO already match
	.section .mips_gotlo_1, "ax", @progbits
	lui $2, %got(local1)
	addiu $2, $2, %lo(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_1 {
# CHECK-NEXT:    0x0 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x4 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 2: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
	.section .mips_gotlo_2, "ax", @progbits
	addiu $2, $2, %lo(local1)
	lui $2, %got(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_2 {
# CHECK-NEXT:    0x4 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 3: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
#          The second relocation matches if the symbol is the same.
	.section .mips_gotlo_3, "ax", @progbits
	addiu $2, $2, %lo(local1)
	lui $2, %got(local2)
	addiu $2, $2, %lo(local2)
	lui $2, %got(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_3 {
# CHECK-NEXT:    0xC R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:    0x4 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x8 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 3b: Same as 3 but a different starting order.
	.section .mips_gotlo_3b, "ax", @progbits
	addiu $2, $2, %lo(local1)
	lui $2, %got(local1)
	addiu $2, $2, %lo(local2)
	lui $2, %got(local2)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_3b {
# CHECK-NEXT:    0x4 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:    0xC R_MIPS_GOT16 .text
# CHECK-NEXT:    0x8 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 4: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
#          The second relocation matches if the symbol is the same and the
#          offset is the same.
	.section .mips_gotlo_4, "ax", @progbits
	addiu $2, $2, %lo(local1)
	addiu $2, $2, %lo(local1+4)
	lui $2, %got(local1+4)
	lui $2, %got(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_4 {
# CHECK-NEXT:    0xC R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:    0x8 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x4 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 5: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
#          The second relocation matches if the symbol is the same and the
#          offset is greater or equal. Exact matches are preferred so both
#          R_MIPS_GOT16's match the same R_MIPS_LO16.
	.section .mips_gotlo_5, "ax", @progbits
	lui $2, %got(local1)
	lui $2, %got(local1)
	addiu $2, $2, %lo(local1+1)
	addiu $2, $2, %lo(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_5 {
# CHECK-NEXT:    0x8 R_MIPS_LO16 .text
# CHECK-NEXT:    0x0 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x4 R_MIPS_GOT16 .text
# CHECK-NEXT:    0xC R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 6: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
#          The second relocation matches if the symbol is the same and the
#          offset is greater or equal. Smaller offsets are preferred so both
#          R_MIPS_GOT16's still match the same R_MIPS_LO16.
	.section .mips_gotlo_6, "ax", @progbits
	lui $2, %got(local1)
	lui $2, %got(local1)
	addiu $2, $2, %lo(local1+2)
	addiu $2, $2, %lo(local1+1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_6 {
# CHECK-NEXT:    0x8 R_MIPS_LO16 .text
# CHECK-NEXT:    0x0 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x4 R_MIPS_GOT16 .text
# CHECK-NEXT:    0xC R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 7: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
#          The second relocation matches if the symbol is the same and the
#          offset is greater or equal so that the carry bit is correct. The two
#          R_MIPS_GOT16's therefore match different R_MIPS_LO16's.
	.section .mips_gotlo_7, "ax", @progbits
	addiu $2, $2, %lo(local1+1)
	addiu $2, $2, %lo(local1+6)
	lui $2, %got(local1+4)
	lui $2, %got(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_7 {
# CHECK-NEXT:    0xC R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:    0x8 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x4 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 8: R_MIPS_LO16's may be orphaned.
	.section .mips_gotlo_8, "ax", @progbits
	lw $2, %lo(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_8 {
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 8b: Another example of 8. The R_MIPS_LO16 at 0x4 is orphaned.
	.section .mips_gotlo_8b, "ax", @progbits
	lw $2, %lo(local1)
	lw $2, %lo(local1)
	lui $2, %got(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_8b {
# CHECK-NEXT:    0x8 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:    0x4 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 9: R_MIPS_GOT16's don't need a matching R_MIPS_LO16 to immediately
#          follow so long as there is one after the R_MIPS_GOT16 somewhere.
#          This isn't permitted by the ABI specification but has been allowed
#          in practice for a very long time. The R_MIPS_GOT16's should be
#          ordered by the address they affect for purely cosmetic reasons.
	.section .mips_gotlo_9, "ax", @progbits
	lw $2, %lo(local1)
	lui $2, %got(local1)
	lui $2, %got(local1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_9 {
# CHECK-NEXT:    0x4 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x8 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x0 R_MIPS_LO16 .text
# CHECK-NEXT:  }

# GOTLO 10: R_MIPS_GOT16's must have a matching R_MIPS_LO16 somewhere though.
#           When this is impossible we have two possible bad behaviours
#           depending on the linker implementation:
#           * The linker silently computes the wrong value using a partially
#             matching R_MIPS_LO16.
#           * The linker rejects the relocation table as invalid.
#           The latter is preferable since it's far easier to detect and debug
#           so check that we encourage this behaviour by putting invalid
#           R_MIPS_GOT16's at the end of the relocation table where the risk of
#           a partial match is very low.
	.section .mips_gotlo_10, "ax", @progbits
	lui $2, %got(local1)
	lw $2, %lo(local1)
	lui $2, %got(local2)
	lui $2, %got(local3)
	lw $2, %lo(local3)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_gotlo_10 {
# CHECK-NEXT:    0x0 R_MIPS_GOT16 .text
# CHECK-NEXT:    0x4 R_MIPS_LO16 .text
# CHECK-NEXT:    0xC R_MIPS_GOT16 .text
# CHECK-NEXT:    0x10 R_MIPS_LO16 .text
# CHECK-NEXT:    0x8 R_MIPS_GOT16 .text
# CHECK-NEXT:  }

# Finally, do test 2 for R_MIPS_GOT16 on external symbols to prove they are
# exempt from the rules for local symbols.

# External GOTLO 2: R_MIPS_GOT16 must be followed by a matching R_MIPS_LO16.
	.section .mips_ext_gotlo_2, "ax", @progbits
	addiu $2, $2, %lo(sym1)
	lui $2, %got(sym1)

# CHECK-LABEL: Section ({{[0-9]+}}) .rel.mips_ext_gotlo_2 {
# CHECK-NEXT:    0x0 R_MIPS_LO16 sym1
# CHECK-NEXT:    0x4 R_MIPS_GOT16 sym1
# CHECK-NEXT:  }

# Define some local symbols.
        .text
        nop
local1: nop
local2: nop
local3: nop
