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

Side by Side Diff: bfd/coff-tic30.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-stgo32.c ('k') | bfd/coff-tic4x.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 TMS320C30 coff binaries. 1 /* BFD back-end for TMS320C30 coff binaries.
2 Copyright 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2011 2 Copyright 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2011, 2012
3 Free Software Foundation, Inc. 3 Free Software Foundation, Inc.
4 Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) 4 Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
5 5
6 This file is part of BFD, the Binary File Descriptor library. 6 This file is part of BFD, the Binary File Descriptor library.
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or 10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version. 11 (at your option) any later version.
12 12
13 This program is distributed in the hope that it will be useful, 13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 GNU General Public License for more details.
17 17
18 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
21 02110-1301, USA. */ 21 02110-1301, USA. */
22 22
23 #include "sysdep.h" 23 #include "sysdep.h"
24 #include "bfd.h" 24 #include "bfd.h"
25 #include "libbfd.h" 25 #include "libbfd.h"
26 #include "bfdlink.h" 26 #include "bfdlink.h"
27 #include "coff/tic30.h" 27 #include "coff/tic30.h"
28 #include "coff/internal.h" 28 #include "coff/internal.h"
29 #include "libcoff.h" 29 #include "libcoff.h"
30 30
31 static int coff_tic30_select_reloc PARAMS ((reloc_howto_type *));
32 static void rtype2howto PARAMS ((arelent *, struct internal_reloc *));
33 static void reloc_processing PARAMS ((arelent *, struct internal_reloc *, asymbo l **, bfd *, asection *));
34
35 reloc_howto_type * tic30_coff_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_r eal_type));
36
37 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1) 31 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (1)
38 32
39 reloc_howto_type tic30_coff_howto_table[] = 33 reloc_howto_type tic30_coff_howto_table[] =
40 { 34 {
41 HOWTO (R_TIC30_ABS16, 2, 1, 16, FALSE, 0, 0, NULL, 35 HOWTO (R_TIC30_ABS16, 2, 1, 16, FALSE, 0, 0, NULL,
42 "16", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE), 36 "16", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE),
43 HOWTO (R_TIC30_ABS24, 2, 2, 24, FALSE, 8, complain_overflow_bitfield, NULL, 37 HOWTO (R_TIC30_ABS24, 2, 2, 24, FALSE, 8, complain_overflow_bitfield, NULL,
44 "24", FALSE, 0xFFFFFF00, 0xFFFFFF00, FALSE), 38 "24", FALSE, 0xFFFFFF00, 0xFFFFFF00, FALSE),
45 HOWTO (R_TIC30_LDP, 18, 0, 24, FALSE, 0, complain_overflow_bitfield, NULL, 39 HOWTO (R_TIC30_LDP, 18, 0, 24, FALSE, 0, complain_overflow_bitfield, NULL,
46 "LDP", FALSE, 0x00FF0000, 0x000000FF, FALSE), 40 "LDP", FALSE, 0x00FF0000, 0x000000FF, FALSE),
47 HOWTO (R_TIC30_ABS32, 2, 2, 32, FALSE, 0, complain_overflow_bitfield, NULL, 41 HOWTO (R_TIC30_ABS32, 2, 2, 32, FALSE, 0, complain_overflow_bitfield, NULL,
48 "32", FALSE, 0xFFFFFFFF, 0xFFFFFFFF, FALSE), 42 "32", FALSE, 0xFFFFFFFF, 0xFFFFFFFF, FALSE),
49 HOWTO (R_TIC30_PC16, 2, 1, 16, TRUE, 0, complain_overflow_signed, NULL, 43 HOWTO (R_TIC30_PC16, 2, 1, 16, TRUE, 0, complain_overflow_signed, NULL,
50 "PCREL", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE), 44 "PCREL", FALSE, 0x0000FFFF, 0x0000FFFF, FALSE),
51 EMPTY_HOWTO (-1) 45 EMPTY_HOWTO (-1)
52 }; 46 };
53 47
54 #ifndef coff_bfd_reloc_type_lookup 48 #ifndef coff_bfd_reloc_type_lookup
55 #define coff_bfd_reloc_type_lookup tic30_coff_reloc_type_lookup 49 #define coff_bfd_reloc_type_lookup tic30_coff_reloc_type_lookup
56 #define coff_bfd_reloc_name_lookup tic30_coff_reloc_name_lookup 50 #define coff_bfd_reloc_name_lookup tic30_coff_reloc_name_lookup
57 51
58 /* For the case statement use the code values used in tc_gen_reloc to 52 /* For the case statement use the code values used in tc_gen_reloc to
59 map to the howto table entries that match those in both the aout 53 map to the howto table entries that match those in both the aout
60 and coff implementations. */ 54 and coff implementations. */
61 55
62 reloc_howto_type * 56 static reloc_howto_type *
63 tic30_coff_reloc_type_lookup (abfd, code) 57 tic30_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
64 bfd *abfd ATTRIBUTE_UNUSED; 58 » » » bfd_reloc_code_real_type code)
65 bfd_reloc_code_real_type code;
66 { 59 {
67 switch (code) 60 switch (code)
68 { 61 {
69 case BFD_RELOC_8: 62 case BFD_RELOC_8:
70 case BFD_RELOC_TIC30_LDP: 63 case BFD_RELOC_TIC30_LDP:
71 return &tic30_coff_howto_table[2]; 64 return &tic30_coff_howto_table[2];
72 case BFD_RELOC_16: 65 case BFD_RELOC_16:
73 return &tic30_coff_howto_table[0]; 66 return &tic30_coff_howto_table[0];
74 case BFD_RELOC_24: 67 case BFD_RELOC_24:
75 return &tic30_coff_howto_table[1]; 68 return &tic30_coff_howto_table[1];
(...skipping 21 matching lines...) Expand all
97 return &tic30_coff_howto_table[i]; 90 return &tic30_coff_howto_table[i];
98 91
99 return NULL; 92 return NULL;
100 } 93 }
101 94
102 #endif 95 #endif
103 96
104 /* Turn a howto into a reloc number. */ 97 /* Turn a howto into a reloc number. */
105 98
106 static int 99 static int
107 coff_tic30_select_reloc (howto) 100 coff_tic30_select_reloc (reloc_howto_type *howto)
108 reloc_howto_type *howto;
109 { 101 {
110 return howto->type; 102 return howto->type;
111 } 103 }
112 104
113 #define SELECT_RELOC(x,howto) x.r_type = coff_tic30_select_reloc(howto) 105 #define SELECT_RELOC(x,howto) x.r_type = coff_tic30_select_reloc(howto)
114 106
115 #define BADMAG(x) TIC30BADMAG(x) 107 #define BADMAG(x) TIC30BADMAG(x)
116 #define TIC30 1 /* Customize coffcode.h */ 108 #define TIC30 1 /* Customize coffcode.h */
117 #define __A_MAGIC_SET__ 109 #define __A_MAGIC_SET__
118 110
119 /* Code to swap in the reloc */ 111 /* Code to swap in the reloc */
120 #define SWAP_IN_RELOC_OFFSET H_GET_32 112 #define SWAP_IN_RELOC_OFFSET H_GET_32
121 #define SWAP_OUT_RELOC_OFFSET H_PUT_32 113 #define SWAP_OUT_RELOC_OFFSET H_PUT_32
122 #define SWAP_OUT_RELOC_EXTRA(abfd, src, dst) dst->r_stuff[0] = 'S'; \ 114 #define SWAP_OUT_RELOC_EXTRA(abfd, src, dst) dst->r_stuff[0] = 'S'; \
123 dst->r_stuff[1] = 'C'; 115 dst->r_stuff[1] = 'C';
124 116
125 /* Code to turn a r_type into a howto ptr, uses the above howto table. */ 117 /* Code to turn a r_type into a howto ptr, uses the above howto table. */
126 118
127 static void 119 static void
128 rtype2howto (internal, dst) 120 rtype2howto (arelent *internal, struct internal_reloc *dst)
129 arelent *internal;
130 struct internal_reloc *dst;
131 { 121 {
132 switch (dst->r_type) 122 switch (dst->r_type)
133 { 123 {
134 case R_TIC30_ABS16: 124 case R_TIC30_ABS16:
135 internal->howto = &tic30_coff_howto_table[0]; 125 internal->howto = &tic30_coff_howto_table[0];
136 break; 126 break;
137 case R_TIC30_ABS24: 127 case R_TIC30_ABS24:
138 internal->howto = &tic30_coff_howto_table[1]; 128 internal->howto = &tic30_coff_howto_table[1];
139 break; 129 break;
140 case R_TIC30_ABS32: 130 case R_TIC30_ABS32:
(...skipping 15 matching lines...) Expand all
156 146
157 /* Perform any necessary magic to the addend in a reloc entry */ 147 /* Perform any necessary magic to the addend in a reloc entry */
158 148
159 #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \ 149 #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
160 cache_ptr->addend = ext_reloc.r_offset; 150 cache_ptr->addend = ext_reloc.r_offset;
161 151
162 #define RELOC_PROCESSING(relent,reloc,symbols,abfd,section) \ 152 #define RELOC_PROCESSING(relent,reloc,symbols,abfd,section) \
163 reloc_processing(relent, reloc, symbols, abfd, section) 153 reloc_processing(relent, reloc, symbols, abfd, section)
164 154
165 static void 155 static void
166 reloc_processing (relent, reloc, symbols, abfd, section) 156 reloc_processing (arelent *relent,
167 arelent *relent; 157 » » struct internal_reloc *reloc,
168 struct internal_reloc *reloc; 158 » » asymbol **symbols,
169 asymbol **symbols; 159 » » bfd *abfd,
170 bfd *abfd; 160 » » asection *section)
171 asection *section;
172 { 161 {
173 relent->address = reloc->r_vaddr; 162 relent->address = reloc->r_vaddr;
174 rtype2howto (relent, reloc); 163 rtype2howto (relent, reloc);
175 164
176 if (reloc->r_symndx > 0) 165 if (reloc->r_symndx > 0)
177 relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx]; 166 relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
178 else 167 else
179 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; 168 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
180 169
181 relent->addend = reloc->r_offset; 170 relent->addend = reloc->r_offset;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 BFD_JUMP_TABLE_SYMBOLS (coff), 214 BFD_JUMP_TABLE_SYMBOLS (coff),
226 BFD_JUMP_TABLE_RELOCS (coff), 215 BFD_JUMP_TABLE_RELOCS (coff),
227 BFD_JUMP_TABLE_WRITE (coff), 216 BFD_JUMP_TABLE_WRITE (coff),
228 BFD_JUMP_TABLE_LINK (coff), 217 BFD_JUMP_TABLE_LINK (coff),
229 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), 218 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
230 219
231 NULL, 220 NULL,
232 221
233 COFF_SWAP_TABLE 222 COFF_SWAP_TABLE
234 }; 223 };
OLDNEW
« no previous file with comments | « bfd/coff-stgo32.c ('k') | bfd/coff-tic4x.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698