[PATCH][ARM]. Fix a 64-bit portability bug in cortex_a8_erratum_scan.
Doug Kwan (關振德)
dougkwan@google.com
Fri Jun 12 00:41:00 GMT 2009
More information about the Binutils mailing list
Fri Jun 12 00:41:00 GMT 2009
- Previous message (by thread): [PATCH] Fix readelf -sI (or -a)
- Next message (by thread): [PATCH][ARM]. Fix a 64-bit portability bug in cortex_a8_erratum_scan.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
This patch fixes a 64-bit portability bug in the cortex-a8 erratum workaround code that causes the test-case cortex-a8-fix-blx to fail on an x86_64 host. I tested this patch on both 32-bit and 64-bit builds of an arm-none-eabi binutils on an x86_64-unknown-linux-gnu host. All the linker test-cases passed. -Doug 2009-06-11 Doug Kwan <dougkwan@google.com> * elf32-arm.c (cortex_a8_erratum_scan): Change type of offset to bfd_signed_vma. Cast all constant operands which are used in offset related expressions to bfd_signed_vma type. -------------- next part -------------- Index: bfd/elf32-arm.c =================================================================== RCS file: /cvs/src/src/bfd/elf32-arm.c,v retrieving revision 1.196 diff -u -u -p -r1.196 elf32-arm.c --- bfd/elf32-arm.c 22 May 2009 11:58:44 -0000 1.196 +++ bfd/elf32-arm.c 12 Jun 2009 00:30:17 -0000 @@ -3981,7 +3981,7 @@ cortex_a8_erratum_scan (bfd *input_bfd, if (((base_vma + i) & 0xfff) == 0xffe && insn_32bit && is_32bit_branch && last_was_32bit && !last_was_branch) { - bfd_vma offset; + bfd_signed_vma offset; bfd_boolean force_target_arm = FALSE; bfd_boolean force_target_thumb = FALSE; bfd_vma target; @@ -4030,7 +4030,7 @@ cortex_a8_erratum_scan (bfd *input_bfd, offset |= (insn & 0x800) ? 0x80000 : 0; offset |= (insn & 0x4000000) ? 0x100000 : 0; if (offset & 0x100000) - offset |= ~0xfffff; + offset |= ~((bfd_signed_vma) 0xfffff); stub_type = arm_stub_a8_veneer_b_cond; } else if (is_b || is_bl || is_blx) @@ -4047,10 +4047,10 @@ cortex_a8_erratum_scan (bfd *input_bfd, offset |= i1 << 23; offset |= s << 24; if (offset & 0x1000000) - offset |= ~0xffffff; + offset |= ~((bfd_signed_vma) 0xffffff); if (is_blx) - offset &= ~3u; + offset &= ~((bfd_signed_vma) 3); stub_type = is_blx ? arm_stub_a8_veneer_blx : is_bl ? arm_stub_a8_veneer_bl : arm_stub_a8_veneer_b; @@ -4083,14 +4083,15 @@ cortex_a8_erratum_scan (bfd *input_bfd, } if (is_blx) - pc_for_insn &= ~3u; + pc_for_insn &= ~((bfd_vma) 3); /* If we found a relocation, use the proper destination, not the offset in the (unrelocated) instruction. Note this is always done if we switched the stub type above. */ if (found) - offset = found->destination - pc_for_insn; + offset = + (bfd_signed_vma)(found->destination - pc_for_insn); target = pc_for_insn + offset;
- Previous message (by thread): [PATCH] Fix readelf -sI (or -a)
- Next message (by thread): [PATCH][ARM]. Fix a 64-bit portability bug in cortex_a8_erratum_scan.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list