Device trees commonly contain arrays of strings for compatible nodes. We recently extended the "sifive,test0" node in a backwards-compatible way, but QEMU didn't contain an FDT function to set 'compatible = "sifive,test1", "sifive,test0";'. I've converted over the code from the ARM virt board that was doing something similar to be a helper function, which I could then use for RISC-V as well.
I haven't tested the ARM change, but I have tested the RISC-V one. It appears to parse correctly in Linux, and a DTC treats it the same way as it treats the string arrays it compiles -- specifically: $ cat test.dts /dts-v1/; / { string = "stringa"; strings = "string1", "string2"; }; $ dtc -I dts test.dts -O dtb -o test.dtb $ dtc -I dtb test.dtb -O dts -o out.dts $ cat out.dts /dts-v1/; / { string = "stringa"; strings = "string1\0string2"; }; and $ qemu-system-riscv64 -m virt,dumpdtb=out.dtb ... $ dtc -I dtb test.dtb -O dts -o out.dts $ cat out.dts ... test@100000 { reg = <0x00 0x100000 0x00 0x1000>; compatible = "sifive,test1\0sifive,test0"; }; ... Changes since v1 <20191107222500.8018-1-pal...@sifive.com>: * This is now a multiple patch series. * The hepler function has been added and used by the RISC-V virt board. * The ARM virt board has been converted to use the helper function