From: Alexey.Brodkin@synopsys.com (Alexey Brodkin)
To: linux-snps-arc@lists.infradead.org
Subject: Build regressions/improvements in v4.9-rc1
Date: Thu, 27 Oct 2016 09:39:40 +0000 [thread overview]
Message-ID: <1477561144.2561.19.camel@synopsys.com> (raw)
In-Reply-To: <CAMuHMdUER2iSdACaU6uEO=122XyBPiVyKn3gW_uJJr2xbJMHYw@mail.gmail.com>
Hi Thomas,
On Thu, 2016-10-27@11:24 +0200, Geert Uytterhoeven wrote:
> On Thu, Oct 27, 2016 at 11:11 AM, Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> wrote:
> >
> > On Thu, 27 Oct 2016 09:07:55 +0000, Alexey Brodkin wrote:
> >
> > >
> > > >
> > > > axs101 is using a 770 core, while the toolchain is built for the HS38
> > > > core. I'm somewhat surprised that a single ARC toolchain cannot produce
> > > > code for both 770 and HS38, but it seems to be the case.
> > > >
> > > > So you need a separate toolchain for ARC770.
> > >
> > > Indeed axs101 uses ARC770 core which is ARCv1 AKA ARCompact ISA while
> > > axs103 sports the same base-board but CPU daughter-card contains ARC HS38 core
> > > which has ARCv2 ISA (binary incompatible with ARCompact).
> > >
> > > Essentially both gcc and binutils will happily build for both architectures given
> > > proper options were passed on the command line. But Linux kernel gets linked with
> > > pre-built libgcc (it is a part of toolchain). And so it all boils down to a requirement
> > > to have multilibbed uClibc toolchain. Which we don't have.
> >
> > Interesting. Why is libgcc linked with the kernel on ARC? I don't think
> > that's the case on other architectures: the kernel is freestanding and
> > provides everything that it needs without relying on the compiler
> > runtime.
>
> ARC is not the only one:
>
> $ git grep print-libgcc-file-name
> arch/arc/Makefile:LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name)
> arch/h8300/boot/compressed/Makefile:LIBGCC := $(shell
> $(CROSS-COMPILE)$(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
> arch/hexagon/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/m32r/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/nios2/Makefile:LIBGCC?????????:= $(shell $(CC) $(KBUILD_CFLAGS)
> $(KCFLAGS) -print-libgcc-file-name)
> arch/openrisc/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/parisc/Makefile:LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/tile/Makefile:??$(shell $(CC) $(KBUILD_CFLAGS) $(KCFLAGS)
> -print-libgcc-file-name)
> arch/xtensa/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/xtensa/boot/boot-redboot/Makefile:LIBGCC := $(shell $(CC)
> $(KBUILD_CFLAGS) -print-libgcc-file-name)
Right.
I'm not 100% sure about all the details in case of Linux kernel on ARC
but I actually implemented decoupling from libgcc in U-Boot for ARC.
And from that experience I know what was required out of libgcc, see
http://git.denx.de/?p=u-boot.git;a=patch;h=a67ef280f46803e319639f5380ff8da6c6b7fbe7
And these are functions required by U-Boot (most probably the same is applied to kernel):
1) so-called millicode, stuff like?__ld_rX_to_rY,?__st_rX_to_rX
2) shifts: __ashldi3,?__ashrdi3,?__lshrdi3,?
3) divisions:?udivmodsi4,?__divsi3,?__modsi3,?__udivsi3,?__umodsi3
Indeed it is possible to have so-called private libgcc in kernel as well but
benefit will be only for people building kernels but not user-space because
in absence of multilibbed toolchain 2 separate toolchains will be required anyways.
Still we'll have to pay an additional maintenance price to keep kernel's libgcc in
sync with the one from gcc.
-Alexey
WARNING: multiple messages have this Message-ID (diff)
From: Alexey Brodkin <Alexey.Brodkin@synopsys.com>
To: "thomas.petazzoni@free-electrons.com"
<thomas.petazzoni@free-electrons.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"peterz@infradead.org" <peterz@infradead.org>,
"mmarek@suse.cz" <mmarek@suse.cz>,
"Vineet.Gupta1@synopsys.com" <Vineet.Gupta1@synopsys.com>,
"linux-snps-arc@lists.infradead.org"
<linux-snps-arc@lists.infradead.org>,
"arnd@arndb.de" <arnd@arndb.de>,
"geert@linux-m68k.org" <geert@linux-m68k.org>,
"mpe@ellerman.id.au" <mpe@ellerman.id.au>
Subject: Re: Build regressions/improvements in v4.9-rc1
Date: Thu, 27 Oct 2016 09:39:40 +0000 [thread overview]
Message-ID: <1477561144.2561.19.camel@synopsys.com> (raw)
In-Reply-To: <CAMuHMdUER2iSdACaU6uEO=122XyBPiVyKn3gW_uJJr2xbJMHYw@mail.gmail.com>
Hi Thomas,
On Thu, 2016-10-27 at 11:24 +0200, Geert Uytterhoeven wrote:
> On Thu, Oct 27, 2016 at 11:11 AM, Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> wrote:
> >
> > On Thu, 27 Oct 2016 09:07:55 +0000, Alexey Brodkin wrote:
> >
> > >
> > > >
> > > > axs101 is using a 770 core, while the toolchain is built for the HS38
> > > > core. I'm somewhat surprised that a single ARC toolchain cannot produce
> > > > code for both 770 and HS38, but it seems to be the case.
> > > >
> > > > So you need a separate toolchain for ARC770.
> > >
> > > Indeed axs101 uses ARC770 core which is ARCv1 AKA ARCompact ISA while
> > > axs103 sports the same base-board but CPU daughter-card contains ARC HS38 core
> > > which has ARCv2 ISA (binary incompatible with ARCompact).
> > >
> > > Essentially both gcc and binutils will happily build for both architectures given
> > > proper options were passed on the command line. But Linux kernel gets linked with
> > > pre-built libgcc (it is a part of toolchain). And so it all boils down to a requirement
> > > to have multilibbed uClibc toolchain. Which we don't have.
> >
> > Interesting. Why is libgcc linked with the kernel on ARC? I don't think
> > that's the case on other architectures: the kernel is freestanding and
> > provides everything that it needs without relying on the compiler
> > runtime.
>
> ARC is not the only one:
>
> $ git grep print-libgcc-file-name
> arch/arc/Makefile:LIBGCC := $(shell $(CC) $(cflags-y) --print-libgcc-file-name)
> arch/h8300/boot/compressed/Makefile:LIBGCC := $(shell
> $(CROSS-COMPILE)$(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
> arch/hexagon/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/m32r/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/nios2/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> $(KCFLAGS) -print-libgcc-file-name)
> arch/openrisc/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/parisc/Makefile:LIBGCC = $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/tile/Makefile: $(shell $(CC) $(KBUILD_CFLAGS) $(KCFLAGS)
> -print-libgcc-file-name)
> arch/xtensa/Makefile:LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS)
> -print-libgcc-file-name)
> arch/xtensa/boot/boot-redboot/Makefile:LIBGCC := $(shell $(CC)
> $(KBUILD_CFLAGS) -print-libgcc-file-name)
Right.
I'm not 100% sure about all the details in case of Linux kernel on ARC
but I actually implemented decoupling from libgcc in U-Boot for ARC.
And from that experience I know what was required out of libgcc, see
http://git.denx.de/?p=u-boot.git;a=patch;h=a67ef280f46803e319639f5380ff8da6c6b7fbe7
And these are functions required by U-Boot (most probably the same is applied to kernel):
1) so-called millicode, stuff like __ld_rX_to_rY, __st_rX_to_rX
2) shifts: __ashldi3, __ashrdi3, __lshrdi3,
3) divisions: udivmodsi4, __divsi3, __modsi3, __udivsi3, __umodsi3
Indeed it is possible to have so-called private libgcc in kernel as well but
benefit will be only for people building kernels but not user-space because
in absence of multilibbed toolchain 2 separate toolchains will be required anyways.
Still we'll have to pay an additional maintenance price to keep kernel's libgcc in
sync with the one from gcc.
-Alexey
next prev parent reply other threads:[~2016-10-27 9:39 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-17 7:21 Build regressions/improvements in v4.9-rc1 Geert Uytterhoeven
2016-10-17 7:34 ` Geert Uytterhoeven
2016-10-17 7:34 ` Geert Uytterhoeven
2016-10-17 16:59 ` Vineet Gupta
2016-10-17 16:59 ` Vineet Gupta
2016-10-17 21:02 ` Arnd Bergmann
2016-10-17 21:02 ` Arnd Bergmann
2016-10-17 22:37 ` Vineet Gupta
2016-10-17 22:37 ` Vineet Gupta
2016-10-19 11:50 ` Michael Ellerman
2016-10-19 11:50 ` Michael Ellerman
2016-10-19 12:23 ` Alexey Brodkin
2016-10-19 12:23 ` Alexey Brodkin
2016-10-19 20:32 ` Thomas Petazzoni
2016-10-19 20:32 ` Thomas Petazzoni
2016-10-26 23:56 ` Michael Ellerman
2016-10-26 23:56 ` Michael Ellerman
2016-10-27 7:07 ` Thomas Petazzoni
2016-10-27 7:07 ` Thomas Petazzoni
2016-10-27 9:07 ` Alexey Brodkin
2016-10-27 9:07 ` Alexey Brodkin
2016-10-27 9:11 ` Thomas Petazzoni
2016-10-27 9:11 ` Thomas Petazzoni
2016-10-27 9:24 ` Geert Uytterhoeven
2016-10-27 9:24 ` Geert Uytterhoeven
2016-10-27 9:39 ` Alexey Brodkin [this message]
2016-10-27 9:39 ` Alexey Brodkin
2016-10-27 17:21 ` Vineet Gupta
2016-10-27 17:21 ` Vineet Gupta
2016-10-28 10:42 ` Arnd Bergmann
2016-10-28 10:42 ` Arnd Bergmann
2016-10-27 9:32 ` Arnd Bergmann
2016-10-27 9:32 ` Arnd Bergmann
2016-10-27 10:04 ` Thomas Petazzoni
2016-10-27 10:04 ` Thomas Petazzoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1477561144.2561.19.camel@synopsys.com \
--to=alexey.brodkin@synopsys.com \
--cc=linux-snps-arc@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.