| ! 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: |