Hi Tom.

On 23 August 2018 at 07:58, Tom Rini <tr...@konsulko.com> wrote:
> On Thu, Aug 23, 2018 at 04:45:29AM -0600, Simon Glass wrote:
>> Hi Tom,
>>
>> On 21 August 2018 at 17:11, Tom Rini <tr...@konsulko.com> wrote:
>> > On Tue, Aug 21, 2018 at 04:29:49PM -0600, Simon Glass wrote:
>> >> Hi Alex,
>> >>
>> >> On 21 August 2018 at 13:26, Alexander Graf <ag...@suse.de> wrote:
>> >> >
>> >> >
>> >> > On 21.08.18 19:30, Simon Glass wrote:
>> >> >> Hi Alex,
>> >> >>
>> >> >> On 20 August 2018 at 06:23, Alexander Graf <ag...@suse.de> wrote:
>> >> >>>
>> >> >>> On 08/17/2018 02:49 PM, Simon Glass wrote:
>> >> >>>>
>> >> >>>> Hi,
>> >> >>>>
>> >> >>>> On 9 August 2018 at 23:45, Bin Meng <bmeng...@gmail.com> wrote:
>> >> >>>>>
>> >> >>>>> Hi Alex,
>> >> >>>>>
>> >> >>>>> On Wed, Aug 8, 2018 at 1:16 AM, Alexander Graf <ag...@suse.de> 
>> >> >>>>> wrote:
>> >> >>>>>>
>> >> >>>>>>
>> >> >>>>>>> Am 07.08.2018 um 18:12 schrieb Simon Glass <s...@chromium.org>:
>> >> >>>>>>>
>> >> >>>>>>> Hi Alex,
>> >> >>>>>>>
>> >> >>>>>>>> On 11 June 2018 at 23:48, Alexander Graf <ag...@suse.de> wrote:
>> >> >>>>>>>> Some times gcc may generate data that is then used within code 
>> >> >>>>>>>> that may
>> >> >>>>>>>> be part of an efi runtime section. That data could be jump 
>> >> >>>>>>>> tables,
>> >> >>>>>>>> constants or strings.
>> >> >>>>>>>>
>> >> >>>>>>>> In order to make sure we catch these, we need to ensure that gcc 
>> >> >>>>>>>> emits
>> >> >>>>>>>> them into a section that we can relocate together with all the 
>> >> >>>>>>>> other
>> >> >>>>>>>> efi runtime bits. This only works if the -ffunction-sections and
>> >> >>>>>>>> -fdata-sections flags are passed and the efi runtime functions 
>> >> >>>>>>>> are
>> >> >>>>>>>> in a section that starts with ".text".
>> >> >>>>>>>>
>> >> >>>>>>>> Up to now we had all efi runtime bits in sections that did not
>> >> >>>>>>>> interfere with the normal section naming scheme, but this forces
>> >> >>>>>>>> us to do so. Hence we need to move the efi_loader 
>> >> >>>>>>>> text/data/rodata
>> >> >>>>>>>> sections before the global *(.text*) catch-all section.
>> >> >>>>>>>>
>> >> >>>>>>>> With this patch in place, we should hopefully have an easier time
>> >> >>>>>>>> to extend the efi runtime functionality in the future.
>> >> >>>>>>>>
>> >> >>>>>>>> Signed-off-by: Alexander Graf <ag...@suse.de>
>> >> >>>>>>>> ---
>> >> >>>>>>>> arch/arm/config.mk                        |  4 ++--
>> >> >>>>>>>> arch/arm/cpu/armv8/u-boot.lds             | 24 
>> >> >>>>>>>> +++++++++++++--------
>> >> >>>>>>>> arch/arm/cpu/u-boot.lds                   | 36 
>> >> >>>>>>>> ++++++++++++++++++-------------
>> >> >>>>>>>> arch/arm/mach-zynq/u-boot.lds             | 36 
>> >> >>>>>>>> ++++++++++++++++++-------------
>> >> >>>>>>>> arch/riscv/cpu/ax25/u-boot.lds            | 26 
>> >> >>>>>>>> +++++++++++++---------
>> >> >>>>>>>> arch/sandbox/config.mk                    |  3 +++
>> >> >>>>>>>> arch/sandbox/cpu/u-boot.lds               |  9 ++++----
>> >> >>>>>>>> arch/x86/config.mk                        |  2 +-
>> >> >>>>>>>> arch/x86/cpu/u-boot.lds                   | 32 
>> >> >>>>>>>> ++++++++++++++-------------
>> >> >>>>>>>> board/qualcomm/dragonboard410c/u-boot.lds | 17 +++++++++++++--
>> >> >>>>>>>> board/qualcomm/dragonboard820c/u-boot.lds | 24 
>> >> >>>>>>>> +++++++++++++--------
>> >> >>>>>>>> board/ti/am335x/u-boot.lds                | 36 
>> >> >>>>>>>> ++++++++++++++++++-------------
>> >> >>>>>>>> include/efi_loader.h                      |  4 ++--
>> >> >>>>>>>> 13 files changed, 154 insertions(+), 99 deletions(-)
>> >> >>>>>>>>
>> >> >>>>>>> I missed this at the time, probably thinking the subject made it 
>> >> >>>>>>> sound
>> >> >>>>>>> innocuous. There is no 'sandbox:' tag.
>> >> >>>>>>>
>> >> >>>>>>> This seems to break sandbox in a pretty strange way:
>> >> >>>>>>>
>> >> >>>>>>> gdb --args /tmp/crosfw/sandbox/u-boot -D
>> >> >>>>>>> GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
>> >> >>>>>>> Copyright (C) 2016 Free Software Foundation, Inc.
>> >> >>>>>>> License GPLv3+: GNU GPL version 3 or later 
>> >> >>>>>>> <http://gnu.org/licenses/gpl.html>
>> >> >>>>>>> This is free software: you are free to change and redistribute it.
>> >> >>>>>>> There is NO WARRANTY, to the extent permitted by law.  Type "show 
>> >> >>>>>>> copying"
>> >> >>>>>>> and "show warranty" for details.
>> >> >>>>>>> This GDB was configured as "x86_64-linux-gnu".
>> >> >>>>>>> Type "show configuration" for configuration details.
>> >> >>>>>>> For bug reporting instructions, please see:
>> >> >>>>>>> <http://www.gnu.org/software/gdb/bugs/>.
>> >> >>>>>>> Find the GDB manual and other documentation resources online at:
>> >> >>>>>>> <http://www.gnu.org/software/gdb/documentation/>.
>> >> >>>>>>> For help, type "help".
>> >> >>>>>>> Type "apropos word" to search for commands related to "word"...
>> >> >>>>>>> Reading symbols from /tmp/crosfw/sandbox/u-boot...done.
>> >> >>>>>>> (gdb) r
>> >> >>>>>>> Starting program: /tmp/crosfw/sandbox/u-boot -D
>> >> >>>>>>> [Thread debugging using libthread_db enabled]
>> >> >>>>>>> Using host libthread_db library 
>> >> >>>>>>> "/lib/x86_64-linux-gnu/libthread_db.so.1".
>> >> >>>>>>>
>> >> >>>>>>> Program received signal SIGSEGV, Segmentation fault.
>> >> >>>>>>> 0x0000555555571520 in open@plt ()
>> >> >>>>>>> (gdb) up
>> >> >>>>>>> #1  0x0000555555571e9a in sandbox_read_fdt_from_file ()
>> >> >>>>>>>     at 
>> >> >>>>>>> /home/sjg/c/src/third_party/u-boot/files/arch/sandbox/cpu/cpu.c:264
>> >> >>>>>>> 264 fd = os_open(fname, OS_O_RDONLY);
>> >> >>>>>>> (gdb) print fname
>> >> >>>>>>> $1 = 0x7ffff7ff0000 "/tmp/crosfw/sandbox/u-boot.dtb"
>> >> >>>>>>> (gdb) q
>> >> >>>>>>>
>> >> >>>>>>>
>> >> >>>>>>> Also the commit message suggests that this patch changes sandbox 
>> >> >>>>>>> to
>> >> >>>>>>> use --gc-sections, which is not obvious from the subject. I think 
>> >> >>>>>>> that
>> >> >>>>>>> should be a separate commit and in fact it should really be 
>> >> >>>>>>> separate
>> >> >>>>>>> commits for each arch, I think. That might help people notice 
>> >> >>>>>>> it...
>> >> >>>>>>>
>> >> >>>>>>> I only noticed now since the EFI pull request has landed.
>> >> >>>>>>
>> >> >>>>>> Can you try my bss patch really quick? Maybe we're just 
>> >> >>>>>> overwriting gd.
>> >> >>>>>>
>> >> >>>>>> Alex
>> >> >>>>>>
>> >> >>>>> This patch breaks efi-x86_app_defconfig. The EFI application no 
>> >> >>>>> longer
>> >> >>>>> boots. I was testing on top of u-boot/master.
>> >> >>>>>
>> >> >>>>> If I do:
>> >> >>>>>
>> >> >>>>> diff --git a/arch/x86/config.mk b/arch/x86/config.mk
>> >> >>>>> index 586e11a..fc119ec 100644
>> >> >>>>> --- a/arch/x86/config.mk
>> >> >>>>> +++ b/arch/x86/config.mk
>> >> >>>>> @@ -24,7 +24,6 @@ endif
>> >> >>>>>   ifeq ($(IS_32BIT),y)
>> >> >>>>>   PLATFORM_CPPFLAGS += -march=i386 -m32
>> >> >>>>>   # TODO: These break on x86_64; need to debug further
>> >> >>>>> -PLATFORM_RELFLAGS += -fdata-sections
>> >> >>>>>   else
>> >> >>>>>   PLATFORM_CPPFLAGS += $(if $(CONFIG_SPL_BUILD),,-fpic) -fno-common 
>> >> >>>>> -m64
>> >> >>>>>   endif
>> >> >>>>>
>> >> >>>>> Then it boots again. Can you please take a look?
>> >> >>>>>
>> >> >>>>> Regards,
>> >> >>>>> Bin
>> >> >>>>
>> >> >>>> Please can we revert the offending patch quickly for the release? I 
>> >> >>>> am
>> >> >>>> not comfortable with the sandbox changes either (data-sections, 
>> >> >>>> etc.).
>> >> >>>
>> >> >>> I can not reproduce the sandbox breakage (and travis doesn't seem to 
>> >> >>> either, otherwise it would be broken for everyone, no?). Can you give 
>> >> >>> me some guidelines on how to reproduce the failures for you and I'll 
>> >> >>> just fix it?
>> >> >>
>> >> >> I would like to revert the sandbox changes at least. I don't want to
>> >> >> enable -ffunction-sections, for example.
>> >> >
>> >> > Could you please explain why? In general I always thought the sandbox
>> >> > target was meant as debugging aid which allows you to find and debug
>> >> > bugs more easily.
>> >> >
>> >> > I would assume that chances for breakage are higher with function and
>> >> > data sections, because the linker could remove code it considers dead?
>> >> > So for a debugging target, I would think it makes sense to have it
>> >> > enabled rather than disabled.
>> >>
>> >> Yes I think removing dead could could cause problems. But so could not
>> >> garbage-collecting sections, so it is not a great argument. Sandbox is
>> >> targeted at building as much code as possible. Ideally every piece of
>> >> non-arch-specific code should be built with sandbox.
>> >
>> > I feel like this is the argument we had about enabling gc on other
>> > platforms.  gc'ing dead code cannot cause problems that aren't real
>> > bugs.  In fact, if we build something and it results in dead code that
>> > we don't expect to be dead that is a problem.  We have everything else
>> > doing this collection so I think we do want sandbox to match.
>>
>> Fair enough, this is the consistency argument that Alex made also. I
>> do understand that. Sandbox does potentially have a wider toolchain
>> target, since it uses whatever is installed on the machine, and
>> apparently runs on non-Linux devices. I suppose toolchains that people
>> use handle this reliably now.
>
> Yes, this is something that toolchains get right and have been getting
> right for a long while now.  Honestly, I didn't realize that sandbox
> wasn't doing this already or I would have brought it up.
>
>> >> Maybe I am being conservative, but I see no reason to enable it for
>> >> sandbox. I'll try to think of some better reasons and reply if I can.
>> >> I also feel that it slipped in under the radar with no review.
>> >
>> > This is something I want to be sensitive to.  If you really want this
>> > change to go in for v2018.11, OK, it's your arch.  But I really think we
>> > should move sandbox in this direction for consistency with all the
>> > hardware platforms.
>>
>> At the least I would like a revert followed by a patch to change
>> sandbox over. The commit that changed this is titled:
>>
>>     efi_loader: Rename sections to allow for implicit data
>>
>> It does not have a sandbox: tag, nor does it mention the compiler flag
>> changes. No one would guess that this major change is happening. It
>> broke x86 and I am not yet confident that sandbox still functions
>> correctly.
>>
>> I would be happier if the second patch went in for the next release,
>> but if we really are not seeing problems, then OK.
>
> OK, now I'm trying to see what we need to do next.  Regardless of Alex's
> current EFI PR, we have 7e21fbca26d1 ("efi_loader: Rename sections to
> allow for implicit data") in master.  Looking at the PR, I see that it
> does turn on -fdata-sections on x86, and that Bin reviewed/tested it.
> So I'm going to push the PR there shortly.
>
> If, for sandbox you want to backout --gc-sections now (the commit
> message does spell out that we need -ffunction/data-sections and what
> for) and re-introduce that for the next release please post the patches
> and I'll grab the backout one and apply it (or post it then PR it if
> you'd rather, that's fine too).

I'd like to back out all of the compilel/link flag changes:

Here is my patch:

http://patchwork.ozlabs.org/patch/954875/

Then I would like to get the sandbox EFI stuff reviewed by Alex, and
get that applied when the merge window opens. I can bring it in via
sandbox but I do want Alex to look at it. It has been waiting for two
releases and I want to avoid any more barriers to this work.
Herinrich's testing work is excellent, but having sandbox able to
actually run apps is a good step forward I think.

Regards,
Simon
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to