Message ID | 20191018004929.3445-5-paul.walmsley@sifive.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | riscv: resolve most warnings from sparse | expand |
On Thu, Oct 17, 2019 at 05:49:25PM -0700, Paul Walmsley wrote: > Static analysis tools such as sparse don't set the RISC-V C model > preprocessor directives such as "__riscv_cmodel_medany", set by the C > compilers. This causes the static analyzers to evaluate different > preprocessor paths than C compilers would. Fix this by defining the > appropriate C model macros in the static analyzer command lines. > > Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com> > --- > arch/riscv/Makefile | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > index f5e914210245..0247a90bd4d8 100644 > --- a/arch/riscv/Makefile > +++ b/arch/riscv/Makefile > @@ -47,9 +47,11 @@ KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET) > > ifeq ($(CONFIG_CMODEL_MEDLOW),y) > KBUILD_CFLAGS += -mcmodel=medlow > + CHECKFLAGS += -D__riscv_cmodel_medlow > endif > ifeq ($(CONFIG_CMODEL_MEDANY),y) > KBUILD_CFLAGS += -mcmodel=medany > + CHECKFLAGS += -D__riscv_cmodel_medany I can teach sparse about this in the following days. -- Luc Van Oostenryck
On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > On Thu, Oct 17, 2019 at 05:49:25PM -0700, Paul Walmsley wrote: > > Static analysis tools such as sparse don't set the RISC-V C model > > preprocessor directives such as "__riscv_cmodel_medany", set by the C > > compilers. This causes the static analyzers to evaluate different > > preprocessor paths than C compilers would. Fix this by defining the > > appropriate C model macros in the static analyzer command lines. > > > > Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com> > > --- > > arch/riscv/Makefile | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > > index f5e914210245..0247a90bd4d8 100644 > > --- a/arch/riscv/Makefile > > +++ b/arch/riscv/Makefile > > @@ -47,9 +47,11 @@ KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET) > > > > ifeq ($(CONFIG_CMODEL_MEDLOW),y) > > KBUILD_CFLAGS += -mcmodel=medlow > > + CHECKFLAGS += -D__riscv_cmodel_medlow > > endif > > ifeq ($(CONFIG_CMODEL_MEDANY),y) > > KBUILD_CFLAGS += -mcmodel=medany > > + CHECKFLAGS += -D__riscv_cmodel_medany > > I can teach sparse about this in the following days. That would be great. Would you be willing to follow up with me via E-mail or mailing list post when it's fixed? If so, then in the meantime, I'll just drop this patch. - Paul
On Thu, Oct 17, 2019 at 09:39:29PM -0700, Paul Walmsley wrote: > On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > > On Thu, Oct 17, 2019 at 05:49:25PM -0700, Paul Walmsley wrote: .... > > > ifeq ($(CONFIG_CMODEL_MEDANY),y) > > > KBUILD_CFLAGS += -mcmodel=medany > > > + CHECKFLAGS += -D__riscv_cmodel_medany > > > > I can teach sparse about this in the following days. > > That would be great. Would you be willing to follow up with me via E-mail > or mailing list post when it's fixed? If so, then in the meantime, I'll > just drop this patch. For sure. -- Luc
On Thu, 17 Oct 2019 21:39:29 PDT (-0700), Paul Walmsley wrote: > On Fri, 18 Oct 2019, Luc Van Oostenryck wrote: > >> On Thu, Oct 17, 2019 at 05:49:25PM -0700, Paul Walmsley wrote: >> > Static analysis tools such as sparse don't set the RISC-V C model >> > preprocessor directives such as "__riscv_cmodel_medany", set by the C >> > compilers. This causes the static analyzers to evaluate different >> > preprocessor paths than C compilers would. Fix this by defining the >> > appropriate C model macros in the static analyzer command lines. >> > >> > Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com> >> > --- >> > arch/riscv/Makefile | 2 ++ >> > 1 file changed, 2 insertions(+) >> > >> > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile >> > index f5e914210245..0247a90bd4d8 100644 >> > --- a/arch/riscv/Makefile >> > +++ b/arch/riscv/Makefile >> > @@ -47,9 +47,11 @@ KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET) >> > >> > ifeq ($(CONFIG_CMODEL_MEDLOW),y) >> > KBUILD_CFLAGS += -mcmodel=medlow >> > + CHECKFLAGS += -D__riscv_cmodel_medlow >> > endif >> > ifeq ($(CONFIG_CMODEL_MEDANY),y) >> > KBUILD_CFLAGS += -mcmodel=medany >> > + CHECKFLAGS += -D__riscv_cmodel_medany >> >> I can teach sparse about this in the following days. > > That would be great. Would you be willing to follow up with me via E-mail > or mailing list post when it's fixed? If so, then in the meantime, I'll > just drop this patch. It's probably worth going through all our argument-dependent builtin definitions at the same time. They're generated by riscv_cpu_cpp_builtins(): https://github.com/gcc-mirror/gcc/blob/master/gcc/config/riscv/riscv-c.c#L35 . > > > - Paul > > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv
On Tue, Oct 22, 2019 at 08:09:59AM -0700, Palmer Dabbelt wrote: > > It's probably worth going through all our argument-dependent builtin > definitions at the same time. They're generated by > riscv_cpu_cpp_builtins(): > https://github.com/gcc-mirror/gcc/blob/master/gcc/config/riscv/riscv-c.c#L35 Yes, I agree. However, these are higly dependent on parsing -march and this is quite arch-specific which sparse is not really needed for. I'll add some infrastructure for this in the followings weeks. -- Luc
diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile index f5e914210245..0247a90bd4d8 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -47,9 +47,11 @@ KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET) ifeq ($(CONFIG_CMODEL_MEDLOW),y) KBUILD_CFLAGS += -mcmodel=medlow + CHECKFLAGS += -D__riscv_cmodel_medlow endif ifeq ($(CONFIG_CMODEL_MEDANY),y) KBUILD_CFLAGS += -mcmodel=medany + CHECKFLAGS += -D__riscv_cmodel_medany endif ifeq ($(CONFIG_MODULE_SECTIONS),y) KBUILD_LDS_MODULE += $(srctree)/arch/riscv/kernel/module.lds
Static analysis tools such as sparse don't set the RISC-V C model preprocessor directives such as "__riscv_cmodel_medany", set by the C compilers. This causes the static analyzers to evaluate different preprocessor paths than C compilers would. Fix this by defining the appropriate C model macros in the static analyzer command lines. Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com> --- arch/riscv/Makefile | 2 ++ 1 file changed, 2 insertions(+)