All of lore.kernel.org
 help / color / mirror / Atom feed
* BCM4704 stopped booting with 4.4 (due to vmlinux size?)
@ 2016-06-16  6:17 ` Rafał Miłecki
  0 siblings, 0 replies; 9+ messages in thread
From: Rafał Miłecki @ 2016-06-16  6:17 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, David Daney, David Daney, Michael Büsch,
	Hauke Mehrtens, Larry Finger, Felix Fietkau, John Crispin,
	Paul Wassi

Hello,

From time to time I test new kernels with ancient Linksys WRT300N v1.0
device based on BCM4704 SoC.

I noticed that after updating kernel from 4.3 to 4.4 it doen't boot
anymore. All I can see is the last CFE's (bootloader's) message:
> Starting program at 0x80001000
Enabling CONFIG_EARLY_PRINTK doesn't help.

After hours or bisecting and testing I found out that it's not caused
by any /real/ code change but rather adding a kernel message. It seems
that by adding enough print messages I can stop kernel from booting.

I didn't know what exactly to look at so I started with "objdump
--syms vmlinux". I took 4.1.16 and 4.3.4 and tried adding to them
various amount of unique pr_info messages in some random error code
path (never executed). I noticed that address of .data was increasing
which makes me believe that it's a matter of .rodata size or some
affected size/offset in vmlinux.
1) 4.1.6: if .data starts at 80369000 of higher kernel doesn't boot.
2) 4.3.4: if .data starts at 80368000 of higher kernel doesn't boot.

Do you have any idea what this problem can be caused by? Any idea how
to fix/workaround it? Can I provide any extra info?

It doesn't affect all BCM4704 devices. Hauke also has some router
using this SoC and he couldn't reproduce this problem.
On the other hand Paul also experiences some problems with his Linksys
WRT54GL (BCM5352E), the last stable kernel for him seems to be 3.18.
Not sure if it's related however.


4.1.16

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
8035c000 l    d  .data  00000000 .data
8038ebc8 l    d  .init.data     00000000 .init.data

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
80365000 l    d  .data  00000000 .data
80398bc8 l    d  .init.data     00000000 .init.data

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
80367000 l    d  .data  00000000 .data
8039abc8 l    d  .init.data     00000000 .init.data

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
80368000 l    d  .data  00000000 .data
8039abc8 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
80369000 l    d  .data  00000000 .data
8039cbc8 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
8036a000 l    d  .data  00000000 .data
8039cbc8 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802bd000 l    d  .rodata        00000000 .rodata
8036b000 l    d  .data  00000000 .data
8039ebc8 l    d  .init.data     00000000 .init.data


4.3.4

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
80362000 l    d  .data  00000000 .data
80394f68 l    d  .init.data     00000000 .init.data

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
80365000 l    d  .data  00000000 .data
80398f68 l    d  .init.data     00000000 .init.data

GOOD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
80367000 l    d  .data  00000000 .data
8039af68 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
80368000 l    d  .data  00000000 .data
8039af68 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
8036d000 l    d  .data  00000000 .data
803a0f68 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
8036f000 l    d  .data  00000000 .data
803a2f68 l    d  .init.data     00000000 .init.data

BAD
> objdump --syms vmlinux | egrep "(ro)?data" | head -n 3
802c0000 l    d  .rodata        00000000 .rodata
80372000 l    d  .data  00000000 .data
803a4f68 l    d  .init.data     00000000 .init.data

-- 
Rafał

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-07-01 14:00 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-16  6:17 BCM4704 stopped booting with 4.4 (due to vmlinux size?) Rafał Miłecki
2016-06-16  6:17 ` Rafał Miłecki
2016-06-16 11:42 ` p.wassi
2016-06-16 12:19   ` Manuel Lauss
2016-06-16 12:24     ` Rafał Miłecki
2016-06-16 18:43 ` Aaro Koskinen
2016-06-20  8:39   ` p.wassi
2016-06-30 21:57 ` Hauke Mehrtens
2016-07-01 13:59   ` p.wassi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.