Thanks for catch this, I didn't enable multilib for linux toolchain for a while, I guess we should implement TARGET_COMPUTE_MULTILIB for linux targets to simplify the damm multilib files, but I agree it's too late in the release cycle, so let's fix that in this way for now.
So LGTM and OK for trunk, thanks On Fri, Apr 14, 2023 at 4:55 AM Palmer Dabbelt <pal...@rivosinc.com> wrote: > > It looks like multilib-generator hasn't been run for t-linux-multilib in > a while and it's pretty broken. In order to regenerate the stub with > support for V I needed a pair of fixes: > > * All extensions were being prefixed with an underscore, which leads to > some odd combinations like "rv32gc_v", this just adds underscores to > the multi-letter extensions. > * The input base ISAs were being canonicalized, which resulted in some > odd multilib default search paths. I'm not sure if anything breaks > due to this, but it seems safer to just leave them alone. > > We've likely got a bunch more issues here related to multlib path > mangling in the presence of underscores and for other extensions, but > this at leasts lets me run the testsuite with V enabled. > > gcc/ChangeLog: > > * config/riscv/multilib-generator (maybe_add_underscore): New > function > (_expand_combination): Canonicalize differently. > * config/riscv/t-linux-multilib: Regenerate. > --- > We're probably going to need a bunch more work here to handle the > ISA-dependent multilib resolution, but I don't think that's gcc-13 > material -- certainly I don't have the time to do it, and even if it was > ready now I'd bet it's too invasive for this point in the development > cycle. > > We probably also want to handle the various B extensions in here, since > those are upstream and useful. I'm going to hold off on that for a bit > as I've got some V-related testsuite failures that I'd rather look at > first. I figured it'd be better to just send this now, though, as at > least I can run the V test suite under multilib. > > OK for trunk? > > --- > gcc/config/riscv/multilib-generator | 18 +++--- > gcc/config/riscv/t-linux-multilib | 86 ++++++++++++++++++++++------- > 2 files changed, 78 insertions(+), 26 deletions(-) > > diff --git a/gcc/config/riscv/multilib-generator > b/gcc/config/riscv/multilib-generator > index 0a3d4c07757..58b7198b243 100755 > --- a/gcc/config/riscv/multilib-generator > +++ b/gcc/config/riscv/multilib-generator > @@ -62,6 +62,15 @@ def arch_canonicalize(arch, isa_spec): > out, err = proc.communicate() > return out.decode().strip() > > +# > +# Multi-letter extensions are seperated by underscores, but single-letter > +# extensions are not. > +# > +def maybe_add_underscore(ext): > + if len(ext) is 1: > + return ext > + return '_' + ext > + > # > # Handle expansion operation. > # > @@ -70,11 +79,7 @@ def arch_canonicalize(arch, isa_spec): > # > def _expand_combination(ext): > exts = list(ext.split("*")) > - > - # Add underline to every extension. > - # e.g. > - # _b * zvamo => _b * _zvamo > - exts = list(map(lambda x: '_' + x, exts)) > + exts = list(map(lambda x: maybe_add_underscore(x), exts)) > > # No need to expand if there is no `*`. > if len(exts) == 1: > @@ -163,14 +168,13 @@ for cmodel in cmodels: > if cmodel == "compact" and arch.startswith("rv32"): > continue > > - arch = arch_canonicalize (arch, args.misa_spec) > arches[arch] = 1 > abis[abi] = 1 > extra = list(filter(None, extra.split(','))) > ext_combs = expand_combination(ext) > alts = sum([[x] + [x + y for y in ext_combs] for x in [arch] + extra], > []) > alts = filter(lambda x: len(x) != 0, alts) > - alts = list(map(lambda a : arch_canonicalize(a, args.misa_spec), alts)) > + alts = alts + list(map(lambda a : arch_canonicalize(a, args.misa_spec), > alts)) > > # Drop duplicated entry. > alts = unique(alts) > diff --git a/gcc/config/riscv/t-linux-multilib > b/gcc/config/riscv/t-linux-multilib > index 298547fee38..400cf7f0634 100644 > --- a/gcc/config/riscv/t-linux-multilib > +++ b/gcc/config/riscv/t-linux-multilib > @@ -1,46 +1,94 @@ > # This file was generated by multilib-generator with the command: > -# ./multilib-generator > rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc- > rv32imafdc-ilp32d-rv32imafd- > rv64imac-lp64-rv64ima,rv64imaf,rv64imafd,rv64imafc,rv64imafdc- > rv64imafdc-lp64d-rv64imafd- > -MULTILIB_OPTIONS = > march=rv32imac/march=rv32ima/march=rv32imaf/march=rv32imafd/march=rv32imafc/march=rv32imafdc/march=rv32g/march=rv32gc/march=rv64imac/march=rv64ima/march=rv64imaf/march=rv64imafd/march=rv64imafc/march=rv64imafdc/march=rv64g/march=rv64gc > mabi=ilp32/mabi=ilp32d/mabi=lp64/mabi=lp64d > +# ./multilib-generator > rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc-v > rv32imafdc-ilp32d-rv32imafd-v > rv64imac-lp64-rv64ima,rv64imaf,rv64imafd,rv64imafc,rv64imafdc-v > rv64imafdc-lp64d-rv64imafd-v > +MULTILIB_OPTIONS = > march=rv32imac/march=rv32ima/march=rv32imacv/march=rv32imaf/march=rv32imaf_zicsr/march=rv32imafc/march=rv32imafc_zicsr/march=rv32imafcv/march=rv32imafd/march=rv32imafd_zicsr/march=rv32imafdc/march=rv32imafdc_zicsr/march=rv32imafdcv/march=rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv32imafdv/march=rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv32imafv/march=rv32imav/march=rv64imac/march=rv64ima/march=rv64imacv/march=rv64imaf/march=rv64imaf_zicsr/march=rv64imafc/march=rv64imafc_zicsr/march=rv64imafcv/march=rv64imafd/march=rv64imafd_zicsr/march=rv64imafdc/march=rv64imafdc_zicsr/march=rv64imafdcv/march=rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv64imafdv/march=rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv64imafv/march=rv64imav > mabi=ilp32/mabi=ilp32d/mabi=lp64/mabi=lp64d > MULTILIB_DIRNAMES = rv32imac \ > rv32ima \ > +rv32imacv \ > rv32imaf \ > -rv32imafd \ > +rv32imaf_zicsr \ > rv32imafc \ > +rv32imafc_zicsr \ > +rv32imafcv \ > +rv32imafd \ > +rv32imafd_zicsr \ > rv32imafdc \ > -rv32g \ > -rv32gc \ > +rv32imafdc_zicsr \ > +rv32imafdcv \ > +rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \ > +rv32imafdv \ > +rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \ > +rv32imafv \ > +rv32imav \ > rv64imac \ > rv64ima \ > +rv64imacv \ > rv64imaf \ > -rv64imafd \ > +rv64imaf_zicsr \ > rv64imafc \ > +rv64imafc_zicsr \ > +rv64imafcv \ > +rv64imafd \ > +rv64imafd_zicsr \ > rv64imafdc \ > -rv64g \ > -rv64gc ilp32 \ > +rv64imafdc_zicsr \ > +rv64imafdcv \ > +rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \ > +rv64imafdv \ > +rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \ > +rv64imafv \ > +rv64imav ilp32 \ > ilp32d \ > lp64 \ > -lp64d > +lp64d > MULTILIB_REQUIRED = march=rv32imac/mabi=ilp32 \ > march=rv32imafdc/mabi=ilp32d \ > march=rv64imac/mabi=lp64 \ > march=rv64imafdc/mabi=lp64d > MULTILIB_REUSE = march.rv32imac/mabi.ilp32=march.rv32ima/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imacv/mabi.ilp32 \ > march.rv32imac/mabi.ilp32=march.rv32imaf/mabi.ilp32 \ > -march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imaf_zicsr/mabi.ilp32 \ > march.rv32imac/mabi.ilp32=march.rv32imafc/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafc_zicsr/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafcv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafd_zicsr/mabi.ilp32 \ > march.rv32imac/mabi.ilp32=march.rv32imafdc/mabi.ilp32 \ > -march.rv32imac/mabi.ilp32=march.rv32g/mabi.ilp32 \ > -march.rv32imac/mabi.ilp32=march.rv32gc/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafdc_zicsr/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafdcv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 > \ > +march.rv32imac/mabi.ilp32=march.rv32imafdv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 > \ > +march.rv32imac/mabi.ilp32=march.rv32imafv/mabi.ilp32 \ > +march.rv32imac/mabi.ilp32=march.rv32imav/mabi.ilp32 \ > march.rv32imafdc/mabi.ilp32d=march.rv32imafd/mabi.ilp32d \ > -march.rv32imafdc/mabi.ilp32d=march.rv32gc/mabi.ilp32d \ > -march.rv32imafdc/mabi.ilp32d=march.rv32g/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=march.rv32imafd_zicsr/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=march.rv32imafdc_zicsr/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=march.rv32imafdcv/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=march.rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d > \ > +march.rv32imafdc/mabi.ilp32d=march.rv32imafdv/mabi.ilp32d \ > +march.rv32imafdc/mabi.ilp32d=march.rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d > \ > march.rv64imac/mabi.lp64=march.rv64ima/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imacv/mabi.lp64 \ > march.rv64imac/mabi.lp64=march.rv64imaf/mabi.lp64 \ > -march.rv64imac/mabi.lp64=march.rv64imafd/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imaf_zicsr/mabi.lp64 \ > march.rv64imac/mabi.lp64=march.rv64imafc/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafc_zicsr/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafcv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafd/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafd_zicsr/mabi.lp64 \ > march.rv64imac/mabi.lp64=march.rv64imafdc/mabi.lp64 \ > -march.rv64imac/mabi.lp64=march.rv64g/mabi.lp64 \ > -march.rv64imac/mabi.lp64=march.rv64gc/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafdc_zicsr/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafdcv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 > \ > +march.rv64imac/mabi.lp64=march.rv64imafdv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 > \ > +march.rv64imac/mabi.lp64=march.rv64imafv/mabi.lp64 \ > +march.rv64imac/mabi.lp64=march.rv64imav/mabi.lp64 \ > march.rv64imafdc/mabi.lp64d=march.rv64imafd/mabi.lp64d \ > -march.rv64imafdc/mabi.lp64d=march.rv64gc/mabi.lp64d \ > -march.rv64imafdc/mabi.lp64d=march.rv64g/mabi.lp64d > +march.rv64imafdc/mabi.lp64d=march.rv64imafd_zicsr/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=march.rv64imafdc_zicsr/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=march.rv64imafdcv/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=march.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d > \ > +march.rv64imafdc/mabi.lp64d=march.rv64imafdv/mabi.lp64d \ > +march.rv64imafdc/mabi.lp64d=march.rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d > -- > 2.39.2 >