opensubscriber
   Find in this group all groups
 
Unknown more information…

f : fedora-devel-list@redhat.com 8 December 2006 • 12:46PM -0500

unaligned access on ia64
by Zhang, Yanmin

REPLY TO AUTHOR
 
REPLY TO GROUP






There are many unaligned access reported by FedoraCore 6 on ia64.

See the report at https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=202096.

Because relocation entries might point to unaligned addresses, ld.so
might cause unaligned access when accessing such addresses.

Besides dmraid, other applications, including anaconda (python), also cause
unaligned access, so it's better to fix it in glibc.

I worked out a patch to fix it. The patch was also posted to the bug report.

Could anybody provide comments?

Thanks,
Yanmin

---

--- glibc-2.5-20061008T1257/sysdeps/ia64/dl-machine.h 2006-12-08 01:26:54.000000000 +0800
+++ glibc-2.5-20061008T1257_bak/sysdeps/ia64/dl-machine.h 2006-12-08 02:33:02.000000000 +0800
@@ -477,16 +477,25 @@ elf_machine_rela (struct link_map *map,
    can be skipped.  */
#define ELF_MACHINE_REL_RELATIVE 1

+union ia64_unaligned_data {
+ Elf64_Addr l_addr;
+} __attribute__ ((packed));
+
auto inline void
__attribute ((always_inline))
elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
   void *const reloc_addr_arg)
{
-  Elf64_Addr *const reloc_addr = reloc_addr_arg;
   /* ??? Ignore MSB and Instruction format for now.  */
   assert (ELF64_R_TYPE (reloc->r_info) == R_IA64_REL64LSB);

-  *reloc_addr += l_addr;
+  if (((long)reloc_addr_arg) & 0x7) {
+    union ia64_unaligned_data *const lpdata = reloc_addr_arg;
+    lpdata->l_addr += l_addr;
+  } else {
+    Elf64_Addr *const reloc_addr = reloc_addr_arg;
+    *reloc_addr += l_addr;
+  }
}

/* Perform a RELATIVE reloc on the .got entry that transfers to the .plt.  */

--
fedora-devel-list mailing list
fedora-devel-list@redh...
https://www.redhat.com/mailman/listinfo/fedora-devel-list

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

opensubscriber is not affiliated with the authors of this message nor responsible for its content.