This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [Patch, microblaze, bfd/gas/ld] Add support for MicroBlaze little-endian (microblazeel)
- From: Michael Eager <eager at eagerm dot com>
- To: David Holsgrove <david dot holsgrove at xilinx dot com>
- Cc: "binutils at sourceware dot org" <binutils at sourceware dot org>, John Williams <jwilliams at xilinx dot com>, Vinod Kathail <vinodk at xilinx dot com>, Tom Shui <tshui at xilinx dot com>, Vidhumouli Hunsigida <vidhum at xilinx dot com>, Nagaraju Mekala <nmekala at xilinx dot com>, "Edgar E. Iglesias" <edgar dot iglesias at gmail dot com>
- Date: Thu, 08 Nov 2012 13:41:56 -0800
- Subject: Re: [Patch, microblaze, bfd/gas/ld] Add support for MicroBlaze little-endian (microblazeel)
- References: <33b47213-6fb2-4a55-ab0a-f742560ab6c6@AM1EHSMHS012.ehs.local>
On 11/08/2012 04:25 AM, David Holsgrove wrote:
Add microblazeel target support to bfd, gas and ld.
binutils/bfd/Changelog
2012-11-08 Edgar E. Iglesias <edgar.iglesias@gmail.com>
* config.bfd: Add microblazeel-*-*
* configure.in: Likewise.
* configure: Regenerate.
* elf32-microblaze.c (microblaze_elf_relocate_section):
Add endian awareness.
(microblaze_elf_merge_private_bfd_data): New.
(microblaze_bfd_write_imm_value_32): New.
(microblaze_bfd_write_imm_value_64): New.
(microblaze_elf_relax_section): Add endian awareness.
(microblaze_elf_add_symbol_hook): Define TARGET_LITTLE_NAME,
TARGET_LITTLE_SYM and bfd_elf32_bfd_merge_private_bfd_data.
* targets.c: Add bfd target bfd_elf32_microblazeel_vec.
+++ b/bfd/elf32-microblaze.c
@@ -702,6 +702,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
Elf_Internal_Shdr *symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
Elf_Internal_Rela *rel, *relend;
+ int endian = !bfd_little_endian (output_bfd) * 2;
This would be better as
int endian = (bfd_little_endian (output_bfd)) ? 0 : 2;
@@ -1275,6 +1291,36 @@ calc_fixup (bfd_vma addr, asection *sec)
return fixup;
}
+/* Read-modify-write into the bfd, an immediate value into appropriate fields of a 32-bit
+ * instruction. */
GNU comment style is to end each comment with a period and two spaces.
Don't continue comments with an asterisk. Limit lines to 80 chars.
There are a number of comments which should be edited.
@ -1627,13 +1676,13 @@ microblaze_elf_relax_section (bfd *abfd,
}
}
- immediate = (unsigned short) bfd_get_16 (abfd, ocontents +
- irelscan->r_offset + 2);
+ unsigned long instr = bfd_get_32 (abfd, ocontents + irelscan->r_offset);
+ immediate = instr & 0x0000ffff;
target_address = immediate;
offset = calc_fixup (target_address, sec);
immediate -= offset;
irelscan->r_addend -= offset;
- bfd_put_16 (abfd, immediate, ocontents + irelscan->r_offset + 2);
+ microblaze_bfd_write_imm_value_32 (abfd, ocontents + irelscan->r_offset,
irelscan->r_addend);
}
Split lines so that they are not longer than 80 chars. There are several long lines.
--
Michael Eager eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077