I prefer not to handle the extension implication rules, as it's easy
for them to get out of sync, and this should be the linux kernel's
responsibility rather than libgcc's.
> +struct {
> + unsigned vendorID;
This field is gone since it moved to __riscv_cpu_model
> + unsigned length;
> + unsigned long long features[RISCV_VENDOR_FEATURE_BITS_LENGTH];
> +} __riscv_vendor_feature_bits __attribute__ ((visibility ("hidden"),
> nocommon));
> +
> +struct {
> + unsigned mvendorid;
> + unsigned long long marchid;
> + unsigned long long mimpid;
although it mismatch with what riscv-c-api-doc defined but you are
right, it's MXLEN, rather than 32 bits only, also MXLEN may larger than
UXLEN which is legal, so unsigned long long is the right
> +} __riscv_cpu_model __attribute__ ((visibility ("hidden"), nocommon));
> +