Thread (21 messages) flat view 21 messages, 5 authors, 2013-02-08
STALE4947d

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

From: Shawn Guo <hidden>
Date: 2013-02-07 05:04:36
Subsystem: arm port, omap2+ support, the rest · Maintainers: Russell King, Aaro Koskinen, Andreas Kemnade, Kevin Hilman, Roger Quadros, Tony Lindgren, Linus Torvalds

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:
quoted
On Mon, Feb 04, 2013 at 04:01:33PM +0000, Russell King - ARM Linux wrote:
quoted
On Fri, Jan 18, 2013 at 10:45:20AM +0800, Shawn Guo wrote:
quoted
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.

=== 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)
--->8
Shawn
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help