diff mbox

[v2,2/2] ARM: uncompress debug support for multiplatform build

Message ID 20130207050434.GA7697@S2101-09.ap.freescale.net (mailing list archive)
State New, archived
Headers show

Commit Message

Shawn Guo Feb. 7, 2013, 5:04 a.m. UTC
On Wed, Feb 06, 2013 at 12:04:19PM -0700, Stephen Warren wrote:
> On 02/06/2013 02:32 AM, Russell King - ARM Linux wrote:
> > On Mon, Feb 04, 2013 at 04:01:33PM +0000, Russell King - ARM Linux wrote:
> >> On Fri, Jan 18, 2013 at 10:45:20AM +0800, Shawn Guo wrote:
> >>> Instead of giving zero support of uncompress debug for multiplatform
> >>> build, the patch turns uncompress debug into one part of DEBUG_LL
> >>> support.  When DEBUG_LL is turned on for a particular platform,
> >>> uncompress debug works too for that platform.
> >>>
> >>> It reuses the platform DEBUG_LL macros by creating a simple
> >>> arch/arm/boot/compressed/debug.S with CONFIG_DEBUG_LL_INCLUDE
> >>> included there, and implements a generic putc() using those macros.
> >>
> >> Ok, I've applied this on the previso that _no one_ in future whinges if
> >> the debug infrastructure doesn't quite meet their expectation.  The
> >> debug infrastructure remains first and foremost that: a simple debug
> >> infrastructure suitable for use in the early assembly and the like.
> >>
> >> That is its primary concern and trumps any requirements from consoles,
> >> early printk, decompressor output, and the like.
> > 
> > ... and now I've dropped the two patches because it causes build failures
> > for all OMAP and PXA platforms.
> 
> It also breaks tegra_defconfig. For reference, the (or perhaps just a)
> reason here is that arch/arm/include/debug/tegra.S references symbol
> tegra_uart_config, which is declared in arch/arm/mach-tegra/common.c,
> which isn't part of the decompressor build. Tegra's uncompress.h doesn't
> touch this symbol, hence avoids this problem.
> 
Thanks for the info, Stephen.

From what I see, the patch breaks omap, pxa and tegra build by
different causes.

--->8

Shawn

Comments

Stephen Warren Feb. 7, 2013, 4:36 p.m. UTC | #1
On 02/06/2013 10:04 PM, Shawn Guo wrote:
> On Wed, Feb 06, 2013 at 12:04:19PM -0700, Stephen Warren wrote:
>> On 02/06/2013 02:32 AM, Russell King - ARM Linux wrote:
>>> On Mon, Feb 04, 2013 at 04:01:33PM +0000, Russell King - ARM Linux wrote:
>>>> On Fri, Jan 18, 2013 at 10:45:20AM +0800, Shawn Guo wrote:
>>>>> Instead of giving zero support of uncompress debug for multiplatform
>>>>> build, the patch turns uncompress debug into one part of DEBUG_LL
>>>>> support.  When DEBUG_LL is turned on for a particular platform,
>>>>> uncompress debug works too for that platform.
>>>>>
>>>>> It reuses the platform DEBUG_LL macros by creating a simple
>>>>> arch/arm/boot/compressed/debug.S with CONFIG_DEBUG_LL_INCLUDE
>>>>> included there, and implements a generic putc() using those macros.
>>>>
>>>> Ok, I've applied this on the previso that _no one_ in future whinges if
>>>> the debug infrastructure doesn't quite meet their expectation.  The
>>>> debug infrastructure remains first and foremost that: a simple debug
>>>> infrastructure suitable for use in the early assembly and the like.
>>>>
>>>> That is its primary concern and trumps any requirements from consoles,
>>>> early printk, decompressor output, and the like.
>>>
>>> ... and now I've dropped the two patches because it causes build failures
>>> for all OMAP and PXA platforms.
>>
>> It also breaks tegra_defconfig. For reference, the (or perhaps just a)
>> reason here is that arch/arm/include/debug/tegra.S references symbol
>> tegra_uart_config, which is declared in arch/arm/mach-tegra/common.c,
>> which isn't part of the decompressor build. Tegra's uncompress.h doesn't
>> touch this symbol, hence avoids this problem.
>>
> Thanks for the info, Stephen.
> 
> From what I see, the patch breaks omap, pxa and tegra build by
> different causes.
...
>> Perhaps the patch can be re-cast to only affect multi-platform kernels,
>> and leave unconverted platforms using uncompress.h (at least, I assume
>> that must be the problem).
> 
> Indeed.  The arch/arm/boot/compressed/debug.S shouldn't be part of
> traditional build but only multiplatform.  Let's force that with the
> change below.
> 
> 8<---
> diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
> index c9865f6..13bdd10 100644
> --- a/arch/arm/boot/compressed/Makefile
> +++ b/arch/arm/boot/compressed/Makefile
> @@ -24,9 +24,11 @@ endif
>  AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET)
>  HEAD   = head.o
>  OBJS   += misc.o decompress.o
> +ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y)
>  ifeq ($(CONFIG_DEBUG_LL),y)
>  OBJS   += debug.o
>  endif
> +endif
>  FONTC  = $(srctree)/drivers/video/console/font_acorn_8x8.c
> 
>  # string library code (-Os is enforced to keep it much smaller)
> --->8

