Subject: Re: Initial diffs to make arm32 kernel core dumps work with savecore
To: Matt Thomas <matt@3am-software.com>
From: Chris Gilbert <chris@dokein.co.uk>
List: port-arm
Date: 12/15/2007 11:40:37
Matt Thomas wrote:
> On Dec 14, 2007, at 5:03 PM, Chris Gilbert wrote:
>> The main item to highlight is the cpu_kcore_hdr structure in 
>> sys/arch/arm/include/kcore.h, as it's a new kernel->userland ABI for 
>> arm, I'd like to get it right first time if possible.  Currently I've 
>> defined it as:
>> typedef struct cpu_kcore_hdr {
>>    uint32_t    version;        /* structure version */
>>    uint32_t    isArm26;        /* indicates arm26 dump */
>>    uint32_t    PAKernelL1Table;    /* PA of PMAP_kernel L1 table */
>
> ARMv6 will need two.  Add a PAUserL1Table please.
> Also add a UserL1TableSize variable.  If 0, everything is KernelL1Table,
> otherwise and any address < UserL1TableSize << 17 is looked up in 
> UserL1Table.
> Also, we need a flags work for determining whether we are using the
> compat or native armv6 page table (since that will effect decoding of 
> PTEs).
>     uint16_t UserL1TableSize;
>     uint16_t flags;
> #define    KCORE_ARM_APX        0x0001
>
>>    uint32_t    nmemsegs;        /* Number of RAM segments */
>> #if 0
>>    phys_ram_seg_t  memsegs[];        /* RAM segments */
>> #endif
>> } cpu_kcore_hdr_t;

Ok, I can add the values, is their a guide to how APX mappings work?  Or 
can I just make libkvm error when it sees the flag, and it can be fixed up?

Do we actually need to be able to decode userland VA for a kernel core 
dump?  If we do the userland L1 table is probably needed for all platforms.

Thanks,
Chris