Re: unaligned accesses in apply_relocate_add

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



One point is that in the function apply_relocate_add a 4-byte aligned address is created:

627                dot = (Elf64_Addr)loc & ~0x03;
628                loc64 = (Elf64_Xword *)loc;

and used as a 64-bit location

711                case R_PARISC_DIR64:
712                        /* 64-bit effective address */
713                        *loc64 = val + addend;
714                        break;

So, 8-byte word is read with a 4-byte alignment.

I am busy building a parisc hardware emulator. It boots Linux, but it is unstable yet. There are unaligned accesses in the emulation trace. I was wandering whether it is normal behavior or caused by a bug in the emulation.

The emulation trace gives a lot of accesses like this:
0-4011f968: translate_virtual_write unaligned_trap, va=0:416a20c pa=1db1820c 0-4011f968: translate_virtual_write unaligned_trap, va=0:416a21c pa=1db1821c 0-4011f968: translate_virtual_write unaligned_trap, va=0:416a224 pa=1db18224

They are indeed 4-byte aligned. The PC address matches apply_relocate_add in the kernel map.

Thanks,
Artem

Kyle McMartin wrote:
On Wed, Aug 26, 2009 at 10:37:13AM +0200, Artem Alimarine wrote:
Hi guys,

I see unaligned access happening in apply_relocate_add. Is this normal expected behavior?

Kernel 2.6.26.2, single CPU (Standard Debian 5.0.2). Address 0x4011f968.


No, definitely not. relocations are applied to instructions, which
should always be instruction-width (4 bytes) aligned... Since we do
modify-replace on placeholders, it should never be using anything other
than a store-word to do it... do you have any more data on this?

regards, Kyle



	
dr. Artem Alimarine <artem.alimarine@xxxxxxxxxxxxx <mailto:artem.alimarine@xxxxxxxxxxxxx>>
Software Architect
STROMASYS SA



Kyle McMartin wrote:
On Wed, Aug 26, 2009 at 10:37:13AM +0200, Artem Alimarine wrote:
Hi guys,

I see unaligned access happening in apply_relocate_add. Is this normal expected behavior?

Kernel 2.6.26.2, single CPU (Standard Debian 5.0.2). Address 0x4011f968.


No, definitely not. relocations are applied to instructions, which
should always be instruction-width (4 bytes) aligned... Since we do
modify-replace on placeholders, it should never be using anything other
than a store-word to do it... do you have any more data on this?

regards, Kyle


begin:vcard
fn:dr. Artem Alimarine
n:Alimarine;Artem
org:STROMASYS SA
adr:;;De Zaale 11;Eindhoven;;5612AJ;The Netherlands
email;internet:artem.alimarine@xxxxxxxxxxxxx
title:Software Architect
tel;work:+31-40-2390863
tel;fax:+31-40-2390800
x-mozilla-html:FALSE
version:2.1
end:vcard


[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux