1 ! Test inter-file DataLabel support. 2 ! 3 ! We need to test symbols that are: 4 ! * Global, defined in this file, with/without/both-with-without datalabel 5 ! references. 6 ! * The above in combinations where the reference is/is not from within 7 ! the same section. The implementation is currently indifferent to that 8 ! fact, but it seems likely to be something that can change. 9 ! * Extern with/without/both-with-without datalabel-qualified references. 10 ! * The above with reference from same *and* other file. 11 ! * The above in combinations for where the symbol is/is not a 12 ! STO_SH5_ISA32-marked symbol. 13 14 ! There will be omissions and overlap in combinations. Add spotted 15 ! omissions with complementary tests in other files. 16 17 .text 18 .mode SHmedia 19 20 ! For good measure, we start with a nop to get a non-zero offset within 21 ! the .text section. 22 23 .global start 24 start: 25 nop 26 27 ! Referenced from the same file, same section, is ISA32, only referenced 28 ! with datalabel qualifier. 29 .global foo 30 foo: 31 nop 32 movi (datalabel foo + 8) & 65535,r30 33 34 ! Referenced from same file, same section, both with and without 35 ! datalabel qualifier, is ISA32. 36 .global fooboth 37 fooboth: 38 nop 39 movi (datalabel fooboth + 16) & 65535,r40 40 movi (fooboth + 12) & 65535,r40 41 42 ! Same as above, but in different order. 43 .global fooboth2 44 fooboth2: 45 nop 46 movi (fooboth2 + 12) & 65535,r40 47 movi (datalabel fooboth2 + 16) & 65535,r40 48 49 ! Referenced from this file and another, same section, is ISA32. 50 .global foowithout 51 foowithout: 52 nop 53 movi (foowithout + 24) & 65535,r30 54 55 ! Same as above, different section than definition. 56 57 .global foo_other 58 foo_other: 59 nop 60 .global foo_otherboth 61 foo_otherboth: 62 nop 63 .global foo_otherboth2 64 foo_otherboth2: 65 nop 66 .global foo_otherwithout 67 foo_otherwithout: 68 nop 69 70 .section .rodata 71 .long datalabel foo_other + 4 72 .long datalabel foo_otherboth + 40 73 .long foo_otherboth + 24 74 .long foo_otherboth2 + 24 75 .long datalabel foo_otherboth2 + 40 76 .long foo_otherwithout 77 78 .text 79 80 ! Same as above, mixing references from same and other section. 81 .global foo_mix 82 foo_mix: 83 nop 84 movi (datalabel foo_mix + 8) & 65535,r30 85 .global foo_mix2 86 foo_mix2: 87 nop 88 movi (foo_mix2 + 8) & 65535,r30 89 .global foo_mixboth 90 foo_mixboth: 91 nop 92 movi (datalabel foo_mixboth + 80) & 65535,r30 93 movi (foo_mixboth + 80) & 65535,r30 94 .global foo_mixboth2 95 foo_mixboth2: 96 nop 97 movi (foo_mixboth2 + 64) & 65535,r30 98 movi (datalabel foo_mixboth2 + 64) & 65535,r30 99 .global foo_mixwithout 100 foo_mixwithout: 101 nop 102 movi (foo_mixwithout + 42) & 65535,r30 103 .global foo_mixwithout2 104 foo_mixwithout2: 105 nop 106 movi (foo_mixwithout2 + 24) & 65535,r30 107 108 .section .rodata 109 .long foo_mix + 4 110 .long datalabel foo_mix2 + 48 111 .long datalabel foo_mixboth + 400 112 .long foo_mixboth + 420 113 .long foo_mixboth2 + 248 114 .long datalabel foo_mixboth2 + 240 115 .long foo_mixwithout 116 117 ! Same as above, referencing symbol in other file (reference only from 118 ! this to other file). 119 120 .text 121 nop 122 movi (datalabel bar + 8) & 65535,r30 123 124 movi (datalabel barboth + 16) & 65535,r40 125 movi (barboth + 12) & 65535,r40 126 127 movi (barboth2 + 12) & 65535,r40 128 movi (datalabel barboth2 + 16) & 65535,r40 129 130 movi (barwithout + 24) & 65535,r30 131 132 .section .rodata 133 .long datalabel bar_other + 4 134 .long datalabel bar_otherboth + 40 135 .long bar_otherboth + 24 136 .long bar_otherboth2 + 24 137 .long datalabel bar_otherboth2 + 40 138 .long bar_otherwithout 139 140 .text 141 movi (datalabel bar_mix + 8) & 65535,r30 142 movi (bar_mix2 + 8) & 65535,r30 143 movi (datalabel bar_mixboth + 80) & 65535,r30 144 movi (bar_mixboth + 80) & 65535,r30 145 movi (bar_mixboth2 + 64) & 65535,r30 146 movi (datalabel bar_mixboth2 + 64) & 65535,r30 147 movi (bar_mixwithout + 42) & 65535,r30 148 movi (bar_mixwithout2 + 24) & 65535,r30 149 150 .section .rodata 151 .long bar_mix + 4 152 .long datalabel bar_mix2 + 48 153 .long datalabel bar_mixboth + 400 154 .long bar_mixboth + 420 155 .long bar_mixboth2 + 248 156 .long datalabel bar_mixboth2 + 240 157 .long bar_mixwithout 158 159 ! Same as above, referencing symbol in other file *and* within that file. 160 161 .text 162 movi (datalabel baz + 8) & 65535,r30 163 164 movi (datalabel bazboth + 16) & 65535,r40 165 movi (bazboth + 12) & 65535,r40 166 167 movi (bazboth2 + 12) & 65535,r40 168 movi (datalabel bazboth2 + 16) & 65535,r40 169 170 movi (bazwithout + 24) & 65535,r30 171 172 .section .rodata 173 .long datalabel baz_other + 4 174 .long datalabel baz_otherboth + 40 175 .long baz_otherboth + 24 176 .long baz_otherboth2 + 24 177 .long datalabel baz_otherboth2 + 40 178 .long baz_otherwithout 179 180 .text 181 movi (datalabel baz_mix + 8) & 65535,r30 182 movi (baz_mix2 + 8) & 65535,r30 183 movi (datalabel baz_mixboth + 80) & 65535,r30 184 movi (baz_mixboth + 80) & 65535,r30 185 movi (baz_mixboth2 + 64) & 65535,r30 186 movi (datalabel baz_mixboth2 + 64) & 65535,r30 187 movi (baz_mixwithout + 42) & 65535,r30 188 movi (baz_mixwithout2 + 24) & 65535,r30 189 190 .section .rodata 191 .long baz_mix + 4 192 .long datalabel baz_mix2 + 48 193 .long datalabel baz_mixboth + 400 194 .long baz_mixboth + 420 195 .long baz_mixboth2 + 248 196 .long datalabel baz_mixboth2 + 240 197 .long baz_mixwithout 198 199 ! Same as all of the above, but where the symbol is not an ISA32 one. 200 201 .data 202 .global dfoo 203 dfoo: 204 .long 0 205 .long (datalabel dfoo + 8) 206 207 .global dfooboth 208 dfooboth: 209 .long 0 210 .long (datalabel dfooboth + 16) 211 .long (dfooboth + 12) 212 213 .global dfooboth2 214 dfooboth2: 215 .long 0 216 .long (dfooboth2 + 12) 217 .long (datalabel dfooboth2 + 16) 218 219 .global dfoowithout 220 dfoowithout: 221 .long 0 222 .long (dfoowithout + 24) 223 224 .global dfoo_other 225 dfoo_other: 226 .long 0 227 .global dfoo_otherboth 228 dfoo_otherboth: 229 .long 0 230 .global dfoo_otherboth2 231 dfoo_otherboth2: 232 .long 0 233 .global dfoo_otherwithout 234 dfoo_otherwithout: 235 .long 0 236 237 .section .rodata 238 .long datalabel dfoo_other + 4 239 .long datalabel dfoo_otherboth + 40 240 .long dfoo_otherboth + 24 241 .long dfoo_otherboth2 + 24 242 .long datalabel dfoo_otherboth2 + 40 243 .long dfoo_otherwithout 244 245 .data 246 247 ! Same as above, mixing references from same and other section. 248 .global dfoo_mix 249 dfoo_mix: 250 .long 0 251 .long (datalabel dfoo_mix + 8) 252 .global dfoo_mix2 253 dfoo_mix2: 254 .long 0 255 .long (dfoo_mix2 + 8) 256 .global dfoo_mixboth 257 dfoo_mixboth: 258 .long 0 259 .long (datalabel dfoo_mixboth + 80) 260 .long (dfoo_mixboth + 80) 261 .global dfoo_mixboth2 262 dfoo_mixboth2: 263 .long 0 264 .long (dfoo_mixboth2 + 64) 265 .long (datalabel dfoo_mixboth2 + 64) 266 .global dfoo_mixwithout 267 dfoo_mixwithout: 268 .long 0 269 .long (dfoo_mixwithout + 42) 270 .global dfoo_mixwithout2 271 dfoo_mixwithout2: 272 .long 0 273 .long (dfoo_mixwithout2 + 24) 274 275 .section .rodata 276 .long dfoo_mix + 4 277 .long datalabel dfoo_mix2 + 48 278 .long datalabel dfoo_mixboth + 400 279 .long dfoo_mixboth + 420 280 .long dfoo_mixboth2 + 248 281 .long datalabel dfoo_mixboth2 + 240 282 .long dfoo_mixwithout 283 284 ! Same as above, referencing symbol in other file (reference only from 285 ! this to other file). 286 287 .text 288 movi (datalabel dbarboth + 16) & 65535,r40 289 movi (dbarboth + 12) & 65535,r40 290 movi (dbarboth2 + 12) & 65535,r40 291 movi (datalabel dbarboth2 + 16) & 65535,r40 292 movi (dbarwithout + 24) & 65535,r30 293 294 .data 295 .long (datalabel dbar + 8) 296 .long datalabel dbar_other + 4 297 .long datalabel dbar_otherboth + 40 298 .long dbar_otherboth + 24 299 .long dbar_otherboth2 + 24 300 .long datalabel dbar_otherboth2 + 40 301 .long dbar_otherwithout 302 303 .text 304 movi (datalabel dbar_mix + 8) & 65535,r30 305 movi (dbar_mix2 + 8) & 65535,r30 306 movi (datalabel dbar_mixboth + 80) & 65535,r30 307 movi (dbar_mixboth + 80) & 65535,r30 308 movi (dbar_mixboth2 + 64) & 65535,r30 309 movi (datalabel dbar_mixboth2 + 64) & 65535,r30 310 movi (dbar_mixwithout + 42) & 65535,r30 311 movi (dbar_mixwithout2 + 24) & 65535,r30 312 313 .data 314 .long dbar_mix + 4 315 .long datalabel dbar_mix2 + 48 316 .long datalabel dbar_mixboth + 400 317 .long dbar_mixboth + 420 318 .long dbar_mixboth2 + 248 319 .long datalabel dbar_mixboth2 + 240 320 .long dbar_mixwithout 321 322 ! Same as above, referencing symbol in other file *and* within that file. 323 324 .text 325 movi (datalabel dbazboth + 16) & 65535,r40 326 movi (dbazboth + 12) & 65535,r40 327 328 movi (dbazboth2 + 12) & 65535,r40 329 movi (datalabel dbazboth2 + 16) & 65535,r40 330 331 movi (dbazwithout + 24) & 65535,r30 332 333 .data 334 .long (datalabel dbaz + 8) 335 .long datalabel dbaz_other + 4 336 .long datalabel dbaz_otherboth + 40 337 .long dbaz_otherboth + 24 338 .long dbaz_otherboth2 + 24 339 .long datalabel dbaz_otherboth2 + 40 340 .long dbaz_otherwithout 341 342 .text 343 movi (datalabel dbaz_mix + 8) & 65535,r30 344 movi (dbaz_mix2 + 8) & 65535,r30 345 movi (datalabel dbaz_mixboth + 80) & 65535,r30 346 movi (dbaz_mixboth + 80) & 65535,r30 347 movi (dbaz_mixboth2 + 64) & 65535,r30 348 movi (datalabel dbaz_mixboth2 + 64) & 65535,r30 349 movi (dbaz_mixwithout + 42) & 65535,r30 350 movi (dbaz_mixwithout2 + 24) & 65535,r30 351 352 .data 353 .long dbaz_mix + 4 354 .long datalabel dbaz_mix2 + 48 355 .long datalabel dbaz_mixboth + 400 356 .long dbaz_mixboth + 420 357 .long dbaz_mixboth2 + 248 358 .long datalabel dbaz_mixboth2 + 240 359 .long dbaz_mixwithout 360