--- /dev/null
+#as: --no-underscore --em=criself
+#ld: -shared -m crislinux -z nocombreloc
+#ld_after_inputfiles: tmpdir/libdso-1b.so
+#warning: \A[^\n]*\.o, section `.text', to symbol `expfn@@TST2':\n
+#warning: [^\n]*recompile with -fPIC\Z
+#readelf: -a
+
+# Building a DSO with (unrecommended) non-pic pc-relative references
+# to a versioned symbol in a library got caught by an assert in
+# elf_cris_copy_indirect_symbol wherein the list of pc-relative
+# references wasn't merged, but simply asserted to be NULL before
+# copied to, on the merged-to (direct) symbol. For versioned symbols,
+# there was an "extra" copy made, to make a base-version symbol, where
+# the copied-from pc-relative list was NULL but the copied-to symbol
+# already had a list merged.
+
+# The list was used to emit warning messages, but incorrectly held the
+# relocation section for the reference, resulting in warnings being
+# emitted for any section with a pc-relative relocation.
+
+# The test checks that there's a warning message only for the
+# read-only sections section (.text) (not the read-write sections),
+# that the correct number of relocations is emitted and we also check
+# for the TEXTREL dynamic marker.
+
+#...
+ 0x00000016 \(TEXTREL\)[ ]+0x0
+#...
+Relocation section '\.rela\.text' at offset .* contains 4 entries:
+#...
+Relocation section '\.rela\.data' at offset .* contains 8 entries:
+#...
+Relocation section '.rela.data2' at offset .* contains 16 entries:
+#pass
--- /dev/null
+ .symver x,expfn@TST2 ; .symver required to make @ part of name.
+ .global _start
+ .type _start,@function
+_start:
+ .dword 0,0,0,0
+ .reloc 0,R_CRIS_32_PCREL,expfn
+ .reloc 4,R_CRIS_32_PCREL,expfn
+ .reloc 8,R_CRIS_32_PCREL,x
+ .reloc 12,R_CRIS_32_PCREL,x
+.Lfe3:
+ .size _start,.Lfe3-_start
+
+ .data
+ .global tab1
+ .type tab1,@object
+tab1:
+ .dword 0,0,0,0,0,0,0,0
+ .reloc 0,R_CRIS_32_PCREL,expfn
+ .reloc 4,R_CRIS_32_PCREL,expfn
+ .reloc 8,R_CRIS_32_PCREL,expfn
+ .reloc 12,R_CRIS_32_PCREL,expfn
+ .reloc 16,R_CRIS_32_PCREL,x
+ .reloc 20,R_CRIS_32_PCREL,x
+ .reloc 24,R_CRIS_32_PCREL,x
+ .reloc 28,R_CRIS_32_PCREL,x
+ .size tab1,.-tab1
+
+ .section .data2,"aw",@progbits
+ .global tab2
+ .type tab2,@object
+tab2:
+ .dword 0,0,0,0,0,0,0,0
+ .dword 0,0,0,0,0,0,0,0
+ .reloc 0,R_CRIS_32_PCREL,expfn
+ .reloc 4,R_CRIS_32_PCREL,expfn
+ .reloc 8,R_CRIS_32_PCREL,expfn
+ .reloc 12,R_CRIS_32_PCREL,expfn
+ .reloc 16,R_CRIS_32_PCREL,expfn
+ .reloc 20,R_CRIS_32_PCREL,expfn
+ .reloc 24,R_CRIS_32_PCREL,expfn
+ .reloc 28,R_CRIS_32_PCREL,expfn
+ .reloc 32,R_CRIS_32_PCREL,x
+ .reloc 36,R_CRIS_32_PCREL,x
+ .reloc 40,R_CRIS_32_PCREL,x
+ .reloc 44,R_CRIS_32_PCREL,x
+ .reloc 48,R_CRIS_32_PCREL,x
+ .reloc 52,R_CRIS_32_PCREL,x
+ .reloc 56,R_CRIS_32_PCREL,x
+ .reloc 60,R_CRIS_32_PCREL,x
+ .size tab1,.-tab2