X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fcoff-ppc.c;h=2bf296ab803d186d5ba89d71bb0a5e106b092aa0;hb=d1778b88f8d8444f15ecf2dbbbf680c5659efb53;hp=c5e695d311a93dd16013d10e3da551d0ae7aafcf;hpb=27e232885db363fb545fd2f450e72d929e59b8f6;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c index c5e695d311..2bf296ab80 100644 --- a/bfd/coff-ppc.c +++ b/bfd/coff-ppc.c @@ -1,11 +1,12 @@ /* BFD back-end for PowerPC Microsoft Portable Executable files. - Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999 + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001 Free Software Foundation, Inc. Original version pieced together by Kim Knuttila (krk@cygnus.com) There is nothing new under the sun. This file draws a lot on other - coff files, in particular, those for the rs/6000, alpha, mips, and + coff files, in particular, those for the rs/6000, alpha, mips, and intel backends, and the PE work for the arm. This file is part of BFD, the Binary File Descriptor library. @@ -29,11 +30,10 @@ Boston, MA 02111-1307, USA. */ - objdump works - relocs generated by gas - ld will link files, but they do not run. - - dlltool will not produce correct output in some .reloc cases, and will + - dlltool will not produce correct output in some .reloc cases, and will not produce the right glue code for dll function calls. */ - #include "bfd.h" #include "sysdep.h" @@ -75,7 +75,6 @@ extern void dump_toc PARAMS ((PTR)); #define MARK_AS_WRITTEN(x) ((x) |= 1) #define MAKE_ADDR_AGAIN(x) ((x) &= ~1) - /* Turn on this check if you suspect something amiss in the hash tables */ #ifdef DEBUG_HASH @@ -87,13 +86,12 @@ extern void dump_toc PARAMS ((PTR)); #define HASH_CHECK(addr) \ if (strcmp(addr->eye_catcher, EYE) != 0) \ { \ - fprintf(stderr,\ + fprintf (stderr,\ _("File %s, line %d, Hash check failure, bad eye %8s\n"), \ __FILE__, __LINE__, addr->eye_catcher); \ - abort(); \ + abort (); \ } - #else #define HASH_CHECK_DCL @@ -105,7 +103,7 @@ extern void dump_toc PARAMS ((PTR)); /* In order not to add an int to every hash table item for every coff linker, we define our own hash table, derived from the coff one */ -/* PE linker hash table entries. */ +/* PE linker hash table entries. */ struct ppc_coff_link_hash_entry { @@ -120,7 +118,6 @@ struct ppc_coff_link_hash_entry HASH_CHECK_DCL }; - /* PE linker hash table. */ struct ppc_coff_link_hash_table @@ -154,14 +151,14 @@ ppc_coff_link_hash_newfunc (entry, table, string) struct bfd_hash_table *table; const char *string; { - struct ppc_coff_link_hash_entry *ret = + struct ppc_coff_link_hash_entry *ret = (struct ppc_coff_link_hash_entry *) entry; /* Allocate the structure if it has not already been allocated by a subclass. */ if (ret == (struct ppc_coff_link_hash_entry *) NULL) ret = (struct ppc_coff_link_hash_entry *) - bfd_hash_allocate (table, + bfd_hash_allocate (table, sizeof (struct ppc_coff_link_hash_entry)); if (ret == (struct ppc_coff_link_hash_entry *) NULL) @@ -169,7 +166,7 @@ ppc_coff_link_hash_newfunc (entry, table, string) /* Call the allocation method of the superclass. */ ret = ((struct ppc_coff_link_hash_entry *) - _bfd_coff_link_hash_newfunc ((struct bfd_hash_entry *) ret, + _bfd_coff_link_hash_newfunc ((struct bfd_hash_entry *) ret, table, string)); if (ret) @@ -222,7 +219,6 @@ ppc_coff_link_hash_table_create (abfd) /* Now, tailor coffcode.h to use our hash stuff */ #define coff_bfd_link_hash_table_create ppc_coff_link_hash_table_create - /* The nt loader points the toc register to &toc + 32768, in order to */ /* use the complete range of a 16-bit displacement. We have to adjust */ @@ -238,7 +234,7 @@ ppc_coff_link_hash_table_create (abfd) from smaller values. Start with zero, widen, *then* decrement. */ #define MINUS_ONE (((bfd_vma)0) - 1) -/* these should definitely go in a header file somewhere... */ +/* these should definitely go in a header file somewhere... */ /* NOP */ #define IMAGE_REL_PPC_ABSOLUTE 0x0000 @@ -320,7 +316,6 @@ ppc_coff_link_hash_table_create (abfd) #define EXTRACT_FLAGS(x) ((x) & IMAGE_REL_PPC_FLAGMASK) #define EXTRACT_JUNK(x) \ ((x) & ~(IMAGE_REL_PPC_TYPEMASK | IMAGE_REL_PPC_FLAGMASK)) - /* static helper functions to make relocation work */ /* (Work In Progress) */ @@ -348,7 +343,6 @@ static bfd_reloc_status_type ppc_pair_reloc PARAMS ((bfd *abfd, asection *section, bfd *output_bfd, char **error)); - static bfd_reloc_status_type ppc_toc16_reloc PARAMS ((bfd *abfd, arelent *reloc, @@ -391,10 +385,7 @@ static bfd_reloc_status_type ppc_imglue_reloc PARAMS ((bfd *abfd, bfd *output_bfd, char **error)); - - static boolean in_reloc_p PARAMS((bfd *abfd, reloc_howto_type *howto)); - /* FIXME: It'll take a while to get through all of these. I only need a few to get us started, so those I'll make sure work. Those marked FIXME are either @@ -418,7 +409,7 @@ static boolean in_reloc_p PARAMS((bfd *abfd, reloc_howto_type *howto)); /* the address of the SYM will be inserted at link time. */ /* TOCREL16 : 16 bit displacement field referring to a slot in */ /* toc. */ -/* TOCREL14 : 16 bit displacement field, similar to REL14 or ADDR14. */ +/* TOCREL14 : 16 bit displacement field, similar to REL14 or ADDR14. */ /* ADDR32NB : 32 bit address relative to the virtual origin. */ /* (On the alpha, this is always a linker generated thunk)*/ /* (i.e. 32bit addr relative to the image base) */ @@ -438,32 +429,32 @@ static reloc_howto_type ppc_coff_howto_table[] = { /* IMAGE_REL_PPC_ABSOLUTE 0x0000 NOP */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_ABSOLUTE, /* type */ - 0, /* rightshift */ - 0, /* size (0 = byte, 1 = short, 2 = long) */ - 0, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_ABSOLUTE, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_dont, /* dont complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ABSOLUTE", /* name */ - false, /* partial_inplace */ - 0x00, /* src_mask */ - 0x00, /* dst_mask */ + false, /* partial_inplace */ + 0x00, /* src_mask */ + 0x00, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_ADDR64 0x0001 64-bit address */ /* Unused: */ - HOWTO(IMAGE_REL_PPC_ADDR64, /* type */ - 0, /* rightshift */ - 3, /* size (0 = byte, 1 = short, 2 = long) */ - 64, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO(IMAGE_REL_PPC_ADDR64, /* type */ + 0, /* rightshift */ + 3, /* size (0 = byte, 1 = short, 2 = long) */ + 64, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR64", /* name */ - true, /* partial_inplace */ + true, /* partial_inplace */ MINUS_ONE, /* src_mask */ MINUS_ONE, /* dst_mask */ false), /* pcrel_offset */ @@ -471,314 +462,311 @@ static reloc_howto_type ppc_coff_howto_table[] = /* IMAGE_REL_PPC_ADDR32 0x0002 32-bit address */ /* Used: */ HOWTO (IMAGE_REL_PPC_ADDR32, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR32", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_ADDR24 0x0003 26-bit address, shifted left 2 (branch absolute) */ /* the LI field is in bit 6 through bit 29 is 24 bits, + 2 for the shift */ /* Of course, That's the IBM approved bit numbering, which is not what */ - /* anyone else uses.... The li field is in bit 2 thru 25 */ + /* anyone else uses.... The li field is in bit 2 thru 25 */ /* Used: */ HOWTO (IMAGE_REL_PPC_ADDR24, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ 26, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR24", /* name */ - true, /* partial_inplace */ - 0x07fffffc, /* src_mask */ - 0x07fffffc, /* dst_mask */ + true, /* partial_inplace */ + 0x07fffffc, /* src_mask */ + 0x07fffffc, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_ADDR16 0x0004 16-bit address */ /* Used: */ - HOWTO (IMAGE_REL_PPC_ADDR16, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_ADDR16, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_ADDR14 0x0005 */ /* 16-bit address, shifted left 2 (load doubleword) */ /* FIXME: the mask is likely wrong, and the bit position may be as well */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_ADDR14, /* type */ - 1, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_ADDR14, /* type */ + 1, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_REL24 0x0006 */ /* 26-bit PC-relative offset, shifted left 2 (branch relative) */ /* Used: */ HOWTO (IMAGE_REL_PPC_REL24, /* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 26, /* bitsize */ - true, /* pc_relative */ - 0, /* bitpos */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 26, /* bitsize */ + true, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "REL24", /* name */ - true, /* partial_inplace */ - 0x3fffffc, /* src_mask */ - 0x3fffffc, /* dst_mask */ + true, /* partial_inplace */ + 0x3fffffc, /* src_mask */ + 0x3fffffc, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_REL14 0x0007 */ /* 16-bit PC-relative offset, shifted left 2 (br cond relative) */ /* FIXME: the mask is likely wrong, and the bit position may be as well */ /* FIXME: how does it know how far to shift? */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_ADDR14, /* type */ - 1, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_ADDR14, /* type */ + 1, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ true), /* pcrel_offset */ - + /* IMAGE_REL_PPC_TOCREL16 0x0008 */ /* 16-bit offset from TOC base */ /* Used: */ - HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_TOCREL16,/* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - ppc_toc16_reloc, /* special_function */ + ppc_toc16_reloc, /* special_function */ "TOCREL16", /* name */ - false, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + false, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_TOCREL14 0x0009 */ /* 16-bit offset from TOC base, shifted left 2 (load doubleword) */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */ - 1, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_TOCREL14,/* type */ + 1, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "TOCREL14", /* name */ - false, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + false, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_ADDR32NB 0x000A */ /* 32-bit addr w/ image base */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_ADDR32NB,/* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "ADDR32NB", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ - + /* IMAGE_REL_PPC_SECREL 0x000B */ /* va of containing section (as in an image sectionhdr) */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_SECREL,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_SECREL,/* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - ppc_secrel_reloc, /* special_function */ + ppc_secrel_reloc, /* special_function */ "SECREL", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ true), /* pcrel_offset */ /* IMAGE_REL_PPC_SECTION 0x000C */ /* sectionheader number */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_SECTION,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_SECTION,/* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - ppc_section_reloc, /* special_function */ + ppc_section_reloc, /* special_function */ "SECTION", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ true), /* pcrel_offset */ /* IMAGE_REL_PPC_IFGLUE 0x000D */ /* substitute TOC restore instruction iff symbol is glue code */ /* Used: */ - HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_IFGLUE,/* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "IFGLUE", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ /* IMAGE_REL_PPC_IMGLUE 0x000E */ /* symbol is glue code; virtual address is TOC restore instruction */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */ - 0, /* rightshift */ - 2, /* size (0 = byte, 1 = short, 2 = long) */ - 32, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_IMGLUE,/* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - ppc_imglue_reloc, /* special_function */ + ppc_imglue_reloc, /* special_function */ "IMGLUE", /* name */ - false, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + false, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ /* IMAGE_REL_PPC_SECREL16 0x000F */ /* va of containing section (limited to 16 bits) */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_SECREL16,/* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_SECREL16,/* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "SECREL16", /* name */ - true, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ true), /* pcrel_offset */ /* IMAGE_REL_PPC_REFHI 0x0010 */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_REFHI, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_REFHI, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - ppc_refhi_reloc, /* special_function */ + ppc_refhi_reloc, /* special_function */ "REFHI", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ /* IMAGE_REL_PPC_REFLO 0x0011 */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_REFLO, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_REFLO, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - ppc_refhi_reloc, /* special_function */ + ppc_refhi_reloc, /* special_function */ "REFLO", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ /* IMAGE_REL_PPC_PAIR 0x0012 */ /* Unused: */ - HOWTO (IMAGE_REL_PPC_PAIR, /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO (IMAGE_REL_PPC_PAIR, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - ppc_pair_reloc, /* special_function */ + ppc_pair_reloc, /* special_function */ "PAIR", /* name */ - true, /* partial_inplace */ - 0xffffffff, /* src_mask */ - 0xffffffff, /* dst_mask */ + true, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ /* IMAGE_REL_PPC_TOCREL16_DEFN 0x0013 */ /* 16-bit offset from TOC base, without causing a definition */ /* Used: */ - HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */ - 0, /* rightshift */ - 1, /* size (0 = byte, 1 = short, 2 = long) */ - 16, /* bitsize */ - false, /* pc_relative */ - 0, /* bitpos */ + HOWTO ( (IMAGE_REL_PPC_TOCREL16 | IMAGE_REL_PPC_TOCDEFN), /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + false, /* pc_relative */ + 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - 0, /* special_function */ + 0, /* special_function */ "TOCREL16, TOCDEFN", /* name */ - false, /* partial_inplace */ - 0xffff, /* src_mask */ - 0xffff, /* dst_mask */ + false, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ false), /* pcrel_offset */ }; - - - /* Some really cheezy macros that can be turned on to test stderr :-) */ #ifdef DEBUG_RELOC @@ -788,19 +776,19 @@ static reloc_howto_type ppc_coff_howto_table[] = if (i == 0) \ { \ i = 1; \ - fprintf(stderr,_("Unimplemented Relocation -- %s\n"),x); \ + fprintf (stderr,_("Unimplemented Relocation -- %s\n"),x); \ } \ } #define DUMP_RELOC(n,r) \ { \ - fprintf(stderr,"%s sym %d, addr %d, addend %d\n", \ + fprintf (stderr,"%s sym %d, addr %d, addend %d\n", \ n, (*(r->sym_ptr_ptr))->name, \ r->address, r->addend); \ } -/* Given a reloc name, n, and a pointer to an internal_reloc, - dump out interesting information on the contents +/* Given a reloc name, n, and a pointer to an internal_reloc, + dump out interesting information on the contents #define n_name _n._n_name #define n_zeroes _n._n_n._n_zeroes @@ -810,7 +798,7 @@ static reloc_howto_type ppc_coff_howto_table[] = #define DUMP_RELOC2(n,r) \ { \ - fprintf(stderr,"%s sym %d, r_vaddr %d %s\n", \ + fprintf (stderr,"%s sym %d, r_vaddr %d %s\n", \ n, r->r_symndx, r->r_vaddr,\ (((r->r_type) & IMAGE_REL_PPC_TOCDEFN) == 0) \ ?" ":" TOCDEFN" ); \ @@ -821,8 +809,6 @@ static reloc_howto_type ppc_coff_howto_table[] = #define DUMP_RELOC(n,r) #define DUMP_RELOC2(n,r) #endif - - /* toc construction and management routines */ @@ -924,16 +910,16 @@ ppc_record_toc_entry(abfd, info, sec, sym, toc_kind) HASH_CHECK(h); } - if (h == 0) - { + if (h == 0) + { local_syms = obj_coff_local_toc_table(abfd); if (local_syms == 0) { unsigned int i; /* allocate a table */ - local_syms = - (int *) bfd_zalloc (abfd, - obj_raw_syment_count(abfd) * sizeof(int)); + local_syms = + (int *) bfd_zalloc (abfd, + obj_raw_syment_count(abfd) * sizeof (int)); if (local_syms == 0) return false; obj_coff_local_toc_table(abfd) = local_syms; @@ -943,7 +929,7 @@ ppc_record_toc_entry(abfd, info, sec, sym, toc_kind) } } - if (IS_UNALLOCATED(local_syms[sym])) + if (IS_UNALLOCATED(local_syms[sym])) { local_syms[sym] = global_toc_size; global_toc_size += 4; @@ -1002,20 +988,19 @@ ppc_mark_symbol_as_glue(abfd, sym, rel) #endif /* COFF_IMAGE_WITH_PE */ - /* Return true if this relocation should - appear in the output .reloc section. */ + appear in the output .reloc section. */ static boolean in_reloc_p(abfd, howto) bfd * abfd ATTRIBUTE_UNUSED; reloc_howto_type *howto; { - return - (! howto->pc_relative) + return + (! howto->pc_relative) && (howto->type != IMAGE_REL_PPC_ADDR32NB) && (howto->type != IMAGE_REL_PPC_TOCREL16) && (howto->type != IMAGE_REL_PPC_IMGLUE) - && (howto->type != IMAGE_REL_PPC_IFGLUE) + && (howto->type != IMAGE_REL_PPC_IFGLUE) && (howto->type != IMAGE_REL_PPC_SECREL) && (howto->type != IMAGE_REL_PPC_SECTION) && (howto->type != IMAGE_REL_PPC_SECREL16) @@ -1023,7 +1008,7 @@ static boolean in_reloc_p(abfd, howto) && (howto->type != IMAGE_REL_PPC_REFLO) && (howto->type != IMAGE_REL_PPC_PAIR) && (howto->type != IMAGE_REL_PPC_TOCREL16_DEFN) ; -} +} #if 0 @@ -1050,39 +1035,38 @@ pe_ppc_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd, unsigned long sym_value; unsigned short r_type; unsigned long addr = reloc_entry->address ; /*+ input_section->vma*/ - + r_type = reloc_entry->howto->type; - if (output_bfd) + if (output_bfd) { /* Partial linking - do nothing */ reloc_entry->address += input_section->output_offset; - return bfd_reloc_ok; + return bfd_reloc_ok; } if (symbol_in != NULL && bfd_is_und_section (symbol_in->section)) { /* Keep the state machine happy in case we're called again */ - if (r_type == IMAGE_REL_PPC_REFHI) + if (r_type == IMAGE_REL_PPC_REFHI) { part1_consth_active = true; part1_consth_value = 0; } return(bfd_reloc_undefined); } - - if ((part1_consth_active) && (r_type != IMAGE_REL_PPC_PAIR)) + + if ((part1_consth_active) && (r_type != IMAGE_REL_PPC_PAIR)) { part1_consth_active = false; *error_message = (char *) _("Missing PAIR"); return(bfd_reloc_dangerous); } - sym_value = get_symbol_value(symbol_in); - - return(bfd_reloc_ok); + + return(bfd_reloc_ok); } #endif /* 0 */ @@ -1108,13 +1092,13 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, asection *toc_section = 0; bfd_vma relocation; reloc_howto_type *howto = 0; - + /* If we are performing a relocateable link, we don't need to do a thing. The caller will take care of adjusting the reloc addresses and symbol indices. */ if (info->relocateable) return true; - + hihalf = false; hihalf_val = 0; @@ -1133,7 +1117,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, unsigned short r_type = EXTRACT_TYPE (rel->r_type); unsigned short r_flags = EXTRACT_FLAGS(rel->r_type); - + symndx = rel->r_symndx; loc = contents + rel->r_vaddr - input_section->vma; @@ -1147,9 +1131,9 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } else { - h = (struct ppc_coff_link_hash_entry *) + h = (struct ppc_coff_link_hash_entry *) (obj_coff_sym_hashes (input_bfd)[symndx]); - if (h != 0) + if (h != 0) { HASH_CHECK(h); } @@ -1159,8 +1143,8 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, if (r_type == IMAGE_REL_PPC_IMGLUE && h == 0) { - /* An IMGLUE reloc must have a name. Something is very wrong. */ - abort(); + /* An IMGLUE reloc must have a name. Something is very wrong. */ + abort (); } sec = NULL; @@ -1203,7 +1187,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } rstat = bfd_reloc_ok; - + /* Each case must do its own relocation, setting rstat appropriately */ switch (r_type) { @@ -1220,19 +1204,19 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, DUMP_RELOC2(howto->name, rel); - if (toc_section == 0) + if (toc_section == 0) { - toc_section = bfd_get_section_by_name (bfd_of_toc_owner, + toc_section = bfd_get_section_by_name (bfd_of_toc_owner, TOC_SECTION_NAME); - if ( toc_section == NULL ) + if ( toc_section == NULL ) { - /* There is no toc section. Something is very wrong. */ - abort(); + /* There is no toc section. Something is very wrong. */ + abort (); } } - /* + /* * Amazing bit tricks present. As we may have seen earlier, we * use the 1 bit to tell us whether or not a toc offset has been * allocated. Now that they've all been allocated, we will use @@ -1253,7 +1237,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, if (IS_WRITTEN(our_toc_offset)) { - /* if it has been written out, it is marked with the + /* if it has been written out, it is marked with the 1 bit. Fix up our offset, but do not write it out again. */ @@ -1262,12 +1246,12 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, else { /* write out the toc entry */ - record_toc(toc_section, - our_toc_offset, - priv, + record_toc(toc_section, + our_toc_offset, + priv, strdup(name)); - bfd_put_32(output_bfd, + bfd_put_32 (output_bfd, val, toc_section->contents + our_toc_offset); @@ -1280,33 +1264,33 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, const char *name = h->root.root.root.string; our_toc_offset = h->toc_offset; - if ((r_flags & IMAGE_REL_PPC_TOCDEFN) + if ((r_flags & IMAGE_REL_PPC_TOCDEFN) == IMAGE_REL_PPC_TOCDEFN ) { - /* This is unbelievable cheese. Some knowledgable asm - hacker has decided to use r2 as a base for loading - a value. He/She does this by setting the tocdefn bit, - and not supplying a toc definition. The behaviour is - then to use the difference between the value of the - symbol and the actual location of the toc as the toc - index. + /* This is unbelievable cheese. Some knowledgable asm + hacker has decided to use r2 as a base for loading + a value. He/She does this by setting the tocdefn bit, + and not supplying a toc definition. The behaviour is + then to use the difference between the value of the + symbol and the actual location of the toc as the toc + index. In fact, what is usually happening is, because the Import Address Table is mapped immediately following the toc, some trippy library code trying for speed on - dll linkage, takes advantage of that and considers + dll linkage, takes advantage of that and considers the IAT to be part of the toc, thus saving a load. */ - our_toc_offset = val - - (toc_section->output_section->vma + + our_toc_offset = val - + (toc_section->output_section->vma + toc_section->output_offset); /* The size must still fit in a 16bit displacment */ if (our_toc_offset >= 65535) { (*_bfd_error_handler) - (_("%s: Relocation for %s of %x exceeds Toc size limit"), + (_("%s: Relocation for %s of %x exceeds Toc size limit"), bfd_get_filename (input_bfd), name, our_toc_offset); bfd_set_error (bfd_error_bad_value); return false; @@ -1316,7 +1300,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } else if (IS_WRITTEN(our_toc_offset)) { - /* if it has been written out, it is marked with the + /* if it has been written out, it is marked with the 1 bit. Fix up our offset, but do not write it out again. */ @@ -1327,7 +1311,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, record_toc(toc_section, our_toc_offset, pub, strdup(name)); /* write out the toc entry */ - bfd_put_32(output_bfd, + bfd_put_32 (output_bfd, val, toc_section->contents + our_toc_offset); @@ -1338,31 +1322,30 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } } - if (fixit && info->base_file) + if (fixit && info->base_file) { /* So if this is non pcrelative, and is referenced to a section or a common symbol, then it needs a reloc */ /* relocation to a symbol in a section which - isn't absolute - we output the address here + isn't absolute - we output the address here to a file */ bfd_vma addr = toc_section->output_section->vma + toc_section->output_offset + our_toc_offset; - + if (coff_data(output_bfd)->pe) addr -= pe_data(output_bfd)->pe_opthdr.ImageBase; fwrite (&addr, 1,4, (FILE *) info->base_file); } - /* FIXME: this test is conservative */ if ( (r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN && our_toc_offset > toc_section->_raw_size) { (*_bfd_error_handler) - (_("%s: Relocation exceeds allocated TOC (%x)"), + (_("%s: Relocation exceeds allocated TOC (%x)"), bfd_get_filename (input_bfd), toc_section->_raw_size); bfd_set_error (bfd_error_bad_value); @@ -1372,18 +1355,18 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, /* Now we know the relocation for this toc reference */ relocation = our_toc_offset + TOC_LOAD_ADJUSTMENT; rstat = _bfd_relocate_contents (howto, - input_bfd, - relocation, + input_bfd, + relocation, loc); } break; case IMAGE_REL_PPC_IFGLUE: { /* To solve this, we need to know whether or not the symbol */ - /* appearing on the call instruction is a glue function or not. */ + /* appearing on the call instruction is a glue function or not. */ /* A glue function must announce itself via a IMGLUE reloc, and */ /* the reloc contains the required toc restore instruction */ - + bfd_vma x; const char *my_name; DUMP_RELOC2(howto->name, rel); @@ -1391,18 +1374,18 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, if (h != 0) { my_name = h->root.root.root.string; - if (h->symbol_is_glue == 1) + if (h->symbol_is_glue == 1) { - x = bfd_get_32(input_bfd, loc); - bfd_put_32(input_bfd, h->glue_insn, loc); + x = bfd_get_32 (input_bfd, loc); + bfd_put_32 (input_bfd, h->glue_insn, loc); } } } break; case IMAGE_REL_PPC_SECREL: /* Unimplemented: codeview debugging information */ - /* For fast access to the header of the section - containing the item. */ + /* For fast access to the header of the section + containing the item. */ break; case IMAGE_REL_PPC_SECTION: /* Unimplemented: codeview debugging information */ @@ -1420,15 +1403,15 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, my_name = h->root.root.root.string; } - fprintf(stderr, - _("Warning: unsupported reloc %s \n"), + fprintf (stderr, + _("Warning: unsupported reloc %s \n"), howto->name, bfd_get_filename(input_bfd), input_section->name); - fprintf(stderr,"sym %ld (%s), r_vaddr %ld (%lx)\n", + fprintf (stderr,"sym %ld (%s), r_vaddr %ld (%lx)\n", rel->r_symndx, my_name, (long) rel->r_vaddr, - (unsigned long) rel->r_vaddr); + (unsigned long) rel->r_vaddr); } break; case IMAGE_REL_PPC_IMGLUE: @@ -1436,12 +1419,12 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, /* There is nothing to do now. This reloc was noted in the first pass over the relocs, and the glue instruction extracted */ const char *my_name; - if (h->symbol_is_glue == 1) + if (h->symbol_is_glue == 1) break; my_name = h->root.root.root.string; (*_bfd_error_handler) - (_("%s: Out of order IMGLUE reloc for %s"), + (_("%s: Out of order IMGLUE reloc for %s"), bfd_get_filename (input_bfd), my_name); bfd_set_error (bfd_error_bad_value); return false; @@ -1461,16 +1444,16 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, myh = coff_link_hash_lookup (coff_hash_table (info), "__idata5_magic__", false, false, true); - first_thunk_address = myh->root.u.def.value + - sec->output_section->vma + - sec->output_offset - + first_thunk_address = myh->root.u.def.value + + sec->output_section->vma + + sec->output_offset - pe_data(output_bfd)->pe_opthdr.ImageBase; - + idata5offset = myh->root.u.def.value; myh = coff_link_hash_lookup (coff_hash_table (info), "__idata6_magic__", false, false, true); - + thunk_size = myh->root.u.def.value - idata5offset; myh = coff_link_hash_lookup (coff_hash_table (info), "__idata4_magic__", @@ -1502,13 +1485,13 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, myh = coff_link_hash_lookup (coff_hash_table (info), target, false, false, true); - if (myh == 0) + if (myh == 0) { - /* Missing magic cookies. Something is very wrong. */ - abort(); + /* Missing magic cookies. Something is very wrong. */ + abort (); } - - val = myh->root.u.def.value + + + val = myh->root.u.def.value + sec->output_section->vma + sec->output_offset; if (first_thunk_address == 0) { @@ -1516,16 +1499,16 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, myh = coff_link_hash_lookup (coff_hash_table (info), "__idata5_magic__", false, false, true); - first_thunk_address = myh->root.u.def.value + - sec->output_section->vma + - sec->output_offset - + first_thunk_address = myh->root.u.def.value + + sec->output_section->vma + + sec->output_offset - pe_data(output_bfd)->pe_opthdr.ImageBase; - + idata5offset = myh->root.u.def.value; myh = coff_link_hash_lookup (coff_hash_table (info), "__idata6_magic__", false, false, true); - + thunk_size = myh->root.u.def.value - idata5offset; myh = coff_link_hash_lookup (coff_hash_table (info), "__idata4_magic__", @@ -1536,8 +1519,8 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } rstat = _bfd_relocate_contents (howto, - input_bfd, - val - + input_bfd, + val - pe_data(output_bfd)->pe_opthdr.ImageBase, loc); } @@ -1549,8 +1532,8 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, + input_section->output_offset); rstat = _bfd_relocate_contents (howto, - input_bfd, - val, + input_bfd, + val, loc); break; case IMAGE_REL_PPC_ADDR16: @@ -1558,8 +1541,8 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, case IMAGE_REL_PPC_ADDR32: DUMP_RELOC2(howto->name, rel); rstat = _bfd_relocate_contents (howto, - input_bfd, - val, + input_bfd, + val, loc); break; } @@ -1571,11 +1554,11 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, if (sym && pe_data(output_bfd)->in_reloc_p(output_bfd, howto)) { /* relocation to a symbol in a section which - isn't absolute - we output the address here + isn't absolute - we output the address here to a file */ - bfd_vma addr = rel->r_vaddr - - input_section->vma - + input_section->output_offset + bfd_vma addr = rel->r_vaddr + - input_section->vma + + input_section->output_offset + input_section->output_section->vma; if (coff_data(output_bfd)->pe) @@ -1614,7 +1597,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, + (info, name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_vaddr - input_section->vma))) { @@ -1623,7 +1606,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } } - } + } return true; } @@ -1659,11 +1642,11 @@ dump_toc (vfile) FILE *file = (FILE *) vfile; struct list_ele *t; - fprintf(file, _(h1)); - fprintf(file, _(h2)); - fprintf(file, _(h3)); + fprintf (file, _(h1)); + fprintf (file, _(h2)); + fprintf (file, _(h3)); - for(t = head; t != 0; t=t->next) + for (t = head; t != 0; t=t->next) { const char *cat = ""; @@ -1680,26 +1663,26 @@ dump_toc (vfile) cat = _("IAT reference "); else { - fprintf(file, + fprintf (file, _("**** global_toc_size %ld(%lx), thunk_size %ld(%lx)\n"), global_toc_size, global_toc_size, thunk_size, thunk_size); cat = _("Out of bounds!"); } } - fprintf(file, + fprintf (file, " %04lx (%d)", (unsigned long) t->offset, t->offset - 32768); - fprintf(file, + fprintf (file, " %s %s\n", cat, t->name); } - fprintf(file, "\n"); + fprintf (file, "\n"); } boolean -ppc_allocate_toc_section (info) +ppc_allocate_toc_section (info) struct bfd_link_info *info ATTRIBUTE_UNUSED; { asection *s; @@ -1711,15 +1694,15 @@ ppc_allocate_toc_section (info) if (bfd_of_toc_owner == 0) { - /* No toc owner? Something is very wrong. */ - abort(); + /* No toc owner? Something is very wrong. */ + abort (); } s = bfd_get_section_by_name ( bfd_of_toc_owner , TOC_SECTION_NAME); - if (s == NULL) + if (s == NULL) { - /* No toc section? Something is very wrong. */ - abort(); + /* No toc section? Something is very wrong. */ + abort (); } foo = (bfd_byte *) bfd_alloc(bfd_of_toc_owner, global_toc_size); @@ -1740,7 +1723,7 @@ ppc_process_before_allocation (abfd, info) struct internal_reloc *i, *rel; /* here we have a bfd that is to be included on the link. We have a hook - to do reloc rummaging, before section sizes are nailed down. */ + to do reloc rummaging, before section sizes are nailed down. */ _bfd_coff_get_external_symbols(abfd); @@ -1754,17 +1737,17 @@ ppc_process_before_allocation (abfd, info) for (; sec != 0; sec = sec->next) { - if (sec->reloc_count == 0) + if (sec->reloc_count == 0) continue; /* load the relocs */ /* FIXME: there may be a storage leak here */ i=_bfd_coff_read_internal_relocs(abfd,sec,1,0,0,0); - + if (i == 0) - abort(); + abort (); - for (rel=i;relreloc_count;++rel) + for (rel=i;relreloc_count;++rel) { unsigned short r_type = EXTRACT_TYPE (rel->r_type); unsigned short r_flags = EXTRACT_FLAGS(rel->r_type); @@ -1772,13 +1755,13 @@ ppc_process_before_allocation (abfd, info) DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel); - switch(r_type) + switch(r_type) { case IMAGE_REL_PPC_TOCREL16: /* if TOCDEFN is on, ignore as someone else has allocated the toc entry */ if ( (r_flags & IMAGE_REL_PPC_TOCDEFN) != IMAGE_REL_PPC_TOCDEFN ) - ok = ppc_record_toc_entry(abfd, info, sec, + ok = ppc_record_toc_entry(abfd, info, sec, rel->r_symndx, default_toc); if (!ok) return false; @@ -1797,7 +1780,6 @@ ppc_process_before_allocation (abfd, info) #endif - static bfd_reloc_status_type ppc_refhi_reloc (abfd, reloc_entry, @@ -1876,7 +1858,6 @@ ppc_pair_reloc (abfd, return bfd_reloc_undefined; } - static bfd_reloc_status_type ppc_toc16_reloc (abfd, @@ -2011,15 +1992,12 @@ ppc_imglue_reloc (abfd, return bfd_reloc_ok; } - - #define MAX_RELOC_INDEX \ - (sizeof(ppc_coff_howto_table) / sizeof(ppc_coff_howto_table[0]) - 1) - + (sizeof (ppc_coff_howto_table) / sizeof (ppc_coff_howto_table[0]) - 1) /* FIXME: There is a possiblity that when we read in a reloc from a file, - that there are some bits encoded in the upper portion of the + that there are some bits encoded in the upper portion of the type field. Not yet implemented. */ static void ppc_coff_rtype2howto PARAMS ((arelent *relent, @@ -2029,7 +2007,7 @@ static void ppc_coff_rtype2howto (relent, internal) arelent *relent; struct internal_reloc *internal; -{ +{ /* We can encode one of three things in the type field, aside from the type: @@ -2046,15 +2024,15 @@ ppc_coff_rtype2howto (relent, internal) unsigned short r_flags = EXTRACT_FLAGS(internal->r_type); unsigned short junk = EXTRACT_JUNK (internal->r_type); - /* the masking process only slices off the bottom byte for r_type. */ - if ( r_type > MAX_RELOC_INDEX ) - abort(); + /* the masking process only slices off the bottom byte for r_type. */ + if ( r_type > MAX_RELOC_INDEX ) + abort (); /* check for absolute crap */ if ( junk != 0 ) - abort(); + abort (); - switch(r_type) + switch(r_type) { case IMAGE_REL_PPC_ADDR16: case IMAGE_REL_PPC_REL24: @@ -2079,16 +2057,16 @@ ppc_coff_rtype2howto (relent, internal) howto = ppc_coff_howto_table + IMAGE_REL_PPC_TOCREL16; break; default: - fprintf(stderr, + fprintf (stderr, _("Warning: Unsupported reloc %s [%d] used -- it may not work.\n"), ppc_coff_howto_table[r_type].name, r_type); - howto = ppc_coff_howto_table + r_type; + howto = ppc_coff_howto_table + r_type; break; } - + relent->howto = howto; - + } static reloc_howto_type * @@ -2117,15 +2095,15 @@ coff_ppc_rtype_to_howto (abfd, sec, rel, h, sym, addendp) unsigned short r_flags = EXTRACT_FLAGS(rel->r_type); unsigned short junk = EXTRACT_JUNK (rel->r_type); - /* the masking process only slices off the bottom byte for r_type. */ - if ( r_type > MAX_RELOC_INDEX ) - abort(); - + /* the masking process only slices off the bottom byte for r_type. */ + if ( r_type > MAX_RELOC_INDEX ) + abort (); + /* check for absolute crap */ if ( junk != 0 ) - abort(); - - switch(r_type) + abort (); + + switch(r_type) { case IMAGE_REL_PPC_ADDR32NB: DUMP_RELOC2(ppc_coff_howto_table[r_type].name, rel); @@ -2154,18 +2132,17 @@ coff_ppc_rtype_to_howto (abfd, sec, rel, h, sym, addendp) howto = ppc_coff_howto_table + r_type; break; default: - fprintf(stderr, + fprintf (stderr, _("Warning: Unsupported reloc %s [%d] used -- it may not work.\n"), ppc_coff_howto_table[r_type].name, r_type); howto = ppc_coff_howto_table + r_type; break; } - + return howto; } - /* a cheesy little macro to make the code a little more readable */ #define HOW2MAP(bfd_rtype,ppc_rtype) \ case bfd_rtype: return &ppc_coff_howto_table[ppc_rtype] @@ -2189,16 +2166,15 @@ ppc_coff_reloc_type_lookup (abfd, code) HOW2MAP(BFD_RELOC_16_GOTOFF, IMAGE_REL_PPC_TOCREL16_DEFN); HOW2MAP(BFD_RELOC_32, IMAGE_REL_PPC_ADDR32); HOW2MAP(BFD_RELOC_RVA, IMAGE_REL_PPC_ADDR32NB); - default: + default: return NULL; } /*NOTREACHED*/ } #undef HOW2MAP - -/* Tailor coffcode.h -- macro heaven. */ +/* Tailor coffcode.h -- macro heaven. */ #define RTYPE2HOWTO(cache_ptr, dst) ppc_coff_rtype2howto (cache_ptr, dst) @@ -2211,7 +2187,7 @@ static void ppc_coff_swap_sym_in_hook PARAMS ((bfd *, PTR, PTR)); #define coff_bfd_reloc_type_lookup ppc_coff_reloc_type_lookup #define coff_rtype_to_howto coff_ppc_rtype_to_howto #define coff_relocate_section coff_ppc_relocate_section -#define coff_bfd_final_link ppc_bfd_coff_final_link +#define coff_bfd_final_link ppc_bfd_coff_final_link #ifndef COFF_IMAGE_WITH_PE /* FIXME: This no longer works. */ @@ -2242,12 +2218,10 @@ static void ppc_coff_swap_sym_in_hook PARAMS ((bfd *, PTR, PTR)); COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 1 } #include "coffcode.h" - - #ifndef COFF_IMAGE_WITH_PE /* FIXME: - What we're trying to do here is allocate a toc section (early), and attach + What we're trying to do here is allocate a toc section (early), and attach it to the last bfd to be processed. This avoids the problem of having a toc written out before all files have been processed. This code allocates a toc section for every file, and records the last one seen. There are @@ -2277,7 +2251,7 @@ ppc_coff_swap_sym_in_hook (abfd, ext1, in1) register asection *s; s = bfd_get_section_by_name ( abfd , TOC_SECTION_NAME); - if (s != NULL) + if (s != NULL) { return; } @@ -2291,7 +2265,7 @@ ppc_coff_swap_sym_in_hook (abfd, ext1, in1) || !bfd_set_section_alignment (abfd, s, 2)) { /* FIXME: set appropriate bfd error */ - abort(); + abort (); } /* save the bfd for later allocation */ @@ -2324,18 +2298,17 @@ ppc_get_last() } /* this piece of machinery exists only to guarantee that the bfd that holds - the toc section is written last. + the toc section is written last. This does depend on bfd_make_section attaching a new section to the - end of the section list for the bfd. + end of the section list for the bfd. - This is otherwise intended to be functionally the same as - cofflink.c:_bfd_coff_final_link(). It is specifically different only - where the POWERPC_LE_PE macro modifies the code. It is left in as a + This is otherwise intended to be functionally the same as + cofflink.c:_bfd_coff_final_link(). It is specifically different only + where the POWERPC_LE_PE macro modifies the code. It is left in as a precise form of comment. krk@cygnus.com */ - /* Do the final link step. */ boolean @@ -2840,13 +2813,12 @@ ppc_bfd_coff_final_link (abfd, info) } #endif - /* Forward declaration for use by alternative_target field. */ #ifdef TARGET_BIG_SYM extern const bfd_target TARGET_BIG_SYM; #endif -/* The transfer vectors that lead the outside world to all of the above. */ +/* The transfer vectors that lead the outside world to all of the above. */ #ifdef TARGET_LITTLE_SYM const bfd_target TARGET_LITTLE_SYM = @@ -2859,7 +2831,7 @@ const bfd_target TARGET_LITTLE_SYM = (HAS_RELOC | EXEC_P | /* FIXME: object flags */ HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), - + #ifndef COFF_WITH_PE (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ #else @@ -2878,14 +2850,14 @@ const bfd_target TARGET_LITTLE_SYM = bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ - + {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ bfd_generic_archive_p, /* _bfd_dummy_target */ coff_object_p }, {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */ bfd_false}, {bfd_false, coff_write_object_contents, /* bfd_write_contents */ _bfd_write_archive_contents, bfd_false}, - + BFD_JUMP_TABLE_GENERIC (coff), BFD_JUMP_TABLE_COPY (coff), BFD_JUMP_TABLE_CORE (_bfd_nocore), @@ -2902,7 +2874,7 @@ const bfd_target TARGET_LITTLE_SYM = #else NULL, #endif - + COFF_SWAP_TABLE }; #endif @@ -2911,7 +2883,7 @@ const bfd_target TARGET_LITTLE_SYM = const bfd_target TARGET_BIG_SYM = { TARGET_BIG_NAME, - bfd_target_coff_flavour, + bfd_target_coff_flavour, BFD_ENDIAN_BIG, /* data byte order is big */ BFD_ENDIAN_BIG, /* header byte order is big */ @@ -2955,14 +2927,13 @@ const bfd_target TARGET_BIG_SYM = BFD_JUMP_TABLE_LINK (coff), BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), - /* Alternative_target. */ #ifdef TARGET_LITTLE_SYM & TARGET_LITTLE_SYM, #else NULL, #endif - + COFF_SWAP_TABLE };