Subject: Re: objcopy making a mess of converting kernels to a.out format
To: Chris Gilbert <chris@dokein.co.uk>
From: Richard Earnshaw <rearnsha@buzzard.freeserve.co.uk>
List: port-arm
Date: 02/29/2004 22:37:12
> I seem to get different output, also concerning about yours is that the
> .data isn't starting on the same addresses, the headers I got were:
> 
> > /extra/tools/current/cats/bin/arm--netbsdelf-objdump -h netbsd
> 
> netbsd:     file format elf32-littlearm
> 
> Sections:
> Idx Name          Size      VMA       LMA       File off  Algn
>   0 .text         00426c9f  f0000020  f0000020  00008020  2**5
>                   CONTENTS, ALLOC, LOAD, READONLY, CODE
>   1 link_set_malloc_types 0000014c  f0426cc0  f0426cc0  0042ecc0  2**2
>                   CONTENTS, ALLOC, LOAD, READONLY, DATA
>   2 link_set_sysctl_funcs 000000b8  f0426e0c  f0426e0c  0042ee0c  2**2
>                   CONTENTS, ALLOC, LOAD, READONLY, DATA
>   3 link_set_evcnts 00000004  f0426ec4  f0426ec4  0042eec4  2**2
>                   CONTENTS, ALLOC, LOAD, READONLY, DATA
>   4 .data         00010554  f0427000  f0427000  0042f000  2**2
>                   CONTENTS, ALLOC, LOAD, DATA
>   5 .bss          00044864  f0437554  f0437554  0043f554  2**2
>                   ALLOC
>   6 .arm.atpcs    00000000  00000000  00000000  0043f554  2**0
>                   CONTENTS, READONLY
>   7 .comment      00008a9d  00000000  00000000  0043f554  2**0
>                   CONTENTS, READONLY
>   8 .ident        0000a29e  00000000  00000000  00447ff1  2**0
>                   CONTENTS, READONLY
> > /extra/tools/current/cats/bin/arm--netbsdelf-objdump -h netbsd.aout
> 
> netbsd.aout:     file format a.out-arm-netbsd
> 
> Sections:
> Idx Name          Size      VMA       LMA       File off  Algn
>   0 .text         00426fe0  f0000020  f0000020  00000020  2**2
>                   CONTENTS, ALLOC, LOAD, CODE
>   1 .data         00011000  f0427000  f0427000  00427000  2**2
>                   CONTENTS, ALLOC, LOAD, DATA
>   2 .bss          00043db8  f0438000  f0438000  00000000  2**2
>                   ALLOC
> 
> Note this is GENERIC cats -current kernel.  Which kernel are you trying
> to build?  And how uptodate are your tools?

Saturday morning.

Note: this does *not* happen every time.   It seems to be a property of 
some builds and not others -- you sometimes end up with a kernel that just 
won't boot -- when it won't then you tend to find these problems.  It's 
not the first time I've had a dead kernel, and that too seemed to have a 
suspect .data size.

As I mentioned previously, I suspect that the link_... sections are 
somehow not being fully taken into account -- I suspect that the problem 
only occurs if something like the following is true

	(0x20 + sizeof(.text)) & ~0xfff
	 < (0x20 + sizeof(.text) + sizeof(link_*)) & ~0xfff

In the particular case in question it was a custom kernel for my cats 
which booted fine until I made an unrelated change (to build a kernel with 
WD_DUMP_NOT_TRUSTED defined) -- the resulting kernel crashes immediately 
on boot before it can even print out the NetBSD banner.

R.