[PATCH v2 0/9] RISC-V: Support version controling for ISA standard extensions and CSR

Jim Wilson jimw@sifive.com
Thu May 28 20:09:33 GMT 2020


I noticed that my riscv32-elf ld testsuite results went from 490
passes to 345 passes after an update indicating that something major
broke.  Bisecting took me to this patch.  Looking at the ld.log file,
I see

Executing on host: sh -c {riscv32-unknown-elf-gcc -B/home/jimw/FOSS/BINUTILS/X-\
test-rv32-elf-new/ld/tmpdir/ld/   -L/home/jimw/FOSS/install-riscv32/riscv32-unk\
nown-elf/lib  tmpdir/compiler11685.c -o tmpdir/compiler11685.out 2>&1}  /dev/nu\
ll ld.tmp (timeout = 300)
spawn [open ...]^M
/home/jimw/FOSS/BINUTILS/X-test-rv32-elf-new/ld/tmpdir/ld/collect-ld: error: /t\
mp/ccJmOmJk.o: conflicting priv spec version (major/minor/revision).
/home/jimw/FOSS/BINUTILS/X-test-rv32-elf-new/ld/tmpdir/ld/collect-ld: error: /t\
mp/ccJmOmJk.o: conflicting priv spec version (major/minor/revision).
/home/jimw/FOSS/BINUTILS/X-test-rv32-elf-new/ld/tmpdir/ld/collect-ld: failed to\
 merge target specific data of file /tmp/ccJmOmJk.o
collect2: error: ld returned 1 exit status

This is check_compiler_available, so any test that needs a compiler
fails to run.

Apparently object files created with this patch are not compatible
with object files created without this patch.  The error message
doesn't indicate exactly what the priv spec conflict is, or exactly
which files are conflicting, so isn't very user friendly.  I had to
rerun the linker under the debugger to see what is going on.  The old
crt0.o file has
Attribute Section: riscv
File Attributes
  Tag_RISCV_arch: "rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"
and the new tmp.o created with the patch has
Attribute Section: riscv
File Attributes
  Tag_RISCV_stack_align: 16-bytes
  Tag_RISCV_arch: "rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"
  Tag_RISCV_priv_spec: 1
  Tag_RISCV_priv_spec_minor: 11
so it appears that absence of the new Tag_RISCV_pric_spec is
considered a hard incompatibility.  I would argue that an object file
without a priv spec version set should be allowed to link with any
other object file.  it is only when you have two object files with
priv_spec tags that indicate different versions that you should error.

Jim


More information about the Binutils mailing list