Re: [s390:features 97/98] Unsupported relocation type: 21

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Josh,

On Fri, Feb 23, 2024 at 03:59:39PM -0800, Josh Poimboeuf wrote:
> On Fri, Feb 23, 2024 at 11:03:13AM +0100, Sumanth Korikkar wrote:
> > In the random config generated by lkp test robot
> > 
> >  CONFIG_TI_CPSW=m
> >  CONFIG_TI_DAVINCI_EMAC=y
> > 
> > In drivers/net/ethernet/ti/Makefile:
> >  11 obj-$(CONFIG_TI_DAVINCI_EMAC) += ti_davinci_emac.o
> >  12 ti_davinci_emac-y := davinci_emac.o davinci_cpdma.o
> >  ...
> >  16 obj-$(CONFIG_TI_CPSW) += ti_cpsw.o
> >  17 ti_cpsw-y := cpsw.o davinci_cpdma.o cpsw_ale.o cpsw_priv.o cpsw_sl.o cpsw_ethtool.o
> > 
> > Here davinci_cpdma.o is used in both   obj-$(CONFIG_TI_DAVINCI_EMAC) and
> > obj-$(CONFIG_TI_CPSW), one built as inbuilt and one built as module
> > correspondingly (randconfig)
> > 
> > This leads to conflict in Kbuild and results in linking  davinci_cpdma.o
> > in vmlinux.
> > * However, davinci_cpdma.o is built with -DMODULE -fPIC.
> > * vmlinux is built with -fno-PIE.
> > 
> > This leads to R_390_GOTENT and R_390_GOTDBL entries in vmlinux, which is
> > not expected when building kernel with -fno-PIE.
> 
> Nice.
> 
> I suppose the current s390 memory model wouldn't support removing
> -fPIC for modules?

Answer from our toolchain team - Andreas Krebbel: It should be ideally
feasible to build modules without -fPIC on s390.

> 
> Otherwise each driver could get its own copy of the object file:
> 
> diff --git a/drivers/net/ethernet/ti/Makefile b/drivers/net/ethernet/ti/Makefile
> index d8590304f3df..ef6591b6a4c9 100644
> --- a/drivers/net/ethernet/ti/Makefile
> +++ b/drivers/net/ethernet/ti/Makefile
> @@ -9,14 +9,14 @@ obj-$(CONFIG_TI_CPSW_SWITCHDEV) += cpsw-common.o
>  
>  obj-$(CONFIG_TLAN) += tlan.o
>  obj-$(CONFIG_TI_DAVINCI_EMAC) += ti_davinci_emac.o
> -ti_davinci_emac-y := davinci_emac.o davinci_cpdma.o
> +ti_davinci_emac-y := davinci_emac.o emac_cpdma.o
>  obj-$(CONFIG_TI_DAVINCI_MDIO) += davinci_mdio.o
>  obj-$(CONFIG_TI_CPSW_PHY_SEL) += cpsw-phy-sel.o
>  obj-$(CONFIG_TI_CPTS) += cpts.o
>  obj-$(CONFIG_TI_CPSW) += ti_cpsw.o
> -ti_cpsw-y := cpsw.o davinci_cpdma.o cpsw_ale.o cpsw_priv.o cpsw_sl.o cpsw_ethtool.o
> +ti_cpsw-y := cpsw.o cpsw_cpdma.o cpsw_ale.o cpsw_priv.o cpsw_sl.o cpsw_ethtool.o
>  obj-$(CONFIG_TI_CPSW_SWITCHDEV) += ti_cpsw_new.o
> -ti_cpsw_new-y := cpsw_switchdev.o cpsw_new.o davinci_cpdma.o cpsw_ale.o cpsw_sl.o cpsw_priv.o cpsw_ethtool.o
> +ti_cpsw_new-y := cpsw_switchdev.o cpsw_new.o cpsw_new_cpdma.o cpsw_ale.o cpsw_sl.o cpsw_priv.o cpsw_ethtool.o
>  
>  obj-$(CONFIG_TI_KEYSTONE_NETCP) += keystone_netcp.o
>  keystone_netcp-y := netcp_core.o cpsw_ale.o
> diff --git a/drivers/net/ethernet/ti/cpsw_cpdma.c b/drivers/net/ethernet/ti/cpsw_cpdma.c
> new file mode 100644
> index 000000000000..017156225e7f
> --- /dev/null
> +++ b/drivers/net/ethernet/ti/cpsw_cpdma.c
> @@ -0,0 +1 @@
> +#include "davinci_cpdma.c"
> diff --git a/drivers/net/ethernet/ti/cpsw_new_cpdma.c b/drivers/net/ethernet/ti/cpsw_new_cpdma.c
> new file mode 100644
> index 000000000000..017156225e7f
> --- /dev/null
> +++ b/drivers/net/ethernet/ti/cpsw_new_cpdma.c
> @@ -0,0 +1 @@
> +#include "davinci_cpdma.c"
> diff --git a/drivers/net/ethernet/ti/emac_cpdma.c b/drivers/net/ethernet/ti/emac_cpdma.c
> new file mode 100644
> index 000000000000..017156225e7f
> --- /dev/null
> +++ b/drivers/net/ethernet/ti/emac_cpdma.c
> @@ -0,0 +1 @@
> +#include "davinci_cpdma.c"
> 

Tried compiling it,

When I enabled both CONFIG_TI_CPSW_SWITCHDEV and CONFIG_TI_DAVINCI_EMAC
to y, it could lead to the following:

  LD      vmlinux.o
ld: drivers/net/ethernet/ti/cpsw_new_cpdma.o: in function `cpdma_ctlr_create':
linux/drivers/net/ethernet/ti/davinci_cpdma.c:511:
multiple definition of `cpdma_ctlr_create';
drivers/net/ethernet/ti/emac_cpdma.o:linux/drivers/net/ethernet/ti/davinci_cpdma.c:511:
first defined here

Thanks,
Sumanth




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux