Patchwork kernel-arch: Always use ld.bfd to link the kernel

login
register
mail settings
Submitter Phil Blundell
Date April 23, 2013, 4:47 p.m.
Message ID <1366735649.5732.21.camel@phil-desktop.brightsign>
Download mbox | patch
Permalink /patch/48709/
State Accepted
Commit 5652086c75be0eb5e9deac0e3f2b7bd343583838
Headers show

Comments

Phil Blundell - April 23, 2013, 4:47 p.m.
The kernel's penchant for custom linker scripts means that it doesn't
generally get on very well with gold.  Make sure we are using the BFD
linker here no matter what the distro default is set to.

Signed-off-by: Phil Blundell <philb@gnu.org>
---
 meta/classes/kernel-arch.bbclass |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Denys Dmytriyenko - March 28, 2014, 5:28 p.m.
On Tue, Apr 23, 2013 at 05:47:29PM +0100, Phil Blundell wrote:
> The kernel's penchant for custom linker scripts means that it doesn't
> generally get on very well with gold.  Make sure we are using the BFD
> linker here no matter what the distro default is set to.
> 
> Signed-off-by: Phil Blundell <philb@gnu.org>
> ---
>  meta/classes/kernel-arch.bbclass |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/classes/kernel-arch.bbclass
> b/meta/classes/kernel-arch.bbclass
> index b3b71ba..4a140eb 100644
> --- a/meta/classes/kernel-arch.bbclass
> +++ b/meta/classes/kernel-arch.bbclass
> @@ -53,6 +53,6 @@ TARGET_AR_KERNEL_ARCH ?= ""
>  HOST_AR_KERNEL_ARCH ?= "${TARGET_AR_KERNEL_ARCH}"
>  
>  KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH}"
> -KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld ${HOST_LD_KERNEL_ARCH}"
> +KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
>  KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"

I know this is almost a year-old change.

The question I have is - what should one do when using an external toolchain 
that doesn't have ld.bfd provided? I know these days with gold vs. BFD linker, 
it's common to have ld.bfd, but there could be exceptions...

Should this assignment be conditional, so it's easier to override from 
local.conf or distro?
Khem Raj - April 1, 2014, 5:41 a.m.
On Fri, Mar 28, 2014 at 10:28 AM, Denys Dmytriyenko <denis@denix.org> wrote:
>> -KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld ${HOST_LD_KERNEL_ARCH}"
>> +KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
>>  KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
>
> I know this is almost a year-old change.
>
> The question I have is - what should one do when using an external toolchain
> that doesn't have ld.bfd provided? I know these days with gold vs. BFD linker,
> it's common to have ld.bfd, but there could be exceptions...
>
> Should this assignment be conditional, so it's easier to override from
> local.conf or distro?

Can external toolchain create ld.bfd symlink ?
Phil Blundell - April 1, 2014, 12:19 p.m.
On Fri, 2014-03-28 at 13:28 -0400, Denys Dmytriyenko wrote:
> >  KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH}"
> > -KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld ${HOST_LD_KERNEL_ARCH}"
> > +KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
> >  KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
> 
> I know this is almost a year-old change.
> 
> The question I have is - what should one do when using an external toolchain 
> that doesn't have ld.bfd provided? I know these days with gold vs. BFD linker, 
> it's common to have ld.bfd, but there could be exceptions...
> 
> Should this assignment be conditional, so it's easier to override from 
> local.conf or distro?

Making those assignments all be conditional doesn't sound like a totally
unreasonable plan to me.  (I think it would be a bad idea to make
KERNEL_LD alone be conditional; if we change one then we should change
all four.)

Alternatively I guess you could take the view that the external
toolchain packaging ought to be providing an ld.bfd symlink if there
isn't already one.  There are other places in oe-core which mention
ld.bfd (one of them is gcc-cross-initial, which probably wouldn't be an
issue for external toolchains, but another is u-boot which might be) and
fixing the problem in the external toolchain would avoid the need to
find and fix every place that refers to ld.bfd.  So I think this would
be my preference.

p.

Patch

diff --git a/meta/classes/kernel-arch.bbclass
b/meta/classes/kernel-arch.bbclass
index b3b71ba..4a140eb 100644
--- a/meta/classes/kernel-arch.bbclass
+++ b/meta/classes/kernel-arch.bbclass
@@ -53,6 +53,6 @@  TARGET_AR_KERNEL_ARCH ?= ""
 HOST_AR_KERNEL_ARCH ?= "${TARGET_AR_KERNEL_ARCH}"
 
 KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH}"
-KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld ${HOST_LD_KERNEL_ARCH}"
+KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
 KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"