lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 30 Jun 2017 00:36:42 +0900
From:   Masahiro Yamada <yamada.masahiro@...ionext.com>
To:     Guenter Roeck <linux@...ck-us.net>
Cc:     Nicholas Piggin <npiggin@...il.com>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: Build failure in -next due to 'sh: thin archives fix linking'

Hi.

2017-06-28 23:02 GMT+09:00 Guenter Roeck <linux@...ck-us.net>:
> On 06/28/2017 05:58 AM, Nicholas Piggin wrote:
>>
>> On Wed, 28 Jun 2017 05:38:50 -0700
>> Guenter Roeck <linux@...ck-us.net> wrote:
>>
>>> Hi,
>>>
>>> I see the following build error in -next when building
>>> sh:rts7751r2dplus_defconfig.
>>>
>>> sh4-linux-ld: arch/sh/kernel/vsyscall/vsyscall-dummy.o: compiled for a
>>> big endian system and target is little endian
>>> sh4-linux-ld: arch/sh/kernel/vsyscall/vsyscall-dummy.o: uses instructions
>>> which are incompatible with instructions used in previous modules
>>> sh4-linux-ld: failed to merge target specific data of file
>>> arch/sh/kernel/vsyscall/vsyscall-dummy.o
>>> make[2]: *** [arch/sh/kernel/vsyscall/vsyscall-syms.o] Error 1
>>>
>>> Bisect points to 'sh: thin archives fix linking' as the culprit. Bisect
>>> log is attached.
>>> I tried with gcc 4.8.3 and 6.3.0, both built with buildroot for sh4eb.
>>
>>
>> Thanks for the report. In arch/sh/kernel/vsyscall/Makefile, the line:
>>
>>   cmd_syscall_syms = $(LD) -r -o $@ -R $<
>>
>> Can you try adding $(LDFLAGS), e.g. change it to:
>>
>>   cmd_syscall_syms = $(LD) $(LDFLAGS) -r -o $@ -R $<
>>
>
> That fixes the problem (including the missing symbols seen after reverting
> the offending patch).


Thanks!

Instead of adding $(LDFLAGS), how about using cmd_ld?


Please see line 260 of scripts/Makefile.lib

quiet_cmd_ld = LD      $@
cmd_ld = $(LD) $(LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) \
               $(filter-out FORCE,$^) -o $@

We can reuse it and $(LDFLAGS) is already there.



I also noticed redundant "targets += gate-syms.o"
I see "obj-y += gate-syms.o" and $(obj-y) is automatically
added to "targets".


The following diff is my proposal.
If it is OK, I will squash it and update the thin-ar branch.


diff --git a/arch/ia64/kernel/Makefile.gate b/arch/ia64/kernel/Makefile.gate
index 8cd125a..263ab51 100644
--- a/arch/ia64/kernel/Makefile.gate
+++ b/arch/ia64/kernel/Makefile.gate
@@ -1,6 +1,6 @@
 # The gate DSO image is built using a special linker script.

-targets += gate.so gate-syms.o gate-dummy.o
+targets += gate.so gate-dummy.o

 obj-y += gate-syms.o

@@ -16,16 +16,13 @@ GATECFLAGS_gate.so = -shared -s
-Wl,-soname=linux-gate.so.1 \
 $(obj)/gate.so: $(obj)/gate.lds $(obj)/gate.o FORCE
        $(call if_changed,gate)

-# create an object file to resolve gate symbols
-quiet_cmd_gate_syms = GATESYM $@
-      cmd_gate_syms = $(LD) -r -o $@ -R $<
-
 GATECFLAGS_gate-dummy.o = -r
 $(obj)/gate-dummy.o: $(obj)/gate.lds $(obj)/gate.o FORCE
        $(call if_changed,gate)

+LDFLAGS_gate-syms.o := -r -R
 $(obj)/gate-syms.o: $(obj)/gate-dummy.o FORCE
-       $(call if_changed,gate_syms)
+       $(call if_changed,ld)

 # gate-data.o contains the gate DSO image as data in section .data..gate.
 # We must build gate.so before we can assemble it.
diff --git a/arch/sh/kernel/vsyscall/Makefile b/arch/sh/kernel/vsyscall/Makefile
index 99685e5..6ab108f 100644
--- a/arch/sh/kernel/vsyscall/Makefile
+++ b/arch/sh/kernel/vsyscall/Makefile
@@ -31,8 +31,6 @@ $(obj)/vsyscall-dummy.o: $(src)/vsyscall.lds \
                        $(obj)/vsyscall-trapa.o $(obj)/vsyscall-note.o FORCE
        $(call if_changed,syscall)

-quiet_cmd_syscall_syms = SYSCALL $@
-      cmd_syscall_syms = $(LD) -r -o $@ -R $<
-
+LDFLAGS_vsyscall-syms.o := -r -R
 $(obj)/vsyscall-syms.o: $(obj)/vsyscall-dummy.o FORCE
-       $(call if_changed,syscall_syms)
+       $(call if_changed,ld)
diff --git a/arch/tile/kernel/vdso/Makefile b/arch/tile/kernel/vdso/Makefile
index c615ec0..0603ce6 100644
--- a/arch/tile/kernel/vdso/Makefile
+++ b/arch/tile/kernel/vdso/Makefile
@@ -55,11 +55,9 @@ SYSCFLAGS_vdso_dummy.o = -r
 $(obj)/vdso-dummy.o: $(src)/vdso.lds $(obj)/vrt_sigreturn.o FORCE
        $(call if_changed,vdsold)

-quiet_cmd_vdso_sym = VDSOSYM $@
-      cmd_vdso_sym = $(LD) -r -o $@ -R $<
-
+LDFLAGS_vdso-syms.o := -r -R
 $(obj)/vdso-syms.o: $(obj)/vdso-dummy.o FORCE
-       $(call if_changed,vdso_sym)
+       $(call if_changed,ld)

 # strip rule for the .so file
 $(obj)/%.so: OBJCOPYFLAGS := -S








-- 
Best Regards
Masahiro Yamada

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