[parisc-linux] Re: Unaligne access [was: Back to evms-1.0.1 && unaligne access && gdb ]

jsoe0708@tiscali.be jsoe0708@tiscali.be
Wed, 4 Sep 2002 09:14:19 +0200


>jsoe0708@tiscali.be wrote:
>...
>> And here is some data of my analyse:
>> 
>> First surprise in the two case (original checks.c and my checks.c with
>only
>> "if (p->boot_ind != 0x00 && ") p addresses are exactly the same here is
>an
>> example:
>
>...
>> with the checks.c.new:
>> p            add: 0x272ee
>> p.boot_ind   add: 0x272ee
>> p.head       add: 0x272ef
>> p.sector     add: 0x272f0
>> p.cyl        add: 0x272f1
>> p.sys_ind    add: 0x272f2
>> p.end_head   add: 0x272f3
>> p.end_sector add: 0x272f4
>> p.end_cyl    add: 0x272f5
>> p.start_sect add: 0x272f6
>> p.nr_sects   add: 0x272fa
>> 
>> What do you think?
>
>checks.c.new will generate a "misaligned access" when "p.start_sect"
>is accessed. 0x272f6 is aligned on 2byte address, not 4 byte.
>Ditto for "p.nr_sects".
>
(now I have understand, well I think :) )

>You sure checks.c.new is referencing 0x272f6 and not something else?

For this I will have to find all call to this function and write p.start_sect
address and content before.

(very tricky problem to surround isn'it ;<) )

>You reviewed dmesg output?

Yes (I have a mincom 'screen' on this system console and I also examine kern.log
as recall Dave)


Many thanks,
    Joel

PS: In the mean time I learn that this bug was already fix by:
BOOLEAN isa_null_partition_record(struct partition *p)
{
    int          i;
    u_int8_t    *uip = (u_int8_t *) p;
    int          psize = sizeof(struct partition);

    for (i=0; i<psize; i++) {
        if (*(uip+i) != 0x00) return FALSE;
    }

    return TRUE;
}

but not yet comited :?