1 |
/* BFD back-end for raw ARM a.out binaries. |
/* BFD back-end for raw ARM a.out binaries. |
2 |
Copyright 1994, 1995, 1997, 1998, 1999, 2000, 2001 |
Copyright 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 |
3 |
Free Software Foundation, Inc. |
Free Software Foundation, Inc. |
4 |
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) |
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) |
5 |
|
|
22 |
#include "bfd.h" |
#include "bfd.h" |
23 |
#include "sysdep.h" |
#include "sysdep.h" |
24 |
|
|
25 |
/* Avoid multiple defininitions from aoutx if supporting standarad a.out |
/* Avoid multiple definitions from aoutx if supporting standard a.out |
26 |
as well as our own. */ |
as well as our own. */ |
27 |
/* Do not "beautify" the CONCAT* macro args. Traditional C will not |
/* Do not "beautify" the CONCAT* macro args. Traditional C will not |
28 |
remove whitespace added here, and thus will fail to concatenate |
remove whitespace added here, and thus will fail to concatenate |
54 |
#include "libaout.h" |
#include "libaout.h" |
55 |
#include "aout/aout64.h" |
#include "aout/aout64.h" |
56 |
|
|
57 |
static boolean MY(write_object_contents) |
static bfd_boolean MY(write_object_contents) |
58 |
PARAMS ((bfd *)); |
PARAMS ((bfd *)); |
59 |
static bfd_reloc_status_type MY(fix_pcrel_26_done) |
static bfd_reloc_status_type MY(fix_pcrel_26_done) |
60 |
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **)); |
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **)); |
80 |
{ |
{ |
81 |
/* Type rs size bsz pcrel bitpos ovrf sf name part_inpl |
/* Type rs size bsz pcrel bitpos ovrf sf name part_inpl |
82 |
readmask setmask pcdone. */ |
readmask setmask pcdone. */ |
83 |
HOWTO (0, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "8", true, |
HOWTO (0, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, 0, "8", TRUE, |
84 |
0x000000ff, 0x000000ff, false), |
0x000000ff, 0x000000ff, FALSE), |
85 |
HOWTO (1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16", true, |
HOWTO (1, 0, 1, 16, FALSE, 0, complain_overflow_bitfield, 0, "16", TRUE, |
86 |
0x0000ffff, 0x0000ffff, false), |
0x0000ffff, 0x0000ffff, FALSE), |
87 |
HOWTO (2, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "32", true, |
HOWTO (2, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, 0, "32", TRUE, |
88 |
0xffffffff, 0xffffffff, false), |
0xffffffff, 0xffffffff, FALSE), |
89 |
HOWTO (3, 2, 2, 26, true, 0, complain_overflow_signed, MY(fix_pcrel_26), |
HOWTO (3, 2, 2, 26, TRUE, 0, complain_overflow_signed, MY(fix_pcrel_26), |
90 |
"ARM26", true, 0x00ffffff, 0x00ffffff, true), |
"ARM26", TRUE, 0x00ffffff, 0x00ffffff, TRUE), |
91 |
HOWTO (4, 0, 0, 8, true, 0, complain_overflow_signed, 0, "DISP8", true, |
HOWTO (4, 0, 0, 8, TRUE, 0, complain_overflow_signed, 0, "DISP8", TRUE, |
92 |
0x000000ff, 0x000000ff, true), |
0x000000ff, 0x000000ff, TRUE), |
93 |
HOWTO (5, 0, 1, 16, true, 0, complain_overflow_signed, 0, "DISP16", true, |
HOWTO (5, 0, 1, 16, TRUE, 0, complain_overflow_signed, 0, "DISP16", TRUE, |
94 |
0x0000ffff, 0x0000ffff, true), |
0x0000ffff, 0x0000ffff, TRUE), |
95 |
HOWTO (6, 0, 2, 32, true, 0, complain_overflow_signed, 0, "DISP32", true, |
HOWTO (6, 0, 2, 32, TRUE, 0, complain_overflow_signed, 0, "DISP32", TRUE, |
96 |
0xffffffff, 0xffffffff, true), |
0xffffffff, 0xffffffff, TRUE), |
97 |
HOWTO (7, 2, 2, 26, false, 0, complain_overflow_signed, |
HOWTO (7, 2, 2, 26, FALSE, 0, complain_overflow_signed, |
98 |
MY(fix_pcrel_26_done), "ARM26D", true, 0x0, 0x0, |
MY(fix_pcrel_26_done), "ARM26D", TRUE, 0x0, 0x0, |
99 |
false), |
FALSE), |
100 |
EMPTY_HOWTO (-1), |
EMPTY_HOWTO (-1), |
101 |
HOWTO (9, 0, -1, 16, false, 0, complain_overflow_bitfield, 0, "NEG16", true, |
HOWTO (9, 0, -1, 16, FALSE, 0, complain_overflow_bitfield, 0, "NEG16", TRUE, |
102 |
0x0000ffff, 0x0000ffff, false), |
0x0000ffff, 0x0000ffff, FALSE), |
103 |
HOWTO (10, 0, -2, 32, false, 0, complain_overflow_bitfield, 0, "NEG32", true, |
HOWTO (10, 0, -2, 32, FALSE, 0, complain_overflow_bitfield, 0, "NEG32", TRUE, |
104 |
0xffffffff, 0xffffffff, false) |
0xffffffff, 0xffffffff, FALSE) |
105 |
}; |
}; |
106 |
|
|
107 |
#define RELOC_ARM_BITS_NEG_BIG ((unsigned int) 0x08) |
#define RELOC_ARM_BITS_NEG_BIG ((unsigned int) 0x08) |
411 |
r_pcrel = 1; |
r_pcrel = 1; |
412 |
} |
} |
413 |
|
|
|
#if 0 |
|
|
/* For a standard reloc, the addend is in the object file. */ |
|
|
r_addend = g->addend + (*(g->sym_ptr_ptr))->section->output_section->vma; |
|
|
#endif |
|
|
|
|
414 |
/* name was clobbered by aout_write_syms to be symbol index */ |
/* name was clobbered by aout_write_syms to be symbol index */ |
415 |
|
|
416 |
/* If this relocation is relative to a symbol then set the |
/* If this relocation is relative to a symbol then set the |