blob: bbd4012505c56b20325a6e03d3da674b251bf1eb [file] [log] [blame]
! Test that .cranges are emitted:
! 1) Not for sections with single contents.
! 2) For data (through pseudo-ops) in SHmedia.
! 3) For mixed SHcompact and SHmedia sections.
! 4) For a mix of 2 and 3
! 5) For 4, repeated.
!
! Use section contents that need relaxing to strengthen the check that the
! .cranges implementation handles this correctly. Use different sizes for
! each contents part.
!
! The .text section has only SHmedia contents, and should not get a
! .cranges descriptor.
.mode SHmedia
.text
nop
shmedia:
movi 42,r45
movi shmediaend-shmedia,r46
shmediaend:
nop
! Likewise the SHcompact section.
.mode SHcompact
.section .text.compact,"ax"
nop
shcompact:
mov #42,r0
bt shcompactend
nop
shcompactend:
nop
! This section has SHmedia code followed by data. There should be two
! .cranges descriptors. Note that we put the .mode directive *after* the
! section change. It should not matter.
.section .text.shmediaanddata,"ax"
.mode SHmedia
shmedia_data_code:
movi 42,r45
movi shmedia_data_code_end-shmedia_data_code,r46
shmedia_data_code_end:
.long 0x6ff0fff0
.long shmedia_dataend-shmedia_data_code
.long 50
shmedia_dataend:
! This section mixes SHcompact and SHmedia code. There should be two
! .cranges descriptors.
.section .text.codemix,"ax"
shmedia_compact_code:
movi 42,r45
nop
nop
movi shmedia_compact_code_end-shmedia_compact_code,r46
nop
nop
shmedia_compact_code_end:
.mode SHcompact
compact_code:
nop
compact:
mov #40,r0
nop
nop
bt compactend
nop
compactend:
nop
! This section mixes SHcompact and SHmedia code, and has a constant
! section after the SHmedia code and one after the SHcompact code. There
! should be three or four .cranges descriptors, depending on whether one
! is emitted for the SHcompact constant pool: there's normally one such
! after each SHcompact function.
.mode SHmedia
.section .text.codemixconst,"ax"
nop
shmedia_compact_code2:
movi 42,r45
nop
nop
movi shmedia_compact_code_end2-shmedia_compact_code2,r46
nop
nop
.long 0x6ff0fff0
.long 0x6ff0fff0
.long 0x6ff00000
.long 0xfff0
.long 0x6ff0fff0
.long 0x6ff0fff0
.long 0
mediapoollabel:
.long mediapoollabel2-shmedia_compact_code2
mediapoolend:
shmedia_compact_code_end2:
.mode SHcompact
compact_code2:
nop
compact2:
mov #43,r0
nop
nop
bt compactend2
nop
nop
nop
compactend2:
nop
.space 102,0
.long 0
mediapoollabel2:
.long mediapoolend2-compact2
mediapoolend2:
! This section is like the previous, but repeated twice and adjusted to
! keep different sizes of each part.
.mode SHmedia
.section .text.codemixconst2,"ax"
nop
shmedia_compact_code3:
movi 42,r45
nop
nop
nop
nop
nop
nop
movi shmedia_compact_code_end3-shmedia_compact_code3,r46
.long 0x6ff0fff0
.long 0
.long 0
.long 0
.long 0
.long 0
.long 0
.long 0
.long 0
mediapoollabel3a:
.long mediapoollabel3a-shmedia_compact_code3
mediapoolend3a:
shmedia_compact_code_end3:
.mode SHcompact
compact_code3:
nop
compact3:
mov #44,r0
nop
nop
bt compactend3
nop
nop
nop
nop
nop
compactend3:
nop
.word 9
.word 0x900
.space 198,0
.long 0
mediapoollabel3:
.long mediapoolend3-compact3
mediapoolend3:
.mode SHmedia
nop
shmedia_compact_code4:
movi 43,r45
nop
nop
nop
nop
nop
nop
nop
nop
movi shmedia_compact_code_end4-shmedia_compact_code4,r46
.long 0x6ff0fff0
.space 20,0
mediapoollabel4a:
.long mediapoolend4a-shmedia_compact_code4
mediapoolend4a:
shmedia_compact_code_end4:
.mode SHcompact
compact_code4:
nop
compact4:
mov #14,r0
nop
nop
bt compactend4
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
compactend4:
nop
.space 298,0
.long 0
mediapoollabel4:
.long mediapoolend4-compact4
mediapoolend4: