Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(109)

Side by Side Diff: bfd/coff-h8300.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « bfd/coff-aux.c ('k') | bfd/coff-h8500.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* BFD back-end for Renesas H8/300 COFF binaries. 1 /* BFD back-end for Renesas H8/300 COFF binaries.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2012
4 Free Software Foundation, Inc. 4 Free Software Foundation, Inc.
5 Written by Steve Chamberlain, <sac@cygnus.com>. 5 Written by Steve Chamberlain, <sac@cygnus.com>.
6 6
7 This file is part of BFD, the Binary File Descriptor library. 7 This file is part of BFD, the Binary File Descriptor library.
8 8
9 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or 11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version. 12 (at your option) any later version.
13 13
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 { 53 {
54 /* The basic hash table. */ 54 /* The basic hash table. */
55 struct bfd_hash_table root; 55 struct bfd_hash_table root;
56 56
57 bfd *abfd; 57 bfd *abfd;
58 58
59 /* Offset at which we'll add the next entry. */ 59 /* Offset at which we'll add the next entry. */
60 unsigned int offset; 60 unsigned int offset;
61 }; 61 };
62 62
63 static struct bfd_hash_entry *
64 funcvec_hash_newfunc
65 (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
66
67 static bfd_reloc_status_type special
68 (bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **);
69 static int select_reloc
70 (reloc_howto_type *);
71 static void rtype2howto
72 (arelent *, struct internal_reloc *);
73 static void reloc_processing
74 (arelent *, struct internal_reloc *, asymbol **, bfd *, asection *);
75 static bfd_boolean h8300_symbol_address_p
76 (bfd *, asection *, bfd_vma);
77 static int h8300_reloc16_estimate
78 (bfd *, asection *, arelent *, unsigned int,
79 struct bfd_link_info *);
80 static void h8300_reloc16_extra_cases
81 (bfd *, struct bfd_link_info *, struct bfd_link_order *, arelent *,
82 bfd_byte *, unsigned int *, unsigned int *);
83 static bfd_boolean h8300_bfd_link_add_symbols
84 (bfd *, struct bfd_link_info *);
85 63
86 /* To lookup a value in the function vector hash table. */ 64 /* To lookup a value in the function vector hash table. */
87 #define funcvec_hash_lookup(table, string, create, copy) \ 65 #define funcvec_hash_lookup(table, string, create, copy) \
88 ((struct funcvec_hash_entry *) \ 66 ((struct funcvec_hash_entry *) \
89 bfd_hash_lookup (&(table)->root, (string), (create), (copy))) 67 bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
90 68
91 /* The derived h8300 COFF linker table. Note it's derived from 69 /* The derived h8300 COFF linker table. Note it's derived from
92 the generic linker hash table, not the COFF backend linker hash 70 the generic linker hash table, not the COFF backend linker hash
93 table! We use this to attach additional data structures we 71 table! We use this to attach additional data structures we
94 need while linking on the h8300. */ 72 need while linking on the h8300. */
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 /* Special handling for H8/300 relocs. 195 /* Special handling for H8/300 relocs.
218 We only come here for pcrel stuff and return normally if not an -r link. 196 We only come here for pcrel stuff and return normally if not an -r link.
219 When doing -r, we can't do any arithmetic for the pcrel stuff, because 197 When doing -r, we can't do any arithmetic for the pcrel stuff, because
220 the code in reloc.c assumes that we can manipulate the targets of 198 the code in reloc.c assumes that we can manipulate the targets of
221 the pcrel branches. This isn't so, since the H8/300 can do relaxing, 199 the pcrel branches. This isn't so, since the H8/300 can do relaxing,
222 which means that the gap after the instruction may not be enough to 200 which means that the gap after the instruction may not be enough to
223 contain the offset required for the branch, so we have to use only 201 contain the offset required for the branch, so we have to use only
224 the addend until the final link. */ 202 the addend until the final link. */
225 203
226 static bfd_reloc_status_type 204 static bfd_reloc_status_type
227 special (bfd *abfd ATTRIBUTE_UNUSED, 205 special (bfd * abfd ATTRIBUTE_UNUSED,
228 » arelent *reloc_entry ATTRIBUTE_UNUSED, 206 » arelent * reloc_entry ATTRIBUTE_UNUSED,
229 » asymbol *symbol ATTRIBUTE_UNUSED, 207 » asymbol * symbol ATTRIBUTE_UNUSED,
230 » PTR data ATTRIBUTE_UNUSED, 208 » void * data ATTRIBUTE_UNUSED,
231 » asection *input_section ATTRIBUTE_UNUSED, 209 » asection * input_section ATTRIBUTE_UNUSED,
232 » bfd *output_bfd, 210 » bfd * output_bfd,
233 » char **error_message ATTRIBUTE_UNUSED) 211 » char ** error_message ATTRIBUTE_UNUSED)
234 { 212 {
235 if (output_bfd == (bfd *) NULL) 213 if (output_bfd == (bfd *) NULL)
236 return bfd_reloc_continue; 214 return bfd_reloc_continue;
237 215
238 /* Adjust the reloc address to that in the output section. */ 216 /* Adjust the reloc address to that in the output section. */
239 reloc_entry->address += input_section->output_offset; 217 reloc_entry->address += input_section->output_offset;
240 return bfd_reloc_ok; 218 return bfd_reloc_ok;
241 } 219 }
242 220
243 static reloc_howto_type howto_table[] = { 221 static reloc_howto_type howto_table[] =
222 {
244 HOWTO (R_RELBYTE, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "8", FALSE, 0x000000ff, 0x000000ff, FALSE), 223 HOWTO (R_RELBYTE, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "8", FALSE, 0x000000ff, 0x000000ff, FALSE),
245 HOWTO (R_RELWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16 ", FALSE, 0x0000ffff, 0x0000ffff, FALSE), 224 HOWTO (R_RELWORD, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16 ", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
246 HOWTO (R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, special, "32 ", FALSE, 0xffffffff, 0xffffffff, FALSE), 225 HOWTO (R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, special, "32 ", FALSE, 0xffffffff, 0xffffffff, FALSE),
247 HOWTO (R_PCRBYTE, 0, 0, 8, TRUE, 0, complain_overflow_signed, special, "DISP8" , FALSE, 0x000000ff, 0x000000ff, TRUE), 226 HOWTO (R_PCRBYTE, 0, 0, 8, TRUE, 0, complain_overflow_signed, special, "DISP8" , FALSE, 0x000000ff, 0x000000ff, TRUE),
248 HOWTO (R_PCRWORD, 0, 1, 16, TRUE, 0, complain_overflow_signed, special, "DISP1 6", FALSE, 0x0000ffff, 0x0000ffff, TRUE), 227 HOWTO (R_PCRWORD, 0, 1, 16, TRUE, 0, complain_overflow_signed, special, "DISP1 6", FALSE, 0x0000ffff, 0x0000ffff, TRUE),
249 HOWTO (R_PCRLONG, 0, 2, 32, TRUE, 0, complain_overflow_signed, special, "DISP3 2", FALSE, 0xffffffff, 0xffffffff, TRUE), 228 HOWTO (R_PCRLONG, 0, 2, 32, TRUE, 0, complain_overflow_signed, special, "DISP3 2", FALSE, 0xffffffff, 0xffffffff, TRUE),
250 HOWTO (R_MOV16B1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "re laxable mov.b:16", FALSE, 0x0000ffff, 0x0000ffff, FALSE), 229 HOWTO (R_MOV16B1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "re laxable mov.b:16", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
251 HOWTO (R_MOV16B2, 0, 1, 8, FALSE, 0, complain_overflow_bitfield, special, "rel axed mov.b:16", FALSE, 0x000000ff, 0x000000ff, FALSE), 230 HOWTO (R_MOV16B2, 0, 1, 8, FALSE, 0, complain_overflow_bitfield, special, "rel axed mov.b:16", FALSE, 0x000000ff, 0x000000ff, FALSE),
252 HOWTO (R_JMP1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16/pc rel", FALSE, 0x0000ffff, 0x0000ffff, FALSE), 231 HOWTO (R_JMP1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, special, "16/pc rel", FALSE, 0x0000ffff, 0x0000ffff, FALSE),
253 HOWTO (R_JMP2, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "pcrecl /16", FALSE, 0x000000ff, 0x000000ff, FALSE), 232 HOWTO (R_JMP2, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "pcrecl /16", FALSE, 0x000000ff, 0x000000ff, FALSE),
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1436 1415
1437 #include "coffcode.h" 1416 #include "coffcode.h"
1438 1417
1439 #undef coff_bfd_get_relocated_section_contents 1418 #undef coff_bfd_get_relocated_section_contents
1440 #undef coff_bfd_relax_section 1419 #undef coff_bfd_relax_section
1441 #define coff_bfd_get_relocated_section_contents \ 1420 #define coff_bfd_get_relocated_section_contents \
1442 bfd_coff_reloc16_get_relocated_section_contents 1421 bfd_coff_reloc16_get_relocated_section_contents
1443 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section 1422 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
1444 1423
1445 CREATE_BIG_COFF_TARGET_VEC (h8300coff_vec, "coff-h8300", BFD_IS_RELAXABLE, 0, '_ ', NULL, COFF_SWAP_TABLE) 1424 CREATE_BIG_COFF_TARGET_VEC (h8300coff_vec, "coff-h8300", BFD_IS_RELAXABLE, 0, '_ ', NULL, COFF_SWAP_TABLE)
OLDNEW
« no previous file with comments | « bfd/coff-aux.c ('k') | bfd/coff-h8500.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698