Yes, that patch fixes the build problem for me, and all decompressor
output and earlyprintk works. Thanks.
Russell King - ARM Linux Feb. 8, 2013, 12:59 p.m. UTC | #2
On Thu, Feb 07, 2013 at 01:04:36PM +0800, Shawn Guo wrote:
> === omap ===
> 
>   AS      arch/arm/boot/compressed/debug.o
>   LD      arch/arm/boot/compressed/vmlinux
> `.data' referenced in section `.text' of arch/arm/boot/compressed/debug.o: defined in discarded section `.data' of arch/arm/boot/compressed/debug.o
> make[3]: *** [arch/arm/boot/compressed/vmlinux] Error 1
> 
> The following change moving the variables out of stack section seems
> fixing the failure, but I'm not quite sure if it works.
> 
> 8<---
> diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug
> index cfaed13..7b2877e 100644
> --- a/arch/arm/mach-omap2/include/mach/debug-macro.S
> +++ b/arch/arm/mach-omap2/include/mach/debug-macro.S
> @@ -17,11 +17,9 @@
> 
>  #define UART_OFFSET(addr)      ((addr) & 0x00ffffff)
> 
> -               .pushsection .data
>  omap_uart_phys:        .word   0
>  omap_uart_virt:        .word   0
>  omap_uart_lsr: .word   0
> -               .popsection

No, this won't work, because now these variables are located in the text
section which may not be writable.  I don't know what the answer is to
this, but as things stand it's not something that can go into v3.8 until
these problems are addressed (because if it does it _will_ cause
regressions.)

We're basically on the last day of -rc6, so I think it's all too late to
try and get this sorted for this merge window.
diff mbox

Patch

=== omap ===

  AS      arch/arm/boot/compressed/debug.o
  LD      arch/arm/boot/compressed/vmlinux
`.data' referenced in section `.text' of arch/arm/boot/compressed/debug.o: defined in discarded section `.data' of arch/arm/boot/compressed/debug.o
make[3]: *** [arch/arm/boot/compressed/vmlinux] Error 1

The following change moving the variables out of stack section seems
fixing the failure, but I'm not quite sure if it works.

8<---
diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/mach-omap2/include/mach/debug
index cfaed13..7b2877e 100644
--- a/arch/arm/mach-omap2/include/mach/debug-macro.S
+++ b/arch/arm/mach-omap2/include/mach/debug-macro.S
@@ -17,11 +17,9 @@ 

 #define UART_OFFSET(addr)      ((addr) & 0x00ffffff)

-               .pushsection .data
 omap_uart_phys:        .word   0
 omap_uart_virt:        .word   0
 omap_uart_lsr: .word   0
-               .popsection

                /*
                 * Note that this code won't work if the bootloader passes

--->8

=== pxa/mmp ===

  AS      arch/arm/boot/compressed/debug.o
arch/arm/boot/compressed/debug.S: Assembler messages:
arch/arm/boot/compressed/debug.S:8: Error: garbage following instruction -- `ldr r2,=IOMEM(0xfe000000)'
make[3]: *** [arch/arm/boot/compressed/debug.o] Error 1

This is fairly easy to fix with the following change.

8<---
diff --git a/arch/arm/boot/compressed/debug.S b/arch/arm/boot/compressed/debug.S
index bdb0e25..6e8382d 100644
--- a/arch/arm/boot/compressed/debug.S
+++ b/arch/arm/boot/compressed/debug.S
@@ -1,4 +1,5 @@ 
 #include <linux/linkage.h>
+#include <asm/assembler.h>

 #include CONFIG_DEBUG_LL_INCLUDE

--->8

=== tegra ===

  LD      arch/arm/boot/compressed/vmlinux
arch/arm/boot/compressed/debug.o: In function `putc':
arch/arm/boot/compressed/debug.S:7: undefined reference to `tegra_uart_config'
make[3]: *** [arch/arm/boot/compressed/vmlinux] Error 1

You have explained the cause clearly.

> I'd guess OMAP is broken for similar reasons, since when I created the
> tegra_uart_config symbol I was inspired by the OMAP DEBUG_LL code.
> 
> Perhaps the patch can be re-cast to only affect multi-platform kernels,
> and leave unconverted platforms using uncompress.h (at least, I assume
> that must be the problem).

Indeed.  The arch/arm/boot/compressed/debug.S shouldn't be part of
traditional build but only multiplatform.  Let's force that with the
change below.

8<---
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index c9865f6..13bdd10 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -24,9 +24,11 @@  endif
 AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET)
 HEAD   = head.o
 OBJS   += misc.o decompress.o
+ifeq ($(CONFIG_ARCH_MULTIPLATFORM),y)
 ifeq ($(CONFIG_DEBUG_LL),y)
 OBJS   += debug.o
 endif
+endif
 FONTC  = $(srctree)/drivers/video/console/font_acorn_8x8.c

 # string library code (-Os is enforced to keep it much smaller)