public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* Patch: Add c6x-uclinux support
@ 2011-03-11 11:42 Bernd Schmidt
  2011-03-28 22:34 ` Joseph S. Myers
  0 siblings, 1 reply; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-11 11:42 UTC (permalink / raw)
  To: binutils; +Cc: Joseph S. Myers, Paul Brook

[-- Attachment #1: Type: text/plain, Size: 783 bytes --]

This patch adds a new target, c6x-uclinux, to the TI C6X port. This uses
a new kind of binary format called DSBT ELF, designed to support shared
libraries on nommu systems. Every object (shared libraries, executables,
dynamic linker) has an index, and a table at the start of the GOT to
provide data segment pointers. The mechanism is similar to the ID
shared-flat format which is used on m68k or Blackfin, but using real ELF
binaries instead of flat ones.

Also included in this patch is support for a new assembler directive,
".scomm", used to better support small-data common symbols as required
by the ABI. There's also a small assembler bugfix for -mgenerate-rel.

This patch does not yet include C++ EH support; I expect Paul Brook will
submit those parts a bit later.


Bernd

[-- Attachment #2: mainline-dsbt-0311b.diff --]
[-- Type: text/plain, Size: 244382 bytes --]

include/elf/
	* tic6x.h (R_C6000_JUMP_SPLOT, R_C6000_SBR_GOT32,
	R_C6000_PCR_H16, R_C6000_PCR_L16): New relocs.
	(SHN_TIC6X_SCOMMON): Define.

bfd/
	* elf32-tic6x.h (struct elf32_tic6x_params): New.
	(elf32_tic6x_setup): Declare.
	* elf32-tic6x.c: Include <limits.h>.
	(ELF_DYNAMIC_LINKER, DEFAULT_STACK_SIZE, PLT_ENTRY_SIZE): Define.
	(struct elf32_tic6x_link_hash_table, struct elf32_link_hash_entry):
	New structures.
	(elf32_tic6x_link_hash_table, is_tic6x_elf): New macros.
	(tic6x_elf_scom_section, tic6x_elf_scom_symbol,
	tic6x_elf_scom_symbol_ptr): New static variables.
	(elf32_tic6x_howto_table, elf32_tic6x_howto_table_rel,
	elf32_tic6x_reloc_map): Add R_C6000_JUMP_SLOT.
	(elf32_tic6x_link_hash_newfunc, elf32_tic6x_link_hash_table_create,
	elf32_tic6x_link_hash_table_free, elf32_tic6x_setup, using_dsbt,
	elf32_tic6x_create_dynamic_sections, install_rela, make_got_dynreloc,
	elf32_tic6x_finish_dynamic_symbol, elf32_tic6x_gc_sweep_hook,
	elf32_tic6x_adjust_dynamic_symbol): New static functions.
	(elf32_tic6x_relocate_section): For R_C6000_PCR_S21, convert branches
	to weak symbols as required by the ABI.
	Handle GOT and DSBT_INDEX relocs, and copy relocs to the output file
	as needed when generating DSBT output.
	(elf32_tic6x_check_relocs, elf32_tic6x_add_symbol_hook,
	elf32_tic6x_symbol_processing, elf32_tic6x_section_from_bfd_section,
	elf32_tic6x_allocate_dynrelocs, elf32_tic6x_size_dynamic_sections,
	elf32_tic6x_always_size_sections, elf32_tic6x_modify_program_headers,
	elf32_tic6x_finish_dynamic_sections, elf32_tic6x_plt_sym_val,
	elf32_tic6x_copy_private_data, elf32_tic6x_link_omit_section_dynsym):
	New static functions.
	(ELF_MAXPAGESIZE): Define to 0x1000.
	(bfd_elf32_bfd_copy_private_bfd_data,
	bfd_elf32_bfd_link_hash_table_create,
	bfd_elf32_bfd_link_hash_table_free, elf_backend_can_refcount,
	elf_backend_want_got_plt, elf_backend_want_dynbss,
	elf_backend_plt_readonly, elf_backend_got_header_size,
	elf_backend_gc_sweep_hook, elf_backend_modify_program_headers,
	elf_backend_create_dynamic_sections, elf_backend_adjust_dynamic_symbol,
	elf_backend_check_relocs, elf_backend_add_symbol_hook,
	elf_backend_symbol_processing, elf_backend_link_output_symbol_hook,
	elf_backend_section_from_bfd_section,
	elf_backend_finish_dynamic_symbol, elf_backend_always_size_sections,
	elf32_tic6x_size_dynamic_sections, elf_backend_finish_dynamic_sections,
	elf_backend_omit_section_dynsym, elf_backend_plt_sym_val): Define.
	
	* bfd/reloc.c (BFD_RELOC_C6000_JUMP_SLOT): Add.
	* bfd/bfd-in2.h: Regenerate.
	* bfd/libbfd.h: Regenerate.
	* config.bfd: Accept tic6x-*-* instead of tic6x-*-elf.

gas/
	* config/tc-tic6x.c (sbss_section, scom_section, scom_symbol): New
	static variables.
	(md_begin): Initialize them.
	(s_tic6x_scomm): New static function.
	(md_pseudo_table): Add "scomm".
	(tc_gen_reloc): Really undo all adjustments made by
	bfd_install_relocation.
	* doc/c-tic6x.texi: Document the .scomm directive.

ld/
	* emulparams/elf32_tic6x_le.sh (BIG_OUTPUT_FORMAT, EXTRA_EM_FILE,
	GENERATE_SHLIB_SCRIPT): New defines.
	(TEXT_START_ADDR): Define differently depending on target.
	(.got): Redefine to include "*(.dsbt)".
	(SDATA_START_SYMBOLS): Remove, replace with
	(OTHER_GOT_SYMBOLS): New.
	(OTHER_BSS_SECTIONS): Define only for ELF targets.
	* emultempl/tic6xdsbt.em: New file.
	* gen-doc.texi: Set C6X.
	* ld.texinfo: Likewise.
	(Options specific to C6X uClinux targets): New section.

binutils/testsuite/
	* lib/binutils-common.exp (is_elf_format): Accept tic6x*-*-uclinux*.

ld/testsuite/
	* ld-elf/sec-to-seg.exp: Remove tic6x from list of targets defining
	pagesize to 1.
	* ld-tic6x/tic6x.exp: Add support for DSBT shared library/executable
	linking tests.
	* ld-tic6x/dsbt.ld: New linker script.
	* ld-tic6x/dsbt-be.ld: New linker script.
	* ld-tic6x/dsbt-overflow.ld: New linker script.
	* ld-tic6x/dsbt-inrange.ld: New linker script.
	* ld-tic6x/shlib-1.s: New test.
	* ld-tic6x/shlib-2.s: New test.
	* ld-tic6x/shlib-app-1r.s: New test.
	* ld-tic6x/shlib-app-1.s: New test.
	* ld-tic6x/shlib-1.sd: New test.
	* ld-tic6x/shlib-1.dd: New test.
	* ld-tic6x/shlib-app-1.rd: New test.
	* ld-tic6x/shlib-app-1rb.rd: New test.
	* ld-tic6x/shlib-app-1.sd: New test.
	* ld-tic6x/static-app-1rb.od: New test.
	* ld-tic6x/shlib-app-1.dd: New test.
	* ld-tic6x/shlib-app-1rb.sd: New test.
	* ld-tic6x/static-app-1b.od: New test.
	* ld-tic6x/static-app-1r.od: New test.
	* ld-tic6x/shlib-1rb.rd: New test.
	* ld-tic6x/shlib-app-1rb.dd: New test.
	* ld-tic6x/shlib-1rb.sd: New test.
	* ld-tic6x/shlib-1rb.dd: New test.
	* ld-tic6x/shlib-app-1b.od: New test.
	* ld-tic6x/tic6x.exp: New test.
	* ld-tic6x/static-app-1rb.rd: New test.
	* ld-tic6x/shlib-app-1r.od: New test.
	* ld-tic6x/static-app-1.od: New test.
	* ld-tic6x/static-app-1b.rd: New test.
	* ld-tic6x/static-app-1r.rd: New test.
	* ld-tic6x/static-app-1rb.sd: New test.
	* ld-tic6x/static-app-1b.sd: New test.
	* ld-tic6x/static-app-1rb.dd: New test.
	* ld-tic6x/static-app-1r.sd: New test.
	* ld-tic6x/static-app-1b.dd: New test.
	* ld-tic6x/shlib-1b.rd: New test.
	* ld-tic6x/static-app-1r.dd: New test.
	* ld-tic6x/shlib-app-1b.rd: New test.
	* ld-tic6x/shlib-1r.rd: New test.
	* ld-tic6x/shlib-app-1r.rd: New test.
	* ld-tic6x/shlib-1b.sd: New test.
	* ld-tic6x/static-app-1.rd: New test.
	* ld-tic6x/shlib-app-1b.sd: New test.
	* ld-tic6x/shlib-1r.sd: New test.
	* ld-tic6x/shlib-1b.dd: New test.
	* ld-tic6x/shlib-app-1r.sd: New test.
	* ld-tic6x/shlib-app-1b.dd: New test.
	* ld-tic6x/shlib-1r.dd: New test.
	* ld-tic6x/static-app-1.sd: New test.
	* ld-tic6x/shlib-app-1r.dd: New test.
	* ld-tic6x/static-app-1.dd: New test.
	* ld-tic6x/got-reloc-local-1.s: New test.
	* ld-tic6x/got-reloc-local-2.s: New test.
	* ld-tic6x/got-reloc-local-r.d: New test.
	* ld-tic6x/got-reloc-global.s: New test.
	* ld-tic6x/got-reloc-global-addend-1.d: New test.
	* ld-tic6x/got-reloc-global-addend-1.s: New test.
	* ld-tic6x/got-reloc-global-addend-2.d: New test.
	* ld-tic6x/got-reloc-inrange.d: New test.
	* ld-tic6x/got-reloc-overflow.d: New test.
	* ld-tic6x/got-reloc-global-addend-2.s: New test.
	* ld-tic6x/dsbt-index-error.d: New test.
	* ld-tic6x/dsbt-index.d: New test.
	* ld-tic6x/dsbt-index.s: New test.
	* ld-tic6x/shlib-app-1.od: New test.
	* ld-tic6x/shlib-app-1rb.od: New test.
	* ld-tic6x/shlib-1.rd: New test.
	* ld-tic6x/weak.d: New test.
	* ld-tic6x/weak-be.d: New test.
	* ld-tic6x/weak.s: New test.

Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.528
diff -c -p -d -p -u -r1.528 bfd-in2.h
--- bfd/bfd-in2.h	10 Jan 2011 08:40:16 -0000	1.528
+++ bfd/bfd-in2.h	11 Mar 2011 11:33:34 -0000
@@ -3764,6 +3764,7 @@ the opcode.  */
   BFD_RELOC_C6000_DSBT_INDEX,
   BFD_RELOC_C6000_PREL31,
   BFD_RELOC_C6000_COPY,
+  BFD_RELOC_C6000_JUMP_SLOT,
   BFD_RELOC_C6000_ALIGN,
   BFD_RELOC_C6000_FPHEAD,
   BFD_RELOC_C6000_NOCMP,
Index: bfd/config.bfd
===================================================================
RCS file: /cvs/src/src/bfd/config.bfd,v
retrieving revision 1.274
diff -c -p -d -p -u -r1.274 config.bfd
--- bfd/config.bfd	31 Dec 2010 11:00:52 -0000	1.274
+++ bfd/config.bfd	11 Mar 2011 11:33:34 -0000
@@ -1496,7 +1496,7 @@ case "${targ}" in
     ;;
 #endif
 
-  tic6x-*-elf)
+  tic6x-*-*)
     targ_defvec=bfd_elf32_tic6x_le_vec
     targ_selvecs=bfd_elf32_tic6x_be_vec
     ;;
Index: bfd/elf32-tic6x.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-tic6x.c,v
retrieving revision 1.13
diff -c -p -d -p -u -r1.13 elf32-tic6x.c
--- bfd/elf32-tic6x.c	5 Nov 2010 13:04:06 -0000	1.13
+++ bfd/elf32-tic6x.c	11 Mar 2011 11:33:34 -0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright 2010
+   Copyright 2010, 2011
    Free Software Foundation, Inc.
    Contributed by Joseph Myers <joseph@codesourcery.com>
    		  Bernd Schmidt  <bernds@codesourcery.com>
@@ -29,6 +29,52 @@
 #include "elf/tic6x.h"
 #include "elf32-tic6x.h"
 
+#define ELF_DYNAMIC_INTERPRETER "/lib/ld-uClibc.so.0"
+
+/* DSBT binaries have a default 128K stack.  */
+#define DEFAULT_STACK_SIZE 0x20000
+
+/* The size in bytes of an entry in the procedure linkage table.  */
+#define PLT_ENTRY_SIZE 24
+
+/* TI C6X ELF linker hash table.  */
+
+struct elf32_tic6x_link_hash_table
+{
+  struct elf_link_hash_table elf;
+
+  /* Short-cuts to get to dynamic linker sections.  */
+  asection *sdynbss;
+  asection *srelbss;
+
+  /* C6X specific command line arguments.  */
+  struct elf32_tic6x_params params;
+
+  /* Small local sym cache.  */
+  struct sym_cache sym_cache;
+
+  /* The output BFD, for convenience.  */
+  bfd *obfd;
+
+  /* The .dsbt section.  */
+  asection *dsbt;
+};
+
+/* Get the TI C6X ELF linker hash table from a link_info structure.  */
+
+#define elf32_tic6x_hash_table(p) \
+  ((struct elf32_tic6x_link_hash_table *) ((p)->hash))
+
+/* TI C6X ELF linker hash entry.  */
+
+struct elf32_tic6x_link_hash_entry
+{
+  struct elf_link_hash_entry elf;
+
+  /* Track dynamic relocs copied for this symbol.  */
+  struct elf_dyn_relocs *dyn_relocs;
+};
+
 struct elf32_tic6x_obj_tdata
 {
   struct elf_obj_tdata root;
@@ -42,6 +88,20 @@ struct elf32_tic6x_obj_tdata
 #define elf32_tic6x_tdata(abfd) \
   ((struct elf32_tic6x_obj_tdata *) (abfd)->tdata.any)
 
+#define is_tic6x_elf(bfd) \
+  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+   && elf_tdata (bfd) != NULL \
+   && elf_object_id (bfd) == TIC6X_ELF_DATA)
+
+/* C6X ELF uses two common sections.  One is the usual one, and the
+   other is for small objects.  All the small objects are kept
+   together, and then referenced via the gp pointer, which yields
+   faster assembler code.  This is what we use for the small common
+   section.  This approach is copied from ecoff.c.  */
+static asection tic6x_elf_scom_section;
+static asymbol  tic6x_elf_scom_symbol;
+static asymbol  *tic6x_elf_scom_symbol_ptr;
+
 static reloc_howto_type elf32_tic6x_howto_table[] =
 {
   HOWTO (R_C6000_NONE,		/* type */
@@ -395,7 +455,19 @@ static reloc_howto_type elf32_tic6x_howt
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
-  EMPTY_HOWTO (27),
+  HOWTO (R_C6000_JUMP_SLOT,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_C6000_JUMP_SLOT",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
   EMPTY_HOWTO (28),
   EMPTY_HOWTO (29),
   EMPTY_HOWTO (30),
@@ -955,7 +1027,19 @@ static reloc_howto_type elf32_tic6x_howt
 	 0,			/* src_mask */
 	 0xffffffff,		/* dst_mask */
 	 FALSE),		/* pcrel_offset */
-  EMPTY_HOWTO (27),
+  HOWTO (R_C6000_JUMP_SLOT,	/* type */
+	 0,			/* rightshift */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
+	 FALSE,			/* pc_relative */
+	 0,			/* bitpos */
+	 complain_overflow_dont,/* complain_on_overflow */
+	 bfd_elf_generic_reloc,	/* special_function */
+	 "R_C6000_JUMP_SLOT",	/* name */
+	 FALSE,			/* partial_inplace */
+	 0,			/* src_mask */
+	 0xffffffff,		/* dst_mask */
+	 FALSE),		/* pcrel_offset */
   EMPTY_HOWTO (28),
   EMPTY_HOWTO (29),
   EMPTY_HOWTO (30),
@@ -1259,6 +1343,7 @@ static const tic6x_reloc_map elf32_tic6x
     { BFD_RELOC_C6000_DSBT_INDEX, R_C6000_DSBT_INDEX },
     { BFD_RELOC_C6000_PREL31, R_C6000_PREL31 },
     { BFD_RELOC_C6000_COPY, R_C6000_COPY },
+    { BFD_RELOC_C6000_JUMP_SLOT, R_C6000_JUMP_SLOT },
     { BFD_RELOC_C6000_ALIGN, R_C6000_ALIGN },
     { BFD_RELOC_C6000_FPHEAD, R_C6000_FPHEAD },
     { BFD_RELOC_C6000_NOCMP, R_C6000_NOCMP }
@@ -1349,6 +1434,130 @@ elf32_tic6x_set_use_rela_p (bfd *abfd, b
   elf32_tic6x_tdata (abfd)->use_rela_p = use_rela_p;
 }
 
+/* Create an entry in a C6X ELF linker hash table.  */
+
+static struct bfd_hash_entry *
+elf32_tic6x_link_hash_newfunc (struct bfd_hash_entry *entry,
+			    struct bfd_hash_table *table,
+			    const char *string)
+{
+  /* Allocate the structure if it has not already been allocated by a
+     subclass.  */
+  if (entry == NULL)
+    {
+      entry = bfd_hash_allocate (table,
+				 sizeof (struct elf32_tic6x_link_hash_entry));
+      if (entry == NULL)
+	return entry;
+    }
+
+  /* Call the allocation method of the superclass.  */
+  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
+  if (entry != NULL)
+    {
+      struct elf32_tic6x_link_hash_entry *eh;
+
+      eh = (struct elf32_tic6x_link_hash_entry *) entry;
+      eh->dyn_relocs = NULL;
+    }
+
+  return entry;
+}
+
+/* Create a C6X ELF linker hash table.  */
+
+static struct bfd_link_hash_table *
+elf32_tic6x_link_hash_table_create (bfd *abfd)
+{
+  struct elf32_tic6x_link_hash_table *ret;
+  bfd_size_type amt = sizeof (struct elf32_tic6x_link_hash_table);
+
+  ret = bfd_malloc (amt);
+  if (ret == NULL)
+    return NULL;
+
+  if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd,
+				      elf32_tic6x_link_hash_newfunc,
+				      sizeof (struct elf32_tic6x_link_hash_entry),
+				      TIC6X_ELF_DATA))
+    {
+      free (ret);
+      return NULL;
+    }
+
+  ret->sym_cache.abfd = NULL;
+  ret->obfd = abfd;
+  ret->elf.is_relocatable_executable = 1;
+
+  return &ret->elf.root;
+}
+
+/* Destroy a C6X ELF linker hash table.  */
+
+static void
+elf32_tic6x_link_hash_table_free (struct bfd_link_hash_table *hash)
+{
+  _bfd_generic_link_hash_table_free (hash);
+}
+
+/* Called to pass PARAMS to the backend.  We store them in the hash table
+   associated with INFO.  */
+
+void
+elf32_tic6x_setup (struct bfd_link_info *info,
+		   struct elf32_tic6x_params *params)
+{
+  struct elf32_tic6x_link_hash_table *htab = elf32_tic6x_hash_table (info);
+  htab->params = *params;
+}
+
+/* Determine if we're dealing with a DSBT object.  */
+
+static bfd_boolean
+using_dsbt (bfd *abfd)
+{
+  return bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_PROC,
+				   Tag_ABI_DSBT);
+}
+
+/* Create .plt, .rela.plt, .got, .got.plt, .rela.got and .dsbt
+   sections in DYNOBJ, and set up shortcuts to them in our hash
+   table.  */
+
+static bfd_boolean
+elf32_tic6x_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
+{
+  struct elf32_tic6x_link_hash_table *htab;
+  flagword flags;
+
+  htab = elf32_tic6x_hash_table (info);
+  if (htab == NULL)
+    return FALSE;
+
+  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
+    return FALSE;
+
+  /* Create .dsbt  */
+  flags = (SEC_ALLOC | SEC_LOAD
+	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+  htab->dsbt = bfd_make_section_anyway_with_flags (dynobj, ".dsbt",
+						   flags);
+  if (htab->dsbt == NULL
+      || ! bfd_set_section_alignment (dynobj, htab->dsbt, 2)
+      || ! bfd_set_section_alignment (dynobj, htab->elf.splt, 5))
+    return FALSE;
+
+  htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+  if (!info->shared)
+    htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+
+  if (!htab->sdynbss
+      || (!info->shared && !htab->srelbss))
+    abort ();
+
+  return TRUE;
+}
+
 static bfd_boolean
 elf32_tic6x_mkobject (bfd *abfd)
 {
@@ -1361,6 +1570,419 @@ elf32_tic6x_mkobject (bfd *abfd)
   return ret;
 }
 
+/* Install relocation RELA into section SRELA, incrementing its
+   reloc_count.  */
+
+static void
+install_rela (bfd *output_bfd, asection *srela,
+	      Elf_Internal_Rela *rela)
+{
+  bfd_byte *loc;
+  bfd_vma off = srela->reloc_count++ * sizeof (Elf32_External_Rela);
+  loc = srela->contents + off;
+  BFD_ASSERT (off < srela->size);
+  bfd_elf32_swap_reloca_out (output_bfd, rela, loc);
+}
+
+/* Create a dynamic reloc against the GOT at offset OFFSET.  The contents
+   of the GOT at this offset have been initialized with the relocation.  */
+
+static void
+make_got_dynreloc (bfd *output_bfd,
+		   struct elf32_tic6x_link_hash_table *htab,
+		   asection *sym_sec, bfd_vma offset)
+{
+  asection *sgot = htab->elf.sgot;
+  Elf_Internal_Rela outrel;
+  int dynindx;
+
+  outrel.r_offset = sgot->output_section->vma + sgot->output_offset + offset;
+  outrel.r_addend = bfd_get_32 (output_bfd, sgot->contents + offset);
+  if (sym_sec && sym_sec->output_section
+      && ! bfd_is_abs_section (sym_sec->output_section)
+      && ! bfd_is_und_section (sym_sec->output_section))
+    {
+      dynindx = elf_section_data (sym_sec->output_section)->dynindx;
+      outrel.r_addend -= sym_sec->output_section->vma;
+    }
+  else
+    {
+      dynindx = 0;
+    }
+  outrel.r_info = ELF32_R_INFO (dynindx, R_C6000_ABS32);
+  install_rela (output_bfd, htab->elf.srelgot, &outrel);
+}
+
+/* Finish up dynamic symbol handling.  We set the contents of various
+   dynamic sections here.  */
+
+static bfd_boolean
+elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd,
+				   struct bfd_link_info *info,
+				   struct elf_link_hash_entry *h,
+				   Elf_Internal_Sym * sym)
+{
+  bfd *dynobj;
+  struct elf32_tic6x_link_hash_table *htab;
+
+  htab = elf32_tic6x_hash_table (info);
+  dynobj = htab->elf.dynobj;
+
+  if (h->plt.offset != (bfd_vma) -1)
+    {
+      bfd_vma plt_index;
+      bfd_vma got_section_offset, got_dp_offset, rela_offset;
+      Elf_Internal_Rela rela;
+      bfd_byte *loc;
+      asection *plt, *gotplt, *relplt;
+      const struct elf_backend_data *bed;
+
+      bed = get_elf_backend_data (output_bfd);
+
+      BFD_ASSERT (htab->elf.splt != NULL);
+      plt = htab->elf.splt;
+      gotplt = htab->elf.sgotplt;
+      relplt = htab->elf.srelplt;
+
+      /* This symbol has an entry in the procedure linkage table.  Set
+	 it up.  */
+
+      if ((h->dynindx == -1
+	   && !((h->forced_local || info->executable)
+		&& h->def_regular
+		&& h->type == STT_GNU_IFUNC))
+	  || plt == NULL
+	  || gotplt == NULL
+	  || relplt == NULL)
+	abort ();
+
+      /* Get the index in the procedure linkage table which
+	 corresponds to this symbol.  This is the index of this symbol
+	 in all the symbols for which we are making plt entries.  The
+	 first entry in the procedure linkage table is reserved.
+
+	 Get the offset into the .got table of the entry that
+	 corresponds to this function.  Each .got entry is 4 bytes.
+	 The first three are reserved.
+	 
+	 For static executables, we don't reserve anything.  */
+
+      plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+      got_section_offset = plt_index + bed->got_header_size / 4;
+      got_dp_offset = got_section_offset + htab->params.dsbt_size;
+      rela_offset = plt_index * sizeof (Elf32_External_Rela);
+
+      got_section_offset *= 4;
+
+      /* Fill in the entry in the procedure linkage table.  */
+
+      /* ldw .d2t2 *+B14($GOT(f)), b2 */
+      bfd_put_32 (output_bfd, got_dp_offset << 8 | 0x0100006e,
+		  plt->contents + h->plt.offset);
+      /* mvk .s2 low(rela_offset), b0 */
+      bfd_put_32 (output_bfd, (rela_offset & 0xffff) << 7 | 0x0000002a,
+		  plt->contents + h->plt.offset + 4);
+      /* mvkh .s2 high(rela_offset), b0 */
+      bfd_put_32 (output_bfd, ((rela_offset >> 16) & 0xffff) << 7 | 0x0000006a,
+		  plt->contents + h->plt.offset + 8);
+      /* nop 2 */
+      bfd_put_32 (output_bfd, 0x00002000,
+		  plt->contents + h->plt.offset + 12);
+      /* b .s2 b2 */
+      bfd_put_32 (output_bfd, 0x00080362,
+		  plt->contents + h->plt.offset + 16);
+      /* nop 5 */
+      bfd_put_32 (output_bfd, 0x00008000,
+		  plt->contents + h->plt.offset + 20);
+
+      /* Fill in the entry in the global offset table.  */
+      bfd_put_32 (output_bfd,
+		  (plt->output_section->vma + plt->output_offset),
+		  gotplt->contents + got_section_offset);
+
+      /* Fill in the entry in the .rel.plt section.  */
+      rela.r_offset = (gotplt->output_section->vma
+		       + gotplt->output_offset
+		       + got_section_offset);
+      rela.r_info = ELF32_R_INFO (h->dynindx, R_C6000_JUMP_SLOT);
+      rela.r_addend = 0;
+      loc = relplt->contents + rela_offset;
+      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+
+      if (!h->def_regular)
+	{
+	  /* Mark the symbol as undefined, rather than as defined in
+	     the .plt section.  */
+	  sym->st_shndx = SHN_UNDEF;
+	  sym->st_value = 0;
+	}
+    }
+
+  if (h->got.offset != (bfd_vma) -1)
+    {
+      asection *sgot;
+      asection *srela;
+
+      /* This symbol has an entry in the global offset table.
+         Set it up.  */
+
+      sgot = bfd_get_section_by_name (dynobj, ".got");
+      srela = bfd_get_section_by_name (dynobj, ".rela.got");
+      BFD_ASSERT (sgot != NULL && srela != NULL);
+
+      /* If this is a -Bsymbolic link, and the symbol is defined
+         locally, we just want to emit a RELATIVE reloc.  Likewise if
+         the symbol was forced to be local because of a version file.
+         The entry in the global offset table will already have been
+         initialized in the relocate_section function.  */
+      if (info->shared
+	  && (info->symbolic
+	      || h->dynindx == -1 || h->forced_local) && h->def_regular)
+	{
+	  asection *s = h->root.u.def.section;
+	  make_got_dynreloc (output_bfd, htab, s,
+			     h->got.offset & ~(bfd_vma) 1);
+	}
+      else
+	{
+	  Elf_Internal_Rela outrel;
+	  bfd_put_32 (output_bfd, (bfd_vma) 0,
+		      sgot->contents + (h->got.offset & ~(bfd_vma) 1));
+	  outrel.r_offset = (sgot->output_section->vma
+			   + sgot->output_offset
+			   + (h->got.offset & ~(bfd_vma) 1));
+	  outrel.r_info = ELF32_R_INFO (h->dynindx, R_C6000_ABS32);
+	  outrel.r_addend = 0;
+
+	  install_rela (output_bfd, srela, &outrel);
+	}
+    }
+
+  if (h->needs_copy)
+    {
+      Elf_Internal_Rela rel;
+
+      /* This symbol needs a copy reloc.  Set it up.  */
+
+      if (h->dynindx == -1
+	  || (h->root.type != bfd_link_hash_defined
+	      && h->root.type != bfd_link_hash_defweak)
+	  || htab->srelbss == NULL)
+	abort ();
+
+      rel.r_offset = (h->root.u.def.value
+		      + h->root.u.def.section->output_section->vma
+		      + h->root.u.def.section->output_offset);
+      rel.r_info = ELF32_R_INFO (h->dynindx, R_C6000_COPY);
+      rel.r_addend = 0;
+
+      install_rela (output_bfd, htab->srelbss, &rel);
+    }
+
+  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
+  if (strcmp (h->root.root.string, "__DYNAMIC") == 0
+      || h == elf_hash_table (info)->hgot)
+    sym->st_shndx = SHN_ABS;
+
+  return TRUE;
+}
+
+/* Update the got entry reference counts for the section being removed.  */
+
+static bfd_boolean
+elf32_tic6x_gc_sweep_hook (bfd *abfd,
+			   struct bfd_link_info *info,
+			   asection *sec,
+			   const Elf_Internal_Rela *relocs)
+{
+  struct elf32_tic6x_link_hash_table *htab;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  bfd_signed_vma *local_got_refcounts;
+  const Elf_Internal_Rela *rel, *relend;
+
+  if (info->relocatable)
+    return TRUE;
+
+  htab = elf32_tic6x_hash_table (info);
+  if (htab == NULL)
+    return FALSE;
+
+  elf_section_data (sec)->local_dynrel = NULL;
+
+  symtab_hdr = &elf_symtab_hdr (abfd);
+  sym_hashes = elf_sym_hashes (abfd);
+  local_got_refcounts = elf_local_got_refcounts (abfd);
+
+  relend = relocs + sec->reloc_count;
+  for (rel = relocs; rel < relend; rel++)
+    {
+      unsigned long r_symndx;
+      unsigned int r_type;
+      struct elf_link_hash_entry *h = NULL;
+
+      r_symndx = ELF32_R_SYM (rel->r_info);
+      if (r_symndx >= symtab_hdr->sh_info)
+	{
+	  struct elf32_tic6x_link_hash_entry *eh;
+	  struct elf_dyn_relocs **pp;
+	  struct elf_dyn_relocs *p;
+
+	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	  while (h->root.type == bfd_link_hash_indirect
+		 || h->root.type == bfd_link_hash_warning)
+	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+	  eh = (struct elf32_tic6x_link_hash_entry *) h;
+
+	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
+	    if (p->sec == sec)
+	      {
+		/* Everything must go for SEC.  */
+		*pp = p->next;
+		break;
+	      }
+	}
+
+      r_type = ELF32_R_TYPE (rel->r_info);
+
+      switch (r_type)
+	{
+	case R_C6000_SBR_GOT_U15_W:
+	  if (h != NULL)
+	    {
+	      if (h->got.refcount > 0)
+		h->got.refcount -= 1;
+	    }
+	  else if (local_got_refcounts != NULL)
+	    {
+	      if (local_got_refcounts[r_symndx] > 0)
+		local_got_refcounts[r_symndx] -= 1;
+	    }
+	  break;
+
+	default:
+	  break;
+	}
+    }
+
+  return TRUE;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+   regular object.  The current definition is in some section of the
+   dynamic object, but we're not including those sections.  We have to
+   change the definition to something the rest of the link can
+   understand.  */
+
+static bfd_boolean
+elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info,
+				   struct elf_link_hash_entry *h)
+{
+  struct elf32_tic6x_link_hash_table *htab;
+  bfd *dynobj;
+  asection *s;
+
+  dynobj = elf_hash_table (info)->dynobj;
+
+  /* Make sure we know what is going on here.  */
+  BFD_ASSERT (dynobj != NULL
+	      && (h->needs_plt
+		  || h->u.weakdef != NULL
+		  || (h->def_dynamic && h->ref_regular && !h->def_regular)));
+
+  /* If this is a function, put it in the procedure linkage table.  We
+     will fill in the contents of the procedure linkage table later,
+     when we know the address of the .got section.  */
+  if (h->type == STT_FUNC
+      || h->needs_plt)
+    {
+      if (h->plt.refcount <= 0
+	  || SYMBOL_CALLS_LOCAL (info, h)
+	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+	      && h->root.type == bfd_link_hash_undefweak))
+	{
+	  /* This case can occur if we saw a PLT32 reloc in an input
+	     file, but the symbol was never referred to by a dynamic
+	     object, or if all references were garbage collected.  In
+	     such a case, we don't actually need to build a procedure
+	     linkage table, and we can just do a PC32 reloc instead.  */
+	  h->plt.offset = (bfd_vma) -1;
+	  h->needs_plt = 0;
+	}
+
+      return TRUE;
+    }
+
+  /* If this is a weak symbol, and there is a real definition, the
+     processor independent code will have arranged for us to see the
+     real definition first, and we can just use the same value.  */
+  if (h->u.weakdef != NULL)
+    {
+      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
+		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
+      h->root.u.def.section = h->u.weakdef->root.u.def.section;
+      h->root.u.def.value = h->u.weakdef->root.u.def.value;
+      h->non_got_ref = h->u.weakdef->non_got_ref;
+      return TRUE;
+    }
+
+  /* This is a reference to a symbol defined by a dynamic object which
+     is not a function.  */
+
+  /* If we are creating a shared library, we must presume that the
+     only references to the symbol are via the global offset table.
+     For such cases we need not do anything here; the relocations will
+     be handled correctly by relocate_section.  */
+  if (info->shared)
+    return TRUE;
+
+  /* If there are no references to this symbol that do not use the
+     GOT, we don't need to generate a copy reloc.  */
+  if (!h->non_got_ref)
+    return TRUE;
+
+  /* If -z nocopyreloc was given, we won't generate them either.  */
+  if (info->nocopyreloc)
+    {
+      h->non_got_ref = 0;
+      return TRUE;
+    }
+
+  htab = elf32_tic6x_hash_table (info);
+  if (htab == NULL)
+    return FALSE;
+
+  if (h->size == 0)
+    {
+      (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
+			     h->root.root.string);
+      return TRUE;
+    }
+
+  /* We must allocate the symbol in our .dynbss section, which will
+     become part of the .bss section of the executable.  There will be
+     an entry for this symbol in the .dynsym section.  The dynamic
+     object will contain position independent code, so all references
+     from the dynamic object to this symbol will go through the global
+     offset table.  The dynamic linker will use the .dynsym entry to
+     determine the address it must put in the global offset table, so
+     both the dynamic object and the regular object will refer to the
+     same memory location for the variable.  */
+
+  /* We must generate a R_386_COPY reloc to tell the dynamic linker to
+     copy the initial value out of the dynamic object and into the
+     runtime process image.  */
+  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+    {
+      htab->srelbss->size += sizeof (Elf32_External_Rela);
+      h->needs_copy = 1;
+    }
+
+  s = htab->sdynbss;
+
+  return _bfd_elf_adjust_dynamic_copy (h, s);
+}
+
 static bfd_boolean
 elf32_tic6x_new_section_hook (bfd *abfd, asection *sec)
 {
@@ -1394,6 +2016,29 @@ elf32_tic6x_rel_relocation_p (bfd *abfd,
 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
 }
 
+/* We need dynamic symbols for every section, since segments can
+   relocate independently.  */
+static bfd_boolean
+elf32_tic6x_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
+				      struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				      asection *p)
+{
+  switch (elf_section_data (p)->this_hdr.sh_type)
+    {
+    case SHT_PROGBITS:
+    case SHT_NOBITS:
+      /* If sh_type is yet undecided, assume it could be
+	 SHT_PROGBITS/SHT_NOBITS.  */
+    case SHT_NULL:
+      return FALSE;
+
+      /* There shouldn't be section relative relocations
+	 against any other section.  */
+    default:
+      return TRUE;
+    }
+}
+
 static bfd_boolean
 elf32_tic6x_relocate_section (bfd *output_bfd,
 			      struct bfd_link_info *info,
@@ -1404,14 +2049,20 @@ elf32_tic6x_relocate_section (bfd *outpu
 			      Elf_Internal_Sym *local_syms,
 			      asection **local_sections)
 {
+  bfd *dynobj;
+  struct elf32_tic6x_link_hash_table *htab;
   Elf_Internal_Shdr *symtab_hdr;
   struct elf_link_hash_entry **sym_hashes;
+  bfd_vma *local_got_offsets;
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
   bfd_boolean ok = TRUE;
 
+  htab = elf32_tic6x_hash_table (info);
+  dynobj = elf_hash_table (info)->dynobj;
   symtab_hdr = & elf_symtab_hdr (input_bfd);
   sym_hashes = elf_sym_hashes (input_bfd);
+  local_got_offsets = elf_local_got_offsets (input_bfd);
 
   relend = relocs + input_section->reloc_count;
 
@@ -1424,7 +2075,7 @@ elf32_tic6x_relocate_section (bfd *outpu
       Elf_Internal_Sym *sym;
       asection *sec;
       struct elf_link_hash_entry *h;
-      bfd_vma relocation;
+      bfd_vma off, relocation;
       bfd_boolean unresolved_reloc;
       bfd_reloc_status_type r;
       struct bfd_link_hash_entry *sbh;
@@ -1497,22 +2148,130 @@ elf32_tic6x_relocate_section (bfd *outpu
 	  continue;
 
 	case R_C6000_PCR_S21:
+	  /* A branch to an undefined weak symbol is turned into a
+	     "b .s2 B3" instruction if the existing insn is of the
+	     form "b .s2 symbol".  */
+	  if (h ? h->root.type == bfd_link_hash_undefweak
+	      && (htab->elf.splt == NULL || h->plt.offset == (bfd_vma) -1)
+	      : r_symndx != STN_UNDEF && bfd_is_und_section (sec))
+	    {
+	      unsigned long oldval;
+	      oldval = bfd_get_32 (input_bfd, contents + rel->r_offset);
+
+	      if ((oldval & 0x7e) == 0x12)
+		{
+		  oldval &= 0xF0000001;
+		  bfd_put_32 (input_bfd, oldval | 0x000c0362,
+			      contents + rel->r_offset);
+		  r = bfd_reloc_ok;
+		  goto done_reloc;
+		}
+	    }
+
 	case R_C6000_PCR_S12:
 	case R_C6000_PCR_S10:
 	case R_C6000_PCR_S7:
+	  if (h != NULL
+	      && h->plt.offset != (bfd_vma) -1
+	      && htab->elf.splt != NULL)
+	    {
+	      relocation = (htab->elf.splt->output_section->vma
+			    + htab->elf.splt->output_offset
+			    + h->plt.offset);
+	    }
+
 	  /* Generic PC-relative handling produces a value relative to
 	     the exact location of the relocation.  Adjust it to be
 	     relative to the start of the fetch packet instead.  */
 	  relocation += (input_section->output_section->vma
 			 + input_section->output_offset
 			 + rel->r_offset) & 0x1f;
-	  /* Fall through.  */
+	  unresolved_reloc = FALSE;
+	  break;
+
 	case R_C6000_ABS32:
 	case R_C6000_ABS16:
 	case R_C6000_ABS8:
 	case R_C6000_ABS_S16:
 	case R_C6000_ABS_L16:
 	case R_C6000_ABS_H16:
+	  /* When generating a shared object or relocatable executable, these
+	     relocations are copied into the output file to be resolved at
+	     run time.  */
+	  if ((info->shared || using_dsbt (output_bfd))
+	      && (input_section->flags & SEC_ALLOC)
+	      && (h == NULL
+		  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+		  || h->root.type != bfd_link_hash_undefweak))
+	    {
+	      Elf_Internal_Rela outrel;
+	      bfd_boolean skip, relocate;
+	      asection *sreloc;
+
+	      unresolved_reloc = FALSE;
+
+	      sreloc = elf_section_data (input_section)->sreloc;
+	      BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL);
+
+	      skip = FALSE;
+	      relocate = FALSE;
+
+	      outrel.r_offset =
+		_bfd_elf_section_offset (output_bfd, info, input_section,
+					 rel->r_offset);
+	      if (outrel.r_offset == (bfd_vma) -1)
+		skip = TRUE;
+	      else if (outrel.r_offset == (bfd_vma) -2)
+		skip = TRUE, relocate = TRUE;
+	      outrel.r_offset += (input_section->output_section->vma
+				  + input_section->output_offset);
+
+	      if (skip)
+		memset (&outrel, 0, sizeof outrel);
+	      else if (h != NULL
+		       && h->dynindx != -1
+		       && (!info->shared
+			   || !info->symbolic
+			   || !h->def_regular))
+		{
+		  outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+		  outrel.r_addend = rel->r_addend;
+		}
+	      else
+		{
+		  long indx;
+
+		  outrel.r_addend = relocation + rel->r_addend;
+
+		  if (bfd_is_abs_section (sec))
+		    indx = 0;
+		  else if (sec == NULL || sec->owner == NULL)
+		    {
+		      bfd_set_error (bfd_error_bad_value);
+		      return FALSE;
+		    }
+		  else
+		    {
+		      asection *osec;
+
+		      osec = sec->output_section;
+		      indx = elf_section_data (osec)->dynindx;
+		      outrel.r_addend -= osec->vma;
+		      BFD_ASSERT (indx != 0);
+		    }
+
+		  outrel.r_info = ELF32_R_INFO (indx, r_type);
+		}
+
+	      install_rela (output_bfd, sreloc, &outrel);
+
+	      /* If this reloc is against an external symbol, we do not want to
+		 fiddle with the addend.  Otherwise, we need to include the symbol
+		 value so that it becomes an addend for the dynamic reloc.  */
+	      if (! relocate)
+		continue;
+	    }
+
 	  /* Generic logic OK.  */
 	  break;
 
@@ -1547,7 +2306,124 @@ elf32_tic6x_relocate_section (bfd *outpu
 	case R_C6000_SBR_GOT_U15_W:
 	case R_C6000_SBR_GOT_L16_W:
 	case R_C6000_SBR_GOT_H16_W:
+	  /* Relocation is to the entry for this symbol in the global
+	     offset table.  */
+	  if (htab->elf.sgot == NULL)
+	    abort ();
+
+	  if (h != NULL)
+	    {
+	      bfd_boolean dyn;
+
+	      off = h->got.offset;
+	      dyn = htab->elf.dynamic_sections_created;
+	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
+		  || (info->shared
+		      && SYMBOL_REFERENCES_LOCAL (info, h))
+		  || (ELF_ST_VISIBILITY (h->other)
+		      && h->root.type == bfd_link_hash_undefweak))
+		{
+		  /* This is actually a static link, or it is a
+		     -Bsymbolic link and the symbol is defined
+		     locally, or the symbol was forced to be local
+		     because of a version file.  We must initialize
+		     this entry in the global offset table.  Since the
+		     offset must always be a multiple of 4, we use the
+		     least significant bit to record whether we have
+		     initialized it already.
+
+		     When doing a dynamic link, we create a .rel.got
+		     relocation entry to initialize the value.  This
+		     is done in the finish_dynamic_symbol routine.  */
+		  if ((off & 1) != 0)
+		    off &= ~1;
+		  else
+		    {
+		      bfd_put_32 (output_bfd, relocation,
+				  htab->elf.sgot->contents + off);
+		      h->got.offset |= 1;
+
+		      if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
+			  && !(ELF_ST_VISIBILITY (h->other)
+			       && h->root.type == bfd_link_hash_undefweak))
+			make_got_dynreloc (output_bfd, htab, sec, off);
+		    }
+		}
+	      else
+		unresolved_reloc = FALSE;
+	    }
+	  else
+	    {
+	      if (local_got_offsets == NULL)
+		abort ();
+
+	      off = local_got_offsets[r_symndx];
+
+	      /* The offset must always be a multiple of 4.  We use
+		 the least significant bit to record whether we have
+		 already generated the necessary reloc.  */
+	      if ((off & 1) != 0)
+		off &= ~1;
+	      else
+		{
+		  bfd_put_32 (output_bfd, relocation,
+			      htab->elf.sgot->contents + off);
+
+		  if (info->shared || using_dsbt (output_bfd))
+		    make_got_dynreloc (output_bfd, htab, sec, off);
+
+		  local_got_offsets[r_symndx] |= 1;
+		}
+	    }
+
+	  if (off >= (bfd_vma) -2)
+	    abort ();
+
+	  if (htab->dsbt)
+	    relocation = (htab->elf.sgot->output_section->vma
+			  + htab->elf.sgot->output_offset + off
+			  - htab->dsbt->output_section->vma
+			  - htab->dsbt->output_offset);
+	  else
+	    relocation = (htab->elf.sgot->output_section->vma
+			  + htab->elf.sgot->output_offset + off
+			  - htab->elf.sgotplt->output_section->vma
+			  - htab->elf.sgotplt->output_offset);
+
+	  if (rel->r_addend != 0)
+	    {
+	      /* We can't do anything for a relocation which is against
+		 a symbol *plus offset*.  GOT holds relocations for
+		 symbols.  Make this an error; the compiler isn't
+		 allowed to pass us these kinds of things.  */
+	      if (h == NULL)
+		(*_bfd_error_handler)
+		  (_("%B, section %A: relocation %s with non-zero addend %d"
+		     " against local symbol"),
+		   input_bfd,
+		   input_section,
+		   elf32_tic6x_howto_table[r_type].name,
+		   rel->r_addend);
+	      else
+		(*_bfd_error_handler)
+		  (_("%B, section %A: relocation %s with non-zero addend %d"
+		     " against symbol `%s'"),
+		   input_bfd,
+		   input_section,
+		   elf32_tic6x_howto_table[r_type].name,
+		   rel->r_addend,
+		   h->root.root.string[0] != '\0' ? h->root.root.string
+		   : _("[whose name is lost]"));
+
+	      bfd_set_error (bfd_error_bad_value);
+	      return FALSE;
+	    }
+	  break;
+
 	case R_C6000_DSBT_INDEX:
+	  relocation = elf32_tic6x_hash_table (info)->params.dsbt_index;
+	  break;
+
 	case R_C6000_PREL31:
 	  /* Shared libraries and exception handling support not
 	     implemented.  */
@@ -1658,6 +2534,906 @@ elf32_tic6x_relocate_section (bfd *outpu
   return ok;
 }
 
+\f
+/* Look through the relocs for a section during the first phase, and
+   calculate needed space in the global offset table, procedure linkage
+   table, and dynamic reloc sections.  */
+
+static bfd_boolean
+elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
+			  asection *sec, const Elf_Internal_Rela *relocs)
+{
+  struct elf32_tic6x_link_hash_table *htab;
+  Elf_Internal_Shdr *symtab_hdr;
+  struct elf_link_hash_entry **sym_hashes;
+  const Elf_Internal_Rela *rel;
+  const Elf_Internal_Rela *rel_end;
+  asection *sreloc;
+
+  if (info->relocatable)
+    return TRUE;
+
+  htab = elf32_tic6x_hash_table (info);
+  symtab_hdr = &elf_symtab_hdr (abfd);
+  sym_hashes = elf_sym_hashes (abfd);
+
+  /* Create dynamic sections for relocatable executables so that we can
+     copy relocations.  */
+  if (using_dsbt (abfd)
+      && ! htab->elf.dynamic_sections_created)
+    {
+      if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
+	return FALSE;
+    }
+
+  sreloc = NULL;
+
+  rel_end = relocs + sec->reloc_count;
+  for (rel = relocs; rel < rel_end; rel++)
+    {
+      unsigned int r_type;
+      unsigned long r_symndx;
+      struct elf_link_hash_entry *h;
+      Elf_Internal_Sym *isym;
+
+      r_symndx = ELF32_R_SYM (rel->r_info);
+      r_type = ELF32_R_TYPE (rel->r_info);
+
+      if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
+	{
+	  (*_bfd_error_handler) (_("%B: bad symbol index: %d"),
+				 abfd,
+				 r_symndx);
+	  return FALSE;
+	}
+
+      if (r_symndx < symtab_hdr->sh_info)
+	{
+	  /* A local symbol.  */
+	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+					abfd, r_symndx);
+	  if (isym == NULL)
+	    return FALSE;
+	  h = NULL;
+	}
+      else
+	{
+	  isym = NULL;
+	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+	  while (h->root.type == bfd_link_hash_indirect
+		 || h->root.type == bfd_link_hash_warning)
+	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+	}
+
+      switch (r_type)
+	{
+	case R_C6000_PCR_S21:
+	  /* This symbol requires a procedure linkage table entry.  We
+	     actually build the entry in adjust_dynamic_symbol,
+	     because this might be a case of linking PIC code which is
+	     never referenced by a dynamic object, in which case we
+	     don't need to generate a procedure linkage table entry
+	     after all.  */
+
+	  /* If this is a local symbol, we resolve it directly without
+	     creating a procedure linkage table entry.  */
+	  if (h == NULL)
+	    continue;
+
+	  h->needs_plt = 1;
+	  h->plt.refcount += 1;
+	  break;
+
+	case R_C6000_SBR_GOT_U15_W:
+	case R_C6000_SBR_GOT_L16_W:
+	case R_C6000_SBR_GOT_H16_W:
+	  /* This symbol requires a global offset table entry.  */
+	  if (h != NULL)
+	    {
+	      h->got.refcount += 1;
+	    }
+	  else
+	    {
+	      bfd_signed_vma *local_got_refcounts;
+
+	      /* This is a global offset table entry for a local symbol.  */
+	      local_got_refcounts = elf_local_got_refcounts (abfd);
+	      if (local_got_refcounts == NULL)
+		{
+		  bfd_size_type size;
+
+		  size = symtab_hdr->sh_info;
+		  size *= (sizeof (bfd_signed_vma)
+			   + sizeof (bfd_vma) + sizeof(char));
+		  local_got_refcounts = bfd_zalloc (abfd, size);
+		  if (local_got_refcounts == NULL)
+		    return FALSE;
+		  elf_local_got_refcounts (abfd) = local_got_refcounts;
+		}
+	      local_got_refcounts[r_symndx] += 1;
+	    }
+
+	  if (htab->elf.sgot == NULL)
+	    {
+	      if (htab->elf.dynobj == NULL)
+		htab->elf.dynobj = abfd;
+	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
+		return FALSE;
+	    }
+	  break;
+
+	case R_C6000_ABS32:
+	case R_C6000_ABS16:
+	case R_C6000_ABS8:
+	case R_C6000_ABS_S16:
+	case R_C6000_ABS_L16:
+	case R_C6000_ABS_H16:
+	  /* If we are creating a shared library, and this is a reloc
+	     against a global symbol, or a non PC relative reloc
+	     against a local symbol, then we need to copy the reloc
+	     into the shared library.  However, if we are linking with
+	     -Bsymbolic, we do not need to copy a reloc against a
+	     global symbol which is defined in an object we are
+	     including in the link (i.e., DEF_REGULAR is set).  At
+	     this point we have not seen all the input files, so it is
+	     possible that DEF_REGULAR is not set now but will be set
+	     later (it is never cleared).  In case of a weak definition,
+	     DEF_REGULAR may be cleared later by a strong definition in
+	     a shared library.  We account for that possibility below by
+	     storing information in the relocs_copied field of the hash
+	     table entry.  A similar situation occurs when creating
+	     shared libraries and symbol visibility changes render the
+	     symbol local.
+
+	     If on the other hand, we are creating an executable, we
+	     may need to keep relocations for symbols satisfied by a
+	     dynamic library if we manage to avoid copy relocs for the
+	     symbol.  */
+	  if ((info->shared || using_dsbt (abfd)) && (sec->flags & SEC_ALLOC) != 0)
+	    {
+	      struct elf_dyn_relocs *p;
+	      struct elf_dyn_relocs **head;
+
+	      /* We must copy these reloc types into the output file.
+		 Create a reloc section in dynobj and make room for
+		 this reloc.  */
+	      if (sreloc == NULL)
+		{
+		  if (htab->elf.dynobj == NULL)
+		    htab->elf.dynobj = abfd;
+
+		  sreloc = _bfd_elf_make_dynamic_reloc_section
+		    (sec, htab->elf.dynobj, 2, abfd, /*rela? */ TRUE);
+
+		  if (sreloc == NULL)
+		    return FALSE;
+		}
+
+	      /* If this is a global symbol, we count the number of
+		 relocations we need for this symbol.  */
+	      if (h != NULL)
+		{
+		  head = &((struct elf32_tic6x_link_hash_entry *) h)->dyn_relocs;
+		}
+	      else
+		{
+		  /* Track dynamic relocs needed for local syms too.
+		     We really need local syms available to do this
+		     easily.  Oh well.  */
+		  void **vpp;
+		  asection *s;
+
+		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
+		  if (s == NULL)
+		    s = sec;
+
+		  vpp = &elf_section_data (s)->local_dynrel;
+		  head = (struct elf_dyn_relocs **)vpp;
+		}
+
+	      p = *head;
+	      if (p == NULL || p->sec != sec)
+		{
+		  bfd_size_type amt = sizeof *p;
+		  p = bfd_alloc (htab->elf.dynobj, amt);
+		  if (p == NULL)
+		    return FALSE;
+		  p->next = *head;
+		  *head = p;
+		  p->sec = sec;
+		  p->count = 0;
+		}
+
+	      p->count += 1;
+	    }
+	  break;
+
+	case R_C6000_SBR_U15_B:
+	case R_C6000_SBR_U15_H:
+	case R_C6000_SBR_U15_W:
+	case R_C6000_SBR_S16:
+	case R_C6000_SBR_L16_B:
+	case R_C6000_SBR_L16_H:
+	case R_C6000_SBR_L16_W:
+	case R_C6000_SBR_H16_B:
+	case R_C6000_SBR_H16_H:
+	case R_C6000_SBR_H16_W:
+	  if (h != NULL && info->executable)
+	    {
+	      /* For B14-relative addresses, we might need a copy
+		 reloc.  */
+	      h->non_got_ref = 1;
+	    }
+	  break;
+
+	default:
+	  break;
+	}
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf32_tic6x_add_symbol_hook (bfd *abfd,
+			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
+			     Elf_Internal_Sym *sym,
+			     const char **namep ATTRIBUTE_UNUSED,
+			     flagword *flagsp ATTRIBUTE_UNUSED,
+			     asection **secp,
+			     bfd_vma *valp)
+{
+  switch (sym->st_shndx)
+    {
+    case SHN_TIC6X_SCOMMON:
+      *secp = bfd_make_section_old_way (abfd, ".scommon");
+      (*secp)->flags |= SEC_IS_COMMON;
+      *valp = sym->st_size;
+      bfd_set_section_alignment (abfd, *secp, bfd_log2 (sym->st_value));
+      break;
+    }
+
+  return TRUE;
+}
+
+static void
+elf32_tic6x_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym)
+{
+  elf_symbol_type *elfsym;
+
+  elfsym = (elf_symbol_type *) asym;
+  switch (elfsym->internal_elf_sym.st_shndx)
+    {
+    case SHN_TIC6X_SCOMMON:
+      if (tic6x_elf_scom_section.name == NULL)
+        {
+          /* Initialize the small common section.  */
+          tic6x_elf_scom_section.name = ".scommon";
+          tic6x_elf_scom_section.flags = SEC_IS_COMMON;
+          tic6x_elf_scom_section.output_section = &tic6x_elf_scom_section;
+          tic6x_elf_scom_section.symbol = &tic6x_elf_scom_symbol;
+          tic6x_elf_scom_section.symbol_ptr_ptr = &tic6x_elf_scom_symbol_ptr;
+          tic6x_elf_scom_symbol.name = ".scommon";
+          tic6x_elf_scom_symbol.flags = BSF_SECTION_SYM;
+          tic6x_elf_scom_symbol.section = &tic6x_elf_scom_section;
+          tic6x_elf_scom_symbol_ptr = &tic6x_elf_scom_symbol;
+        }
+      asym->section = &tic6x_elf_scom_section;
+      asym->value = elfsym->internal_elf_sym.st_size;
+      break;
+    }
+}
+
+static int
+elf32_tic6x_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+				     const char *name ATTRIBUTE_UNUSED,
+				     Elf_Internal_Sym *sym,
+				     asection *input_sec,
+				     struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
+{
+  /* If we see a common symbol, which implies a relocatable link, then
+     if a symbol was small common in an input file, mark it as small
+     common in the output file.  */
+  if (sym->st_shndx == SHN_COMMON && strcmp (input_sec->name, ".scommon") == 0)
+    sym->st_shndx = SHN_TIC6X_SCOMMON;
+
+  return 1;
+}
+
+static bfd_boolean
+elf32_tic6x_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
+				      asection *sec,
+				      int *retval)
+{
+  if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
+    {
+      *retval = SHN_TIC6X_SCOMMON;
+      return TRUE;
+    }
+
+  return FALSE;
+}
+
+/* Allocate space in .plt, .got and associated reloc sections for
+   dynamic relocs.  */
+
+static bfd_boolean
+elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+{
+  struct bfd_link_info *info;
+  struct elf32_tic6x_link_hash_table *htab;
+  struct elf32_tic6x_link_hash_entry *eh;
+  struct elf_dyn_relocs *p;
+
+  if (h->root.type == bfd_link_hash_indirect)
+    return TRUE;
+
+  if (h->root.type == bfd_link_hash_warning)
+    /* When warning symbols are created, they **replace** the "real"
+       entry in the hash table, thus we never get to see the real
+       symbol in a hash traversal.  So look at it now.  */
+    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+  eh = (struct elf32_tic6x_link_hash_entry *) h;
+
+  info = (struct bfd_link_info *) inf;
+  htab = elf32_tic6x_hash_table (info);
+
+  if (htab->elf.dynamic_sections_created && h->plt.refcount > 0)
+    {
+      /* Make sure this symbol is output as a dynamic symbol.
+	 Undefined weak syms won't yet be marked as dynamic.  */
+      if (h->dynindx == -1 && !h->forced_local)
+	{
+	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
+	    return FALSE;
+	}
+
+      if (info->shared
+	  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
+	{
+	  asection *s = htab->elf.splt;
+
+	  /* If this is the first .plt entry, make room for the special
+	     first entry.  */
+	  if (s->size == 0)
+	    s->size += PLT_ENTRY_SIZE;
+
+	  h->plt.offset = s->size;
+
+	  /* If this symbol is not defined in a regular file, and we are
+	     not generating a shared library, then set the symbol to this
+	     location in the .plt.  This is required to make function
+	     pointers compare as equal between the normal executable and
+	     the shared library.  */
+	  if (! info->shared && !h->def_regular)
+	    {
+	      h->root.u.def.section = s;
+	      h->root.u.def.value = h->plt.offset;
+	    }
+
+	  /* Make room for this entry.  */
+	  s->size += PLT_ENTRY_SIZE;
+	  /* We also need to make an entry in the .got.plt section, which
+	     will be placed in the .got section by the linker script.  */
+	  htab->elf.sgotplt->size += 4;
+	  /* We also need to make an entry in the .rel.plt section.  */
+	  htab->elf.srelplt->size += sizeof (Elf32_External_Rela);
+	}
+      else
+	{
+	  h->plt.offset = (bfd_vma) -1;
+	  h->needs_plt = 0;
+	}
+    }
+  else
+    {
+      h->plt.offset = (bfd_vma) -1;
+      h->needs_plt = 0;
+    }
+
+  if (h->got.refcount > 0)
+    {
+      asection *s;
+
+      /* Make sure this symbol is output as a dynamic symbol.
+	 Undefined weak syms won't yet be marked as dynamic.  */
+      if (h->dynindx == -1
+	  && !h->forced_local)
+	{
+	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
+	    return FALSE;
+	}
+
+      s = htab->elf.sgot;
+      h->got.offset = s->size;
+      s->size += 4;
+
+      if (!(ELF_ST_VISIBILITY (h->other)
+	    && h->root.type == bfd_link_hash_undefweak))
+	htab->elf.srelgot->size += sizeof (Elf32_External_Rela);
+    }
+  else
+    h->got.offset = (bfd_vma) -1;
+
+  if (eh->dyn_relocs == NULL)
+    return TRUE;
+
+  /* Discard relocs on undefined weak syms with non-default
+     visibility.  */
+  if (info->shared || using_dsbt (htab->obfd))
+    {
+      if (eh->dyn_relocs != NULL
+	  && h->root.type == bfd_link_hash_undefweak)
+	{
+	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+	    eh->dyn_relocs = NULL;
+
+	  /* Make sure undefined weak symbols are output as a dynamic
+	     symbol in PIEs.  */
+	  else if (h->dynindx == -1
+		   && !h->forced_local)
+	    {
+	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
+		return FALSE;
+	    }
+	}
+    }
+
+  /* Finally, allocate space.  */
+  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *sreloc;
+
+      sreloc = elf_section_data (p->sec)->sreloc;
+
+      BFD_ASSERT (sreloc != NULL);
+      sreloc->size += p->count * sizeof (Elf32_External_Rela);
+    }
+
+  return TRUE;
+}
+
+/* Find any dynamic relocs that apply to read-only sections.  */
+
+static bfd_boolean
+elf32_tic6x_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+{
+  struct elf32_tic6x_link_hash_entry *eh;
+  struct elf_dyn_relocs *p;
+
+  if (h->root.type == bfd_link_hash_warning)
+    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+  eh = (struct elf32_tic6x_link_hash_entry *) h;
+  for (p = eh->dyn_relocs; p != NULL; p = p->next)
+    {
+      asection *s = p->sec->output_section;
+
+      if (s != NULL && (s->flags & SEC_READONLY) != 0)
+	{
+	  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+	  info->flags |= DF_TEXTREL;
+
+	  /* Not an error, just cut short the traversal.  */
+	  return FALSE;
+	}
+    }
+  return TRUE;
+}
+
+/* Set the sizes of the dynamic sections.  */
+
+static bfd_boolean
+elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+{
+  struct elf32_tic6x_link_hash_table *htab;
+  bfd *dynobj;
+  asection *s;
+  bfd_boolean relocs;
+  bfd *ibfd;
+
+  htab = elf32_tic6x_hash_table (info);
+  dynobj = htab->elf.dynobj;
+  if (dynobj == NULL)
+    abort ();
+
+  if (htab->elf.dynamic_sections_created)
+    {
+      /* Set the contents of the .interp section to the interpreter.  */
+      if (info->executable)
+	{
+	  s = bfd_get_section_by_name (dynobj, ".interp");
+	  if (s == NULL)
+	    abort ();
+	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
+	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+	}
+    }
+
+  /* Set up .got offsets for local syms, and space for local dynamic
+     relocs.  */
+  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+    {
+      bfd_signed_vma *local_got;
+      bfd_signed_vma *end_local_got;
+      char *local_tls_type;
+      bfd_vma *local_tlsdesc_gotent;
+      bfd_size_type locsymcount;
+      Elf_Internal_Shdr *symtab_hdr;
+      asection *srel;
+
+      for (s = ibfd->sections; s != NULL; s = s->next)
+	{
+	  struct elf_dyn_relocs *p;
+
+	  for (p = ((struct elf_dyn_relocs *)
+		     elf_section_data (s)->local_dynrel);
+	       p != NULL;
+	       p = p->next)
+	    {
+	      if (!bfd_is_abs_section (p->sec)
+		  && bfd_is_abs_section (p->sec->output_section))
+		{
+		  /* Input section has been discarded, either because
+		     it is a copy of a linkonce section or due to
+		     linker script /DISCARD/, so we'll be discarding
+		     the relocs too.  */
+		}
+	      else if (p->count != 0)
+		{
+		  srel = elf_section_data (p->sec)->sreloc;
+		  srel->size += p->count * sizeof (Elf32_External_Rela);
+		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
+		    info->flags |= DF_TEXTREL;
+		}
+	    }
+	}
+
+      local_got = elf_local_got_refcounts (ibfd);
+      if (!local_got)
+	continue;
+
+      symtab_hdr = &elf_symtab_hdr (ibfd);
+      locsymcount = symtab_hdr->sh_info;
+      end_local_got = local_got + locsymcount;
+      s = htab->elf.sgot;
+      srel = htab->elf.srelgot;
+      for (; local_got < end_local_got;
+	   ++local_got, ++local_tls_type, ++local_tlsdesc_gotent)
+	{
+	  if (*local_got > 0)
+	    {
+	      *local_got = s->size;
+	      s->size += 4;
+
+	      if (info->shared || using_dsbt (output_bfd))
+		{
+		  srel->size += sizeof (Elf32_External_Rela);
+		}
+	    }
+	  else
+	    *local_got = (bfd_vma) -1;
+	}
+    }
+
+  /* Allocate global sym .plt and .got entries, and space for global
+     sym dynamic relocs.  */
+  elf_link_hash_traverse (&htab->elf, elf32_tic6x_allocate_dynrelocs, info);
+
+  /* We now have determined the sizes of the various dynamic sections.
+     Allocate memory for them.  */
+  relocs = FALSE;
+  for (s = dynobj->sections; s != NULL; s = s->next)
+    {
+      bfd_boolean strip_section = TRUE;
+
+      if ((s->flags & SEC_LINKER_CREATED) == 0)
+	continue;
+
+      if (s == htab->dsbt)
+	s->size = 4 * htab->params.dsbt_size;
+      else if (s == htab->elf.splt
+	       || s == htab->elf.sgot
+	       || s == htab->elf.sgotplt
+	       || s == htab->sdynbss)
+	{
+	  /* Strip this section if we don't need it; see the
+	     comment below.  */
+	  /* We'd like to strip these sections if they aren't needed, but if
+	     we've exported dynamic symbols from them we must leave them.
+	     It's too late to tell BFD to get rid of the symbols.  */
+
+	  if (htab->elf.hplt != NULL)
+	    strip_section = FALSE;
+
+	  /* Round up the size of the PLT section to a multiple of 32.  */
+	  if (s == htab->elf.splt && s->size > 0)
+	    s->size = (s->size + 31) & ~(bfd_vma)31;
+	}
+      else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
+	{
+	  if (s->size != 0
+	      && s != htab->elf.srelplt)
+	    relocs = TRUE;
+
+	  /* We use the reloc_count field as a counter if we need
+	     to copy relocs into the output file.  */
+	  s->reloc_count = 0;
+	}
+      else
+	{
+	  /* It's not one of our sections, so don't allocate space.  */
+	  continue;
+	}
+
+      if (s->size == 0)
+	{
+	  /* If we don't need this section, strip it from the
+	     output file.  This is mostly to handle .rel.bss and
+	     .rel.plt.  We must create both sections in
+	     create_dynamic_sections, because they must be created
+	     before the linker maps input sections to output
+	     sections.  The linker does that before
+	     adjust_dynamic_symbol is called, and it is that
+	     function which decides whether anything needs to go
+	     into these sections.  */
+	  if (strip_section)
+	    s->flags |= SEC_EXCLUDE;
+	  continue;
+	}
+
+      if ((s->flags & SEC_HAS_CONTENTS) == 0)
+	continue;
+
+      /* Allocate memory for the section contents.  We use bfd_zalloc
+	 here in case unused entries are not reclaimed before the
+	 section's contents are written out.  This should not happen,
+	 but this way if it does, we get a R_C6000_NONE reloc instead
+	 of garbage.  */
+      s->contents = bfd_zalloc (dynobj, s->size);
+      if (s->contents == NULL)
+	return FALSE;
+    }
+
+  if (htab->elf.dynamic_sections_created)
+    {
+      /* Add some entries to the .dynamic section.  We fill in the
+	 values later, in elf32_tic6x_finish_dynamic_sections, but we
+	 must add the entries now so that we get the correct size for
+	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+	 dynamic linker and used by the debugger.  */
+#define add_dynamic_entry(TAG, VAL) \
+  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
+
+      if (info->executable)
+	{
+	  if (!add_dynamic_entry (DT_DEBUG, 0))
+	    return FALSE;
+	}
+
+      if (!add_dynamic_entry (DT_C6000_DSBT_BASE, 0)
+	  || !add_dynamic_entry (DT_C6000_DSBT_SIZE, htab->params.dsbt_size)
+	  || !add_dynamic_entry (DT_C6000_DSBT_INDEX,
+				 htab->params.dsbt_index))
+	return FALSE;
+
+      if (htab->elf.splt->size != 0)
+	{
+	  if (!add_dynamic_entry (DT_PLTGOT, 0)
+	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
+	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
+	      || !add_dynamic_entry (DT_JMPREL, 0))
+	    return FALSE;
+	}
+
+      if (relocs)
+	{
+	  if (!add_dynamic_entry (DT_RELA, 0)
+	      || !add_dynamic_entry (DT_RELASZ, 0)
+	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
+	    return FALSE;
+
+	  /* If any dynamic relocs apply to a read-only section,
+	     then we need a DT_TEXTREL entry.  */
+	  if ((info->flags & DF_TEXTREL) == 0)
+	    elf_link_hash_traverse (&htab->elf,
+				    elf32_tic6x_readonly_dynrelocs, info);
+
+	  if ((info->flags & DF_TEXTREL) != 0)
+	    {
+	      if (!add_dynamic_entry (DT_TEXTREL, 0))
+		return FALSE;
+	    }
+	}
+    }
+#undef add_dynamic_entry
+
+  return TRUE;
+}
+
+/* This function is called after all the input files have been read,
+   and the input sections have been assigned to output sections.  */
+
+static bfd_boolean
+elf32_tic6x_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
+{
+  if (using_dsbt (output_bfd) && !info->relocatable)
+    {
+      struct elf_link_hash_entry *h;
+
+      /* Force a PT_GNU_STACK segment to be created.  */
+      if (! elf_tdata (output_bfd)->stack_flags)
+	elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
+
+      /* Define __stacksize if it's not defined yet.  */
+      h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+				FALSE, FALSE, FALSE);
+      if (! h || h->root.type != bfd_link_hash_defined
+	  || h->type != STT_OBJECT
+	  || !h->def_regular)
+	{
+	  struct bfd_link_hash_entry *bh = NULL;
+
+	  if (!(_bfd_generic_link_add_one_symbol
+		(info, output_bfd, "__stacksize",
+		 BSF_GLOBAL, bfd_abs_section_ptr, DEFAULT_STACK_SIZE,
+		 (const char *) NULL, FALSE,
+		 get_elf_backend_data (output_bfd)->collect, &bh)))
+	    return FALSE;
+
+	  h = (struct elf_link_hash_entry *) bh;
+	  h->def_regular = 1;
+	  h->type = STT_OBJECT;
+	}
+    }
+  return TRUE;
+}
+
+static bfd_boolean
+elf32_tic6x_modify_program_headers (bfd *output_bfd,
+				    struct bfd_link_info *info)
+{
+  struct elf_obj_tdata *tdata = elf_tdata (output_bfd);
+  struct elf_segment_map *m;
+  Elf_Internal_Phdr *p;
+
+  /* objcopy and strip preserve what's already there using
+     elf32_tic6x_copy_private_bfd_data ().  */
+  if (! info)
+    return TRUE;
+
+  for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++)
+    if (m->p_type == PT_GNU_STACK)
+      break;
+
+  if (m)
+    {
+      struct elf_link_hash_entry *h;
+
+      /* Obtain the pointer to the __stacksize symbol.  */
+      h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+				FALSE, FALSE, FALSE);
+      if (h)
+	{
+	  while (h->root.type == bfd_link_hash_indirect
+		 || h->root.type == bfd_link_hash_warning)
+	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+	  BFD_ASSERT (h->root.type == bfd_link_hash_defined);
+	}
+
+      /* Set the header p_memsz from the symbol value.  We
+	 intentionally ignore the symbol section.  */
+      if (h && h->root.type == bfd_link_hash_defined)
+	p->p_memsz = h->root.u.def.value;
+      else
+	p->p_memsz = DEFAULT_STACK_SIZE;
+
+      p->p_align = 8;
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf32_tic6x_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+				     struct bfd_link_info *info)
+{
+  struct elf32_tic6x_link_hash_table *htab;
+  bfd *dynobj;
+  asection *sdyn;
+
+  htab = elf32_tic6x_hash_table (info);
+  dynobj = htab->elf.dynobj;
+  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+
+  if (elf_hash_table (info)->dynamic_sections_created)
+    {
+      Elf32_External_Dyn * dyncon;
+      Elf32_External_Dyn * dynconend;
+
+      BFD_ASSERT (sdyn != NULL);
+
+      dyncon = (Elf32_External_Dyn *) sdyn->contents;
+      dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
+
+      for (; dyncon < dynconend; dyncon++)
+	{
+	  Elf_Internal_Dyn dyn;
+	  asection *s;
+
+	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
+
+	  switch (dyn.d_tag)
+	    {
+	    default:
+	      break;
+
+	    case DT_C6000_DSBT_BASE:
+	      s = htab->dsbt;
+	      dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset);
+	      break;
+
+	    case DT_PLTGOT:
+	      s = htab->elf.sgotplt;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	      break;
+
+	    case DT_JMPREL:
+	      s = htab->elf.srelplt;
+	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+	      break;
+
+	    case DT_PLTRELSZ:
+	      s = htab->elf.srelplt;
+	      dyn.d_un.d_val = s->size;
+	      break;
+	    }
+	  bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+	}
+
+      /* Fill in the first entry in the procedure linkage table.  */
+      if (htab->elf.splt && htab->elf.splt->size > 0)
+	{
+	  bfd_vma got_offs = (htab->elf.sgotplt->output_section->vma
+			      + htab->elf.sgotplt->output_offset
+			      - htab->dsbt->output_section->vma
+			      - htab->dsbt->output_offset) / 4;
+
+	  /* ldw .D2T2 *+b14[$GOT(0)],b2 */
+	  bfd_put_32 (output_bfd, got_offs << 8 | 0x0100006e,
+		      htab->elf.splt->contents);
+	  /* ldw .D2T2 *+b14[$GOT(4)],b1 */
+	  bfd_put_32 (output_bfd, (got_offs + 1) << 8 | 0x0080006e,
+		      htab->elf.splt->contents + 4);
+	  /* nop 3 */
+	  bfd_put_32 (output_bfd, 0x00004000,
+		      htab->elf.splt->contents + 8);
+	  /* b .s2 b2 */
+	  bfd_put_32 (output_bfd, 0x00080362,
+		      htab->elf.splt->contents + 12);
+	  /* nop 5 */
+	  bfd_put_32 (output_bfd, 0x00008000,
+		      htab->elf.splt->contents + 16);
+
+	  elf_section_data (htab->elf.splt->output_section)
+	    ->this_hdr.sh_entsize = PLT_ENTRY_SIZE;
+	}
+    }
+
+  return TRUE;
+}
+
+/* Return address for Ith PLT stub in section PLT, for relocation REL
+   or (bfd_vma) -1 if it should not be included.  */
+
+static bfd_vma
+elf32_tic6x_plt_sym_val (bfd_vma i, const asection *plt,
+			 const arelent *rel ATTRIBUTE_UNUSED)
+{
+  return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
+}
+
 static int
 elf32_tic6x_obj_attrs_arg_type (int tag)
 {
@@ -1993,6 +3769,48 @@ elf32_tic6x_merge_private_bfd_data (bfd 
   return TRUE;
 }
 
+static bfd_boolean
+elf32_tic6x_copy_private_data (bfd * ibfd, bfd * obfd)
+{
+  _bfd_elf_copy_private_bfd_data (ibfd, obfd);
+
+  if (! is_tic6x_elf (ibfd) || ! is_tic6x_elf (obfd))
+    return TRUE;
+
+  /* Copy the stack size.  */
+  if (elf_tdata (ibfd)->phdr && elf_tdata (obfd)->phdr
+      && using_dsbt (ibfd) && using_dsbt (obfd))
+    {
+      unsigned i;
+
+      for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++)
+	if (elf_tdata (ibfd)->phdr[i].p_type == PT_GNU_STACK)
+	  {
+	    Elf_Internal_Phdr *iphdr = &elf_tdata (ibfd)->phdr[i];
+
+	    for (i = 0; i < elf_elfheader (obfd)->e_phnum; i++)
+	      if (elf_tdata (obfd)->phdr[i].p_type == PT_GNU_STACK)
+		{
+		  memcpy (&elf_tdata (obfd)->phdr[i], iphdr, sizeof (*iphdr));
+
+		  /* Rewrite the phdrs, since we're only called after they
+		     were first written.  */
+		  if (bfd_seek (obfd,
+				(bfd_signed_vma) get_elf_backend_data (obfd)
+				->s->sizeof_ehdr, SEEK_SET) != 0
+		      || get_elf_backend_data (obfd)->s
+		      ->write_out_phdrs (obfd, elf_tdata (obfd)->phdr,
+					 elf_elfheader (obfd)->e_phnum) != 0)
+		    return FALSE;
+		  break;
+		}
+
+	    break;
+	  }
+    }
+
+  return TRUE;
+}
 
 #define TARGET_LITTLE_SYM	bfd_elf32_tic6x_le_vec
 #define TARGET_LITTLE_NAME	"elf32-tic6x-le"
@@ -2001,11 +3819,14 @@ elf32_tic6x_merge_private_bfd_data (bfd 
 #define ELF_ARCH		bfd_arch_tic6x
 #define ELF_TARGET_ID		TIC6X_ELF_DATA
 #define ELF_MACHINE_CODE	EM_TI_C6000
-#define ELF_MAXPAGESIZE		1
+#define ELF_MAXPAGESIZE		0x1000
 #define bfd_elf32_bfd_reloc_type_lookup elf32_tic6x_reloc_type_lookup
 #define bfd_elf32_bfd_reloc_name_lookup elf32_tic6x_reloc_name_lookup
+#define bfd_elf32_bfd_copy_private_bfd_data	elf32_tic6x_copy_private_data
 #define bfd_elf32_bfd_merge_private_bfd_data	elf32_tic6x_merge_private_bfd_data
 #define bfd_elf32_mkobject		elf32_tic6x_mkobject
+#define bfd_elf32_bfd_link_hash_table_create  elf32_tic6x_link_hash_table_create
+#define bfd_elf32_bfd_link_hash_table_free    elf32_tic6x_link_hash_table_free
 #define bfd_elf32_new_section_hook	elf32_tic6x_new_section_hook
 #define elf_backend_can_gc_sections	1
 #define elf_backend_default_use_rela_p	1
@@ -2017,9 +3838,41 @@ elf32_tic6x_merge_private_bfd_data (bfd 
 #define elf_backend_obj_attrs_section	".c6xabi.attributes"
 #define elf_backend_obj_attrs_section_type	SHT_C6000_ATTRIBUTES
 #define elf_backend_obj_attrs_vendor	"c6xabi"
+#define elf_backend_can_refcount	1
+#define elf_backend_want_got_plt	1
+#define elf_backend_want_dynbss		1
+#define elf_backend_plt_readonly	1
 #define elf_backend_rela_normal		1
+#define elf_backend_got_header_size     8
+#define elf_backend_gc_sweep_hook	elf32_tic6x_gc_sweep_hook
+#define elf_backend_modify_program_headers \
+  elf32_tic6x_modify_program_headers
+#define elf_backend_create_dynamic_sections \
+  elf32_tic6x_create_dynamic_sections
+#define elf_backend_adjust_dynamic_symbol \
+  elf32_tic6x_adjust_dynamic_symbol
+#define elf_backend_check_relocs        elf32_tic6x_check_relocs
+#define elf_backend_add_symbol_hook     elf32_tic6x_add_symbol_hook
+#define elf_backend_symbol_processing   elf32_tic6x_symbol_processing
+#define elf_backend_link_output_symbol_hook \
+  elf32_tic6x_link_output_symbol_hook
+#define elf_backend_section_from_bfd_section \
+  elf32_tic6x_section_from_bfd_section
 #define elf_backend_relocate_section	elf32_tic6x_relocate_section
+#define elf_backend_finish_dynamic_symbol \
+  elf32_tic6x_finish_dynamic_symbol
+#define elf_backend_always_size_sections \
+  elf32_tic6x_always_size_sections
+#define elf_backend_size_dynamic_sections \
+  elf32_tic6x_size_dynamic_sections
+#define elf_backend_finish_dynamic_sections \
+  elf32_tic6x_finish_dynamic_sections
 #define elf_info_to_howto		elf32_tic6x_info_to_howto
 #define elf_info_to_howto_rel		elf32_tic6x_info_to_howto_rel
 
+#undef elf_backend_omit_section_dynsym
+#define elf_backend_omit_section_dynsym elf32_tic6x_link_omit_section_dynsym
+#define elf_backend_plt_sym_val		elf32_tic6x_plt_sym_val
+
+
 #include "elf32-target.h"
Index: bfd/elf32-tic6x.h
===================================================================
RCS file: /cvs/src/src/bfd/elf32-tic6x.h,v
retrieving revision 1.2
diff -c -p -d -p -u -r1.2 elf32-tic6x.h
--- bfd/elf32-tic6x.h	16 Jun 2010 00:36:01 -0000	1.2
+++ bfd/elf32-tic6x.h	11 Mar 2011 11:33:34 -0000
@@ -1,5 +1,5 @@
 /* 32-bit ELF support for TI C6X
-   Copyright 2010
+   Copyright 2010, 2011
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -24,3 +24,12 @@ extern int elf32_tic6x_merge_arch_attrib
 /* This function is provided for use from the assembler.  */
 
 extern void elf32_tic6x_set_use_rela_p (bfd *, bfd_boolean);
+
+struct elf32_tic6x_params
+{
+  int dsbt_index;
+  int dsbt_size;
+};
+
+extern void elf32_tic6x_setup (struct bfd_link_info *,
+			       struct elf32_tic6x_params *);
Index: bfd/libbfd.h
===================================================================
RCS file: /cvs/src/src/bfd/libbfd.h,v
retrieving revision 1.246
diff -c -p -d -p -u -r1.246 libbfd.h
--- bfd/libbfd.h	10 Jan 2011 08:40:16 -0000	1.246
+++ bfd/libbfd.h	11 Mar 2011 11:33:34 -0000
@@ -1704,6 +1704,7 @@ static const char *const bfd_reloc_code_
   "BFD_RELOC_C6000_DSBT_INDEX",
   "BFD_RELOC_C6000_PREL31",
   "BFD_RELOC_C6000_COPY",
+  "BFD_RELOC_C6000_JUMP_SLOT",
   "BFD_RELOC_C6000_ALIGN",
   "BFD_RELOC_C6000_FPHEAD",
   "BFD_RELOC_C6000_NOCMP",
Index: bfd/reloc.c
===================================================================
RCS file: /cvs/src/src/bfd/reloc.c,v
retrieving revision 1.211
diff -c -p -d -p -u -r1.211 reloc.c
--- bfd/reloc.c	10 Jan 2011 08:40:16 -0000	1.211
+++ bfd/reloc.c	11 Mar 2011 11:33:35 -0000
@@ -1,6 +1,6 @@
 /* BFD support for handling relocation entries.
    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -3930,6 +3930,8 @@ ENUMX
 ENUMX
   BFD_RELOC_C6000_COPY
 ENUMX
+  BFD_RELOC_C6000_JUMP_SLOT
+ENUMX
   BFD_RELOC_C6000_ALIGN
 ENUMX
   BFD_RELOC_C6000_FPHEAD
Index: binutils/testsuite/lib/binutils-common.exp
===================================================================
RCS file: /cvs/src/src/binutils/testsuite/lib/binutils-common.exp,v
retrieving revision 1.4
diff -c -p -d -p -u -r1.4 binutils-common.exp
--- binutils/testsuite/lib/binutils-common.exp	3 Jan 2011 16:53:28 -0000	1.4
+++ binutils/testsuite/lib/binutils-common.exp	11 Mar 2011 11:33:35 -0000
@@ -1,5 +1,5 @@
 # Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007,
-# 2009, 2010 Free Software Foundation, Inc.
+# 2009, 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
 #
@@ -33,6 +33,7 @@ proc is_elf_format {} {
 	 && ![istarget frv-*-uclinux*]
 	 && ![istarget bfin-*-uclinux]
 	 && ![istarget sh*-*-uclinux*]
+	 && ![istarget tic6x*-*-uclinux*]
 	 && ![istarget *-*-irix5*]
 	 && ![istarget *-*-irix6*]
 	 && ![istarget *-*-netbsd*]
Index: gas/config/tc-tic6x.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-tic6x.c,v
retrieving revision 1.12
diff -c -p -d -p -u -r1.12 tc-tic6x.c
--- gas/config/tc-tic6x.c	3 Feb 2011 23:20:26 -0000	1.12
+++ gas/config/tc-tic6x.c	11 Mar 2011 11:33:36 -0000
@@ -34,6 +34,11 @@
 #define TRUNC(X)	((valueT) (X) & 0xffffffffU)
 #define SEXT(X)		((TRUNC (X) ^ 0x80000000U) - 0x80000000U)
 
+/* Stuff for .scomm symbols.  */
+static segT sbss_section;
+static asection scom_section;
+static asymbol scom_symbol;
+
 const char comment_chars[] = ";";
 const char line_comment_chars[] = "#*;";
 const char line_separator_chars[] = "@";
@@ -349,6 +354,138 @@ s_tic6x_nocmp (int ignored ATTRIBUTE_UNU
   demand_empty_rest_of_line ();
 }
 
+/* .scomm pseudo-op handler.
+
+   This is a new pseudo-op to handle putting objects in .scommon.
+   By doing this the linker won't need to do any work,
+   and more importantly it removes the implicit -G arg necessary to
+   correctly link the object file.  */
+
+static void
+s_tic6x_scomm (int ignore ATTRIBUTE_UNUSED)
+{
+  char *name;
+  char c;
+  char *p;
+  offsetT size;
+  symbolS *symbolP;
+  offsetT align;
+  int align2;
+
+  name = input_line_pointer;
+  c = get_symbol_end ();
+
+  /* Just after name is now '\0'.  */
+  p = input_line_pointer;
+  *p = c;
+  SKIP_WHITESPACE ();
+  if (*input_line_pointer != ',')
+    {
+      as_bad (_("Expected comma after symbol-name: rest of line ignored."));
+      ignore_rest_of_line ();
+      return;
+    }
+
+  /* Skip ','.  */
+  input_line_pointer++;
+  if ((size = get_absolute_expression ()) < 0)
+    {
+      /* xgettext:c-format  */
+      as_warn (_(".SCOMMon length (%ld.) <0! Ignored."), (long) size);
+      ignore_rest_of_line ();
+      return;
+    }
+
+  /* The third argument to .scomm is the alignment.  */
+  if (*input_line_pointer != ',')
+    align = 8;
+  else
+    {
+      ++input_line_pointer;
+      align = get_absolute_expression ();
+      if (align <= 0)
+	{
+	  as_warn (_("ignoring bad alignment"));
+	  align = 8;
+	}
+    }
+
+  /* Convert to a power of 2 alignment.  */
+  if (align)
+    {
+      for (align2 = 0; (align & 1) == 0; align >>= 1, ++align2)
+	continue;
+      if (align != 1)
+	{
+	  as_bad (_("Common alignment not a power of 2"));
+	  ignore_rest_of_line ();
+	  return;
+	}
+    }
+  else
+    align2 = 0;
+
+  *p = 0;
+  symbolP = symbol_find_or_make (name);
+  *p = c;
+
+  if (S_IS_DEFINED (symbolP))
+    {
+      /* xgettext:c-format  */
+      as_bad (_("Ignoring attempt to re-define symbol `%s'."),
+	      S_GET_NAME (symbolP));
+      ignore_rest_of_line ();
+      return;
+    }
+
+  if (S_GET_VALUE (symbolP) && S_GET_VALUE (symbolP) != (valueT) size)
+    {
+      /* xgettext:c-format  */
+      as_bad (_("Length of .scomm \"%s\" is already %ld. Not changed to %ld."),
+	      S_GET_NAME (symbolP),
+	      (long) S_GET_VALUE (symbolP),
+	      (long) size);
+
+      ignore_rest_of_line ();
+      return;
+    }
+
+  if (symbol_get_obj (symbolP)->local)
+    {
+      segT old_sec = now_seg;
+      int old_subsec = now_subseg;
+      char *pfrag;
+
+      record_alignment (sbss_section, align2);
+      subseg_set (sbss_section, 0);
+
+      if (align2)
+	frag_align (align2, 0, 0);
+
+      if (S_GET_SEGMENT (symbolP) == sbss_section)
+	symbol_get_frag (symbolP)->fr_symbol = 0;
+
+      symbol_set_frag (symbolP, frag_now);
+
+      pfrag = frag_var (rs_org, 1, 1, (relax_substateT) 0, symbolP, size,
+			(char *) 0);
+      *pfrag = 0;
+      S_SET_SIZE (symbolP, size);
+      S_SET_SEGMENT (symbolP, sbss_section);
+      S_CLEAR_EXTERNAL (symbolP);
+      subseg_set (old_sec, old_subsec);
+    }
+  else
+    {
+      S_SET_VALUE (symbolP, (valueT) size);
+      S_SET_ALIGN (symbolP, 1 << align2);
+      S_SET_EXTERNAL (symbolP);
+      S_SET_SEGMENT (symbolP, &scom_section);
+    }
+
+  demand_empty_rest_of_line ();
+}
+
 /* Track for each attribute whether it has been set explicitly (and so
    should not have a default value set by the assembler).  */
 static bfd_boolean tic6x_attributes_set_explicitly[NUM_KNOWN_OBJ_ATTRIBUTES];
@@ -396,6 +533,7 @@ const pseudo_typeS md_pseudo_table[] =
     { "arch", s_tic6x_arch, 0 },
     { "c6xabi_attribute", s_tic6x_c6xabi_attribute, 0 },
     { "nocmp", s_tic6x_nocmp, 0 },
+    { "scomm",	s_tic6x_scomm, 0 },
     { "word", cons, 4 },
     { 0, 0, 0 }
   };
@@ -411,6 +549,9 @@ void
 md_begin (void)
 {
   tic6x_opcode_id id;
+  flagword applicable;
+  segT seg;
+  subsegT subseg;
 
   bfd_set_arch_mach (stdoutput, TARGET_ARCH, 0);
 
@@ -427,6 +568,32 @@ md_begin (void)
 	  != NULL)
 	as_fatal ("%s", _(errmsg));
     }
+
+  /* Save the current subseg so we can restore it [it's the default one and
+     we don't want the initial section to be .sbss].  */
+  seg = now_seg;
+  subseg = now_subseg;
+
+  /* The sbss section is for local .scomm symbols.  */
+  sbss_section = subseg_new (".bss", 0);
+  seg_info (sbss_section)->bss = 1;
+
+  /* This is copied from perform_an_assembly_pass.  */
+  applicable = bfd_applicable_section_flags (stdoutput);
+  bfd_set_section_flags (stdoutput, sbss_section, applicable & SEC_ALLOC);
+
+  subseg_set (seg, subseg);
+
+  /* We must construct a fake section similar to bfd_com_section
+     but with the name .scommon.  */
+  scom_section                = bfd_com_section;
+  scom_section.name           = ".scommon";
+  scom_section.output_section = & scom_section;
+  scom_section.symbol         = & scom_symbol;
+  scom_section.symbol_ptr_ptr = & scom_section.symbol;
+  scom_symbol                 = * bfd_com_section.symbol;
+  scom_symbol.name            = ".scommon";
+  scom_symbol.section         = & scom_section;
 }
 
 /* Whether the current line being parsed had the "||" parallel bars.  */
@@ -4029,11 +4196,13 @@ arelent *
 tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
 {
   arelent *reloc;
+  asymbol *symbol;
   bfd_reloc_code_real_type r_type;
 
   reloc = xmalloc (sizeof (arelent));
   reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
-  *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+  symbol = symbol_get_bfdsym (fixp->fx_addsy);
+  *reloc->sym_ptr_ptr = symbol;
   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
   reloc->addend = (tic6x_generate_rela ? fixp->fx_offset : 0);
   r_type = fixp->fx_r_type;
@@ -4049,7 +4218,11 @@ tc_gen_reloc (asection *section ATTRIBUT
 
   /* Correct for adjustments bfd_install_relocation will make.  */
   if (reloc->howto->pcrel_offset && reloc->howto->partial_inplace)
-    reloc->addend += reloc->address;
+    {
+      reloc->addend += reloc->address;
+      if (!bfd_is_com_section (symbol))
+	reloc->addend -= symbol->value;
+    }
 
   return reloc;
 }
Index: gas/doc/c-tic6x.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-tic6x.texi,v
retrieving revision 1.9
diff -c -p -d -p -u -r1.9 c-tic6x.texi
--- gas/doc/c-tic6x.texi	3 Feb 2011 23:20:26 -0000	1.9
+++ gas/doc/c-tic6x.texi	11 Mar 2011 11:33:36 -0000
@@ -151,4 +151,10 @@ The @var{tag} is either an attribute num
 Disallow use of C64x+ compact instructions in the current text
 section.
 
+@cindex @code{.scomm} directive, TIC6X
+@item .scomm @var{symbol}, @var{size}, @var{align}
+Like @code{.comm}, creating a common symbol @var{symbol} with size @var{size}
+and alignment @var{align}, but unlike when using @code{.comm}, this symbol
+will be placed into the small BSS section by the linker.
+
 @end table
Index: include/elf/tic6x.h
===================================================================
RCS file: /cvs/src/src/include/elf/tic6x.h,v
retrieving revision 1.3
diff -c -p -d -p -u -r1.3 tic6x.h
--- include/elf/tic6x.h	21 Oct 2010 21:16:53 -0000	1.3
+++ include/elf/tic6x.h	11 Mar 2011 11:33:37 -0000
@@ -1,5 +1,5 @@
 /* TI C6X ELF support for BFD.
-   Copyright 2010
+   Copyright 2010, 2011
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -53,6 +53,10 @@ START_RELOC_NUMBERS (elf_tic6x_reloc_typ
   RELOC_NUMBER (R_C6000_DSBT_INDEX, 24)
   RELOC_NUMBER (R_C6000_PREL31, 25)
   RELOC_NUMBER (R_C6000_COPY, 26)
+  RELOC_NUMBER (R_C6000_JUMP_SLOT, 27)
+  RELOC_NUMBER (R_C6000_SBR_GOT32, 28)
+  RELOC_NUMBER (R_C6000_PCR_H16, 29)
+  RELOC_NUMBER (R_C6000_PCR_L16, 30)
   RELOC_NUMBER (R_C6000_ALIGN, 253)
   RELOC_NUMBER (R_C6000_FPHEAD, 254)
   RELOC_NUMBER (R_C6000_NOCMP, 255)
@@ -89,6 +93,13 @@ END_RELOC_NUMBERS (R_TIC6X_max)
 /* Extended program header attributes.  */
 #define SHT_TI_PHATTRS		0x7F000004
 
+/* Processor specific section indices.  These sections do not actually
+   exist.  Symbols with a st_shndx field corresponding to one of these
+   values have a special meaning.  */
+
+/* Small data area common symbol.  */
+#define SHN_TIC6X_SCOMMON	SHN_LORESERVE
+
 /* Processor-specific segment types.  */
 
 /* Extended Segment Attributes.  */
Index: ld/gen-doc.texi
===================================================================
RCS file: /cvs/src/src/ld/gen-doc.texi,v
retrieving revision 1.12
diff -c -p -d -p -u -r1.12 gen-doc.texi
--- ld/gen-doc.texi	12 Jul 2008 08:54:13 -0000	1.12
+++ ld/gen-doc.texi	11 Mar 2011 11:33:37 -0000
@@ -4,6 +4,7 @@
 
 @c 2. Specific target machines
 @set ARM
+@set C6X
 @set H8300
 @set HPPA
 @set I960
Index: ld/ld.texinfo
===================================================================
RCS file: /cvs/src/src/ld/ld.texinfo,v
retrieving revision 1.273
diff -c -p -d -p -u -r1.273 ld.texinfo
--- ld/ld.texinfo	4 Mar 2011 23:44:01 -0000	1.273
+++ ld/ld.texinfo	11 Mar 2011 11:33:38 -0000
@@ -22,6 +22,7 @@
 @set UsesEnvVars
 @set GENERIC
 @set ARM
+@set C6X
 @set H8300
 @set HPPA
 @set I960
@@ -2612,6 +2613,34 @@ The image is Terminal Server aware.
 
 @c man end
 
+@ifset C6X
+@subsection Options specific to C6X uClinux targets
+
+@c man begin OPTIONS
+
+The C6X uClinux target uses a binary format called DSBT to support shared
+libraries.  Each shared library in the system needs to have a unique index;
+all executables use an index of 0.
+
+@table @gcctabopt
+
+@kindex --dsbt-size
+@item --dsbt-size @var{size}
+This option sets the number of entires in the DSBT of the current executable
+or shared library to @var{size}.  The default is to create a table with 64
+entries.
+
+@kindex --dsbt-index
+@item --dsbt-index @var{index}
+This option sets the DSBT index of the current executable or shared library
+to @var{index}.  The default is 0, which is appropriate for generating
+executables.
+
+@end table
+
+@c man end
+@end ifset
+
 @ifset M68HC11
 @subsection Options specific to Motorola 68HC11 and 68HC12 targets
 
Index: ld/emulparams/elf32_tic6x_le.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf32_tic6x_le.sh,v
retrieving revision 1.4
diff -c -p -d -p -u -r1.4 elf32_tic6x_le.sh
--- ld/emulparams/elf32_tic6x_le.sh	21 Oct 2010 21:16:53 -0000	1.4
+++ ld/emulparams/elf32_tic6x_le.sh	11 Mar 2011 11:33:38 -0000
@@ -1,14 +1,29 @@
 SCRIPT_NAME=elf
 TEMPLATE_NAME=elf32
 OUTPUT_FORMAT="elf32-tic6x-le"
+BIG_OUTPUT_FORMAT="elf32-tic6x-be"
+EXTRA_EM_FILE=tic6xdsbt
+GENERATE_SHLIB_SCRIPT=yes
 # This address is an arbitrary value expected to be suitable for
 # semihosting simulator use, but not on hardware where it is expected
 # to be overridden.
-TEXT_START_ADDR=0x8000
+case ${target} in
+    *-elf)
+	TEXT_START_ADDR=0x8000
+	;;
+    *-uclinux)
+	TEXT_START_ADDR=0x0
+	GOT="
+.got ${RELOCATING-0} : {
+  *(.dsbt)
+  *(.got.plt) *(.igot.plt) *(.got) *(.igot)
+}"
+	;;
+esac
 MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
 ARCH=tic6x
 EXECUTABLE_SYMBOLS="EXTERN (__c6xabi_DSBT_BASE);"
-SDATA_START_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
+OTHER_GOT_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
 # ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
 # far read-only data, ".rodata" is near read-only data.  ".neardata"
 # is near (small) data, ".fardata" is (along with .data) far data.
@@ -24,7 +39,9 @@ OTHER_READWRITE_SECTIONS=".fardata ${REL
 OTHER_READWRITE_RELOC_SECTIONS="
   .rel.fardata     ${RELOCATING-0} : { *(.rel.fardata${RELOCATING+ .rel.fardata.*}) }
   .rela.fardata    ${RELOCATING-0} : { *(.rela.fardata${RELOCATING+ .rela.fardata.*}) }"
-OTHER_BSS_SECTIONS="
+case ${target} in
+    *-elf)
+	OTHER_BSS_SECTIONS="
   .heap : 
   { 
     . = ALIGN(4); 
@@ -37,4 +54,6 @@ OTHER_BSS_SECTIONS="
     . +=  0x100000;
     _STACK_START = .;
   }"
+	;;
+esac
 ATTRS_SECTIONS='.c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }'
Index: ld/emultempl/tic6xdsbt.em
===================================================================
RCS file: ld/emultempl/tic6xdsbt.em
diff -N ld/emultempl/tic6xdsbt.em
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/emultempl/tic6xdsbt.em	11 Mar 2011 11:33:38 -0000
@@ -0,0 +1,105 @@
+# This shell script emits a C file. -*- C -*-
+#   Copyright 2011 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# This file is sourced from elf32.em, and defines extra C6X DSBT specific
+# features.
+#
+fragment <<EOF
+#include "ldctor.h"
+#include "elf32-tic6x.h"
+
+static struct elf32_tic6x_params params =
+{
+  0, 64
+};
+
+static int
+is_tic6x_target (void)
+{
+  extern const bfd_target bfd_elf32_tic6x_le_vec;
+  extern const bfd_target bfd_elf32_tic6x_be_vec;
+
+  return (link_info.output_bfd->xvec == &bfd_elf32_tic6x_le_vec
+  	  || link_info.output_bfd->xvec == &bfd_elf32_tic6x_be_vec);
+}
+
+/* Pass params to backend.  */
+
+static void
+tic6x_after_open (void)
+{
+  if (is_tic6x_target ())
+    {
+      if (params.dsbt_index >= params.dsbt_size)
+	{
+	  einfo (_("%P%F: invalid --dsbt-index %d, outside DSBT size.\n"),
+		 params.dsbt_index);
+	}
+      elf32_tic6x_setup (&link_info, &params);
+    }
+
+  gld${EMULATION_NAME}_after_open ();
+}
+EOF
+
+# This code gets inserted into the generic elf32.sc linker script
+# and allows us to define our own command line switches.
+PARSE_AND_LIST_PROLOGUE='
+#define OPTION_DSBT_INDEX		300
+#define OPTION_DSBT_SIZE		301
+'
+
+PARSE_AND_LIST_LONGOPTS='
+  {"dsbt-index", required_argument, NULL, OPTION_DSBT_INDEX},
+  {"dsbt-size", required_argument, NULL, OPTION_DSBT_SIZE},
+'
+
+PARSE_AND_LIST_OPTIONS='
+  fprintf (file, _("  --dsbt-index <index>\n"));
+  fprintf (file, _("\t\t\tUse this as the DSBT index for the output object\n"));
+  fprintf (file, _("  --dsbt-size <index>\n"));
+  fprintf (file, _("\t\t\tUse this as the number of entries in the DSBT table\n"));
+'
+
+PARSE_AND_LIST_ARGS_CASES='
+    case OPTION_DSBT_INDEX:
+      {
+	char *end;
+	params.dsbt_index = strtol (optarg, &end, 0);
+	if (*end == 0
+	    && params.dsbt_index >= 0 && params.dsbt_index < 0x7fff)
+	  break;
+	einfo (_("%P%F: invalid --dsbt-index %s\n"), optarg);
+      }
+      break;
+    case OPTION_DSBT_SIZE:
+      {
+	char *end;
+	params.dsbt_size = strtol (optarg, &end, 0);
+	if (*end == 0
+	    && params.dsbt_size >= 0 && params.dsbt_size < 0x7fff)
+	  break;
+	einfo (_("%P%F: invalid --dsbt-size %s\n"), optarg);
+      }
+      break;
+'
+
+LDEMUL_AFTER_OPEN=tic6x_after_open
Index: ld/testsuite/ld-elf/sec-to-seg.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-elf/sec-to-seg.exp,v
retrieving revision 1.3
diff -c -p -d -p -u -r1.3 sec-to-seg.exp
--- ld/testsuite/ld-elf/sec-to-seg.exp	28 Oct 2010 06:27:55 -0000	1.3
+++ ld/testsuite/ld-elf/sec-to-seg.exp	11 Mar 2011 11:33:38 -0000
@@ -87,7 +87,6 @@ if {    [istarget avr-*-*]
      || [istarget moxie-*-*]
      || [istarget msp430-*-*]
      || [istarget mt-*-*]
-     || [istarget tic6x-*-*]
     } {
     set B_test_same_seg 0
 } else {
Index: ld/testsuite/ld-tic6x/dsbt-be.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-be.ld
diff -N ld/testsuite/ld-tic6x/dsbt-be.ld
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt-be.ld	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,67 @@
+OUTPUT_FORMAT("elf32-tic6x-be", "elf32-tic6x-be",
+	      "elf32-tic6x-be")
+EXTERN (__c6xabi_DSBT_BASE);
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+  . = 0x8000;
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+  .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+  .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+  .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+  .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+  .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+  .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+  .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+  .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+  .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+  .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+  .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .data : { *(.data*) }
+  . = 0x10000000;
+  .rel.plt        : { *(.rel.plt) }
+  .rela.plt       : { *(.rela.plt) }
+  .plt            : { *(.plt) }
+  .text : { *(.text*) }
+  PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+  .got   : { *(.dsbt) *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+  .rodata   : { *(.rodata .rodata.*) }
+  .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+  .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+  .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+  /DISCARD/ : { *(*) }
+}
Index: ld/testsuite/ld-tic6x/dsbt-index-error.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-index-error.d
diff -N ld/testsuite/ld-tic6x/dsbt-index-error.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt-index-error.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,5 @@
+#name: C6X invalid DSBT_INDEX
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --dsbt-index 5 --dsbt-size 3
+#source: dsbt-index.s
+#error: .*invalid --dsbt-index 5, outside DSBT size.*
Index: ld/testsuite/ld-tic6x/dsbt-index.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-index.d
diff -N ld/testsuite/ld-tic6x/dsbt-index.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt-index.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,14 @@
+#name: C6X DSBT_INDEX reloc
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld --dsbt-index 5
+#source: dsbt-index.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+0700056e[ \t]+ldw \.D2T2 \*\+b14\(20\),b14
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/dsbt-index.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-index.s
diff -N ld/testsuite/ld-tic6x/dsbt-index.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt-index.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,3 @@
+.text
+.nocmp
+	ldw     .d2t2   *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
Index: ld/testsuite/ld-tic6x/dsbt-inrange.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-inrange.ld
diff -N ld/testsuite/ld-tic6x/dsbt-inrange.ld
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt-inrange.ld	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,68 @@
+EXTERN (__c6xabi_DSBT_BASE);
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+  . = 0x8000;
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+  .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+  .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+  .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+  .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+  .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+  .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+  .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+  .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+  .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+  .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+  .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .data : { *(.data*) }
+  . = 0x10000000;
+  .rel.plt        : { *(.rel.plt) }
+  .rela.plt       : { *(.rela.plt) }
+  .plt            : { *(.plt) }
+  .text : { *(.text*) }
+  . = 0x20000000;
+  PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+  .dsbt   : { *(.dsbt) }
+  . = 0x2001fff4;
+  .got   : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+  .rodata   : { *(.rodata .rodata.*) }
+  .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+  .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+  .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+  /DISCARD/ : { *(*) }
+}
Index: ld/testsuite/ld-tic6x/dsbt-overflow.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-overflow.ld
diff -N ld/testsuite/ld-tic6x/dsbt-overflow.ld
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt-overflow.ld	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,68 @@
+EXTERN (__c6xabi_DSBT_BASE);
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+  . = 0x8000;
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+  .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+  .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+  .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+  .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+  .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+  .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+  .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+  .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+  .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+  .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+  .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .data : { *(.data*) }
+  . = 0x10000000;
+  .rel.plt        : { *(.rel.plt) }
+  .rela.plt       : { *(.rela.plt) }
+  .plt            : { *(.plt) }
+  .text : { *(.text*) }
+  . = 0x20000000;
+  PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+  .dsbt   : { *(.dsbt) }
+  . = 0x2001fff8;
+  .got   : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+  .rodata   : { *(.rodata .rodata.*) }
+  .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+  .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+  .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+  /DISCARD/ : { *(*) }
+}
Index: ld/testsuite/ld-tic6x/dsbt.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt.ld
diff -N ld/testsuite/ld-tic6x/dsbt.ld
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/dsbt.ld	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,65 @@
+EXTERN (__c6xabi_DSBT_BASE);
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+  . = 0x8000;
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+  .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+  .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+  .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+  .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+  .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+  .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+  .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+  .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+  .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+  .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+  .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .data : { *(.data*) }
+  . = 0x10000000;
+  .rel.plt        : { *(.rel.plt) }
+  .rela.plt       : { *(.rela.plt) }
+  .plt            : { *(.plt) }
+  .text : { *(.text*) }
+  PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+  .got   : { *(.dsbt) *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+  .rodata   : { *(.rodata .rodata.*) }
+  .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+  .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+  .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+  /DISCARD/ : { *(*) }
+}
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,5 @@
+#name: C6X GOT relocations, addend
+#as: -mlittle-endian -mdsbt
+#ld: -melf32_tic6x_le -Tdsbt.ld --dsbt-index 4 -shared
+#source: got-reloc-global-addend-1.s
+#error: .*relocation R_C6000_SBR_GOT_U15_W with non-zero addend 4.*
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,11 @@
+.text
+.nocmp
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	ldw .d2t1 *+B14($GOT(a)+4), A1
+
+	.global a
+	.section	.neardata,"aw",@progbits
+	.align	2
+	.type	a, @object
+	.size	a, 4
+a:
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,5 @@
+#name: C6X GOT relocations, addend
+#as: -mlittle-endian -mdsbt
+#ld: -melf32_tic6x_le -Tdsbt.ld --dsbt-index 4 -shared
+#source: got-reloc-global-addend-2.s
+#error: .*relocation R_C6000_SBR_GOT_L16_W with non-zero addend 4.*
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,11 @@
+.text
+.nocmp
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	mvkl .s1 $DPR_GOT(a)+4, A1
+
+	.global a
+	.section	.neardata,"aw",@progbits
+	.align	2
+	.type	a, @object
+	.size	a, 4
+a:
Index: ld/testsuite/ld-tic6x/got-reloc-global.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global.s
diff -N ld/testsuite/ld-tic6x/got-reloc-global.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-global.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,11 @@
+.text
+.nocmp
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	ldw .d2t1 *+B14($GOT(a)), A1
+
+	.global a
+	.section	.neardata,"aw",@progbits
+	.align	2
+	.type	a, @object
+	.size	a, 4
+a:
Index: ld/testsuite/ld-tic6x/got-reloc-inrange.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-inrange.d
diff -N ld/testsuite/ld-tic6x/got-reloc-inrange.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-inrange.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,15 @@
+#name: C6X GOT relocations, no overflow
+#as: -mlittle-endian -mdsbt
+#ld: -melf32_tic6x_le -Tdsbt-inrange.ld --dsbt-index 4 -shared
+#source: got-reloc-global.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <[^>]*>:
+10000000:[ \t]+0700046e[ \t]+ldw \.D2T2 \*\+b14\(16\),b14
+10000004:[ \t]+00ffff6c[ \t]+ldw \.D2T1 \*\+b14\(131068\),a1
+[ \t]+...
Index: ld/testsuite/ld-tic6x/got-reloc-local-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-local-1.s
diff -N ld/testsuite/ld-tic6x/got-reloc-local-1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-local-1.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,8 @@
+.text
+.nocmp
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	ldw .d2t1 *+B14($GOT(a)), A1
+
+.data
+a:
+	.word 0
Index: ld/testsuite/ld-tic6x/got-reloc-local-2.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-local-2.s
diff -N ld/testsuite/ld-tic6x/got-reloc-local-2.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-local-2.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,8 @@
+.text
+.nocmp
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	ldw .d2t1 *+B14($GOT(b)), A1
+
+.data
+b:
+	.word 0
Index: ld/testsuite/ld-tic6x/got-reloc-local-r.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-local-r.d
diff -N ld/testsuite/ld-tic6x/got-reloc-local-r.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-local-r.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,23 @@
+#name: C6X GOT relocations, local symbols, -r
+#as: -mlittle-endian
+#ld: -r -melf32_tic6x_le
+#source: got-reloc-local-1.s
+#source: got-reloc-local-2.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+[ 	]*0:[ 	]*0700006e[ 	 ]*ldw \.D2T2 \*\+b14\(0\),b14
+[ 	]*0:[ 	]*R_C6000_DSBT_INDEX	__c6xabi_DSBT_BASE
+[ 	]*4:[ 	]*0080006c[ 	]*ldw \.D2T1 \*\+b14\(0\),a1
+[ 	]*4:[ 	]*R_C6000_SBR_GOT_U15_W	a
+	\.\.\.
+[ 	]*20:[ 	]*0700006e[ 	]*ldw \.D2T2 \*\+b14\(0\),b14
+[ 	]*20: R_C6000_DSBT_INDEX	__c6xabi_DSBT_BASE
+[ 	]*24:[ 	]*0080006c[ 	]*ldw \.D2T1 \*\+b14\(0\),a1
+[ 	]*24:[ 	]*R_C6000_SBR_GOT_U15_W	b
+	\.\.\.
Index: ld/testsuite/ld-tic6x/got-reloc-overflow.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-overflow.d
diff -N ld/testsuite/ld-tic6x/got-reloc-overflow.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/got-reloc-overflow.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,5 @@
+#name: C6X GOT relocations, overflow
+#as: -mlittle-endian -mdsbt
+#ld: -melf32_tic6x_le -Tdsbt-overflow.ld --dsbt-index 4 -shared
+#source: got-reloc-global.s
+#error: .*relocation truncated to fit: R_C6000_SBR_GOT_U15_W.*
Index: ld/testsuite/ld-tic6x/shlib-1.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.dd
diff -N ld/testsuite/ld-tic6x/shlib-1.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,67 @@
+
+tmpdir/libtest\.so:     file format elf32-tic6x-le
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+
+10000050 <sub@plt>:
+10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+1000005c:[ \t]*00002000[ \t]*nop 2
+10000060:[ \t]*00080362[ \t]*b \.S2 b2
+10000064:[ \t]*00008000[ \t]*nop 5
+	\.\.\.
+
+Disassembly of section \.text:
+
+10000080 <sub1>:
+10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+10000084:[ \t]*00008000[ \t]*nop 5
+
+10000088 <sub0>:
+10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+100000b0:[ \t]*00004000[ \t]*nop 3
+100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+100000b8:[ \t]*00008000[ \t]*nop 5
+100000bc:[ \t]*00000000[ \t]*nop 1
+
+100000c0 <sub>:
+100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+100000cc:[ \t]*00006000[ \t]*nop 4
+100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.rd
diff -N ld/testsuite/ld-tic6x/shlib-1.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,123 @@
+There are 17 section headers, starting at offset 0x21c4:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+  \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+  \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+  \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+  \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+  \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+  \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+  \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+  \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+  \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+  \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+  \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+  \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x10000080
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+  DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x117c contains 16 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x8118
+ 0x00000006 \(SYMTAB\)                     0x8048
+ 0x0000000a \(STRSZ\)                      37 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x2
+ 0x00000003 \(PLTGOT\)                     0x1000010c
+ 0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x8140
+ 0x00000008 \(RELASZ\)                     84 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+
+Symbol table '\.dynsym' contains 13 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+     3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+     4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+     6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+    10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+    11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+    13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+    14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+    15: 0000817c     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 10000130     4 NOTYPE  LOCAL  DEFAULT   12 c
+    17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+    18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+    20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.s
diff -N ld/testsuite/ld-tic6x/shlib-1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,44 @@
+	.text
+	.nocmp
+	.align	2
+	.hidden	sub1
+	.type	sub1, @function
+sub1:
+		ret .s2 B3
+		nop	5
+
+	.global	sub0
+	.type	sub0, @function
+sub0:
+		sub	.d2	B15, 16, B15
+		stw	.d2t2	B3, *+B15(12)
+		stw	.d2t2	B14, *+B15(16)
+		ldw	.d2t2	*+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+		call	.s2	(sub)
+		call	.s2	(sub0)
+		call	.s2	(sub1)
+.L2:
+		ldw	.d2t2	*+B15(12), B3
+		ldw	.d2t2	*+B15(16), B14
+		addk	.s2	16, B15
+		nop	3
+		ret	.s2	B3
+		nop	5
+	.size	sub0, .-sub0
+
+	.global	a
+	.section	.neardata,"aw",@progbits
+	.align	2
+	.type	a, @object
+	.size	a, 4
+a:
+	.long	sub0
+	.weak	g1
+	.global g2
+	.type	g2, @object
+	.size	g2, 4
+g2:
+	.long	g1
+
+	.hidden c
+	.scomm	c,4,4
Index: ld/testsuite/ld-tic6x/shlib-1.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.sd
diff -N ld/testsuite/ld-tic6x/shlib-1.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,7 @@
+
+tmpdir/libtest\.so:     file format elf32-tic6x-le
+
+Contents of section \.got:
+[ \t]*10000100 00000000 00000000 00000000 00000000 .*
+[ \t]*10000110 00000000 20000010 20000010 00000000 .*
+[ \t]*10000120 30010010 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-1b.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1b.dd
diff -N ld/testsuite/ld-tic6x/shlib-1b.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1b.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,67 @@
+
+tmpdir/libtestb\.so:     file format elf32-tic6x-be
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+
+10000050 <sub@plt>:
+10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+1000005c:[ \t]*00002000[ \t]*nop 2
+10000060:[ \t]*00080362[ \t]*b \.S2 b2
+10000064:[ \t]*00008000[ \t]*nop 5
+	\.\.\.
+
+Disassembly of section \.text:
+
+10000080 <sub1>:
+10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+10000084:[ \t]*00008000[ \t]*nop 5
+
+10000088 <sub0>:
+10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+100000b0:[ \t]*00004000[ \t]*nop 3
+100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+100000b8:[ \t]*00008000[ \t]*nop 5
+100000bc:[ \t]*00000000[ \t]*nop 1
+
+100000c0 <sub>:
+100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+100000cc:[ \t]*00006000[ \t]*nop 4
+100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1b.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1b.rd
diff -N ld/testsuite/ld-tic6x/shlib-1b.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1b.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,123 @@
+There are 17 section headers, starting at offset 0x21c4:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+  \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+  \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+  \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+  \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+  \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+  \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+  \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+  \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+  \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+  \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+  \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+  \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x10000080
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+  DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x117c contains 16 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x8118
+ 0x00000006 \(SYMTAB\)                     0x8048
+ 0x0000000a \(STRSZ\)                      37 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x2
+ 0x00000003 \(PLTGOT\)                     0x1000010c
+ 0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x8140
+ 0x00000008 \(RELASZ\)                     84 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+
+Symbol table '\.dynsym' contains 13 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+     3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+     4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+     6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+    10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+    11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+    13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+    14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+    15: 0000817c     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 10000130     4 NOTYPE  LOCAL  DEFAULT   12 c
+    17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+    18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+    20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1b.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1b.sd
diff -N ld/testsuite/ld-tic6x/shlib-1b.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1b.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,7 @@
+
+tmpdir/libtestb\.so:     file format elf32-tic6x-be
+
+Contents of section \.got:
+[ \t]*10000100 00000000 00000000 00000000 00000000 .*
+[ \t]*10000110 00000000 10000020 10000020 00000000 .*
+[ \t]*10000120 10000130 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-1r.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1r.dd
diff -N ld/testsuite/ld-tic6x/shlib-1r.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1r.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,67 @@
+
+tmpdir/libtestr\.so:     file format elf32-tic6x-le
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+
+10000050 <sub@plt>:
+10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+1000005c:[ \t]*00002000[ \t]*nop 2
+10000060:[ \t]*00080362[ \t]*b \.S2 b2
+10000064:[ \t]*00008000[ \t]*nop 5
+	\.\.\.
+
+Disassembly of section \.text:
+
+10000080 <sub1>:
+10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+10000084:[ \t]*00008000[ \t]*nop 5
+
+10000088 <sub0>:
+10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+100000b0:[ \t]*00004000[ \t]*nop 3
+100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+100000b8:[ \t]*00008000[ \t]*nop 5
+100000bc:[ \t]*00000000[ \t]*nop 1
+
+100000c0 <sub>:
+100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+100000cc:[ \t]*00006000[ \t]*nop 4
+100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1r.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1r.rd
diff -N ld/testsuite/ld-tic6x/shlib-1r.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1r.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,123 @@
+There are 17 section headers, starting at offset 0x21c4:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+  \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+  \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+  \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+  \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+  \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+  \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+  \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+  \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+  \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+  \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+  \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+  \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x10000080
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+  DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x117c contains 16 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x8118
+ 0x00000006 \(SYMTAB\)                     0x8048
+ 0x0000000a \(STRSZ\)                      37 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x2
+ 0x00000003 \(PLTGOT\)                     0x1000010c
+ 0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x8140
+ 0x00000008 \(RELASZ\)                     84 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+
+Symbol table '\.dynsym' contains 13 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+     3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+     4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+     6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+    10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+    11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+    13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+    14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+    15: 0000817c     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 10000130     4 NOTYPE  LOCAL  DEFAULT   12 c
+    17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+    18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+    20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1r.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1r.sd
diff -N ld/testsuite/ld-tic6x/shlib-1r.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1r.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,7 @@
+
+tmpdir/libtestr\.so:     file format elf32-tic6x-le
+
+Contents of section \.got:
+[ \t]*10000100 00000000 00000000 00000000 00000000 .*
+[ \t]*10000110 00000000 20000010 20000010 00000000 .*
+[ \t]*10000120 30010010 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-1rb.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1rb.dd
diff -N ld/testsuite/ld-tic6x/shlib-1rb.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1rb.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,67 @@
+
+tmpdir/libtestrb\.so:     file format elf32-tic6x-be
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+
+10000050 <sub@plt>:
+10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+1000005c:[ \t]*00002000[ \t]*nop 2
+10000060:[ \t]*00080362[ \t]*b \.S2 b2
+10000064:[ \t]*00008000[ \t]*nop 5
+	\.\.\.
+
+Disassembly of section \.text:
+
+10000080 <sub1>:
+10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+10000084:[ \t]*00008000[ \t]*nop 5
+
+10000088 <sub0>:
+10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+100000b0:[ \t]*00004000[ \t]*nop 3
+100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+100000b8:[ \t]*00008000[ \t]*nop 5
+100000bc:[ \t]*00000000[ \t]*nop 1
+
+100000c0 <sub>:
+100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+100000cc:[ \t]*00006000[ \t]*nop 4
+100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1rb.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1rb.rd
diff -N ld/testsuite/ld-tic6x/shlib-1rb.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1rb.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,123 @@
+There are 17 section headers, starting at offset 0x21c4:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+  \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+  \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+  \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+  \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+  \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+  \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+  \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+  \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+  \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+  \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+  \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+  \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is DYN \(Shared object file\)
+Entry point 0x10000080
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+  DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x117c contains 16 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x8118
+ 0x00000006 \(SYMTAB\)                     0x8048
+ 0x0000000a \(STRSZ\)                      37 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x2
+ 0x00000003 \(PLTGOT\)                     0x1000010c
+ 0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x8140
+ 0x00000008 \(RELASZ\)                     84 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+
+Symbol table '\.dynsym' contains 13 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+     3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+     4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+     6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+    10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+    11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+    13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+    14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+    15: 0000817c     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 10000130     4 NOTYPE  LOCAL  DEFAULT   12 c
+    17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+    18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+    20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+    23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+    24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+    25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1rb.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1rb.sd
diff -N ld/testsuite/ld-tic6x/shlib-1rb.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-1rb.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,7 @@
+
+tmpdir/libtestrb\.so:     file format elf32-tic6x-be
+
+Contents of section \.got:
+[ \t]*10000100 00000000 00000000 00000000 00000000 .*
+[ \t]*10000110 00000000 10000020 10000020 00000000 .*
+[ \t]*10000120 10000130 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-2.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-2.s
diff -N ld/testsuite/ld-tic6x/shlib-2.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-2.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,23 @@
+	.weak a
+	.weak b
+
+	.text
+	.nocmp
+	.align	2
+	.global	sub
+	.type	sub, @function
+sub:
+		sub	.d2	B15, 16, B15
+		stw	.d2t1	A4, *+B15(12)
+		ldw	.d2t1	*+B15(12), A0
+		nop	4
+		add	.d1	A0, 10, A0
+		mv	.d1	A0, A4
+		add	.d2	B15, 16, B15
+		ret	.s2	B3
+		ldw .d2t2 *+B14($GOT(a)), B6
+		ldw .d2t2 *+B14($GOT(b)), B7
+		ldw .d2t2 *+B14($GOT(c)), B8
+		ldw .d2t2 *+B14(c), B9
+		nop	1
+	.size	sub, .-sub
Index: ld/testsuite/ld-tic6x/shlib-app-1.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,40 @@
+
+tmpdir/shlib-dynapp-1:     file format elf32-tic6x-le
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+[ \t]*\.\.\.
+
+Disassembly of section \.text:
+
+10000060 <fish>:
+10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+10000074:[ \t]*02000b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b4
+10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+10000084:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+10000088:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+1000008c:[ \t]*02800328[ \t]*mvk \.S1 6,a5
+10000090:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,13 @@
+
+tmpdir/shlib-dynapp-1:     file format elf32-tic6x-le
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000b8 R_C6000_ABS32     b
+100000bc R_C6000_ABS32     a
+100000c4 R_C6000_ABS32     g1
+100000c8 R_C6000_ABS32     g2
+100000cc R_C6000_COPY      a
+100000b4 R_C6000_JUMP_SLOT  sub0
+
+
Index: ld/testsuite/ld-tic6x/shlib-app-1.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,127 @@
+There are 18 section headers, starting at offset 0x2168:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 000044 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          00008104 001104 000035 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            0000813c 00113c 000018 0c   A  2  11  4
+  \[ 5\] \.rela\.neardata    RELA            00008154 001154 000018 0c   A  2  12  4
+  \[ 6\] \.rela\.bss         RELA            0000816c 00116c 00000c 0c   A  2  13  4
+  \[ 7\] \.dynamic          DYNAMIC         00008178 001178 0000b8 08  WA  3   0  4
+  \[ 8\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   9  4
+  \[ 9\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+  \[10\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+  \[11\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+  \[12\] \.neardata         PROGBITS        100000c0 0020c0 00000c 00  WA  0   0  4
+  \[13\] \.bss              NOBITS          100000cc 0020cc 000004 00  WA  0   0  4
+  \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020cc 000019 00      0   0  1
+  \[15\] \.shstrtab         STRTAB          00000000 0020e5 000080 00      0   0  1
+  \[16\] \.symtab           SYMTAB          00000000 002438 0001a0 10     17  20  4
+  \[17\] \.strtab           STRTAB          00000000 0025d8 000055 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000060
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x00230 0x00230 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000cc 0x000d0 RWE 0x1000
+  DYNAMIC        0x001178 0x00008178 0x00008178 0x000b8 0x000b8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.rela\.bss \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1178 contains 18 entries:
+  Tag        Type                         Name/Value
+ 0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtest\.so\]
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x8104
+ 0x00000006 \(SYMTAB\)                     0x8044
+ 0x0000000a \(STRSZ\)                      53 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000003 \(PLTGOT\)                     0x100000ac
+ 0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x813c
+ 0x00000008 \(RELASZ\)                     72 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x113c contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+100000bc  00000b01 R_C6000_ABS32          100000cc   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1154 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000c4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+100000c8  00000901 R_C6000_ABS32          00000000   g2 \+ 0
+
+Relocation section '\.rela\.bss' at offset 0x116c contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000cc  00000b1a R_C6000_COPY           100000cc   a \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b4  00000a1b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+
+Symbol table '\.dynsym' contains 12 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    9 
+     2: 10000060     0 SECTION LOCAL  DEFAULT   10 
+     3: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+     4: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+     5: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+     6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+    10: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+    11: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 00008044     0 SECTION LOCAL  DEFAULT    2 
+     3: 00008104     0 SECTION LOCAL  DEFAULT    3 
+     4: 0000813c     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008154     0 SECTION LOCAL  DEFAULT    5 
+     6: 0000816c     0 SECTION LOCAL  DEFAULT    6 
+     7: 00008178     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000000     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000020     0 SECTION LOCAL  DEFAULT    9 
+    10: 10000060     0 SECTION LOCAL  DEFAULT   10 
+    11: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+    12: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+    13: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+    14: 00000000     0 SECTION LOCAL  DEFAULT   14 
+    15: 10000060     0 NOTYPE  LOCAL  DEFAULT   10 fish
+    16: 100000c4     8 OBJECT  LOCAL  DEFAULT   12 w
+    17: 00008178     0 OBJECT  LOCAL  DEFAULT    7 _DYNAMIC
+    18: 100000ac     0 OBJECT  LOCAL  DEFAULT   11 _GLOBAL_OFFSET_TABLE_
+    19: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    20: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+    21: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    22: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    23: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+    24: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+    25: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
Index: ld/testsuite/ld-tic6x/shlib-app-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.s
diff -N ld/testsuite/ld-tic6x/shlib-app-1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,31 @@
+	.global a
+	.text
+	.nocmp
+fish:
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	callp .s2 sub0, B3
+	b .s2 sub0
+	callp .s2 fish, B3
+	b .s2 fish
+	ldw .d2t2 *+B14(a), B4
+	ldw .d2t2 *+B14(b), B5
+	ldw .d2t2 *+B14($GOT(a)), B6
+	ldw .d2t2 *+B14($GOT(b)), B6
+	mvkl .s1 $DPR_GOT(a), A4
+	mvkh .s1 $DPR_GOT(a), A4
+	mvkl .s1 $DPR_GOT(b), A5
+	mvkh .s1 $DPR_GOT(b), A5
+	.global	b
+	.section	.neardata,"aw",@progbits
+	.align	2
+	.type	b, @object
+	.size	b, 4
+b:
+	.long	0x12345678
+	.weak	g1
+	.weak	g2
+	.type	w, @object
+	.size	w, 8
+w:
+	.long	g1
+	.long	g2
Index: ld/testsuite/ld-tic6x/shlib-app-1.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/shlib-dynapp-1:     file format elf32-tic6x-le
+
+Contents of section \.got:
+[ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000b0 00000000 20000010 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-app-1b.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1b.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,40 @@
+
+tmpdir/shlib-dynapp-1b:     file format elf32-tic6x-be
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+[ \t]*\.\.\.
+
+Disassembly of section \.text:
+
+10000060 <fish>:
+10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+10000074:[ \t]*02000b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b4
+10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+10000084:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+10000088:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+1000008c:[ \t]*02800328[ \t]*mvk \.S1 6,a5
+10000090:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1b.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1b.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,13 @@
+
+tmpdir/shlib-dynapp-1b:     file format elf32-tic6x-be
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000b8 R_C6000_ABS32     b
+100000bc R_C6000_ABS32     a
+100000c4 R_C6000_ABS32     g1
+100000c8 R_C6000_ABS32     g2
+100000cc R_C6000_COPY      a
+100000b4 R_C6000_JUMP_SLOT  sub0
+
+
Index: ld/testsuite/ld-tic6x/shlib-app-1b.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1b.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,127 @@
+There are 18 section headers, starting at offset 0x2168:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 000044 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          00008104 001104 000036 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            0000813c 00113c 000018 0c   A  2  11  4
+  \[ 5\] \.rela\.neardata    RELA            00008154 001154 000018 0c   A  2  12  4
+  \[ 6\] \.rela\.bss         RELA            0000816c 00116c 00000c 0c   A  2  13  4
+  \[ 7\] \.dynamic          DYNAMIC         00008178 001178 0000b8 08  WA  3   0  4
+  \[ 8\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   9  4
+  \[ 9\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+  \[10\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+  \[11\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+  \[12\] \.neardata         PROGBITS        100000c0 0020c0 00000c 00  WA  0   0  4
+  \[13\] \.bss              NOBITS          100000cc 0020cc 000004 00  WA  0   0  4
+  \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020cc 000019 00      0   0  1
+  \[15\] \.shstrtab         STRTAB          00000000 0020e5 000080 00      0   0  1
+  \[16\] \.symtab           SYMTAB          00000000 002438 0001a0 10     17  20  4
+  \[17\] \.strtab           STRTAB          00000000 0025d8 000055 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000060
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x00230 0x00230 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000cc 0x000d0 RWE 0x1000
+  DYNAMIC        0x001178 0x00008178 0x00008178 0x000b8 0x000b8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.rela\.bss \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1178 contains 18 entries:
+  Tag        Type                         Name/Value
+ 0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtestb\.so\]
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x8104
+ 0x00000006 \(SYMTAB\)                     0x8044
+ 0x0000000a \(STRSZ\)                      54 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000003 \(PLTGOT\)                     0x100000ac
+ 0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x813c
+ 0x00000008 \(RELASZ\)                     72 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x113c contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+100000bc  00000b01 R_C6000_ABS32          100000cc   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1154 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000c4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+100000c8  00000901 R_C6000_ABS32          00000000   g2 \+ 0
+
+Relocation section '\.rela\.bss' at offset 0x116c contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000cc  00000b1a R_C6000_COPY           100000cc   a \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b4  00000a1b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+
+Symbol table '\.dynsym' contains 12 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    9 
+     2: 10000060     0 SECTION LOCAL  DEFAULT   10 
+     3: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+     4: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+     5: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+     6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+    10: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+    11: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 00008044     0 SECTION LOCAL  DEFAULT    2 
+     3: 00008104     0 SECTION LOCAL  DEFAULT    3 
+     4: 0000813c     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008154     0 SECTION LOCAL  DEFAULT    5 
+     6: 0000816c     0 SECTION LOCAL  DEFAULT    6 
+     7: 00008178     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000000     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000020     0 SECTION LOCAL  DEFAULT    9 
+    10: 10000060     0 SECTION LOCAL  DEFAULT   10 
+    11: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+    12: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+    13: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+    14: 00000000     0 SECTION LOCAL  DEFAULT   14 
+    15: 10000060     0 NOTYPE  LOCAL  DEFAULT   10 fish
+    16: 100000c4     8 OBJECT  LOCAL  DEFAULT   12 w
+    17: 00008178     0 OBJECT  LOCAL  DEFAULT    7 _DYNAMIC
+    18: 100000ac     0 OBJECT  LOCAL  DEFAULT   11 _GLOBAL_OFFSET_TABLE_
+    19: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    20: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+    21: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    22: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    23: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+    24: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+    25: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
Index: ld/testsuite/ld-tic6x/shlib-app-1b.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1b.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/shlib-dynapp-1b:     file format elf32-tic6x-be
+
+Contents of section \.got:
+[ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000b0 00000000 10000020 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-app-1r.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1r.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,36 @@
+
+tmpdir/shlib-dynapp-1r:     file format elf32-tic6x-le
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+[ \t]*\.\.\.
+
+Disassembly of section \.text:
+
+10000060 <fish>:
+10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+10000074:[ \t]*0200096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b4
+10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1r.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1r.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,11 @@
+
+tmpdir/shlib-dynapp-1r:     file format elf32-tic6x-le
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000b8 R_C6000_ABS32     b
+100000bc R_C6000_ABS32     a
+100000c4 R_C6000_COPY      a
+100000b4 R_C6000_JUMP_SLOT  sub0
+
+
Index: ld/testsuite/ld-tic6x/shlib-app-1r.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1r.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,115 @@
+There are 17 section headers, starting at offset 0x2158:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 000030 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            0000810c 00110c 000018 0c   A  2  10  4
+  \[ 5\] \.rela\.bss         RELA            00008124 001124 00000c 0c   A  2  12  4
+  \[ 6\] \.dynamic          DYNAMIC         00008130 001130 0000b8 08  WA  3   0  4
+  \[ 7\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   8  4
+  \[ 8\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+  \[ 9\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+  \[10\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+  \[11\] \.neardata         PROGBITS        100000c0 0020c0 000004 00  WA  0   0  4
+  \[12\] \.bss              NOBITS          100000c4 0020c4 000004 00  WA  0   0  4
+  \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020c4 000019 00      0   0  1
+  \[14\] \.shstrtab         STRTAB          00000000 0020dd 00007b 00      0   0  1
+  \[15\] \.symtab           SYMTAB          00000000 002400 000160 10     16  18  4
+  \[16\] \.strtab           STRTAB          00000000 002560 00004d 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000060
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x001e8 0x001e8 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000c4 0x000c8 RWE 0x1000
+  DYNAMIC        0x001130 0x00008130 0x00008130 0x000b8 0x000b8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.bss \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1130 contains 18 entries:
+  Tag        Type                         Name/Value
+ 0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtestr\.so\]
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x80dc
+ 0x00000006 \(SYMTAB\)                     0x803c
+ 0x0000000a \(STRSZ\)                      48 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000003 \(PLTGOT\)                     0x100000ac
+ 0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x810c
+ 0x00000008 \(RELASZ\)                     48 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x110c contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+100000bc  00000901 R_C6000_ABS32          100000c4   a \+ 0
+
+Relocation section '\.rela\.bss' at offset 0x1124 contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000c4  0000091a R_C6000_COPY           100000c4   a \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b4  0000081b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+
+Symbol table '\.dynsym' contains 10 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     2: 10000060     0 SECTION LOCAL  DEFAULT    9 
+     3: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+     4: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+     5: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+     6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+     8: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     9: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
+
+Symbol table '\.symtab' contains 22 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+     3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+     4: 0000810c     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008124     0 SECTION LOCAL  DEFAULT    5 
+     6: 00008130     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000060     0 SECTION LOCAL  DEFAULT    9 
+    10: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+    11: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+    12: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+    13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+    14: 10000060     0 NOTYPE  LOCAL  DEFAULT    9 fish
+    15: 00008130     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 100000ac     0 OBJECT  LOCAL  DEFAULT   10 _GLOBAL_OFFSET_TABLE_
+    17: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    18: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+    19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    20: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+    21: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
Index: ld/testsuite/ld-tic6x/shlib-app-1r.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.s
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1r.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,19 @@
+	.global a
+.text
+fish:
+	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+	callp .s2 sub0, B3
+	b .s2 sub0
+	callp .s2 fish, B3
+	b .s2 fish
+	ldw .d2t2 *+B14(a), B4
+	ldw .d2t2 *+B14(b), B5
+	ldw .d2t2 *+B14($GOT(a)), B6
+	ldw .d2t2 *+B14($GOT(b)), B6
+	.global	b
+	.section	.neardata,"aw",@progbits
+	.align	2
+	.type	b, @object
+	.size	b, 4
+b:
+	.long	0x12345678
Index: ld/testsuite/ld-tic6x/shlib-app-1r.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1r.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/shlib-dynapp-1r:     file format elf32-tic6x-le
+
+Contents of section \.got:
+[ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000b0 00000000 20000010 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1rb.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,36 @@
+
+tmpdir/shlib-dynapp-1rb:     file format elf32-tic6x-be
+
+
+Disassembly of section \.plt:
+
+10000020 <sub0@plt-0x18>:
+10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+10000028:[ \t]*00004000[ \t]*nop 3
+1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+10000030:[ \t]*00008000[ \t]*nop 5
+10000034:[ \t]*00000000[ \t]*nop 1
+
+10000038 <sub0@plt>:
+10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+10000044:[ \t]*00002000[ \t]*nop 2
+10000048:[ \t]*00080362[ \t]*b \.S2 b2
+1000004c:[ \t]*00008000[ \t]*nop 5
+[ \t]*\.\.\.
+
+Disassembly of section \.text:
+
+10000060 <fish>:
+10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+10000074:[ \t]*0200096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b4
+10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1rb.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,11 @@
+
+tmpdir/shlib-dynapp-1rb:     file format elf32-tic6x-be
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000b8 R_C6000_ABS32     b
+100000bc R_C6000_ABS32     a
+100000c4 R_C6000_COPY      a
+100000b4 R_C6000_JUMP_SLOT  sub0
+
+
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1rb.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,115 @@
+There are 17 section headers, starting at offset 0x2158:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   6  4
+  \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 000031 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            00008110 001110 000018 0c   A  2  10  4
+  \[ 5\] \.rela\.bss         RELA            00008128 001128 00000c 0c   A  2  12  4
+  \[ 6\] \.dynamic          DYNAMIC         00008134 001134 0000b8 08  WA  3   0  4
+  \[ 7\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   8  4
+  \[ 8\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+  \[ 9\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+  \[10\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+  \[11\] \.neardata         PROGBITS        100000c0 0020c0 000004 00  WA  0   0  4
+  \[12\] \.bss              NOBITS          100000c4 0020c4 000004 00  WA  0   0  4
+  \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020c4 000019 00      0   0  1
+  \[14\] \.shstrtab         STRTAB          00000000 0020dd 00007b 00      0   0  1
+  \[15\] \.symtab           SYMTAB          00000000 002400 000160 10     16  18  4
+  \[16\] \.strtab           STRTAB          00000000 002560 00004d 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000060
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x001ec 0x001ec RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000c4 0x000c8 RWE 0x1000
+  DYNAMIC        0x001134 0x00008134 0x00008134 0x000b8 0x000b8 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.bss \.dynamic 
+   01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1134 contains 18 entries:
+  Tag        Type                         Name/Value
+ 0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtestrb\.so\]
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x80dc
+ 0x00000006 \(SYMTAB\)                     0x803c
+ 0x0000000a \(STRSZ\)                      49 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000003 \(PLTGOT\)                     0x100000ac
+ 0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+ 0x00000014 \(PLTREL\)                     RELA
+ 0x00000017 \(JMPREL\)                     0x10000000
+ 0x00000007 \(RELA\)                       0x8110
+ 0x00000008 \(RELASZ\)                     48 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x1110 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+100000bc  00000901 R_C6000_ABS32          100000c4   a \+ 0
+
+Relocation section '\.rela\.bss' at offset 0x1128 contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000c4  0000091a R_C6000_COPY           100000c4   a \+ 0
+
+Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000b4  0000081b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+
+Symbol table '\.dynsym' contains 10 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     2: 10000060     0 SECTION LOCAL  DEFAULT    9 
+     3: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+     4: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+     5: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+     6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+     8: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     9: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
+
+Symbol table '\.symtab' contains 22 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+     3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+     4: 00008110     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008128     0 SECTION LOCAL  DEFAULT    5 
+     6: 00008134     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+     9: 10000060     0 SECTION LOCAL  DEFAULT    9 
+    10: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+    11: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+    12: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+    13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+    14: 10000060     0 NOTYPE  LOCAL  DEFAULT    9 fish
+    15: 00008134     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 100000ac     0 OBJECT  LOCAL  DEFAULT   10 _GLOBAL_OFFSET_TABLE_
+    17: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    18: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+    19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    20: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+    21: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/shlib-app-1rb.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/shlib-dynapp-1rb:     file format elf32-tic6x-be
+
+Contents of section \.got:
+[ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000b0 00000000 10000020 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.dd
diff -N ld/testsuite/ld-tic6x/static-app-1.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,56 @@
+
+tmpdir/static-app-1:     file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <sub1>:
+10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+10000004:[ \t]*00008000[ \t]*nop 5
+
+10000008 <sub0>:
+10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+10000030:[ \t]*00004000[ \t]*nop 3
+10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+10000038:[ \t]*00008000[ \t]*nop 5
+1000003c:[ \t]*00000000[ \t]*nop 1
+
+10000040 <sub>:
+10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+1000004c:[ \t]*00006000[ \t]*nop 4
+10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+1000006c:[ \t]*04800d6e[ \t]*ldw \.D2T2 \*\+b14\(52\),b9
+[ \t]*\.\.\.
+
+10000080 <fish>:
+10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+100000a4:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+100000a8:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+100000ac:[ \t]*028002a8[ \t]*mvk \.S1 5,a5
+100000b0:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.od
diff -N ld/testsuite/ld-tic6x/static-app-1.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,14 @@
+
+tmpdir/static-app-1:     file format elf32-tic6x-le
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000d8 R_C6000_ABS32     \.bss
+100000d4 R_C6000_ABS32     b
+100000dc R_C6000_ABS32     a
+100000e0 R_C6000_ABS32     \.text\+0x00000008
+100000e4 R_C6000_ABS32     g1
+100000ec R_C6000_ABS32     g1
+100000f0 R_C6000_ABS32     \.neardata\+0x00000004
+
+
Index: ld/testsuite/ld-tic6x/static-app-1.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.rd
diff -N ld/testsuite/ld-tic6x/static-app-1.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,112 @@
+There are 15 section headers, starting at offset 0x2180:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+  \[ 5\] \.rela\.neardata    RELA            00008120 001120 000030 0c   A  2   9  4
+  \[ 6\] \.dynamic          DYNAMIC         00008150 001150 000090 08  WA  3   0  4
+  \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+  \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+  \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 000014 00  WA  0   0  4
+  \[10\] \.bss              NOBITS          100000f4 0020f4 000004 00  WA  0   0  4
+  \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020f4 000019 00      0   0  1
+  \[12\] \.shstrtab         STRTAB          00000000 00210d 000071 00      0   0  1
+  \[13\] \.symtab           SYMTAB          00000000 0023d8 0001a0 10     14  19  4
+  \[14\] \.strtab           STRTAB          00000000 002578 000060 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000000
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x001e0 0x001e0 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000f4 0x000f8 RWE 0x1000
+  DYNAMIC        0x001150 0x00008150 0x00008150 0x00090 0x00090 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1150 contains 13 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x80dc
+ 0x00000006 \(SYMTAB\)                     0x803c
+ 0x0000000a \(STRSZ\)                      29 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000007 \(RELA\)                       0x80fc
+ 0x00000008 \(RELASZ\)                     84 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000d8  00000401 R_C6000_ABS32          100000f4   \.bss \+ 0
+100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1120 contains 4 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+100000ec  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+100000f0  00000301 R_C6000_ABS32          100000e0   \.neardata \+ 4
+
+Symbol table '\.dynsym' contains 10 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     4: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+     5: 100000f4     4 NOTYPE  LOCAL  DEFAULT   10 c
+     6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+     3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+     4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+     6: 00008150     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+    10: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+    11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+    13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+    14: 100000ec     8 OBJECT  LOCAL  DEFAULT    9 w
+    15: 00008150     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 100000f4     4 NOTYPE  LOCAL  DEFAULT   10 c
+    17: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+    18: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    19: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+    20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    22: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+    23: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+    24: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+    25: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.sd
diff -N ld/testsuite/ld-tic6x/static-app-1.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/static-app-1:     file format elf32-tic6x-le
+
+Contents of section \.got:
+[ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000d0 00000000 00000000 f4000010 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1b.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.dd
diff -N ld/testsuite/ld-tic6x/static-app-1b.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1b.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,56 @@
+
+tmpdir/static-app-1b:     file format elf32-tic6x-be
+
+
+Disassembly of section \.text:
+
+10000000 <sub1>:
+10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+10000004:[ \t]*00008000[ \t]*nop 5
+
+10000008 <sub0>:
+10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+10000030:[ \t]*00004000[ \t]*nop 3
+10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+10000038:[ \t]*00008000[ \t]*nop 5
+1000003c:[ \t]*00000000[ \t]*nop 1
+
+10000040 <sub>:
+10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+1000004c:[ \t]*00006000[ \t]*nop 4
+10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+1000006c:[ \t]*04800d6e[ \t]*ldw \.D2T2 \*\+b14\(52\),b9
+[ \t]*\.\.\.
+
+10000080 <fish>:
+10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+100000a4:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+100000a8:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+100000ac:[ \t]*028002a8[ \t]*mvk \.S1 5,a5
+100000b0:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1b.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.od
diff -N ld/testsuite/ld-tic6x/static-app-1b.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1b.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,14 @@
+
+tmpdir/static-app-1b:     file format elf32-tic6x-be
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000d8 R_C6000_ABS32     \.bss
+100000d4 R_C6000_ABS32     b
+100000dc R_C6000_ABS32     a
+100000e0 R_C6000_ABS32     \.text\+0x00000008
+100000e4 R_C6000_ABS32     g1
+100000ec R_C6000_ABS32     g1
+100000f0 R_C6000_ABS32     \.neardata\+0x00000004
+
+
Index: ld/testsuite/ld-tic6x/static-app-1b.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.rd
diff -N ld/testsuite/ld-tic6x/static-app-1b.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1b.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,112 @@
+There are 15 section headers, starting at offset 0x2180:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+  \[ 5\] \.rela\.neardata    RELA            00008120 001120 000030 0c   A  2   9  4
+  \[ 6\] \.dynamic          DYNAMIC         00008150 001150 000090 08  WA  3   0  4
+  \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+  \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+  \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 000014 00  WA  0   0  4
+  \[10\] \.bss              NOBITS          100000f4 0020f4 000004 00  WA  0   0  4
+  \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020f4 000019 00      0   0  1
+  \[12\] \.shstrtab         STRTAB          00000000 00210d 000071 00      0   0  1
+  \[13\] \.symtab           SYMTAB          00000000 0023d8 0001a0 10     14  19  4
+  \[14\] \.strtab           STRTAB          00000000 002578 000060 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000000
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x001e0 0x001e0 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000f4 0x000f8 RWE 0x1000
+  DYNAMIC        0x001150 0x00008150 0x00008150 0x00090 0x00090 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1150 contains 13 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x80dc
+ 0x00000006 \(SYMTAB\)                     0x803c
+ 0x0000000a \(STRSZ\)                      29 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000007 \(RELA\)                       0x80fc
+ 0x00000008 \(RELASZ\)                     84 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000d8  00000401 R_C6000_ABS32          100000f4   \.bss \+ 0
+100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1120 contains 4 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+100000ec  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+100000f0  00000301 R_C6000_ABS32          100000e0   \.neardata \+ 4
+
+Symbol table '\.dynsym' contains 10 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     4: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+     5: 100000f4     4 NOTYPE  LOCAL  DEFAULT   10 c
+     6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+
+Symbol table '\.symtab' contains 26 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+     3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+     4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+     6: 00008150     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+    10: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+    11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+    13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+    14: 100000ec     8 OBJECT  LOCAL  DEFAULT    9 w
+    15: 00008150     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    16: 100000f4     4 NOTYPE  LOCAL  DEFAULT   10 c
+    17: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+    18: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    19: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+    20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    22: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+    23: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+    24: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+    25: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1b.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.sd
diff -N ld/testsuite/ld-tic6x/static-app-1b.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1b.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/static-app-1b:     file format elf32-tic6x-be
+
+Contents of section \.got:
+[ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000d0 00000000 00000000 100000f4 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1r.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.dd
diff -N ld/testsuite/ld-tic6x/static-app-1r.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1r.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,52 @@
+
+tmpdir/static-app-1r:     file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+
+10000000 <sub1>:
+10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+10000004:[ \t]*00008000[ \t]*nop 5
+
+10000008 <sub0>:
+10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+10000030:[ \t]*00004000[ \t]*nop 3
+10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+10000038:[ \t]*00008000[ \t]*nop 5
+1000003c:[ \t]*00000000[ \t]*nop 1
+
+10000040 <sub>:
+10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+1000004c:[ \t]*00006000[ \t]*nop 4
+10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+1000006c:[ \t]*04800b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b9
+[ \t]*\.\.\.
+
+10000080 <fish>:
+10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1r.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.od
diff -N ld/testsuite/ld-tic6x/static-app-1r.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1r.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,12 @@
+
+tmpdir/static-app-1r:     file format elf32-tic6x-le
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000d8 R_C6000_ABS32     \.bss
+100000d4 R_C6000_ABS32     b
+100000dc R_C6000_ABS32     a
+100000e0 R_C6000_ABS32     \.text\+0x00000008
+100000e4 R_C6000_ABS32     g1
+
+
Index: ld/testsuite/ld-tic6x/static-app-1r.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.rd
diff -N ld/testsuite/ld-tic6x/static-app-1r.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1r.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,109 @@
+There are 15 section headers, starting at offset 0x2178:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+  \[ 5\] \.rela\.neardata    RELA            00008120 001120 000018 0c   A  2   9  4
+  \[ 6\] \.dynamic          DYNAMIC         00008138 001138 000090 08  WA  3   0  4
+  \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+  \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+  \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 00000c 00  WA  0   0  4
+  \[10\] \.bss              NOBITS          100000ec 0020ec 000004 00  WA  0   0  4
+  \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020ec 000019 00      0   0  1
+  \[12\] \.shstrtab         STRTAB          00000000 002105 000071 00      0   0  1
+  \[13\] \.symtab           SYMTAB          00000000 0023d0 000190 10     14  18  4
+  \[14\] \.strtab           STRTAB          00000000 002560 00005e 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000000
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x001c8 0x001c8 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000ec 0x000f0 RWE 0x1000
+  DYNAMIC        0x001138 0x00008138 0x00008138 0x00090 0x00090 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1138 contains 13 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x80dc
+ 0x00000006 \(SYMTAB\)                     0x803c
+ 0x0000000a \(STRSZ\)                      29 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000007 \(RELA\)                       0x80fc
+ 0x00000008 \(RELASZ\)                     60 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000d8  00000401 R_C6000_ABS32          100000ec   \.bss \+ 0
+100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1120 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+
+Symbol table '\.dynsym' contains 10 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     4: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+     5: 100000ec     4 NOTYPE  LOCAL  DEFAULT   10 c
+     6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+
+Symbol table '\.symtab' contains 25 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+     3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+     4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+     6: 00008138     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+    10: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+    11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+    13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+    14: 00008138     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    15: 100000ec     4 NOTYPE  LOCAL  DEFAULT   10 c
+    16: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+    17: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    18: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+    19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    20: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    21: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+    22: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+    23: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+    24: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1r.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.sd
diff -N ld/testsuite/ld-tic6x/static-app-1r.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1r.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/static-app-1r:     file format elf32-tic6x-le
+
+Contents of section \.got:
+[ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000d0 00000000 00000000 ec000010 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1rb.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.dd
diff -N ld/testsuite/ld-tic6x/static-app-1rb.dd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1rb.dd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,52 @@
+
+tmpdir/static-app-1rb:     file format elf32-tic6x-be
+
+
+Disassembly of section \.text:
+
+10000000 <sub1>:
+10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+10000004:[ \t]*00008000[ \t]*nop 5
+
+10000008 <sub0>:
+10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+10000030:[ \t]*00004000[ \t]*nop 3
+10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+10000038:[ \t]*00008000[ \t]*nop 5
+1000003c:[ \t]*00000000[ \t]*nop 1
+
+10000040 <sub>:
+10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+1000004c:[ \t]*00006000[ \t]*nop 4
+10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+1000006c:[ \t]*04800b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b9
+[ \t]*\.\.\.
+
+10000080 <fish>:
+10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1rb.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.od
diff -N ld/testsuite/ld-tic6x/static-app-1rb.od
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1rb.od	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,12 @@
+
+tmpdir/static-app-1rb:     file format elf32-tic6x-be
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+100000d8 R_C6000_ABS32     \.bss
+100000d4 R_C6000_ABS32     b
+100000dc R_C6000_ABS32     a
+100000e0 R_C6000_ABS32     \.text\+0x00000008
+100000e4 R_C6000_ABS32     g1
+
+
Index: ld/testsuite/ld-tic6x/static-app-1rb.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.rd
diff -N ld/testsuite/ld-tic6x/static-app-1rb.rd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1rb.rd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,109 @@
+There are 15 section headers, starting at offset 0x2178:
+
+Section Headers:
+  \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+  \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+  \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+  \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+  \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+  \[ 5\] \.rela\.neardata    RELA            00008120 001120 000018 0c   A  2   9  4
+  \[ 6\] \.dynamic          DYNAMIC         00008138 001138 000090 08  WA  3   0  4
+  \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+  \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+  \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 00000c 00  WA  0   0  4
+  \[10\] \.bss              NOBITS          100000ec 0020ec 000004 00  WA  0   0  4
+  \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020ec 000019 00      0   0  1
+  \[12\] \.shstrtab         STRTAB          00000000 002105 000071 00      0   0  1
+  \[13\] \.symtab           SYMTAB          00000000 0023d0 000190 10     14  18  4
+  \[14\] \.strtab           STRTAB          00000000 002560 00005e 00      0   0  1
+Key to Flags:
+  W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+  I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+  O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+
+Elf file type is EXEC \(Executable file\)
+Entry point 0x10000000
+There are 4 program headers, starting at offset 52
+
+Program Headers:
+  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+  LOAD           0x001000 0x00008000 0x00008000 0x001c8 0x001c8 RW  0x1000
+  LOAD           0x002000 0x10000000 0x10000000 0x000ec 0x000f0 RWE 0x1000
+  DYNAMIC        0x001138 0x00008138 0x00008138 0x00090 0x00090 RW  0x4
+  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+
+ Section to Segment mapping:
+  Segment Sections\.\.\.
+   00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+   01     \.text \.got \.neardata \.bss 
+   02     \.dynamic 
+   03     
+
+Dynamic section at offset 0x1138 contains 13 entries:
+  Tag        Type                         Name/Value
+ 0x00000004 \(HASH\)                       0x8000
+ 0x00000005 \(STRTAB\)                     0x80dc
+ 0x00000006 \(SYMTAB\)                     0x803c
+ 0x0000000a \(STRSZ\)                      29 \(bytes\)
+ 0x0000000b \(SYMENT\)                     16 \(bytes\)
+ 0x00000015 \(DEBUG\)                      0x0
+ 0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+ 0x70000001 \(C6000_DSBT_SIZE\)            0x3
+ 0x70000003 \(C6000_DSBT_INDEX\)           0x0
+ 0x00000007 \(RELA\)                       0x80fc
+ 0x00000008 \(RELASZ\)                     60 \(bytes\)
+ 0x00000009 \(RELAENT\)                    12 \(bytes\)
+ 0x00000000 \(NULL\)                       0x0
+
+Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000d8  00000401 R_C6000_ABS32          100000ec   \.bss \+ 0
+100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+
+Relocation section '\.rela\.neardata' at offset 0x1120 contains 2 entries:
+ Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+
+Symbol table '\.dynsym' contains 10 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     4: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+     5: 100000ec     4 NOTYPE  LOCAL  DEFAULT   10 c
+     6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+
+Symbol table '\.symtab' contains 25 entries:
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+     1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+     2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+     3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+     4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+     5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+     6: 00008138     0 SECTION LOCAL  DEFAULT    6 
+     7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+     8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+     9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+    10: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+    11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+    12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+    13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+    14: 00008138     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+    15: 100000ec     4 NOTYPE  LOCAL  DEFAULT   10 c
+    16: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+    17: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+    18: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+    19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+    20: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+    21: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+    22: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+    23: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+    24: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1rb.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.sd
diff -N ld/testsuite/ld-tic6x/static-app-1rb.sd
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/static-app-1rb.sd	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+
+tmpdir/static-app-1rb:     file format elf32-tic6x-be
+
+Contents of section \.got:
+[ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+[ \t]*100000d0 00000000 00000000 100000ec 00000000 .*
Index: ld/testsuite/ld-tic6x/tic6x.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-tic6x/tic6x.exp,v
retrieving revision 1.1
diff -c -p -d -p -u -r1.1 tic6x.exp
--- ld/testsuite/ld-tic6x/tic6x.exp	25 Mar 2010 21:12:34 -0000	1.1
+++ ld/testsuite/ld-tic6x/tic6x.exp	11 Mar 2011 11:33:39 -0000
@@ -1,7 +1,107 @@
-if { [istarget tic6x-*-*] } {
-    foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
-	if { [runtest_file_p $runtests $test] } {
-	    run_dump_test [file rootname $test]
-	}
+if { ! [istarget tic6x-*-*] } {
+    return
+}
+
+foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
+    if { [runtest_file_p $runtests $test] } {
+	run_dump_test [file rootname $test]
     }
 }
+
+set shlibtests {
+    {"C6X shared library, LE, RELA"
+     "-shared  -Tdsbt.ld --dsbt-index 2 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near" {shlib-1.s shlib-2.s}
+     {{readelf -WSsrld shlib-1.rd}
+      {objdump "-drj.plt -j.text" shlib-1.dd}
+      {objdump -sj.got shlib-1.sd}}
+      "libtest.so"}
+    {"C6X nonstatic app using shared library, LE, RELA"
+     "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtest.so"
+     "-mdsbt -mpic -mpid=near" {shlib-app-1.s}
+     {{readelf -WSsrld shlib-app-1.rd}
+      {objdump "-drj.plt -j.text" shlib-app-1.dd}
+      {objdump -sj.got shlib-app-1.sd}
+      {objdump -R shlib-app-1.od}}
+     "shlib-dynapp-1"}
+    {"C6X shared library, LE, REL"
+     "-shared  -Tdsbt.ld --dsbt-index 2 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near -mgenerate-rel" {shlib-1.s shlib-2.s}
+     {{readelf -WSsrld shlib-1r.rd}
+      {objdump "-drj.plt -j.text" shlib-1r.dd}
+      {objdump -sj.got shlib-1r.sd}}
+      "libtestr.so"}
+    {"C6X nonstatic app using shared library, LE, REL"
+     "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtestr.so"
+     "-mdsbt -mpic -mpid=near -mgenerate-rel" {shlib-app-1r.s}
+     {{readelf -WSsrld shlib-app-1r.rd}
+      {objdump "-drj.plt -j.text" shlib-app-1r.dd}
+      {objdump -sj.got shlib-app-1r.sd}
+      {objdump -R shlib-app-1r.od}}
+     "shlib-dynapp-1r"}
+    {"C6X shared library, BE, RELA"
+     "-shared  -Tdsbt-be.ld --dsbt-index 2 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near -mbig-endian" {shlib-1.s shlib-2.s}
+     {{readelf -WSsrld shlib-1b.rd}
+      {objdump "-drj.plt -j.text" shlib-1b.dd}
+      {objdump -sj.got shlib-1b.sd}}
+      "libtestb.so"}
+    {"C6X nonstatic app using shared library, BE, RELA"
+     "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtestb.so"
+     "-mdsbt -mpic -mpid=near -mbig-endian" {shlib-app-1.s}
+     {{readelf -WSsrld shlib-app-1b.rd}
+      {objdump "-drj.plt -j.text" shlib-app-1b.dd}
+      {objdump -sj.got shlib-app-1b.sd}
+      {objdump -R shlib-app-1b.od}}
+     "shlib-dynapp-1b"}
+    {"C6X shared library, BE, REL"
+     "-shared  -Tdsbt-be.ld --dsbt-index 2 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near -mgenerate-rel -mbig-endian" {shlib-1.s shlib-2.s}
+     {{readelf -WSsrld shlib-1rb.rd}
+      {objdump "-drj.plt -j.text" shlib-1rb.dd}
+      {objdump -sj.got shlib-1rb.sd}}
+      "libtestrb.so"}
+    {"C6X nonstatic app using shared library, BE, REL"
+     "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtestrb.so"
+     "-mdsbt -mpic -mpid=near -mgenerate-rel -mbig-endian" {shlib-app-1r.s}
+     {{readelf -WSsrld shlib-app-1rb.rd}
+      {objdump "-drj.plt -j.text" shlib-app-1rb.dd}
+      {objdump -sj.got shlib-app-1rb.sd}
+      {objdump -R shlib-app-1rb.od}}
+     "shlib-dynapp-1rb"}
+
+    {"C6X static app, LE, RELA"
+     "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near" {shlib-1.s shlib-2.s shlib-app-1.s}
+     {{readelf -WSsrld static-app-1.rd}
+      {objdump "-drj.plt -j.text" static-app-1.dd}
+      {objdump -sj.got static-app-1.sd}
+      {objdump -R static-app-1.od}}
+     "static-app-1"}
+    {"C6X static app, LE, REL"
+     "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near -mgenerate-rel" {shlib-1.s shlib-2.s shlib-app-1r.s}
+     {{readelf -WSsrld static-app-1r.rd}
+      {objdump "-drj.plt -j.text" static-app-1r.dd}
+      {objdump -sj.got static-app-1r.sd}
+      {objdump -R static-app-1r.od}}
+     "static-app-1r"}
+    {"C6X static app, BE, RELA"
+     "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near -mbig-endian" {shlib-1.s shlib-2.s shlib-app-1.s}
+     {{readelf -WSsrld static-app-1b.rd}
+      {objdump "-drj.plt -j.text" static-app-1b.dd}
+      {objdump -sj.got static-app-1b.sd}
+      {objdump -R static-app-1b.od}}
+     "static-app-1b"}
+    {"C6X static app, BE, REL"
+     "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3"
+     "-mdsbt -mpic -mpid=near -mbig-endian -mgenerate-rel" {shlib-1.s shlib-2.s shlib-app-1r.s}
+     {{readelf -WSsrld static-app-1rb.rd}
+      {objdump "-drj.plt -j.text" static-app-1rb.dd}
+      {objdump -sj.got static-app-1rb.sd}
+      {objdump -R static-app-1rb.od}}
+     "static-app-1rb"}
+}
+
+run_ld_link_tests $shlibtests
Index: ld/testsuite/ld-tic6x/weak-be.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak-be.d
diff -N ld/testsuite/ld-tic6x/weak-be.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/weak-be.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,16 @@
+#name: C6X branches to weak symbols, big endian
+#as: -mbig-endian
+#ld: -melf32_tic6x_be -Tsbr.ld
+#source: weak.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-be
+
+
+Disassembly of section \.text:
+10000000 <[^>]*>:
+10000000:[ \t]+000c0362[ \t]+b \.S2 b3
+10000004:[ \t]+a00c0362[ \t]+\[a2\] b \.S2 b3
+10000008:[ \t]+000c0363[ \t]+b \.S2 b3
+1000000c:[ \t]+00800028[ \t]+\|\| mvk \.S1 0,a1
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/weak.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak.d
diff -N ld/testsuite/ld-tic6x/weak.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/weak.d	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,16 @@
+#name: C6X branches to weak symbols, little endian
+#as: -mlittle-endian
+#ld: -melf32_tic6x_le -Tsbr.ld
+#source: weak.s
+#objdump: -dr
+
+.*: *file format elf32-tic6x-le
+
+
+Disassembly of section \.text:
+10000000 <[^>]*>:
+10000000:[ \t]+000c0362[ \t]+b \.S2 b3
+10000004:[ \t]+a00c0362[ \t]+\[a2\] b \.S2 b3
+10000008:[ \t]+000c0363[ \t]+b \.S2 b3
+1000000c:[ \t]+00800028[ \t]+\|\| mvk \.S1 0,a1
+[ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/weak.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak.s
diff -N ld/testsuite/ld-tic6x/weak.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-tic6x/weak.s	11 Mar 2011 11:33:39 -0000
@@ -0,0 +1,6 @@
+	.weak g
+.text
+	b .s2	g
+[a2]	b .s2	g
+	b .s2	g
+||	mvk .s1 0,a1

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-11 11:42 Patch: Add c6x-uclinux support Bernd Schmidt
@ 2011-03-28 22:34 ` Joseph S. Myers
  2011-03-28 23:18   ` Bernd Schmidt
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph S. Myers @ 2011-03-28 22:34 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils, Paul Brook

On Fri, 11 Mar 2011, Bernd Schmidt wrote:

> Also included in this patch is support for a new assembler directive,
> ".scomm", used to better support small-data common symbols as required
> by the ABI. There's also a small assembler bugfix for -mgenerate-rel.

Why exactly is a .scommon section needed in addition to .bss and .far - 
how does it differ from those two sections?

Also, this directive appears to generate SHN_TIC6X_SCOMMON in object 
files.  I don't see any sign of this in the ABI ("There are no 
processor-specific special section indexes defined.") - exactly what 
specification of it has been agreed with TI?  We can't put 
processor-specific section indices in object files unless they are defined 
by the ABI (including having a specification agreed for the next ABI 
version).  I also notice that the diagnostics in .scomm parsing often fail 
to follow the GNU Coding Standards (other diagnostics in tc-tic6x.c make 
sure to avoid initial capital letters or trailing '.'; they also avoid the 
grave accent as an opening quote, although this last style point, though 
consistent with GCC, is outside the GNU Coding Standards).

In addition, .scomm handling should have assembler testcases for both 
correct and invalid uses (covering the different diagnostics).

I haven't yet reviewed the whole patch, but some other comments and 
questions:

* There is a reference to R_386_COPY in the patch, which is clearly wrong.

* R_C6000_SBR_GOT32, added to include/elf/tic6x.h by the patch, is not the 
name agreed for the next version of the ABI; that's R_C6000_EHTYPE.

* I presume semantics for R_C6000_EHTYPE, R_C6000_PCR_H16, and 
R_C6000_PCR_L16 are to be added in subsequent patches, since only the 
definitions and nothing else are added in this patch.  (HOWTO entries for 
new relocations are useful even without more substantive linker support, 
since they are used by objdump when processing objects - maybe produced 
with the TI tools - that contain the relocations.)

* I think the static functions in elf32-tic6x.c should be consistently 
named with an elf32_tic6x_ prefix (e.g. using_dsbt, install_rela, 
make_got_dynreloc).

* What is the purpose of the ELF_MAXPAGESIZE change (and the logic behind 
the choice of the new value)?  I don't think the value is of much 
significance, but it would be good to know why the change was needed.

* There is a reference to a symbol "__DYNAMIC", which I think should be 
"_DYNAMIC".  (bfin has a reference to "__DYNAMIC", but I think that's 
because it deviates from the gABI in having a leading underscore on symbol 
names, unlike C6X.)

* Why does elf32_tic6x_gc_sweep_hook handle R_C6000_SBR_GOT_U15_W 
differently from R_C6000_SBR_GOT_L16_W and R_C6000_SBR_GOT_H16_W?  I 
haven't tried to construct a testcase showing this is a problem, but it 
seems strange for it to do so without a comment.

* There is a test for the undefined weak symbol handling for 
R_C6000_PCR_S21, in the case where the instruction has the specified form 
to be converted to a branch to the return address; tests for the other 
cases with required semantics (absolute and SB-relative relocations 
resolving to 0 and to the static base respectively) would be good.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-28 22:34 ` Joseph S. Myers
@ 2011-03-28 23:18   ` Bernd Schmidt
  2011-03-29 16:13     ` Joseph S. Myers
  0 siblings, 1 reply; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-28 23:18 UTC (permalink / raw)
  To: Joseph S. Myers; +Cc: binutils, Paul Brook

On 03/29/2011 12:33 AM, Joseph S. Myers wrote:
> On Fri, 11 Mar 2011, Bernd Schmidt wrote:
> 
>> Also included in this patch is support for a new assembler directive,
>> ".scomm", used to better support small-data common symbols as required
>> by the ABI. There's also a small assembler bugfix for -mgenerate-rel.
> 
> Why exactly is a .scommon section needed in addition to .bss and .far - 
> how does it differ from those two sections?

What happens on other targets is that the linker decides, based on size,
whether a common symbol goes into near or far BSS. That doesn't work for
the C6X ABI where considerations such as symbol type come into play.
Hence, the compiler must make the decision.

> Also, this directive appears to generate SHN_TIC6X_SCOMMON in object 
> files.  I don't see any sign of this in the ABI ("There are no 
> processor-specific special section indexes defined.") - exactly what 
> specification of it has been agreed with TI?

I described the mechanism, including the fact that this value should be
reserved in the ABI, to Alan Davis and he replied with "OK, good." (Nov 17).

> I also notice that the diagnostics in .scomm parsing often fail
> to follow the GNU Coding Standards (other diagnostics in tc-tic6x.c make 
> sure to avoid initial capital letters or trailing '.'; they also avoid the 
> grave accent as an opening quote, although this last style point, though 
> consistent with GCC, is outside the GNU Coding Standards).

That's probably just copied from the m32r implementation. Will fix.

> * I presume semantics for R_C6000_EHTYPE, R_C6000_PCR_H16, and 
> R_C6000_PCR_L16 are to be added in subsequent patches, since only the 
> definitions and nothing else are added in this patch.

Yes. The EH bits I've left for Paul to submit, no code exists yet for
the others as they were defined only recently.

> * I think the static functions in elf32-tic6x.c should be consistently 
> named with an elf32_tic6x_ prefix (e.g. using_dsbt, install_rela, 
> make_got_dynreloc).

Can do, but any particular reason? To be honest I'd kind of prefer to
remove it from static function since it doesn't add any non-obvious
information.

> * What is the purpose of the ELF_MAXPAGESIZE change (and the logic behind 
> the choice of the new value)?  I don't think the value is of much 
> significance, but it would be good to know why the change was needed.

Can't quite remember to be honest. I've just tried with it set to 1, and
the linker behaves oddly - it to generate rather more LOAD headers, and
ld.so complains that it can't map the library if libc.so is compiled
with such a linker.

> * There is a reference to a symbol "__DYNAMIC", which I think should be 
> "_DYNAMIC".  (bfin has a reference to "__DYNAMIC", but I think that's 
> because it deviates from the gABI in having a leading underscore on symbol 
> names, unlike C6X.)

Will fix.

> * Why does elf32_tic6x_gc_sweep_hook handle R_C6000_SBR_GOT_U15_W 
> differently from R_C6000_SBR_GOT_L16_W and R_C6000_SBR_GOT_H16_W?  I 
> haven't tried to construct a testcase showing this is a problem, but it 
> seems strange for it to do so without a comment.

Seems to be an oversight.

> * There is a test for the undefined weak symbol handling for 
> R_C6000_PCR_S21, in the case where the instruction has the specified form 
> to be converted to a branch to the return address; tests for the other 
> cases with required semantics (absolute and SB-relative relocations 
> resolving to 0 and to the static base respectively) would be good.

The former exists in the shared library/executable testcases.


Bernd

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-28 23:18   ` Bernd Schmidt
@ 2011-03-29 16:13     ` Joseph S. Myers
  2011-03-29 22:59       ` Bernd Schmidt
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph S. Myers @ 2011-03-29 16:13 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils, Paul Brook

On Tue, 29 Mar 2011, Bernd Schmidt wrote:

> On 03/29/2011 12:33 AM, Joseph S. Myers wrote:
> > On Fri, 11 Mar 2011, Bernd Schmidt wrote:
> > 
> >> Also included in this patch is support for a new assembler directive,
> >> ".scomm", used to better support small-data common symbols as required
> >> by the ABI. There's also a small assembler bugfix for -mgenerate-rel.
> > 
> > Why exactly is a .scommon section needed in addition to .bss and .far - 
> > how does it differ from those two sections?
> 
> What happens on other targets is that the linker decides, based on size,
> whether a common symbol goes into near or far BSS. That doesn't work for
> the C6X ABI where considerations such as symbol type come into play.
> Hence, the compiler must make the decision.

I'm happy with the directive, and given your other comments with the 
section index (though it appears there must have been an omission to put 
this index into the latest ABI version, which postdates the discussion you 
mention).  But why is the additional section *name* needed?  How does it 
differ from .bss?

> > * I think the static functions in elf32-tic6x.c should be consistently 
> > named with an elf32_tic6x_ prefix (e.g. using_dsbt, install_rela, 
> > make_got_dynreloc).
> 
> Can do, but any particular reason? To be honest I'd kind of prefer to
> remove it from static function since it doesn't add any non-obvious
> information.

It makes it clear at the site of a function call that it's calling some 
C6X-specific function from the same file, rather than some more generic 
BFD functionality.

> > * There is a test for the undefined weak symbol handling for 
> > R_C6000_PCR_S21, in the case where the instruction has the specified form 
> > to be converted to a branch to the return address; tests for the other 
> > cases with required semantics (absolute and SB-relative relocations 
> > resolving to 0 and to the static base respectively) would be good.
> 
> The former exists in the shared library/executable testcases.

Where exactly?  There are undefined weak symbols for the ABS32 case (only, 
as far as I can see) but I can't find which dumps are verifying the 
resolution to 0 by the static linker (when it's not possible for the 
symbol to get defined at dynamic link time).

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-29 16:13     ` Joseph S. Myers
@ 2011-03-29 22:59       ` Bernd Schmidt
  2011-03-29 23:42         ` Joseph S. Myers
  0 siblings, 1 reply; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-29 22:59 UTC (permalink / raw)
  To: Joseph S. Myers; +Cc: binutils, Paul Brook

On 03/29/2011 06:13 PM, Joseph S. Myers wrote:
> On Tue, 29 Mar 2011, Bernd Schmidt wrote:
> 
>> On 03/29/2011 12:33 AM, Joseph S. Myers wrote:
>>> On Fri, 11 Mar 2011, Bernd Schmidt wrote:
>>>
>>>> Also included in this patch is support for a new assembler directive,
>>>> ".scomm", used to better support small-data common symbols as required
>>>> by the ABI. There's also a small assembler bugfix for -mgenerate-rel.
>>>
>>> Why exactly is a .scommon section needed in addition to .bss and .far - 
>>> how does it differ from those two sections?
>>
>> What happens on other targets is that the linker decides, based on size,
>> whether a common symbol goes into near or far BSS. That doesn't work for
>> the C6X ABI where considerations such as symbol type come into play.
>> Hence, the compiler must make the decision.
> 
> I'm happy with the directive, and given your other comments with the 
> section index (though it appears there must have been an omission to put 
> this index into the latest ABI version, which postdates the discussion you 
> mention).  But why is the additional section *name* needed?  How does it 
> differ from .bss?

Oh, ok. To be honest - all this code is just copied from other ports, so
I think "precedent" would be the reason. I'd prefer not to diverge
unnecessarily from existing practice.

Looking at it now, it seems to me that common symbols require the
behavior enabled by
.  {* The section contains common symbols (symbols may be defined
.     multiple times, the value of a symbol is the amount of
.     space it requires, and the largest symbol value is the one
.     used).  Most targets have exactly one of these (which we
.     translate to bfd_com_section_ptr), but ECOFF has two.  *}
.#define SEC_IS_COMMON 0x1000

This is tested in a few places in elflink.c for example.

Are you specifically worried about code in the assembler or the linker,
or both?


Bernd

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-29 22:59       ` Bernd Schmidt
@ 2011-03-29 23:42         ` Joseph S. Myers
  2011-03-30  8:23           ` Bernd Schmidt
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph S. Myers @ 2011-03-29 23:42 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils, Paul Brook

On Wed, 30 Mar 2011, Bernd Schmidt wrote:

> > I'm happy with the directive, and given your other comments with the 
> > section index (though it appears there must have been an omission to put 
> > this index into the latest ABI version, which postdates the discussion you 
> > mention).  But why is the additional section *name* needed?  How does it 
> > differ from .bss?
> 
> Oh, ok. To be honest - all this code is just copied from other ports, so
> I think "precedent" would be the reason. I'd prefer not to diverge
> unnecessarily from existing practice.
> 
> Looking at it now, it seems to me that common symbols require the
> behavior enabled by
> .  {* The section contains common symbols (symbols may be defined
> .     multiple times, the value of a symbol is the amount of
> .     space it requires, and the largest symbol value is the one
> .     used).  Most targets have exactly one of these (which we
> .     translate to bfd_com_section_ptr), but ECOFF has two.  *}
> .#define SEC_IS_COMMON 0x1000
> 
> This is tested in a few places in elflink.c for example.
> 
> Are you specifically worried about code in the assembler or the linker,
> or both?

I'm generally concerned that I don't understand why there are three 
sections rather than two here.  Why isn't .bss being given this property 
and used in place of .scommon?  Does it break anything for .bss not to 
have this property - or do .bss and .far already have it?  Or, 
alternatively, if you need both .scommon and .bss, why isn't a separate 
common section parallel to .far needed, so you would have four sections?  
It's not clear to me that a new section name was part of the added ABI for 
small commons (in general dependence on section names is a bit 
unfortunate, though in the absence of any better ELF way to mark small 
*data* sections as such I don't see how to avoid it here).

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-29 23:42         ` Joseph S. Myers
@ 2011-03-30  8:23           ` Bernd Schmidt
  2011-03-30 10:14             ` Joseph S. Myers
  0 siblings, 1 reply; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-30  8:23 UTC (permalink / raw)
  To: Joseph S. Myers; +Cc: binutils, Paul Brook

On 03/30/2011 01:42 AM, Joseph S. Myers wrote:
> On Wed, 30 Mar 2011, Bernd Schmidt wrote:
> 
>>> I'm happy with the directive, and given your other comments with the 
>>> section index (though it appears there must have been an omission to put 
>>> this index into the latest ABI version, which postdates the discussion you 
>>> mention).  But why is the additional section *name* needed?  How does it 
>>> differ from .bss?
>>
>> Oh, ok. To be honest - all this code is just copied from other ports, so
>> I think "precedent" would be the reason. I'd prefer not to diverge
>> unnecessarily from existing practice.
>>
>> Looking at it now, it seems to me that common symbols require the
>> behavior enabled by
>> .  {* The section contains common symbols (symbols may be defined
>> .     multiple times, the value of a symbol is the amount of
>> .     space it requires, and the largest symbol value is the one
>> .     used).  Most targets have exactly one of these (which we
>> .     translate to bfd_com_section_ptr), but ECOFF has two.  *}
>> .#define SEC_IS_COMMON 0x1000
>>
>> This is tested in a few places in elflink.c for example.
>>
>> Are you specifically worried about code in the assembler or the linker,
>> or both?
> 
> I'm generally concerned that I don't understand why there are three 
> sections rather than two here.  Why isn't .bss being given this property 
> and used in place of .scommon?

Because it contains symbols that aren't common?

I'm not sure I understand the question, really.


Bernd

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-30  8:23           ` Bernd Schmidt
@ 2011-03-30 10:14             ` Joseph S. Myers
  2011-03-30 11:12               ` Bernd Schmidt
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph S. Myers @ 2011-03-30 10:14 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils, Paul Brook

On Wed, 30 Mar 2011, Bernd Schmidt wrote:

> > I'm generally concerned that I don't understand why there are three 
> > sections rather than two here.  Why isn't .bss being given this property 
> > and used in place of .scommon?
> 
> Because it contains symbols that aren't common?

# ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
# far read-only data, ".rodata" is near read-only data.  ".neardata"
# is near (small) data, ".fardata" is (along with .data) far data.

(from elf32_tic6x_le.sh).  What is the far analogue of .scommon?  Your 
patch doesn't change this comment explaining the sections, and I see no 
sign of any existing .common section name support for any target, or any 
reason why no far analogue would be needed.

elf32-ppc.c:ppc_elf_add_symbol_hook sets SEC_IS_COMMON on .sbss.  .sbss 
for that target corresponds to .bss for C6X, as far as the linker scripts 
are concerned - what goes wrong with that correspondence to require 
another section (but only one other section, not two)?

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-30 10:14             ` Joseph S. Myers
@ 2011-03-30 11:12               ` Bernd Schmidt
  2011-03-30 11:19                 ` Joseph S. Myers
  0 siblings, 1 reply; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-30 11:12 UTC (permalink / raw)
  To: Joseph S. Myers; +Cc: binutils, Paul Brook

On 03/30/2011 12:14 PM, Joseph S. Myers wrote:
> On Wed, 30 Mar 2011, Bernd Schmidt wrote:
> 
>>> I'm generally concerned that I don't understand why there are three 
>>> sections rather than two here.  Why isn't .bss being given this property 
>>> and used in place of .scommon?
>>
>> Because it contains symbols that aren't common?
> 
> # ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
> # far read-only data, ".rodata" is near read-only data.  ".neardata"
> # is near (small) data, ".fardata" is (along with .data) far data.
> 
> (from elf32_tic6x_le.sh).  What is the far analogue of .scommon?

  .far            :
  {
   *(.dynfar)
   *(.far .far.* .gnu.linkonce.b.*)
   *(COMMON)				<-----------

This, I'd think. Certainly if you remove that, far common symbols are
dropped.

As far as I can tell .scommon (and its far analogue) exists only
internally in the linker, but it needs to be given some name to be
placed in the right output section (.sbss).

The linker documentation explicitly mentions that some targets use a
.scommon section. From that, and looking at elf.sc,

  SBSS=".${SBSS_NAME}         ${RELOCATING-0} :
  {
    ${RELOCATING+${SBSS_START_SYMBOLS}}
    ${CREATE_SHLIB+*(.${SBSS_NAME}2 .${SBSS_NAME}2.* .gnu.linkonce.sb2.*)}
    *(.dyn${SBSS_NAME})
    *(.${SBSS_NAME}${RELOCATING+ .${SBSS_NAME}.* .gnu.linkonce.sb.*})
    *(.scommon)
    ${RELOCATING+${SBSS_END_SYMBOLS}}
  }"

as well as a grep for ".scommon" in bfd/, I get the strong impression
that's simply how it's meant to work.

> Your 
> patch doesn't change this comment explaining the sections, and I see no 
> sign of any existing .common section name support for any target, or any 
> reason why no far analogue would be needed.

The far analogue is already handled by the linker (which knows how to
deal with _one_ common section), apparently in a somewhat "magical" way.

I don't see a reason to change the comment since it documents output
sections only, not all of the gazillion possible input section names.

> elf32-ppc.c:ppc_elf_add_symbol_hook sets SEC_IS_COMMON on .sbss.  .sbss 
> for that target corresponds to .bss for C6X, as far as the linker scripts 
> are concerned - what goes wrong with that correspondence to require 
> another section (but only one other section, not two)?

Trying that (naively replacing .scommon with .bss everywhere in
elf32-tic6x.c), I get .scomm symbols apparently being placed in .far (in
all the shlib linker tests). One immediately obvious problem is that
there's no longer anything reasonable for
elf32_tic6x_section_from_bfd_section to do. I don't know any of the PPC
ABIs, and I haven't investigated any further; we have a mechanism that
works, and works the same way as other targets.


Bernd

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-30 11:12               ` Bernd Schmidt
@ 2011-03-30 11:19                 ` Joseph S. Myers
  2011-03-30 18:46                   ` Bernd Schmidt
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph S. Myers @ 2011-03-30 11:19 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils, Paul Brook

On Wed, 30 Mar 2011, Bernd Schmidt wrote:

> > (from elf32_tic6x_le.sh).  What is the far analogue of .scommon?
> 
>   .far            :
>   {
>    *(.dynfar)
>    *(.far .far.* .gnu.linkonce.b.*)
>    *(COMMON)				<-----------
> 
> This, I'd think. Certainly if you remove that, far common symbols are
> dropped.
> 
> As far as I can tell .scommon (and its far analogue) exists only
> internally in the linker, but it needs to be given some name to be
> placed in the right output section (.sbss).

Thanks.  If it never appears in assembler output (and supposing the 
requested assembler tests for .scomm show that it does not appear in 
assembler output) then that resolves the .scommon questions - and 
indicates that it should *not* be added to the ABI since it's 
linker-internal - even if it would be better for the linker to know about 
*(SCOMMON) rather than hardcoding an internal name in linker scripts.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-30 11:19                 ` Joseph S. Myers
@ 2011-03-30 18:46                   ` Bernd Schmidt
  2011-03-30 19:34                     ` Joseph S. Myers
  2011-03-31 14:40                     ` Tristan Gingold
  0 siblings, 2 replies; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-30 18:46 UTC (permalink / raw)
  To: Joseph S. Myers; +Cc: binutils, Paul Brook

[-- Attachment #1: Type: text/plain, Size: 1148 bytes --]

On 03/30/2011 01:18 PM, Joseph S. Myers wrote:
> On Wed, 30 Mar 2011, Bernd Schmidt wrote:
> 
>>> (from elf32_tic6x_le.sh).  What is the far analogue of .scommon?
>>
>>   .far            :
>>   {
>>    *(.dynfar)
>>    *(.far .far.* .gnu.linkonce.b.*)
>>    *(COMMON)				<-----------
>>
>> This, I'd think. Certainly if you remove that, far common symbols are
>> dropped.
>>
>> As far as I can tell .scommon (and its far analogue) exists only
>> internally in the linker, but it needs to be given some name to be
>> placed in the right output section (.sbss).
> 
> Thanks.  If it never appears in assembler output (and supposing the 
> requested assembler tests for .scomm show that it does not appear in 
> assembler output) then that resolves the .scommon questions - and 
> indicates that it should *not* be added to the ABI since it's 
> linker-internal - even if it would be better for the linker to know about 
> *(SCOMMON) rather than hardcoding an internal name in linker scripts.

Here's a new version which includes all the changes you requested, and
some behaviour changes for shared libraries with DSBT index 0 requested
by TI.


Bernd

[-- Attachment #2: mainline-0330d.diff --]
[-- Type: text/plain, Size: 287581 bytes --]

include/elf/
	* tic6x.h (R_C6000_JUMP_SPLOT, R_C6000_EHTYPE,
	R_C6000_PCR_H16, R_C6000_PCR_L16): New relocs.
	(SHN_TIC6X_SCOMMON): Define.

bfd/
	* elf32-tic6x.h (struct elf32_tic6x_params): New.
	(elf32_tic6x_setup): Declare.
	* elf32-tic6x.c: Include <limits.h>.
	(ELF_DYNAMIC_LINKER, DEFAULT_STACK_SIZE, PLT_ENTRY_SIZE): Define.
	(struct elf32_tic6x_link_hash_table, struct elf32_link_hash_entry):
	New structures.
	(elf32_tic6x_link_hash_table, is_tic6x_elf): New macros.
	(tic6x_elf_scom_section, tic6x_elf_scom_symbol,
	tic6x_elf_scom_symbol_ptr): New static variables.
	(elf32_tic6x_howto_table, elf32_tic6x_howto_table_rel,
	elf32_tic6x_reloc_map): Add R_C6000_JUMP_SLOT.
	(elf32_tic6x_link_hash_newfunc, elf32_tic6x_link_hash_table_create,
	elf32_tic6x_link_hash_table_free, elf32_tic6x_setup,
	elf32_tic6x_using_dsbt, elf32_tic6x_install_rela,
	elf32_tic6x_create_dynamic_sections, elf32_tic6x_make_got_dynreloc,
	elf32_tic6x_finish_dynamic_symbol, elf32_tic6x_gc_sweep_hook,
	elf32_tic6x_adjust_dynamic_symbol): New static functions.
	(elf32_tic6x_relocate_section): For R_C6000_PCR_S21, convert branches
	to weak symbols as required by the ABI.
	Handle GOT and DSBT_INDEX relocs, and copy relocs to the output file
	as needed when generating DSBT output.
	(elf32_tic6x_check_relocs, elf32_tic6x_add_symbol_hook,
	elf32_tic6x_symbol_processing, elf32_tic6x_section_from_bfd_section,
	elf32_tic6x_allocate_dynrelocs, elf32_tic6x_size_dynamic_sections,
	elf32_tic6x_always_size_sections, elf32_tic6x_modify_program_headers,
	elf32_tic6x_finish_dynamic_sections, elf32_tic6x_plt_sym_val,
	elf32_tic6x_copy_private_data, elf32_tic6x_link_omit_section_dynsym):
	New static functions.
	(ELF_MAXPAGESIZE): Define to 0x1000.
	(bfd_elf32_bfd_copy_private_bfd_data,
	bfd_elf32_bfd_link_hash_table_create,
	bfd_elf32_bfd_link_hash_table_free, elf_backend_can_refcount,
	elf_backend_want_got_plt, elf_backend_want_dynbss,
	elf_backend_plt_readonly, elf_backend_got_header_size,
	elf_backend_gc_sweep_hook, elf_backend_modify_program_headers,
	elf_backend_create_dynamic_sections, elf_backend_adjust_dynamic_symbol,
	elf_backend_check_relocs, elf_backend_add_symbol_hook,
	elf_backend_symbol_processing, elf_backend_link_output_symbol_hook,
	elf_backend_section_from_bfd_section,
	elf_backend_finish_dynamic_symbol, elf_backend_always_size_sections,
	elf32_tic6x_size_dynamic_sections, elf_backend_finish_dynamic_sections,
	elf_backend_omit_section_dynsym, elf_backend_plt_sym_val): Define.
	
	* bfd/reloc.c (BFD_RELOC_C6000_JUMP_SLOT, BFD_RELOC_C6000_EHTYPE,
	BFD_RELOC_C6000_PCR_H16, BFD_RELOC_C6000_PCR_S16): Add.
	* bfd/bfd-in2.h: Regenerate.
	* bfd/libbfd.h: Regenerate.
	* config.bfd: Accept tic6x-*-* instead of tic6x-*-elf.

gas/
	* config/tc-tic6x.c (sbss_section, scom_section, scom_symbol): New
	static variables.
	(md_begin): Initialize them.
	(s_tic6x_scomm): New static function.
	(md_pseudo_table): Add "scomm".
	(tc_gen_reloc): Really undo all adjustments made by
	bfd_install_relocation.
	* doc/c-tic6x.texi: Document the .scomm directive.

gas/testsuite/
	* gas/tic6x/scomm-directive-1.s: New test.
	* gas/tic6x/scomm-directive-1.d: New test.
	* gas/tic6x/scomm-directive-2.s: New test.
	* gas/tic6x/scomm-directive-2.d: New test.
	* gas/tic6x/scomm-directive-3.s: New test.
	* gas/tic6x/scomm-directive-3.d: New test.
	* gas/tic6x/scomm-directive-4.s: New test.
	* gas/tic6x/scomm-directive-4.d: New test.
	* gas/tic6x/scomm-directive-5.s: New test.
	* gas/tic6x/scomm-directive-5.d: New test.
	* gas/tic6x/scomm-directive-6.s: New test.
	* gas/tic6x/scomm-directive-6.d: New test.
	* gas/tic6x/scomm-directive-7.s: New test.
	* gas/tic6x/scomm-directive-7.d: New test.
	* gas/tic6x/scomm-directive-8.s: New test.
	* gas/tic6x/scomm-directive-8.d: New test.

ld/
	* emulparams/elf32_tic6x_le.sh (BIG_OUTPUT_FORMAT, EXTRA_EM_FILE,
	GENERATE_SHLIB_SCRIPT): New defines.
	(TEXT_START_ADDR): Define differently depending on target.
	(.got): Redefine to include "*(.dsbt)".
	(SDATA_START_SYMBOLS): Remove, replace with
	(OTHER_GOT_SYMBOLS): New.
	(OTHER_BSS_SECTIONS): Define only for ELF targets.
	* emultempl/tic6xdsbt.em: New file.
	* gen-doc.texi: Set C6X.
	* ld.texinfo: Likewise.
	(Options specific to C6X uClinux targets): New section.

binutils/
	* readelf.c (get_symbol_index_type): Handle SCOM for TIC6X.
	(dump_relocations): Likewise.

binutils/testsuite/
	* lib/binutils-common.exp (is_elf_format): Accept tic6x*-*-uclinux*.

ld/testsuite/
	* ld-scripts/crossref.exp: Add CFLAGS for tic6x*-*-*.
	* ld-elf/sec-to-seg.exp: Remove tic6x from list of targets defining
	pagesize to 1.
	* ld-tic6x/tic6x.exp: Add support for DSBT shared library/executable
	linking tests.
	* ld-tic6x/dsbt.ld: New linker script.
	* ld-tic6x/dsbt-be.ld: New linker script.
	* ld-tic6x/dsbt-overflow.ld: New linker script.
	* ld-tic6x/dsbt-inrange.ld: New linker script.
	* ld-tic6x/shlib-1.s: New test.
	* ld-tic6x/shlib-2.s: New test.
	* ld-tic6x/shlib-app-1r.s: New test.
	* ld-tic6x/shlib-app-1.s: New test.
	* ld-tic6x/shlib-1.sd: New test.
	* ld-tic6x/shlib-1.dd: New test.
	* ld-tic6x/shlib-app-1.rd: New test.
	* ld-tic6x/shlib-app-1rb.rd: New test.
	* ld-tic6x/shlib-app-1.sd: New test.
	* ld-tic6x/static-app-1rb.od: New test.
	* ld-tic6x/shlib-app-1.dd: New test.
	* ld-tic6x/shlib-app-1rb.sd: New test.
	* ld-tic6x/static-app-1b.od: New test.
	* ld-tic6x/static-app-1r.od: New test.
	* ld-tic6x/shlib-1rb.rd: New test.
	* ld-tic6x/shlib-app-1rb.dd: New test.
	* ld-tic6x/shlib-1rb.sd: New test.
	* ld-tic6x/shlib-1rb.dd: New test.
	* ld-tic6x/shlib-app-1b.od: New test.
	* ld-tic6x/tic6x.exp: New test.
	* ld-tic6x/static-app-1rb.rd: New test.
	* ld-tic6x/shlib-app-1r.od: New test.
	* ld-tic6x/static-app-1.od: New test.
	* ld-tic6x/static-app-1b.rd: New test.
	* ld-tic6x/static-app-1r.rd: New test.
	* ld-tic6x/static-app-1rb.sd: New test.
	* ld-tic6x/static-app-1b.sd: New test.
	* ld-tic6x/static-app-1rb.dd: New test.
	* ld-tic6x/static-app-1r.sd: New test.
	* ld-tic6x/static-app-1b.dd: New test.
	* ld-tic6x/shlib-1b.rd: New test.
	* ld-tic6x/static-app-1r.dd: New test.
	* ld-tic6x/shlib-app-1b.rd: New test.
	* ld-tic6x/shlib-1r.rd: New test.
	* ld-tic6x/shlib-app-1r.rd: New test.
	* ld-tic6x/shlib-1b.sd: New test.
	* ld-tic6x/static-app-1.rd: New test.
	* ld-tic6x/shlib-app-1b.sd: New test.
	* ld-tic6x/shlib-1r.sd: New test.
	* ld-tic6x/shlib-1b.dd: New test.
	* ld-tic6x/shlib-app-1r.sd: New test.
	* ld-tic6x/shlib-app-1b.dd: New test.
	* ld-tic6x/shlib-1r.dd: New test.
	* ld-tic6x/static-app-1.sd: New test.
	* ld-tic6x/shlib-app-1r.dd: New test.
	* ld-tic6x/static-app-1.dd: New test.
	* ld-tic6x/shlib-noindex.rd: New test.
	* ld-tic6x/shlib-noindex.dd: New test.
	* ld-tic6x/shlib-noindex.sd: New test.
	* ld-tic6x/got-reloc-local-1.s: New test.
	* ld-tic6x/got-reloc-local-2.s: New test.
	* ld-tic6x/got-reloc-local-r.d: New test.
	* ld-tic6x/got-reloc-global.s: New test.
	* ld-tic6x/got-reloc-global-addend-1.d: New test.
	* ld-tic6x/got-reloc-global-addend-1.s: New test.
	* ld-tic6x/got-reloc-global-addend-2.d: New test.
	* ld-tic6x/got-reloc-inrange.d: New test.
	* ld-tic6x/got-reloc-overflow.d: New test.
	* ld-tic6x/got-reloc-global-addend-2.s: New test.
	* ld-tic6x/dsbt-index-error.d: New test.
	* ld-tic6x/dsbt-index.d: New test.
	* ld-tic6x/dsbt-index.s: New test.
	* ld-tic6x/shlib-app-1.od: New test.
	* ld-tic6x/shlib-app-1rb.od: New test.
	* ld-tic6x/shlib-1.rd: New test.
	* ld-tic6x/weak.d: New test.
	* ld-tic6x/weak-be.d: New test.
	* ld-tic6x/weak.s: New test.
 	* ld-tic6x/weak-data.d: New test.
	* ld-tic6x/common.d: New test.
	* ld-tic6x/common.ld: New test.
	* ld-tic6x/common.s: New test.

Index: bfd/bfd-in2.h
===================================================================
RCS file: /cvs/src/src/bfd/bfd-in2.h,v
retrieving revision 1.530
diff -c -p -r1.530 bfd-in2.h
*** bfd/bfd-in2.h	22 Mar 2011 20:58:30 -0000	1.530
--- bfd/bfd-in2.h	30 Mar 2011 18:38:04 -0000
*************** the opcode.  */
*** 3774,3779 ****
--- 3774,3783 ----
    BFD_RELOC_C6000_DSBT_INDEX,
    BFD_RELOC_C6000_PREL31,
    BFD_RELOC_C6000_COPY,
+   BFD_RELOC_C6000_JUMP_SLOT,
+   BFD_RELOC_C6000_EHTYPE,
+   BFD_RELOC_C6000_PCR_H16,
+   BFD_RELOC_C6000_PCR_L16,
    BFD_RELOC_C6000_ALIGN,
    BFD_RELOC_C6000_FPHEAD,
    BFD_RELOC_C6000_NOCMP,
Index: bfd/config.bfd
===================================================================
RCS file: /cvs/src/src/bfd/config.bfd,v
retrieving revision 1.275
diff -c -p -r1.275 config.bfd
*** bfd/config.bfd	28 Mar 2011 11:18:25 -0000	1.275
--- bfd/config.bfd	30 Mar 2011 18:38:05 -0000
*************** case "${targ}" in
*** 1505,1511 ****
      ;;
  #endif
  
!   tic6x-*-elf)
      targ_defvec=bfd_elf32_tic6x_le_vec
      targ_selvecs=bfd_elf32_tic6x_be_vec
      ;;
--- 1505,1511 ----
      ;;
  #endif
  
!   tic6x-*-*)
      targ_defvec=bfd_elf32_tic6x_le_vec
      targ_selvecs=bfd_elf32_tic6x_be_vec
      ;;
Index: bfd/elf32-tic6x.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-tic6x.c,v
retrieving revision 1.13
diff -c -p -r1.13 elf32-tic6x.c
*** bfd/elf32-tic6x.c	5 Nov 2010 13:04:06 -0000	1.13
--- bfd/elf32-tic6x.c	30 Mar 2011 18:38:05 -0000
***************
*** 1,5 ****
  /* 32-bit ELF support for TI C6X
!    Copyright 2010
     Free Software Foundation, Inc.
     Contributed by Joseph Myers <joseph@codesourcery.com>
     		  Bernd Schmidt  <bernds@codesourcery.com>
--- 1,5 ----
  /* 32-bit ELF support for TI C6X
!    Copyright 2010, 2011
     Free Software Foundation, Inc.
     Contributed by Joseph Myers <joseph@codesourcery.com>
     		  Bernd Schmidt  <bernds@codesourcery.com>
***************
*** 29,34 ****
--- 29,80 ----
  #include "elf/tic6x.h"
  #include "elf32-tic6x.h"
  
+ #define ELF_DYNAMIC_INTERPRETER "/lib/ld-uClibc.so.0"
+ 
+ /* DSBT binaries have a default 128K stack.  */
+ #define DEFAULT_STACK_SIZE 0x20000
+ 
+ /* The size in bytes of an entry in the procedure linkage table.  */
+ #define PLT_ENTRY_SIZE 24
+ 
+ /* TI C6X ELF linker hash table.  */
+ 
+ struct elf32_tic6x_link_hash_table
+ {
+   struct elf_link_hash_table elf;
+ 
+   /* Short-cuts to get to dynamic linker sections.  */
+   asection *sdynbss;
+   asection *srelbss;
+ 
+   /* C6X specific command line arguments.  */
+   struct elf32_tic6x_params params;
+ 
+   /* Small local sym cache.  */
+   struct sym_cache sym_cache;
+ 
+   /* The output BFD, for convenience.  */
+   bfd *obfd;
+ 
+   /* The .dsbt section.  */
+   asection *dsbt;
+ };
+ 
+ /* Get the TI C6X ELF linker hash table from a link_info structure.  */
+ 
+ #define elf32_tic6x_hash_table(p) \
+   ((struct elf32_tic6x_link_hash_table *) ((p)->hash))
+ 
+ /* TI C6X ELF linker hash entry.  */
+ 
+ struct elf32_tic6x_link_hash_entry
+ {
+   struct elf_link_hash_entry elf;
+ 
+   /* Track dynamic relocs copied for this symbol.  */
+   struct elf_dyn_relocs *dyn_relocs;
+ };
+ 
  struct elf32_tic6x_obj_tdata
  {
    struct elf_obj_tdata root;
*************** struct elf32_tic6x_obj_tdata
*** 42,47 ****
--- 88,107 ----
  #define elf32_tic6x_tdata(abfd) \
    ((struct elf32_tic6x_obj_tdata *) (abfd)->tdata.any)
  
+ #define is_tic6x_elf(bfd) \
+   (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
+    && elf_tdata (bfd) != NULL \
+    && elf_object_id (bfd) == TIC6X_ELF_DATA)
+ 
+ /* C6X ELF uses two common sections.  One is the usual one, and the
+    other is for small objects.  All the small objects are kept
+    together, and then referenced via the gp pointer, which yields
+    faster assembler code.  This is what we use for the small common
+    section.  This approach is copied from ecoff.c.  */
+ static asection tic6x_elf_scom_section;
+ static asymbol  tic6x_elf_scom_symbol;
+ static asymbol  *tic6x_elf_scom_symbol_ptr;
+ 
  static reloc_howto_type elf32_tic6x_howto_table[] =
  {
    HOWTO (R_C6000_NONE,		/* type */
*************** static reloc_howto_type elf32_tic6x_howt
*** 395,401 ****
  	 0,			/* src_mask */
  	 0xffffffff,		/* dst_mask */
  	 FALSE),		/* pcrel_offset */
!   EMPTY_HOWTO (27),
    EMPTY_HOWTO (28),
    EMPTY_HOWTO (29),
    EMPTY_HOWTO (30),
--- 455,473 ----
  	 0,			/* src_mask */
  	 0xffffffff,		/* dst_mask */
  	 FALSE),		/* pcrel_offset */
!   HOWTO (R_C6000_JUMP_SLOT,	/* type */
! 	 0,			/* rightshift */
! 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
! 	 32,			/* bitsize */
! 	 FALSE,			/* pc_relative */
! 	 0,			/* bitpos */
! 	 complain_overflow_dont,/* complain_on_overflow */
! 	 bfd_elf_generic_reloc,	/* special_function */
! 	 "R_C6000_JUMP_SLOT",	/* name */
! 	 FALSE,			/* partial_inplace */
! 	 0,			/* src_mask */
! 	 0xffffffff,		/* dst_mask */
! 	 FALSE),		/* pcrel_offset */
    EMPTY_HOWTO (28),
    EMPTY_HOWTO (29),
    EMPTY_HOWTO (30),
*************** static reloc_howto_type elf32_tic6x_howt
*** 955,961 ****
  	 0,			/* src_mask */
  	 0xffffffff,		/* dst_mask */
  	 FALSE),		/* pcrel_offset */
!   EMPTY_HOWTO (27),
    EMPTY_HOWTO (28),
    EMPTY_HOWTO (29),
    EMPTY_HOWTO (30),
--- 1027,1045 ----
  	 0,			/* src_mask */
  	 0xffffffff,		/* dst_mask */
  	 FALSE),		/* pcrel_offset */
!   HOWTO (R_C6000_JUMP_SLOT,	/* type */
! 	 0,			/* rightshift */
! 	 2,			/* size (0 = byte, 1 = short, 2 = long) */
! 	 32,			/* bitsize */
! 	 FALSE,			/* pc_relative */
! 	 0,			/* bitpos */
! 	 complain_overflow_dont,/* complain_on_overflow */
! 	 bfd_elf_generic_reloc,	/* special_function */
! 	 "R_C6000_JUMP_SLOT",	/* name */
! 	 FALSE,			/* partial_inplace */
! 	 0,			/* src_mask */
! 	 0xffffffff,		/* dst_mask */
! 	 FALSE),		/* pcrel_offset */
    EMPTY_HOWTO (28),
    EMPTY_HOWTO (29),
    EMPTY_HOWTO (30),
*************** static const tic6x_reloc_map elf32_tic6x
*** 1259,1264 ****
--- 1343,1349 ----
      { BFD_RELOC_C6000_DSBT_INDEX, R_C6000_DSBT_INDEX },
      { BFD_RELOC_C6000_PREL31, R_C6000_PREL31 },
      { BFD_RELOC_C6000_COPY, R_C6000_COPY },
+     { BFD_RELOC_C6000_JUMP_SLOT, R_C6000_JUMP_SLOT },
      { BFD_RELOC_C6000_ALIGN, R_C6000_ALIGN },
      { BFD_RELOC_C6000_FPHEAD, R_C6000_FPHEAD },
      { BFD_RELOC_C6000_NOCMP, R_C6000_NOCMP }
*************** elf32_tic6x_set_use_rela_p (bfd *abfd, b
*** 1349,1354 ****
--- 1434,1563 ----
    elf32_tic6x_tdata (abfd)->use_rela_p = use_rela_p;
  }
  
+ /* Create an entry in a C6X ELF linker hash table.  */
+ 
+ static struct bfd_hash_entry *
+ elf32_tic6x_link_hash_newfunc (struct bfd_hash_entry *entry,
+ 			    struct bfd_hash_table *table,
+ 			    const char *string)
+ {
+   /* Allocate the structure if it has not already been allocated by a
+      subclass.  */
+   if (entry == NULL)
+     {
+       entry = bfd_hash_allocate (table,
+ 				 sizeof (struct elf32_tic6x_link_hash_entry));
+       if (entry == NULL)
+ 	return entry;
+     }
+ 
+   /* Call the allocation method of the superclass.  */
+   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
+   if (entry != NULL)
+     {
+       struct elf32_tic6x_link_hash_entry *eh;
+ 
+       eh = (struct elf32_tic6x_link_hash_entry *) entry;
+       eh->dyn_relocs = NULL;
+     }
+ 
+   return entry;
+ }
+ 
+ /* Create a C6X ELF linker hash table.  */
+ 
+ static struct bfd_link_hash_table *
+ elf32_tic6x_link_hash_table_create (bfd *abfd)
+ {
+   struct elf32_tic6x_link_hash_table *ret;
+   bfd_size_type amt = sizeof (struct elf32_tic6x_link_hash_table);
+ 
+   ret = bfd_malloc (amt);
+   if (ret == NULL)
+     return NULL;
+ 
+   if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd,
+ 				      elf32_tic6x_link_hash_newfunc,
+ 				      sizeof (struct elf32_tic6x_link_hash_entry),
+ 				      TIC6X_ELF_DATA))
+     {
+       free (ret);
+       return NULL;
+     }
+ 
+   ret->sym_cache.abfd = NULL;
+   ret->obfd = abfd;
+   ret->elf.is_relocatable_executable = 1;
+ 
+   return &ret->elf.root;
+ }
+ 
+ /* Destroy a C6X ELF linker hash table.  */
+ 
+ static void
+ elf32_tic6x_link_hash_table_free (struct bfd_link_hash_table *hash)
+ {
+   _bfd_generic_link_hash_table_free (hash);
+ }
+ 
+ /* Called to pass PARAMS to the backend.  We store them in the hash table
+    associated with INFO.  */
+ 
+ void
+ elf32_tic6x_setup (struct bfd_link_info *info,
+ 		   struct elf32_tic6x_params *params)
+ {
+   struct elf32_tic6x_link_hash_table *htab = elf32_tic6x_hash_table (info);
+   htab->params = *params;
+ }
+ 
+ /* Determine if we're dealing with a DSBT object.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_using_dsbt (bfd *abfd)
+ {
+   return bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_PROC,
+ 				   Tag_ABI_DSBT);
+ }
+ 
+ /* Create .plt, .rela.plt, .got, .got.plt, .rela.got and .dsbt
+    sections in DYNOBJ, and set up shortcuts to them in our hash
+    table.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
+ {
+   struct elf32_tic6x_link_hash_table *htab;
+   flagword flags;
+ 
+   htab = elf32_tic6x_hash_table (info);
+   if (htab == NULL)
+     return FALSE;
+ 
+   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
+     return FALSE;
+ 
+   /* Create .dsbt  */
+   flags = (SEC_ALLOC | SEC_LOAD
+ 	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+   htab->dsbt = bfd_make_section_anyway_with_flags (dynobj, ".dsbt",
+ 						   flags);
+   if (htab->dsbt == NULL
+       || ! bfd_set_section_alignment (dynobj, htab->dsbt, 2)
+       || ! bfd_set_section_alignment (dynobj, htab->elf.splt, 5))
+     return FALSE;
+ 
+   htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss");
+   if (!info->shared)
+     htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss");
+ 
+   if (!htab->sdynbss
+       || (!info->shared && !htab->srelbss))
+     abort ();
+ 
+   return TRUE;
+ }
+ 
  static bfd_boolean
  elf32_tic6x_mkobject (bfd *abfd)
  {
*************** elf32_tic6x_mkobject (bfd *abfd)
*** 1361,1366 ****
--- 1570,1990 ----
    return ret;
  }
  
+ /* Install relocation RELA into section SRELA, incrementing its
+    reloc_count.  */
+ 
+ static void
+ elf32_tic6x_install_rela (bfd *output_bfd, asection *srela,
+ 			  Elf_Internal_Rela *rela)
+ {
+   bfd_byte *loc;
+   bfd_vma off = srela->reloc_count++ * sizeof (Elf32_External_Rela);
+   loc = srela->contents + off;
+   BFD_ASSERT (off < srela->size);
+   bfd_elf32_swap_reloca_out (output_bfd, rela, loc);
+ }
+ 
+ /* Create a dynamic reloc against the GOT at offset OFFSET.  The contents
+    of the GOT at this offset have been initialized with the relocation.  */
+ 
+ static void
+ elf32_tic6x_make_got_dynreloc (bfd *output_bfd,
+ 			       struct elf32_tic6x_link_hash_table *htab,
+ 			       asection *sym_sec, bfd_vma offset)
+ {
+   asection *sgot = htab->elf.sgot;
+   Elf_Internal_Rela outrel;
+   int dynindx;
+ 
+   outrel.r_offset = sgot->output_section->vma + sgot->output_offset + offset;
+   outrel.r_addend = bfd_get_32 (output_bfd, sgot->contents + offset);
+   if (sym_sec && sym_sec->output_section
+       && ! bfd_is_abs_section (sym_sec->output_section)
+       && ! bfd_is_und_section (sym_sec->output_section))
+     {
+       dynindx = elf_section_data (sym_sec->output_section)->dynindx;
+       outrel.r_addend -= sym_sec->output_section->vma;
+     }
+   else
+     {
+       dynindx = 0;
+     }
+   outrel.r_info = ELF32_R_INFO (dynindx, R_C6000_ABS32);
+   elf32_tic6x_install_rela (output_bfd, htab->elf.srelgot, &outrel);
+ }
+ 
+ /* Finish up dynamic symbol handling.  We set the contents of various
+    dynamic sections here.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd,
+ 				   struct bfd_link_info *info,
+ 				   struct elf_link_hash_entry *h,
+ 				   Elf_Internal_Sym * sym)
+ {
+   bfd *dynobj;
+   struct elf32_tic6x_link_hash_table *htab;
+ 
+   htab = elf32_tic6x_hash_table (info);
+   dynobj = htab->elf.dynobj;
+ 
+   if (h->plt.offset != (bfd_vma) -1)
+     {
+       bfd_vma plt_index;
+       bfd_vma got_section_offset, got_dp_offset, rela_offset;
+       Elf_Internal_Rela rela;
+       bfd_byte *loc;
+       asection *plt, *gotplt, *relplt;
+       const struct elf_backend_data *bed;
+ 
+       bed = get_elf_backend_data (output_bfd);
+ 
+       BFD_ASSERT (htab->elf.splt != NULL);
+       plt = htab->elf.splt;
+       gotplt = htab->elf.sgotplt;
+       relplt = htab->elf.srelplt;
+ 
+       /* This symbol has an entry in the procedure linkage table.  Set
+ 	 it up.  */
+ 
+       if ((h->dynindx == -1
+ 	   && !((h->forced_local || info->executable)
+ 		&& h->def_regular
+ 		&& h->type == STT_GNU_IFUNC))
+ 	  || plt == NULL
+ 	  || gotplt == NULL
+ 	  || relplt == NULL)
+ 	abort ();
+ 
+       /* Get the index in the procedure linkage table which
+ 	 corresponds to this symbol.  This is the index of this symbol
+ 	 in all the symbols for which we are making plt entries.  The
+ 	 first entry in the procedure linkage table is reserved.
+ 
+ 	 Get the offset into the .got table of the entry that
+ 	 corresponds to this function.  Each .got entry is 4 bytes.
+ 	 The first three are reserved.
+ 	 
+ 	 For static executables, we don't reserve anything.  */
+ 
+       plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+       got_section_offset = plt_index + bed->got_header_size / 4;
+       got_dp_offset = got_section_offset + htab->params.dsbt_size;
+       rela_offset = plt_index * sizeof (Elf32_External_Rela);
+ 
+       got_section_offset *= 4;
+ 
+       /* Fill in the entry in the procedure linkage table.  */
+ 
+       /* ldw .d2t2 *+B14($GOT(f)), b2 */
+       bfd_put_32 (output_bfd, got_dp_offset << 8 | 0x0100006e,
+ 		  plt->contents + h->plt.offset);
+       /* mvk .s2 low(rela_offset), b0 */
+       bfd_put_32 (output_bfd, (rela_offset & 0xffff) << 7 | 0x0000002a,
+ 		  plt->contents + h->plt.offset + 4);
+       /* mvkh .s2 high(rela_offset), b0 */
+       bfd_put_32 (output_bfd, ((rela_offset >> 16) & 0xffff) << 7 | 0x0000006a,
+ 		  plt->contents + h->plt.offset + 8);
+       /* nop 2 */
+       bfd_put_32 (output_bfd, 0x00002000,
+ 		  plt->contents + h->plt.offset + 12);
+       /* b .s2 b2 */
+       bfd_put_32 (output_bfd, 0x00080362,
+ 		  plt->contents + h->plt.offset + 16);
+       /* nop 5 */
+       bfd_put_32 (output_bfd, 0x00008000,
+ 		  plt->contents + h->plt.offset + 20);
+ 
+       /* Fill in the entry in the global offset table.  */
+       bfd_put_32 (output_bfd,
+ 		  (plt->output_section->vma + plt->output_offset),
+ 		  gotplt->contents + got_section_offset);
+ 
+       /* Fill in the entry in the .rel.plt section.  */
+       rela.r_offset = (gotplt->output_section->vma
+ 		       + gotplt->output_offset
+ 		       + got_section_offset);
+       rela.r_info = ELF32_R_INFO (h->dynindx, R_C6000_JUMP_SLOT);
+       rela.r_addend = 0;
+       loc = relplt->contents + rela_offset;
+       bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+ 
+       if (!h->def_regular)
+ 	{
+ 	  /* Mark the symbol as undefined, rather than as defined in
+ 	     the .plt section.  */
+ 	  sym->st_shndx = SHN_UNDEF;
+ 	  sym->st_value = 0;
+ 	}
+     }
+ 
+   if (h->got.offset != (bfd_vma) -1)
+     {
+       asection *sgot;
+       asection *srela;
+ 
+       /* This symbol has an entry in the global offset table.
+          Set it up.  */
+ 
+       sgot = bfd_get_section_by_name (dynobj, ".got");
+       srela = bfd_get_section_by_name (dynobj, ".rela.got");
+       BFD_ASSERT (sgot != NULL && srela != NULL);
+ 
+       /* If this is a -Bsymbolic link, and the symbol is defined
+          locally, we just want to emit a RELATIVE reloc.  Likewise if
+          the symbol was forced to be local because of a version file.
+          The entry in the global offset table will already have been
+          initialized in the relocate_section function.  */
+       if (info->shared
+ 	  && (info->symbolic
+ 	      || h->dynindx == -1 || h->forced_local) && h->def_regular)
+ 	{
+ 	  asection *s = h->root.u.def.section;
+ 	  elf32_tic6x_make_got_dynreloc (output_bfd, htab, s,
+ 			     h->got.offset & ~(bfd_vma) 1);
+ 	}
+       else
+ 	{
+ 	  Elf_Internal_Rela outrel;
+ 	  bfd_put_32 (output_bfd, (bfd_vma) 0,
+ 		      sgot->contents + (h->got.offset & ~(bfd_vma) 1));
+ 	  outrel.r_offset = (sgot->output_section->vma
+ 			   + sgot->output_offset
+ 			   + (h->got.offset & ~(bfd_vma) 1));
+ 	  outrel.r_info = ELF32_R_INFO (h->dynindx, R_C6000_ABS32);
+ 	  outrel.r_addend = 0;
+ 
+ 	  elf32_tic6x_install_rela (output_bfd, srela, &outrel);
+ 	}
+     }
+ 
+   if (h->needs_copy)
+     {
+       Elf_Internal_Rela rel;
+ 
+       /* This symbol needs a copy reloc.  Set it up.  */
+ 
+       if (h->dynindx == -1
+ 	  || (h->root.type != bfd_link_hash_defined
+ 	      && h->root.type != bfd_link_hash_defweak)
+ 	  || htab->srelbss == NULL)
+ 	abort ();
+ 
+       rel.r_offset = (h->root.u.def.value
+ 		      + h->root.u.def.section->output_section->vma
+ 		      + h->root.u.def.section->output_offset);
+       rel.r_info = ELF32_R_INFO (h->dynindx, R_C6000_COPY);
+       rel.r_addend = 0;
+ 
+       elf32_tic6x_install_rela (output_bfd, htab->srelbss, &rel);
+     }
+ 
+   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
+   if (strcmp (h->root.root.string, "_DYNAMIC") == 0
+       || h == elf_hash_table (info)->hgot)
+     sym->st_shndx = SHN_ABS;
+ 
+   return TRUE;
+ }
+ 
+ /* Update the got entry reference counts for the section being removed.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_gc_sweep_hook (bfd *abfd,
+ 			   struct bfd_link_info *info,
+ 			   asection *sec,
+ 			   const Elf_Internal_Rela *relocs)
+ {
+   struct elf32_tic6x_link_hash_table *htab;
+   Elf_Internal_Shdr *symtab_hdr;
+   struct elf_link_hash_entry **sym_hashes;
+   bfd_signed_vma *local_got_refcounts;
+   const Elf_Internal_Rela *rel, *relend;
+ 
+   if (info->relocatable)
+     return TRUE;
+ 
+   htab = elf32_tic6x_hash_table (info);
+   if (htab == NULL)
+     return FALSE;
+ 
+   elf_section_data (sec)->local_dynrel = NULL;
+ 
+   symtab_hdr = &elf_symtab_hdr (abfd);
+   sym_hashes = elf_sym_hashes (abfd);
+   local_got_refcounts = elf_local_got_refcounts (abfd);
+ 
+   relend = relocs + sec->reloc_count;
+   for (rel = relocs; rel < relend; rel++)
+     {
+       unsigned long r_symndx;
+       unsigned int r_type;
+       struct elf_link_hash_entry *h = NULL;
+ 
+       r_symndx = ELF32_R_SYM (rel->r_info);
+       if (r_symndx >= symtab_hdr->sh_info)
+ 	{
+ 	  struct elf32_tic6x_link_hash_entry *eh;
+ 	  struct elf_dyn_relocs **pp;
+ 	  struct elf_dyn_relocs *p;
+ 
+ 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ 	  while (h->root.type == bfd_link_hash_indirect
+ 		 || h->root.type == bfd_link_hash_warning)
+ 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ 	  eh = (struct elf32_tic6x_link_hash_entry *) h;
+ 
+ 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
+ 	    if (p->sec == sec)
+ 	      {
+ 		/* Everything must go for SEC.  */
+ 		*pp = p->next;
+ 		break;
+ 	      }
+ 	}
+ 
+       r_type = ELF32_R_TYPE (rel->r_info);
+ 
+       switch (r_type)
+ 	{
+ 	case R_C6000_SBR_GOT_U15_W:
+ 	case R_C6000_SBR_GOT_L16_W:
+ 	case R_C6000_SBR_GOT_H16_W:
+ 	  if (h != NULL)
+ 	    {
+ 	      if (h->got.refcount > 0)
+ 		h->got.refcount -= 1;
+ 	    }
+ 	  else if (local_got_refcounts != NULL)
+ 	    {
+ 	      if (local_got_refcounts[r_symndx] > 0)
+ 		local_got_refcounts[r_symndx] -= 1;
+ 	    }
+ 	  break;
+ 
+ 	default:
+ 	  break;
+ 	}
+     }
+ 
+   return TRUE;
+ }
+ 
+ /* Adjust a symbol defined by a dynamic object and referenced by a
+    regular object.  The current definition is in some section of the
+    dynamic object, but we're not including those sections.  We have to
+    change the definition to something the rest of the link can
+    understand.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info,
+ 				   struct elf_link_hash_entry *h)
+ {
+   struct elf32_tic6x_link_hash_table *htab;
+   bfd *dynobj;
+   asection *s;
+ 
+   dynobj = elf_hash_table (info)->dynobj;
+ 
+   /* Make sure we know what is going on here.  */
+   BFD_ASSERT (dynobj != NULL
+ 	      && (h->needs_plt
+ 		  || h->u.weakdef != NULL
+ 		  || (h->def_dynamic && h->ref_regular && !h->def_regular)));
+ 
+   /* If this is a function, put it in the procedure linkage table.  We
+      will fill in the contents of the procedure linkage table later,
+      when we know the address of the .got section.  */
+   if (h->type == STT_FUNC
+       || h->needs_plt)
+     {
+       if (h->plt.refcount <= 0
+ 	  || SYMBOL_CALLS_LOCAL (info, h)
+ 	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+ 	      && h->root.type == bfd_link_hash_undefweak))
+ 	{
+ 	  /* This case can occur if we saw a PLT32 reloc in an input
+ 	     file, but the symbol was never referred to by a dynamic
+ 	     object, or if all references were garbage collected.  In
+ 	     such a case, we don't actually need to build a procedure
+ 	     linkage table, and we can just do a PC32 reloc instead.  */
+ 	  h->plt.offset = (bfd_vma) -1;
+ 	  h->needs_plt = 0;
+ 	}
+ 
+       return TRUE;
+     }
+ 
+   /* If this is a weak symbol, and there is a real definition, the
+      processor independent code will have arranged for us to see the
+      real definition first, and we can just use the same value.  */
+   if (h->u.weakdef != NULL)
+     {
+       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
+ 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
+       h->root.u.def.section = h->u.weakdef->root.u.def.section;
+       h->root.u.def.value = h->u.weakdef->root.u.def.value;
+       h->non_got_ref = h->u.weakdef->non_got_ref;
+       return TRUE;
+     }
+ 
+   /* This is a reference to a symbol defined by a dynamic object which
+      is not a function.  */
+ 
+   /* If we are creating a shared library, we must presume that the
+      only references to the symbol are via the global offset table.
+      For such cases we need not do anything here; the relocations will
+      be handled correctly by relocate_section.  */
+   if (info->shared)
+     return TRUE;
+ 
+   /* If there are no references to this symbol that do not use the
+      GOT, we don't need to generate a copy reloc.  */
+   if (!h->non_got_ref)
+     return TRUE;
+ 
+   /* If -z nocopyreloc was given, we won't generate them either.  */
+   if (info->nocopyreloc)
+     {
+       h->non_got_ref = 0;
+       return TRUE;
+     }
+ 
+   htab = elf32_tic6x_hash_table (info);
+   if (htab == NULL)
+     return FALSE;
+ 
+   if (h->size == 0)
+     {
+       (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"),
+ 			     h->root.root.string);
+       return TRUE;
+     }
+ 
+   /* We must allocate the symbol in our .dynbss section, which will
+      become part of the .bss section of the executable.  There will be
+      an entry for this symbol in the .dynsym section.  The dynamic
+      object will contain position independent code, so all references
+      from the dynamic object to this symbol will go through the global
+      offset table.  The dynamic linker will use the .dynsym entry to
+      determine the address it must put in the global offset table, so
+      both the dynamic object and the regular object will refer to the
+      same memory location for the variable.  */
+ 
+   /* We must generate a R_C6000_COPY reloc to tell the dynamic linker to
+      copy the initial value out of the dynamic object and into the
+      runtime process image.  */
+   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+     {
+       htab->srelbss->size += sizeof (Elf32_External_Rela);
+       h->needs_copy = 1;
+     }
+ 
+   s = htab->sdynbss;
+ 
+   return _bfd_elf_adjust_dynamic_copy (h, s);
+ }
+ 
  static bfd_boolean
  elf32_tic6x_new_section_hook (bfd *abfd, asection *sec)
  {
*************** elf32_tic6x_rel_relocation_p (bfd *abfd,
*** 1394,1399 ****
--- 2018,2046 ----
  	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
  }
  
+ /* We need dynamic symbols for every section, since segments can
+    relocate independently.  */
+ static bfd_boolean
+ elf32_tic6x_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 				      struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ 				      asection *p)
+ {
+   switch (elf_section_data (p)->this_hdr.sh_type)
+     {
+     case SHT_PROGBITS:
+     case SHT_NOBITS:
+       /* If sh_type is yet undecided, assume it could be
+ 	 SHT_PROGBITS/SHT_NOBITS.  */
+     case SHT_NULL:
+       return FALSE;
+ 
+       /* There shouldn't be section relative relocations
+ 	 against any other section.  */
+     default:
+       return TRUE;
+     }
+ }
+ 
  static bfd_boolean
  elf32_tic6x_relocate_section (bfd *output_bfd,
  			      struct bfd_link_info *info,
*************** elf32_tic6x_relocate_section (bfd *outpu
*** 1404,1417 ****
--- 2051,2070 ----
  			      Elf_Internal_Sym *local_syms,
  			      asection **local_sections)
  {
+   bfd *dynobj;
+   struct elf32_tic6x_link_hash_table *htab;
    Elf_Internal_Shdr *symtab_hdr;
    struct elf_link_hash_entry **sym_hashes;
+   bfd_vma *local_got_offsets;
    Elf_Internal_Rela *rel;
    Elf_Internal_Rela *relend;
    bfd_boolean ok = TRUE;
  
+   htab = elf32_tic6x_hash_table (info);
+   dynobj = elf_hash_table (info)->dynobj;
    symtab_hdr = & elf_symtab_hdr (input_bfd);
    sym_hashes = elf_sym_hashes (input_bfd);
+   local_got_offsets = elf_local_got_offsets (input_bfd);
  
    relend = relocs + input_section->reloc_count;
  
*************** elf32_tic6x_relocate_section (bfd *outpu
*** 1424,1430 ****
        Elf_Internal_Sym *sym;
        asection *sec;
        struct elf_link_hash_entry *h;
!       bfd_vma relocation;
        bfd_boolean unresolved_reloc;
        bfd_reloc_status_type r;
        struct bfd_link_hash_entry *sbh;
--- 2077,2083 ----
        Elf_Internal_Sym *sym;
        asection *sec;
        struct elf_link_hash_entry *h;
!       bfd_vma off, relocation;
        bfd_boolean unresolved_reloc;
        bfd_reloc_status_type r;
        struct bfd_link_hash_entry *sbh;
*************** elf32_tic6x_relocate_section (bfd *outpu
*** 1497,1518 ****
  	  continue;
  
  	case R_C6000_PCR_S21:
  	case R_C6000_PCR_S12:
  	case R_C6000_PCR_S10:
  	case R_C6000_PCR_S7:
  	  /* Generic PC-relative handling produces a value relative to
  	     the exact location of the relocation.  Adjust it to be
  	     relative to the start of the fetch packet instead.  */
  	  relocation += (input_section->output_section->vma
  			 + input_section->output_offset
  			 + rel->r_offset) & 0x1f;
! 	  /* Fall through.  */
  	case R_C6000_ABS32:
  	case R_C6000_ABS16:
  	case R_C6000_ABS8:
  	case R_C6000_ABS_S16:
  	case R_C6000_ABS_L16:
  	case R_C6000_ABS_H16:
  	  /* Generic logic OK.  */
  	  break;
  
--- 2150,2285 ----
  	  continue;
  
  	case R_C6000_PCR_S21:
+ 	  /* A branch to an undefined weak symbol is turned into a
+ 	     "b .s2 B3" instruction if the existing insn is of the
+ 	     form "b .s2 symbol".  */
+ 	  if (h ? h->root.type == bfd_link_hash_undefweak
+ 	      && (htab->elf.splt == NULL || h->plt.offset == (bfd_vma) -1)
+ 	      : r_symndx != STN_UNDEF && bfd_is_und_section (sec))
+ 	    {
+ 	      unsigned long oldval;
+ 	      oldval = bfd_get_32 (input_bfd, contents + rel->r_offset);
+ 
+ 	      if ((oldval & 0x7e) == 0x12)
+ 		{
+ 		  oldval &= 0xF0000001;
+ 		  bfd_put_32 (input_bfd, oldval | 0x000c0362,
+ 			      contents + rel->r_offset);
+ 		  r = bfd_reloc_ok;
+ 		  goto done_reloc;
+ 		}
+ 	    }
+ 
  	case R_C6000_PCR_S12:
  	case R_C6000_PCR_S10:
  	case R_C6000_PCR_S7:
+ 	  if (h != NULL
+ 	      && h->plt.offset != (bfd_vma) -1
+ 	      && htab->elf.splt != NULL)
+ 	    {
+ 	      relocation = (htab->elf.splt->output_section->vma
+ 			    + htab->elf.splt->output_offset
+ 			    + h->plt.offset);
+ 	    }
+ 
  	  /* Generic PC-relative handling produces a value relative to
  	     the exact location of the relocation.  Adjust it to be
  	     relative to the start of the fetch packet instead.  */
  	  relocation += (input_section->output_section->vma
  			 + input_section->output_offset
  			 + rel->r_offset) & 0x1f;
! 	  unresolved_reloc = FALSE;
! 	  break;
! 
! 	case R_C6000_DSBT_INDEX:
! 	  relocation = elf32_tic6x_hash_table (info)->params.dsbt_index;
! 	  if (!info->shared || relocation != 0)
! 	    break;
! 
! 	  /* fall through */
  	case R_C6000_ABS32:
  	case R_C6000_ABS16:
  	case R_C6000_ABS8:
  	case R_C6000_ABS_S16:
  	case R_C6000_ABS_L16:
  	case R_C6000_ABS_H16:
+ 	  /* When generating a shared object or relocatable executable, these
+ 	     relocations are copied into the output file to be resolved at
+ 	     run time.  */
+ 	  if ((info->shared || elf32_tic6x_using_dsbt (output_bfd))
+ 	      && (input_section->flags & SEC_ALLOC)
+ 	      && (h == NULL
+ 		  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ 		  || h->root.type != bfd_link_hash_undefweak))
+ 	    {
+ 	      Elf_Internal_Rela outrel;
+ 	      bfd_boolean skip, relocate;
+ 	      asection *sreloc;
+ 
+ 	      unresolved_reloc = FALSE;
+ 
+ 	      sreloc = elf_section_data (input_section)->sreloc;
+ 	      BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL);
+ 
+ 	      skip = FALSE;
+ 	      relocate = FALSE;
+ 
+ 	      outrel.r_offset =
+ 		_bfd_elf_section_offset (output_bfd, info, input_section,
+ 					 rel->r_offset);
+ 	      if (outrel.r_offset == (bfd_vma) -1)
+ 		skip = TRUE;
+ 	      else if (outrel.r_offset == (bfd_vma) -2)
+ 		skip = TRUE, relocate = TRUE;
+ 	      outrel.r_offset += (input_section->output_section->vma
+ 				  + input_section->output_offset);
+ 
+ 	      if (skip)
+ 		memset (&outrel, 0, sizeof outrel);
+ 	      else if (h != NULL
+ 		       && h->dynindx != -1
+ 		       && (!info->shared
+ 			   || !info->symbolic
+ 			   || !h->def_regular))
+ 		{
+ 		  outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+ 		  outrel.r_addend = rel->r_addend;
+ 		}
+ 	      else
+ 		{
+ 		  long indx;
+ 
+ 		  outrel.r_addend = relocation + rel->r_addend;
+ 
+ 		  if (bfd_is_abs_section (sec))
+ 		    indx = 0;
+ 		  else if (sec == NULL || sec->owner == NULL)
+ 		    {
+ 		      bfd_set_error (bfd_error_bad_value);
+ 		      return FALSE;
+ 		    }
+ 		  else
+ 		    {
+ 		      asection *osec;
+ 
+ 		      osec = sec->output_section;
+ 		      indx = elf_section_data (osec)->dynindx;
+ 		      outrel.r_addend -= osec->vma;
+ 		      BFD_ASSERT (indx != 0);
+ 		    }
+ 
+ 		  outrel.r_info = ELF32_R_INFO (indx, r_type);
+ 		}
+ 
+ 	      elf32_tic6x_install_rela (output_bfd, sreloc, &outrel);
+ 
+ 	      /* If this reloc is against an external symbol, we do not want to
+ 		 fiddle with the addend.  Otherwise, we need to include the symbol
+ 		 value so that it becomes an addend for the dynamic reloc.  */
+ 	      if (! relocate)
+ 		continue;
+ 	    }
+ 
  	  /* Generic logic OK.  */
  	  break;
  
*************** elf32_tic6x_relocate_section (bfd *outpu
*** 1531,1539 ****
  	  if (sbh != NULL
  	      && (sbh->type == bfd_link_hash_defined
  		  || sbh->type == bfd_link_hash_defweak))
! 	    relocation -= (sbh->u.def.value
! 			   + sbh->u.def.section->output_section->vma
! 			   + sbh->u.def.section->output_offset);
  	  else
  	    {
  	      (*_bfd_error_handler) (_("%B: SB-relative relocation but "
--- 2298,2314 ----
  	  if (sbh != NULL
  	      && (sbh->type == bfd_link_hash_defined
  		  || sbh->type == bfd_link_hash_defweak))
! 	    {
! 	      if (h ? (h->root.type == bfd_link_hash_undefweak
! 		       && (htab->elf.splt == NULL
! 			   || h->plt.offset == (bfd_vma) -1))
! 		  : r_symndx != STN_UNDEF && bfd_is_und_section (sec))
! 		relocation = 0;
! 	      else
! 		relocation -= (sbh->u.def.value
! 			       + sbh->u.def.section->output_section->vma
! 			       + sbh->u.def.section->output_offset);
! 	    }
  	  else
  	    {
  	      (*_bfd_error_handler) (_("%B: SB-relative relocation but "
*************** elf32_tic6x_relocate_section (bfd *outpu
*** 1547,1553 ****
  	case R_C6000_SBR_GOT_U15_W:
  	case R_C6000_SBR_GOT_L16_W:
  	case R_C6000_SBR_GOT_H16_W:
! 	case R_C6000_DSBT_INDEX:
  	case R_C6000_PREL31:
  	  /* Shared libraries and exception handling support not
  	     implemented.  */
--- 2322,2443 ----
  	case R_C6000_SBR_GOT_U15_W:
  	case R_C6000_SBR_GOT_L16_W:
  	case R_C6000_SBR_GOT_H16_W:
! 	  /* Relocation is to the entry for this symbol in the global
! 	     offset table.  */
! 	  if (htab->elf.sgot == NULL)
! 	    abort ();
! 
! 	  if (h != NULL)
! 	    {
! 	      bfd_boolean dyn;
! 
! 	      off = h->got.offset;
! 	      dyn = htab->elf.dynamic_sections_created;
! 	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
! 		  || (info->shared
! 		      && SYMBOL_REFERENCES_LOCAL (info, h))
! 		  || (ELF_ST_VISIBILITY (h->other)
! 		      && h->root.type == bfd_link_hash_undefweak))
! 		{
! 		  /* This is actually a static link, or it is a
! 		     -Bsymbolic link and the symbol is defined
! 		     locally, or the symbol was forced to be local
! 		     because of a version file.  We must initialize
! 		     this entry in the global offset table.  Since the
! 		     offset must always be a multiple of 4, we use the
! 		     least significant bit to record whether we have
! 		     initialized it already.
! 
! 		     When doing a dynamic link, we create a .rel.got
! 		     relocation entry to initialize the value.  This
! 		     is done in the finish_dynamic_symbol routine.  */
! 		  if ((off & 1) != 0)
! 		    off &= ~1;
! 		  else
! 		    {
! 		      bfd_put_32 (output_bfd, relocation,
! 				  htab->elf.sgot->contents + off);
! 		      h->got.offset |= 1;
! 
! 		      if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared,
! 							    h)
! 			  && !(ELF_ST_VISIBILITY (h->other)
! 			       && h->root.type == bfd_link_hash_undefweak))
! 			elf32_tic6x_make_got_dynreloc (output_bfd, htab, sec,
! 						       off);
! 		    }
! 		}
! 	      else
! 		unresolved_reloc = FALSE;
! 	    }
! 	  else
! 	    {
! 	      if (local_got_offsets == NULL)
! 		abort ();
! 
! 	      off = local_got_offsets[r_symndx];
! 
! 	      /* The offset must always be a multiple of 4.  We use
! 		 the least significant bit to record whether we have
! 		 already generated the necessary reloc.  */
! 	      if ((off & 1) != 0)
! 		off &= ~1;
! 	      else
! 		{
! 		  bfd_put_32 (output_bfd, relocation,
! 			      htab->elf.sgot->contents + off);
! 
! 		  if (info->shared || elf32_tic6x_using_dsbt (output_bfd))
! 		    elf32_tic6x_make_got_dynreloc (output_bfd, htab, sec, off);
! 
! 		  local_got_offsets[r_symndx] |= 1;
! 		}
! 	    }
! 
! 	  if (off >= (bfd_vma) -2)
! 	    abort ();
! 
! 	  if (htab->dsbt)
! 	    relocation = (htab->elf.sgot->output_section->vma
! 			  + htab->elf.sgot->output_offset + off
! 			  - htab->dsbt->output_section->vma
! 			  - htab->dsbt->output_offset);
! 	  else
! 	    relocation = (htab->elf.sgot->output_section->vma
! 			  + htab->elf.sgot->output_offset + off
! 			  - htab->elf.sgotplt->output_section->vma
! 			  - htab->elf.sgotplt->output_offset);
! 
! 	  if (rel->r_addend != 0)
! 	    {
! 	      /* We can't do anything for a relocation which is against
! 		 a symbol *plus offset*.  GOT holds relocations for
! 		 symbols.  Make this an error; the compiler isn't
! 		 allowed to pass us these kinds of things.  */
! 	      if (h == NULL)
! 		(*_bfd_error_handler)
! 		  (_("%B, section %A: relocation %s with non-zero addend %d"
! 		     " against local symbol"),
! 		   input_bfd,
! 		   input_section,
! 		   elf32_tic6x_howto_table[r_type].name,
! 		   rel->r_addend);
! 	      else
! 		(*_bfd_error_handler)
! 		  (_("%B, section %A: relocation %s with non-zero addend %d"
! 		     " against symbol `%s'"),
! 		   input_bfd,
! 		   input_section,
! 		   elf32_tic6x_howto_table[r_type].name,
! 		   rel->r_addend,
! 		   h->root.root.string[0] != '\0' ? h->root.root.string
! 		   : _("[whose name is lost]"));
! 
! 	      bfd_set_error (bfd_error_bad_value);
! 	      return FALSE;
! 	    }
! 	  break;
! 
  	case R_C6000_PREL31:
  	  /* Shared libraries and exception handling support not
  	     implemented.  */
*************** elf32_tic6x_relocate_section (bfd *outpu
*** 1658,1663 ****
--- 2548,3483 ----
    return ok;
  }
  
+ \f
+ /* Look through the relocs for a section during the first phase, and
+    calculate needed space in the global offset table, procedure linkage
+    table, and dynamic reloc sections.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
+ 			  asection *sec, const Elf_Internal_Rela *relocs)
+ {
+   struct elf32_tic6x_link_hash_table *htab;
+   Elf_Internal_Shdr *symtab_hdr;
+   struct elf_link_hash_entry **sym_hashes;
+   const Elf_Internal_Rela *rel;
+   const Elf_Internal_Rela *rel_end;
+   asection *sreloc;
+ 
+   if (info->relocatable)
+     return TRUE;
+ 
+   htab = elf32_tic6x_hash_table (info);
+   symtab_hdr = &elf_symtab_hdr (abfd);
+   sym_hashes = elf_sym_hashes (abfd);
+ 
+   /* Create dynamic sections for relocatable executables so that we can
+      copy relocations.  */
+   if (elf32_tic6x_using_dsbt (abfd)
+       && ! htab->elf.dynamic_sections_created)
+     {
+       if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
+ 	return FALSE;
+     }
+ 
+   sreloc = NULL;
+ 
+   rel_end = relocs + sec->reloc_count;
+   for (rel = relocs; rel < rel_end; rel++)
+     {
+       unsigned int r_type;
+       unsigned long r_symndx;
+       struct elf_link_hash_entry *h;
+       Elf_Internal_Sym *isym;
+ 
+       r_symndx = ELF32_R_SYM (rel->r_info);
+       r_type = ELF32_R_TYPE (rel->r_info);
+ 
+       if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
+ 	{
+ 	  (*_bfd_error_handler) (_("%B: bad symbol index: %d"),
+ 				 abfd,
+ 				 r_symndx);
+ 	  return FALSE;
+ 	}
+ 
+       if (r_symndx < symtab_hdr->sh_info)
+ 	{
+ 	  /* A local symbol.  */
+ 	  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
+ 					abfd, r_symndx);
+ 	  if (isym == NULL)
+ 	    return FALSE;
+ 	  h = NULL;
+ 	}
+       else
+ 	{
+ 	  isym = NULL;
+ 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ 	  while (h->root.type == bfd_link_hash_indirect
+ 		 || h->root.type == bfd_link_hash_warning)
+ 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ 	}
+ 
+       switch (r_type)
+ 	{
+ 	case R_C6000_PCR_S21:
+ 	  /* This symbol requires a procedure linkage table entry.  We
+ 	     actually build the entry in adjust_dynamic_symbol,
+ 	     because this might be a case of linking PIC code which is
+ 	     never referenced by a dynamic object, in which case we
+ 	     don't need to generate a procedure linkage table entry
+ 	     after all.  */
+ 
+ 	  /* If this is a local symbol, we resolve it directly without
+ 	     creating a procedure linkage table entry.  */
+ 	  if (h == NULL)
+ 	    continue;
+ 
+ 	  h->needs_plt = 1;
+ 	  h->plt.refcount += 1;
+ 	  break;
+ 
+ 	case R_C6000_SBR_GOT_U15_W:
+ 	case R_C6000_SBR_GOT_L16_W:
+ 	case R_C6000_SBR_GOT_H16_W:
+ 	  /* This symbol requires a global offset table entry.  */
+ 	  if (h != NULL)
+ 	    {
+ 	      h->got.refcount += 1;
+ 	    }
+ 	  else
+ 	    {
+ 	      bfd_signed_vma *local_got_refcounts;
+ 
+ 	      /* This is a global offset table entry for a local symbol.  */
+ 	      local_got_refcounts = elf_local_got_refcounts (abfd);
+ 	      if (local_got_refcounts == NULL)
+ 		{
+ 		  bfd_size_type size;
+ 
+ 		  size = symtab_hdr->sh_info;
+ 		  size *= (sizeof (bfd_signed_vma)
+ 			   + sizeof (bfd_vma) + sizeof(char));
+ 		  local_got_refcounts = bfd_zalloc (abfd, size);
+ 		  if (local_got_refcounts == NULL)
+ 		    return FALSE;
+ 		  elf_local_got_refcounts (abfd) = local_got_refcounts;
+ 		}
+ 	      local_got_refcounts[r_symndx] += 1;
+ 	    }
+ 
+ 	  if (htab->elf.sgot == NULL)
+ 	    {
+ 	      if (htab->elf.dynobj == NULL)
+ 		htab->elf.dynobj = abfd;
+ 	      if (!_bfd_elf_create_got_section (htab->elf.dynobj, info))
+ 		return FALSE;
+ 	    }
+ 	  break;
+ 
+ 	case R_C6000_DSBT_INDEX:
+ 	  /* We'd like to check for nonzero dsbt_index here, but it's
+ 	     set up only after check_relocs is called.  Instead, we
+ 	     store the number of R_C6000_DSBT_INDEX relocs in the
+ 	     pc_count field, and potentially discard the extra space
+ 	     in elf32_tic6x_allocate_dynrelocs.  */
+ 	  if (!info->shared)
+ 	    break;
+ 
+ 	  /* fall through */
+ 	case R_C6000_ABS32:
+ 	case R_C6000_ABS16:
+ 	case R_C6000_ABS8:
+ 	case R_C6000_ABS_S16:
+ 	case R_C6000_ABS_L16:
+ 	case R_C6000_ABS_H16:
+ 	  /* If we are creating a shared library, and this is a reloc
+ 	     against a global symbol, or a non PC relative reloc
+ 	     against a local symbol, then we need to copy the reloc
+ 	     into the shared library.  However, if we are linking with
+ 	     -Bsymbolic, we do not need to copy a reloc against a
+ 	     global symbol which is defined in an object we are
+ 	     including in the link (i.e., DEF_REGULAR is set).  At
+ 	     this point we have not seen all the input files, so it is
+ 	     possible that DEF_REGULAR is not set now but will be set
+ 	     later (it is never cleared).  In case of a weak definition,
+ 	     DEF_REGULAR may be cleared later by a strong definition in
+ 	     a shared library.  We account for that possibility below by
+ 	     storing information in the relocs_copied field of the hash
+ 	     table entry.  A similar situation occurs when creating
+ 	     shared libraries and symbol visibility changes render the
+ 	     symbol local.
+ 
+ 	     If on the other hand, we are creating an executable, we
+ 	     may need to keep relocations for symbols satisfied by a
+ 	     dynamic library if we manage to avoid copy relocs for the
+ 	     symbol.  */
+ 	  if ((info->shared || elf32_tic6x_using_dsbt (abfd))
+ 	      && (sec->flags & SEC_ALLOC) != 0)
+ 	    {
+ 	      struct elf_dyn_relocs *p;
+ 	      struct elf_dyn_relocs **head;
+ 
+ 	      /* We must copy these reloc types into the output file.
+ 		 Create a reloc section in dynobj and make room for
+ 		 this reloc.  */
+ 	      if (sreloc == NULL)
+ 		{
+ 		  if (htab->elf.dynobj == NULL)
+ 		    htab->elf.dynobj = abfd;
+ 
+ 		  sreloc = _bfd_elf_make_dynamic_reloc_section
+ 		    (sec, htab->elf.dynobj, 2, abfd, /*rela? */ TRUE);
+ 
+ 		  if (sreloc == NULL)
+ 		    return FALSE;
+ 		}
+ 
+ 	      /* If this is a global symbol, we count the number of
+ 		 relocations we need for this symbol.  */
+ 	      if (h != NULL)
+ 		{
+ 		  head = &((struct elf32_tic6x_link_hash_entry *) h)->dyn_relocs;
+ 		}
+ 	      else
+ 		{
+ 		  /* Track dynamic relocs needed for local syms too.
+ 		     We really need local syms available to do this
+ 		     easily.  Oh well.  */
+ 		  void **vpp;
+ 		  asection *s;
+ 
+ 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
+ 		  if (s == NULL)
+ 		    s = sec;
+ 
+ 		  vpp = &elf_section_data (s)->local_dynrel;
+ 		  head = (struct elf_dyn_relocs **)vpp;
+ 		}
+ 
+ 	      p = *head;
+ 	      if (p == NULL || p->sec != sec)
+ 		{
+ 		  bfd_size_type amt = sizeof *p;
+ 		  p = bfd_alloc (htab->elf.dynobj, amt);
+ 		  if (p == NULL)
+ 		    return FALSE;
+ 		  p->next = *head;
+ 		  *head = p;
+ 		  p->sec = sec;
+ 		  p->count = 0;
+ 		}
+ 
+ 	      p->count += 1;
+ 	      if (r_type == R_C6000_DSBT_INDEX)
+ 		p->pc_count += 1;
+ 	    }
+ 	  break;
+ 
+ 	case R_C6000_SBR_U15_B:
+ 	case R_C6000_SBR_U15_H:
+ 	case R_C6000_SBR_U15_W:
+ 	case R_C6000_SBR_S16:
+ 	case R_C6000_SBR_L16_B:
+ 	case R_C6000_SBR_L16_H:
+ 	case R_C6000_SBR_L16_W:
+ 	case R_C6000_SBR_H16_B:
+ 	case R_C6000_SBR_H16_H:
+ 	case R_C6000_SBR_H16_W:
+ 	  if (h != NULL && info->executable)
+ 	    {
+ 	      /* For B14-relative addresses, we might need a copy
+ 		 reloc.  */
+ 	      h->non_got_ref = 1;
+ 	    }
+ 	  break;
+ 
+ 	default:
+ 	  break;
+ 	}
+     }
+ 
+   return TRUE;
+ }
+ 
+ static bfd_boolean
+ elf32_tic6x_add_symbol_hook (bfd *abfd,
+ 			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ 			     Elf_Internal_Sym *sym,
+ 			     const char **namep ATTRIBUTE_UNUSED,
+ 			     flagword *flagsp ATTRIBUTE_UNUSED,
+ 			     asection **secp,
+ 			     bfd_vma *valp)
+ {
+   switch (sym->st_shndx)
+     {
+     case SHN_TIC6X_SCOMMON:
+       *secp = bfd_make_section_old_way (abfd, ".scommon");
+       (*secp)->flags |= SEC_IS_COMMON;
+       *valp = sym->st_size;
+       bfd_set_section_alignment (abfd, *secp, bfd_log2 (sym->st_value));
+       break;
+     }
+ 
+   return TRUE;
+ }
+ 
+ static void
+ elf32_tic6x_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, asymbol *asym)
+ {
+   elf_symbol_type *elfsym;
+ 
+   elfsym = (elf_symbol_type *) asym;
+   switch (elfsym->internal_elf_sym.st_shndx)
+     {
+     case SHN_TIC6X_SCOMMON:
+       if (tic6x_elf_scom_section.name == NULL)
+         {
+           /* Initialize the small common section.  */
+           tic6x_elf_scom_section.name = ".scommon";
+           tic6x_elf_scom_section.flags = SEC_IS_COMMON;
+           tic6x_elf_scom_section.output_section = &tic6x_elf_scom_section;
+           tic6x_elf_scom_section.symbol = &tic6x_elf_scom_symbol;
+           tic6x_elf_scom_section.symbol_ptr_ptr = &tic6x_elf_scom_symbol_ptr;
+           tic6x_elf_scom_symbol.name = ".scommon";
+           tic6x_elf_scom_symbol.flags = BSF_SECTION_SYM;
+           tic6x_elf_scom_symbol.section = &tic6x_elf_scom_section;
+           tic6x_elf_scom_symbol_ptr = &tic6x_elf_scom_symbol;
+         }
+       asym->section = &tic6x_elf_scom_section;
+       asym->value = elfsym->internal_elf_sym.st_size;
+       break;
+     }
+ }
+ 
+ static int
+ elf32_tic6x_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ 				     const char *name ATTRIBUTE_UNUSED,
+ 				     Elf_Internal_Sym *sym,
+ 				     asection *input_sec,
+ 				     struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
+ {
+   /* If we see a common symbol, which implies a relocatable link, then
+      if a symbol was small common in an input file, mark it as small
+      common in the output file.  */
+   if (sym->st_shndx == SHN_COMMON && strcmp (input_sec->name, ".scommon") == 0)
+     sym->st_shndx = SHN_TIC6X_SCOMMON;
+ 
+   return 1;
+ }
+ 
+ static bfd_boolean
+ elf32_tic6x_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
+ 				      asection *sec,
+ 				      int *retval)
+ {
+   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
+     {
+       *retval = SHN_TIC6X_SCOMMON;
+       return TRUE;
+     }
+ 
+   return FALSE;
+ }
+ 
+ /* Allocate space in .plt, .got and associated reloc sections for
+    dynamic relocs.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+ {
+   struct bfd_link_info *info;
+   struct elf32_tic6x_link_hash_table *htab;
+   struct elf32_tic6x_link_hash_entry *eh;
+   struct elf_dyn_relocs *p;
+ 
+   if (h->root.type == bfd_link_hash_indirect)
+     return TRUE;
+ 
+   if (h->root.type == bfd_link_hash_warning)
+     /* When warning symbols are created, they **replace** the "real"
+        entry in the hash table, thus we never get to see the real
+        symbol in a hash traversal.  So look at it now.  */
+     h = (struct elf_link_hash_entry *) h->root.u.i.link;
+   eh = (struct elf32_tic6x_link_hash_entry *) h;
+ 
+   info = (struct bfd_link_info *) inf;
+   htab = elf32_tic6x_hash_table (info);
+ 
+   if (htab->elf.dynamic_sections_created && h->plt.refcount > 0)
+     {
+       /* Make sure this symbol is output as a dynamic symbol.
+ 	 Undefined weak syms won't yet be marked as dynamic.  */
+       if (h->dynindx == -1 && !h->forced_local)
+ 	{
+ 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ 	    return FALSE;
+ 	}
+ 
+       if (info->shared
+ 	  || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
+ 	{
+ 	  asection *s = htab->elf.splt;
+ 
+ 	  /* If this is the first .plt entry, make room for the special
+ 	     first entry.  */
+ 	  if (s->size == 0)
+ 	    s->size += PLT_ENTRY_SIZE;
+ 
+ 	  h->plt.offset = s->size;
+ 
+ 	  /* If this symbol is not defined in a regular file, and we are
+ 	     not generating a shared library, then set the symbol to this
+ 	     location in the .plt.  This is required to make function
+ 	     pointers compare as equal between the normal executable and
+ 	     the shared library.  */
+ 	  if (! info->shared && !h->def_regular)
+ 	    {
+ 	      h->root.u.def.section = s;
+ 	      h->root.u.def.value = h->plt.offset;
+ 	    }
+ 
+ 	  /* Make room for this entry.  */
+ 	  s->size += PLT_ENTRY_SIZE;
+ 	  /* We also need to make an entry in the .got.plt section, which
+ 	     will be placed in the .got section by the linker script.  */
+ 	  htab->elf.sgotplt->size += 4;
+ 	  /* We also need to make an entry in the .rel.plt section.  */
+ 	  htab->elf.srelplt->size += sizeof (Elf32_External_Rela);
+ 	}
+       else
+ 	{
+ 	  h->plt.offset = (bfd_vma) -1;
+ 	  h->needs_plt = 0;
+ 	}
+     }
+   else
+     {
+       h->plt.offset = (bfd_vma) -1;
+       h->needs_plt = 0;
+     }
+ 
+   if (h->got.refcount > 0)
+     {
+       asection *s;
+ 
+       /* Make sure this symbol is output as a dynamic symbol.
+ 	 Undefined weak syms won't yet be marked as dynamic.  */
+       if (h->dynindx == -1
+ 	  && !h->forced_local)
+ 	{
+ 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ 	    return FALSE;
+ 	}
+ 
+       s = htab->elf.sgot;
+       h->got.offset = s->size;
+       s->size += 4;
+ 
+       if (!(ELF_ST_VISIBILITY (h->other)
+ 	    && h->root.type == bfd_link_hash_undefweak))
+ 	htab->elf.srelgot->size += sizeof (Elf32_External_Rela);
+     }
+   else
+     h->got.offset = (bfd_vma) -1;
+ 
+   if (eh->dyn_relocs == NULL)
+     return TRUE;
+ 
+   /* Discard relocs on undefined weak syms with non-default
+      visibility.  */
+   if (info->shared || elf32_tic6x_using_dsbt (htab->obfd))
+     {
+       /* We use the pc_count field to hold the number of
+ 	 R_C6000_DSBT_INDEX relocs.  */
+       if (htab->params.dsbt_index != 0)
+ 	{
+ 	  struct elf_dyn_relocs **pp;
+ 
+ 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+ 	    {
+ 	      p->count -= p->pc_count;
+ 	      p->pc_count = 0;
+ 	      if (p->count == 0)
+ 		*pp = p->next;
+ 	      else
+ 		pp = &p->next;
+ 	    }
+ 	}
+ 
+       if (eh->dyn_relocs != NULL
+ 	  && h->root.type == bfd_link_hash_undefweak)
+ 	{
+ 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+ 	    eh->dyn_relocs = NULL;
+ 
+ 	  /* Make sure undefined weak symbols are output as a dynamic
+ 	     symbol in PIEs.  */
+ 	  else if (h->dynindx == -1
+ 		   && !h->forced_local)
+ 	    {
+ 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ 		return FALSE;
+ 	    }
+ 	}
+     }
+ 
+   /* Finally, allocate space.  */
+   for (p = eh->dyn_relocs; p != NULL; p = p->next)
+     {
+       asection *sreloc;
+ 
+       sreloc = elf_section_data (p->sec)->sreloc;
+ 
+       BFD_ASSERT (sreloc != NULL);
+       sreloc->size += p->count * sizeof (Elf32_External_Rela);
+     }
+ 
+   return TRUE;
+ }
+ 
+ /* Find any dynamic relocs that apply to read-only sections.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+ {
+   struct elf32_tic6x_link_hash_entry *eh;
+   struct elf_dyn_relocs *p;
+ 
+   if (h->root.type == bfd_link_hash_warning)
+     h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ 
+   eh = (struct elf32_tic6x_link_hash_entry *) h;
+   for (p = eh->dyn_relocs; p != NULL; p = p->next)
+     {
+       asection *s = p->sec->output_section;
+ 
+       if (s != NULL && (s->flags & SEC_READONLY) != 0)
+ 	{
+ 	  struct bfd_link_info *info = (struct bfd_link_info *) inf;
+ 
+ 	  info->flags |= DF_TEXTREL;
+ 
+ 	  /* Not an error, just cut short the traversal.  */
+ 	  return FALSE;
+ 	}
+     }
+   return TRUE;
+ }
+ 
+ /* Set the sizes of the dynamic sections.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+ {
+   struct elf32_tic6x_link_hash_table *htab;
+   bfd *dynobj;
+   asection *s;
+   bfd_boolean relocs;
+   bfd *ibfd;
+ 
+   htab = elf32_tic6x_hash_table (info);
+   dynobj = htab->elf.dynobj;
+   if (dynobj == NULL)
+     abort ();
+ 
+   if (htab->elf.dynamic_sections_created)
+     {
+       /* Set the contents of the .interp section to the interpreter.  */
+       if (info->executable)
+ 	{
+ 	  s = bfd_get_section_by_name (dynobj, ".interp");
+ 	  if (s == NULL)
+ 	    abort ();
+ 	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
+ 	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+ 	}
+     }
+ 
+   /* Set up .got offsets for local syms, and space for local dynamic
+      relocs.  */
+   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+     {
+       bfd_signed_vma *local_got;
+       bfd_signed_vma *end_local_got;
+       char *local_tls_type;
+       bfd_vma *local_tlsdesc_gotent;
+       bfd_size_type locsymcount;
+       Elf_Internal_Shdr *symtab_hdr;
+       asection *srel;
+ 
+       for (s = ibfd->sections; s != NULL; s = s->next)
+ 	{
+ 	  struct elf_dyn_relocs *p;
+ 
+ 	  for (p = ((struct elf_dyn_relocs *)
+ 		     elf_section_data (s)->local_dynrel);
+ 	       p != NULL;
+ 	       p = p->next)
+ 	    {
+ 	      if (!bfd_is_abs_section (p->sec)
+ 		  && bfd_is_abs_section (p->sec->output_section))
+ 		{
+ 		  /* Input section has been discarded, either because
+ 		     it is a copy of a linkonce section or due to
+ 		     linker script /DISCARD/, so we'll be discarding
+ 		     the relocs too.  */
+ 		}
+ 	      else if (p->count != 0)
+ 		{
+ 		  srel = elf_section_data (p->sec)->sreloc;
+ 		  srel->size += p->count * sizeof (Elf32_External_Rela);
+ 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
+ 		    info->flags |= DF_TEXTREL;
+ 		}
+ 	    }
+ 	}
+ 
+       local_got = elf_local_got_refcounts (ibfd);
+       if (!local_got)
+ 	continue;
+ 
+       symtab_hdr = &elf_symtab_hdr (ibfd);
+       locsymcount = symtab_hdr->sh_info;
+       end_local_got = local_got + locsymcount;
+       s = htab->elf.sgot;
+       srel = htab->elf.srelgot;
+       for (; local_got < end_local_got;
+ 	   ++local_got, ++local_tls_type, ++local_tlsdesc_gotent)
+ 	{
+ 	  if (*local_got > 0)
+ 	    {
+ 	      *local_got = s->size;
+ 	      s->size += 4;
+ 
+ 	      if (info->shared || elf32_tic6x_using_dsbt (output_bfd))
+ 		{
+ 		  srel->size += sizeof (Elf32_External_Rela);
+ 		}
+ 	    }
+ 	  else
+ 	    *local_got = (bfd_vma) -1;
+ 	}
+     }
+ 
+   /* Allocate global sym .plt and .got entries, and space for global
+      sym dynamic relocs.  */
+   elf_link_hash_traverse (&htab->elf, elf32_tic6x_allocate_dynrelocs, info);
+ 
+   /* We now have determined the sizes of the various dynamic sections.
+      Allocate memory for them.  */
+   relocs = FALSE;
+   for (s = dynobj->sections; s != NULL; s = s->next)
+     {
+       bfd_boolean strip_section = TRUE;
+ 
+       if ((s->flags & SEC_LINKER_CREATED) == 0)
+ 	continue;
+ 
+       if (s == htab->dsbt)
+ 	s->size = 4 * htab->params.dsbt_size;
+       else if (s == htab->elf.splt
+ 	       || s == htab->elf.sgot
+ 	       || s == htab->elf.sgotplt
+ 	       || s == htab->sdynbss)
+ 	{
+ 	  /* Strip this section if we don't need it; see the
+ 	     comment below.  */
+ 	  /* We'd like to strip these sections if they aren't needed, but if
+ 	     we've exported dynamic symbols from them we must leave them.
+ 	     It's too late to tell BFD to get rid of the symbols.  */
+ 
+ 	  if (htab->elf.hplt != NULL)
+ 	    strip_section = FALSE;
+ 
+ 	  /* Round up the size of the PLT section to a multiple of 32.  */
+ 	  if (s == htab->elf.splt && s->size > 0)
+ 	    s->size = (s->size + 31) & ~(bfd_vma)31;
+ 	}
+       else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
+ 	{
+ 	  if (s->size != 0
+ 	      && s != htab->elf.srelplt)
+ 	    relocs = TRUE;
+ 
+ 	  /* We use the reloc_count field as a counter if we need
+ 	     to copy relocs into the output file.  */
+ 	  s->reloc_count = 0;
+ 	}
+       else
+ 	{
+ 	  /* It's not one of our sections, so don't allocate space.  */
+ 	  continue;
+ 	}
+ 
+       if (s->size == 0)
+ 	{
+ 	  /* If we don't need this section, strip it from the
+ 	     output file.  This is mostly to handle .rel.bss and
+ 	     .rel.plt.  We must create both sections in
+ 	     create_dynamic_sections, because they must be created
+ 	     before the linker maps input sections to output
+ 	     sections.  The linker does that before
+ 	     adjust_dynamic_symbol is called, and it is that
+ 	     function which decides whether anything needs to go
+ 	     into these sections.  */
+ 	  if (strip_section)
+ 	    s->flags |= SEC_EXCLUDE;
+ 	  continue;
+ 	}
+ 
+       if ((s->flags & SEC_HAS_CONTENTS) == 0)
+ 	continue;
+ 
+       /* Allocate memory for the section contents.  We use bfd_zalloc
+ 	 here in case unused entries are not reclaimed before the
+ 	 section's contents are written out.  This should not happen,
+ 	 but this way if it does, we get a R_C6000_NONE reloc instead
+ 	 of garbage.  */
+       s->contents = bfd_zalloc (dynobj, s->size);
+       if (s->contents == NULL)
+ 	return FALSE;
+     }
+ 
+   if (htab->elf.dynamic_sections_created)
+     {
+       /* Add some entries to the .dynamic section.  We fill in the
+ 	 values later, in elf32_tic6x_finish_dynamic_sections, but we
+ 	 must add the entries now so that we get the correct size for
+ 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
+ 	 dynamic linker and used by the debugger.  */
+ #define add_dynamic_entry(TAG, VAL) \
+   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
+ 
+       if (info->executable)
+ 	{
+ 	  if (!add_dynamic_entry (DT_DEBUG, 0))
+ 	    return FALSE;
+ 	}
+ 
+       if (!add_dynamic_entry (DT_C6000_DSBT_BASE, 0)
+ 	  || !add_dynamic_entry (DT_C6000_DSBT_SIZE, htab->params.dsbt_size)
+ 	  || !add_dynamic_entry (DT_C6000_DSBT_INDEX,
+ 				 htab->params.dsbt_index))
+ 	return FALSE;
+ 
+       if (htab->elf.splt->size != 0)
+ 	{
+ 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
+ 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
+ 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
+ 	      || !add_dynamic_entry (DT_JMPREL, 0))
+ 	    return FALSE;
+ 	}
+ 
+       if (relocs)
+ 	{
+ 	  if (!add_dynamic_entry (DT_RELA, 0)
+ 	      || !add_dynamic_entry (DT_RELASZ, 0)
+ 	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
+ 	    return FALSE;
+ 
+ 	  /* If any dynamic relocs apply to a read-only section,
+ 	     then we need a DT_TEXTREL entry.  */
+ 	  if ((info->flags & DF_TEXTREL) == 0)
+ 	    elf_link_hash_traverse (&htab->elf,
+ 				    elf32_tic6x_readonly_dynrelocs, info);
+ 
+ 	  if ((info->flags & DF_TEXTREL) != 0)
+ 	    {
+ 	      if (!add_dynamic_entry (DT_TEXTREL, 0))
+ 		return FALSE;
+ 	    }
+ 	}
+     }
+ #undef add_dynamic_entry
+ 
+   return TRUE;
+ }
+ 
+ /* This function is called after all the input files have been read,
+    and the input sections have been assigned to output sections.  */
+ 
+ static bfd_boolean
+ elf32_tic6x_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
+ {
+   if (elf32_tic6x_using_dsbt (output_bfd) && !info->relocatable)
+     {
+       struct elf_link_hash_entry *h;
+ 
+       /* Force a PT_GNU_STACK segment to be created.  */
+       if (! elf_tdata (output_bfd)->stack_flags)
+ 	elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
+ 
+       /* Define __stacksize if it's not defined yet.  */
+       h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+ 				FALSE, FALSE, FALSE);
+       if (! h || h->root.type != bfd_link_hash_defined
+ 	  || h->type != STT_OBJECT
+ 	  || !h->def_regular)
+ 	{
+ 	  struct bfd_link_hash_entry *bh = NULL;
+ 
+ 	  if (!(_bfd_generic_link_add_one_symbol
+ 		(info, output_bfd, "__stacksize",
+ 		 BSF_GLOBAL, bfd_abs_section_ptr, DEFAULT_STACK_SIZE,
+ 		 (const char *) NULL, FALSE,
+ 		 get_elf_backend_data (output_bfd)->collect, &bh)))
+ 	    return FALSE;
+ 
+ 	  h = (struct elf_link_hash_entry *) bh;
+ 	  h->def_regular = 1;
+ 	  h->type = STT_OBJECT;
+ 	}
+     }
+   return TRUE;
+ }
+ 
+ static bfd_boolean
+ elf32_tic6x_modify_program_headers (bfd *output_bfd,
+ 				    struct bfd_link_info *info)
+ {
+   struct elf_obj_tdata *tdata = elf_tdata (output_bfd);
+   struct elf_segment_map *m;
+   Elf_Internal_Phdr *p;
+ 
+   /* objcopy and strip preserve what's already there using
+      elf32_tic6x_copy_private_bfd_data ().  */
+   if (! info)
+     return TRUE;
+ 
+   for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++)
+     if (m->p_type == PT_GNU_STACK)
+       break;
+ 
+   if (m)
+     {
+       struct elf_link_hash_entry *h;
+ 
+       /* Obtain the pointer to the __stacksize symbol.  */
+       h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+ 				FALSE, FALSE, FALSE);
+       if (h)
+ 	{
+ 	  while (h->root.type == bfd_link_hash_indirect
+ 		 || h->root.type == bfd_link_hash_warning)
+ 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
+ 	  BFD_ASSERT (h->root.type == bfd_link_hash_defined);
+ 	}
+ 
+       /* Set the header p_memsz from the symbol value.  We
+ 	 intentionally ignore the symbol section.  */
+       if (h && h->root.type == bfd_link_hash_defined)
+ 	p->p_memsz = h->root.u.def.value;
+       else
+ 	p->p_memsz = DEFAULT_STACK_SIZE;
+ 
+       p->p_align = 8;
+     }
+ 
+   return TRUE;
+ }
+ 
+ static bfd_boolean
+ elf32_tic6x_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 				     struct bfd_link_info *info)
+ {
+   struct elf32_tic6x_link_hash_table *htab;
+   bfd *dynobj;
+   asection *sdyn;
+ 
+   htab = elf32_tic6x_hash_table (info);
+   dynobj = htab->elf.dynobj;
+   sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+ 
+   if (elf_hash_table (info)->dynamic_sections_created)
+     {
+       Elf32_External_Dyn * dyncon;
+       Elf32_External_Dyn * dynconend;
+ 
+       BFD_ASSERT (sdyn != NULL);
+ 
+       dyncon = (Elf32_External_Dyn *) sdyn->contents;
+       dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
+ 
+       for (; dyncon < dynconend; dyncon++)
+ 	{
+ 	  Elf_Internal_Dyn dyn;
+ 	  asection *s;
+ 
+ 	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
+ 
+ 	  switch (dyn.d_tag)
+ 	    {
+ 	    default:
+ 	      break;
+ 
+ 	    case DT_C6000_DSBT_BASE:
+ 	      s = htab->dsbt;
+ 	      dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset);
+ 	      break;
+ 
+ 	    case DT_PLTGOT:
+ 	      s = htab->elf.sgotplt;
+ 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+ 	      break;
+ 
+ 	    case DT_JMPREL:
+ 	      s = htab->elf.srelplt;
+ 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
+ 	      break;
+ 
+ 	    case DT_PLTRELSZ:
+ 	      s = htab->elf.srelplt;
+ 	      dyn.d_un.d_val = s->size;
+ 	      break;
+ 	    }
+ 	  bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ 	}
+ 
+       /* Fill in the first entry in the procedure linkage table.  */
+       if (htab->elf.splt && htab->elf.splt->size > 0)
+ 	{
+ 	  bfd_vma got_offs = (htab->elf.sgotplt->output_section->vma
+ 			      + htab->elf.sgotplt->output_offset
+ 			      - htab->dsbt->output_section->vma
+ 			      - htab->dsbt->output_offset) / 4;
+ 
+ 	  /* ldw .D2T2 *+b14[$GOT(0)],b2 */
+ 	  bfd_put_32 (output_bfd, got_offs << 8 | 0x0100006e,
+ 		      htab->elf.splt->contents);
+ 	  /* ldw .D2T2 *+b14[$GOT(4)],b1 */
+ 	  bfd_put_32 (output_bfd, (got_offs + 1) << 8 | 0x0080006e,
+ 		      htab->elf.splt->contents + 4);
+ 	  /* nop 3 */
+ 	  bfd_put_32 (output_bfd, 0x00004000,
+ 		      htab->elf.splt->contents + 8);
+ 	  /* b .s2 b2 */
+ 	  bfd_put_32 (output_bfd, 0x00080362,
+ 		      htab->elf.splt->contents + 12);
+ 	  /* nop 5 */
+ 	  bfd_put_32 (output_bfd, 0x00008000,
+ 		      htab->elf.splt->contents + 16);
+ 
+ 	  elf_section_data (htab->elf.splt->output_section)
+ 	    ->this_hdr.sh_entsize = PLT_ENTRY_SIZE;
+ 	}
+     }
+ 
+   return TRUE;
+ }
+ 
+ /* Return address for Ith PLT stub in section PLT, for relocation REL
+    or (bfd_vma) -1 if it should not be included.  */
+ 
+ static bfd_vma
+ elf32_tic6x_plt_sym_val (bfd_vma i, const asection *plt,
+ 			 const arelent *rel ATTRIBUTE_UNUSED)
+ {
+   return plt->vma + (i + 1) * PLT_ENTRY_SIZE;
+ }
+ 
  static int
  elf32_tic6x_obj_attrs_arg_type (int tag)
  {
*************** elf32_tic6x_merge_private_bfd_data (bfd 
*** 1993,1998 ****
--- 3813,3860 ----
    return TRUE;
  }
  
+ static bfd_boolean
+ elf32_tic6x_copy_private_data (bfd * ibfd, bfd * obfd)
+ {
+   _bfd_elf_copy_private_bfd_data (ibfd, obfd);
+ 
+   if (! is_tic6x_elf (ibfd) || ! is_tic6x_elf (obfd))
+     return TRUE;
+ 
+   /* Copy the stack size.  */
+   if (elf_tdata (ibfd)->phdr && elf_tdata (obfd)->phdr
+       && elf32_tic6x_using_dsbt (ibfd) && elf32_tic6x_using_dsbt (obfd))
+     {
+       unsigned i;
+ 
+       for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++)
+ 	if (elf_tdata (ibfd)->phdr[i].p_type == PT_GNU_STACK)
+ 	  {
+ 	    Elf_Internal_Phdr *iphdr = &elf_tdata (ibfd)->phdr[i];
+ 
+ 	    for (i = 0; i < elf_elfheader (obfd)->e_phnum; i++)
+ 	      if (elf_tdata (obfd)->phdr[i].p_type == PT_GNU_STACK)
+ 		{
+ 		  memcpy (&elf_tdata (obfd)->phdr[i], iphdr, sizeof (*iphdr));
+ 
+ 		  /* Rewrite the phdrs, since we're only called after they
+ 		     were first written.  */
+ 		  if (bfd_seek (obfd,
+ 				(bfd_signed_vma) get_elf_backend_data (obfd)
+ 				->s->sizeof_ehdr, SEEK_SET) != 0
+ 		      || get_elf_backend_data (obfd)->s
+ 		      ->write_out_phdrs (obfd, elf_tdata (obfd)->phdr,
+ 					 elf_elfheader (obfd)->e_phnum) != 0)
+ 		    return FALSE;
+ 		  break;
+ 		}
+ 
+ 	    break;
+ 	  }
+     }
+ 
+   return TRUE;
+ }
  
  #define TARGET_LITTLE_SYM	bfd_elf32_tic6x_le_vec
  #define TARGET_LITTLE_NAME	"elf32-tic6x-le"
*************** elf32_tic6x_merge_private_bfd_data (bfd 
*** 2001,2011 ****
  #define ELF_ARCH		bfd_arch_tic6x
  #define ELF_TARGET_ID		TIC6X_ELF_DATA
  #define ELF_MACHINE_CODE	EM_TI_C6000
! #define ELF_MAXPAGESIZE		1
  #define bfd_elf32_bfd_reloc_type_lookup elf32_tic6x_reloc_type_lookup
  #define bfd_elf32_bfd_reloc_name_lookup elf32_tic6x_reloc_name_lookup
  #define bfd_elf32_bfd_merge_private_bfd_data	elf32_tic6x_merge_private_bfd_data
  #define bfd_elf32_mkobject		elf32_tic6x_mkobject
  #define bfd_elf32_new_section_hook	elf32_tic6x_new_section_hook
  #define elf_backend_can_gc_sections	1
  #define elf_backend_default_use_rela_p	1
--- 3863,3876 ----
  #define ELF_ARCH		bfd_arch_tic6x
  #define ELF_TARGET_ID		TIC6X_ELF_DATA
  #define ELF_MACHINE_CODE	EM_TI_C6000
! #define ELF_MAXPAGESIZE		0x1000
  #define bfd_elf32_bfd_reloc_type_lookup elf32_tic6x_reloc_type_lookup
  #define bfd_elf32_bfd_reloc_name_lookup elf32_tic6x_reloc_name_lookup
+ #define bfd_elf32_bfd_copy_private_bfd_data	elf32_tic6x_copy_private_data
  #define bfd_elf32_bfd_merge_private_bfd_data	elf32_tic6x_merge_private_bfd_data
  #define bfd_elf32_mkobject		elf32_tic6x_mkobject
+ #define bfd_elf32_bfd_link_hash_table_create  elf32_tic6x_link_hash_table_create
+ #define bfd_elf32_bfd_link_hash_table_free    elf32_tic6x_link_hash_table_free
  #define bfd_elf32_new_section_hook	elf32_tic6x_new_section_hook
  #define elf_backend_can_gc_sections	1
  #define elf_backend_default_use_rela_p	1
*************** elf32_tic6x_merge_private_bfd_data (bfd 
*** 2017,2025 ****
--- 3882,3922 ----
  #define elf_backend_obj_attrs_section	".c6xabi.attributes"
  #define elf_backend_obj_attrs_section_type	SHT_C6000_ATTRIBUTES
  #define elf_backend_obj_attrs_vendor	"c6xabi"
+ #define elf_backend_can_refcount	1
+ #define elf_backend_want_got_plt	1
+ #define elf_backend_want_dynbss		1
+ #define elf_backend_plt_readonly	1
  #define elf_backend_rela_normal		1
+ #define elf_backend_got_header_size     8
+ #define elf_backend_gc_sweep_hook	elf32_tic6x_gc_sweep_hook
+ #define elf_backend_modify_program_headers \
+   elf32_tic6x_modify_program_headers
+ #define elf_backend_create_dynamic_sections \
+   elf32_tic6x_create_dynamic_sections
+ #define elf_backend_adjust_dynamic_symbol \
+   elf32_tic6x_adjust_dynamic_symbol
+ #define elf_backend_check_relocs        elf32_tic6x_check_relocs
+ #define elf_backend_add_symbol_hook     elf32_tic6x_add_symbol_hook
+ #define elf_backend_symbol_processing   elf32_tic6x_symbol_processing
+ #define elf_backend_link_output_symbol_hook \
+   elf32_tic6x_link_output_symbol_hook
+ #define elf_backend_section_from_bfd_section \
+   elf32_tic6x_section_from_bfd_section
  #define elf_backend_relocate_section	elf32_tic6x_relocate_section
+ #define elf_backend_finish_dynamic_symbol \
+   elf32_tic6x_finish_dynamic_symbol
+ #define elf_backend_always_size_sections \
+   elf32_tic6x_always_size_sections
+ #define elf_backend_size_dynamic_sections \
+   elf32_tic6x_size_dynamic_sections
+ #define elf_backend_finish_dynamic_sections \
+   elf32_tic6x_finish_dynamic_sections
  #define elf_info_to_howto		elf32_tic6x_info_to_howto
  #define elf_info_to_howto_rel		elf32_tic6x_info_to_howto_rel
  
+ #undef elf_backend_omit_section_dynsym
+ #define elf_backend_omit_section_dynsym elf32_tic6x_link_omit_section_dynsym
+ #define elf_backend_plt_sym_val		elf32_tic6x_plt_sym_val
+ 
+ 
  #include "elf32-target.h"
Index: bfd/elf32-tic6x.h
===================================================================
RCS file: /cvs/src/src/bfd/elf32-tic6x.h,v
retrieving revision 1.2
diff -c -p -r1.2 elf32-tic6x.h
*** bfd/elf32-tic6x.h	16 Jun 2010 00:36:01 -0000	1.2
--- bfd/elf32-tic6x.h	30 Mar 2011 18:38:05 -0000
***************
*** 1,5 ****
  /* 32-bit ELF support for TI C6X
!    Copyright 2010
     Free Software Foundation, Inc.
  
     This file is part of BFD, the Binary File Descriptor library.
--- 1,5 ----
  /* 32-bit ELF support for TI C6X
!    Copyright 2010, 2011
     Free Software Foundation, Inc.
  
     This file is part of BFD, the Binary File Descriptor library.
*************** extern int elf32_tic6x_merge_arch_attrib
*** 24,26 ****
--- 24,35 ----
  /* This function is provided for use from the assembler.  */
  
  extern void elf32_tic6x_set_use_rela_p (bfd *, bfd_boolean);
+ 
+ struct elf32_tic6x_params
+ {
+   int dsbt_index;
+   int dsbt_size;
+ };
+ 
+ extern void elf32_tic6x_setup (struct bfd_link_info *,
+ 			       struct elf32_tic6x_params *);
Index: bfd/libbfd.h
===================================================================
RCS file: /cvs/src/src/bfd/libbfd.h,v
retrieving revision 1.247
diff -c -p -r1.247 libbfd.h
*** bfd/libbfd.h	28 Mar 2011 11:18:26 -0000	1.247
--- bfd/libbfd.h	30 Mar 2011 18:38:05 -0000
*************** static const char *const bfd_reloc_code_
*** 1705,1710 ****
--- 1705,1714 ----
    "BFD_RELOC_C6000_DSBT_INDEX",
    "BFD_RELOC_C6000_PREL31",
    "BFD_RELOC_C6000_COPY",
+   "BFD_RELOC_C6000_JUMP_SLOT",
+   "BFD_RELOC_C6000_EHTYPE",
+   "BFD_RELOC_C6000_PCR_H16",
+   "BFD_RELOC_C6000_PCR_L16",
    "BFD_RELOC_C6000_ALIGN",
    "BFD_RELOC_C6000_FPHEAD",
    "BFD_RELOC_C6000_NOCMP",
Index: bfd/reloc.c
===================================================================
RCS file: /cvs/src/src/bfd/reloc.c,v
retrieving revision 1.212
diff -c -p -r1.212 reloc.c
*** bfd/reloc.c	14 Mar 2011 16:04:04 -0000	1.212
--- bfd/reloc.c	30 Mar 2011 18:38:06 -0000
***************
*** 1,6 ****
  /* BFD support for handling relocation entries.
     Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
!    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
     Free Software Foundation, Inc.
     Written by Cygnus Support.
  
--- 1,6 ----
  /* BFD support for handling relocation entries.
     Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
!    2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
     Free Software Foundation, Inc.
     Written by Cygnus Support.
  
*************** ENUMX
*** 3935,3940 ****
--- 3935,3948 ----
  ENUMX
    BFD_RELOC_C6000_COPY
  ENUMX
+   BFD_RELOC_C6000_JUMP_SLOT
+ ENUMX
+   BFD_RELOC_C6000_EHTYPE
+ ENUMX
+   BFD_RELOC_C6000_PCR_H16
+ ENUMX
+   BFD_RELOC_C6000_PCR_L16
+ ENUMX
    BFD_RELOC_C6000_ALIGN
  ENUMX
    BFD_RELOC_C6000_FPHEAD
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.537
diff -c -p -r1.537 readelf.c
*** binutils/readelf.c	30 Mar 2011 15:37:48 -0000	1.537
--- binutils/readelf.c	30 Mar 2011 18:38:07 -0000
*************** dump_relocations (FILE * file,
*** 1304,1311 ****
  			sec_name = "ABS";
  		      else if (psym->st_shndx == SHN_COMMON)
  			sec_name = "COMMON";
! 		      else if (elf_header.e_machine == EM_MIPS
! 			       && psym->st_shndx == SHN_MIPS_SCOMMON)
  			sec_name = "SCOMMON";
  		      else if (elf_header.e_machine == EM_MIPS
  			       && psym->st_shndx == SHN_MIPS_SUNDEFINED)
--- 1304,1313 ----
  			sec_name = "ABS";
  		      else if (psym->st_shndx == SHN_COMMON)
  			sec_name = "COMMON";
! 		      else if ((elf_header.e_machine == EM_MIPS
! 				&& psym->st_shndx == SHN_MIPS_SCOMMON)
! 			       || (elf_header.e_machine == EM_TI_C6000
! 				   && psym->st_shndx == SHN_TIC6X_SCOMMON))
  			sec_name = "SCOMMON";
  		      else if (elf_header.e_machine == EM_MIPS
  			       && psym->st_shndx == SHN_MIPS_SUNDEFINED)
*************** get_symbol_index_type (unsigned int type
*** 8482,8489 ****
  		|| elf_header.e_machine == EM_L1OM)
  	       && type == SHN_X86_64_LCOMMON)
  	return "LARGE_COM";
!       else if (type == SHN_MIPS_SCOMMON
! 	       && elf_header.e_machine == EM_MIPS)
  	return "SCOM";
        else if (type == SHN_MIPS_SUNDEFINED
  	       && elf_header.e_machine == EM_MIPS)
--- 8484,8493 ----
  		|| elf_header.e_machine == EM_L1OM)
  	       && type == SHN_X86_64_LCOMMON)
  	return "LARGE_COM";
!       else if ((type == SHN_MIPS_SCOMMON
! 		&& elf_header.e_machine == EM_MIPS)
! 	       || (type == SHN_TIC6X_SCOMMON
! 		   && elf_header.e_machine == EM_TI_C6000))
  	return "SCOM";
        else if (type == SHN_MIPS_SUNDEFINED
  	       && elf_header.e_machine == EM_MIPS)
Index: binutils/testsuite/lib/binutils-common.exp
===================================================================
RCS file: /cvs/src/src/binutils/testsuite/lib/binutils-common.exp,v
retrieving revision 1.4
diff -c -p -r1.4 binutils-common.exp
*** binutils/testsuite/lib/binutils-common.exp	3 Jan 2011 16:53:28 -0000	1.4
--- binutils/testsuite/lib/binutils-common.exp	30 Mar 2011 18:38:07 -0000
***************
*** 1,5 ****
  # Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007,
! # 2009, 2010 Free Software Foundation, Inc.
  #
  # This file is part of the GNU Binutils.
  #
--- 1,5 ----
  # Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007,
! # 2009, 2010, 2011 Free Software Foundation, Inc.
  #
  # This file is part of the GNU Binutils.
  #
*************** proc is_elf_format {} {
*** 33,38 ****
--- 33,39 ----
  	 && ![istarget frv-*-uclinux*]
  	 && ![istarget bfin-*-uclinux]
  	 && ![istarget sh*-*-uclinux*]
+ 	 && ![istarget tic6x*-*-uclinux*]
  	 && ![istarget *-*-irix5*]
  	 && ![istarget *-*-irix6*]
  	 && ![istarget *-*-netbsd*]
Index: gas/config/tc-tic6x.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-tic6x.c,v
retrieving revision 1.12
diff -c -p -r1.12 tc-tic6x.c
*** gas/config/tc-tic6x.c	3 Feb 2011 23:20:26 -0000	1.12
--- gas/config/tc-tic6x.c	30 Mar 2011 18:38:07 -0000
***************
*** 34,39 ****
--- 34,44 ----
  #define TRUNC(X)	((valueT) (X) & 0xffffffffU)
  #define SEXT(X)		((TRUNC (X) ^ 0x80000000U) - 0x80000000U)
  
+ /* Stuff for .scomm symbols.  */
+ static segT sbss_section;
+ static asection scom_section;
+ static asymbol scom_symbol;
+ 
  const char comment_chars[] = ";";
  const char line_comment_chars[] = "#*;";
  const char line_separator_chars[] = "@";
*************** s_tic6x_nocmp (int ignored ATTRIBUTE_UNU
*** 349,354 ****
--- 354,491 ----
    demand_empty_rest_of_line ();
  }
  
+ /* .scomm pseudo-op handler.
+ 
+    This is a new pseudo-op to handle putting objects in .scommon.
+    By doing this the linker won't need to do any work,
+    and more importantly it removes the implicit -G arg necessary to
+    correctly link the object file.  */
+ 
+ static void
+ s_tic6x_scomm (int ignore ATTRIBUTE_UNUSED)
+ {
+   char *name;
+   char c;
+   char *p;
+   offsetT size;
+   symbolS *symbolP;
+   offsetT align;
+   int align2;
+ 
+   name = input_line_pointer;
+   c = get_symbol_end ();
+ 
+   /* Just after name is now '\0'.  */
+   p = input_line_pointer;
+   *p = c;
+   SKIP_WHITESPACE ();
+   if (*input_line_pointer != ',')
+     {
+       as_bad (_("expected comma after symbol name"));
+       ignore_rest_of_line ();
+       return;
+     }
+ 
+   /* Skip ','.  */
+   input_line_pointer++;
+   if ((size = get_absolute_expression ()) < 0)
+     {
+       /* xgettext:c-format  */
+       as_warn (_("invalid length for .scomm directive"));
+       ignore_rest_of_line ();
+       return;
+     }
+ 
+   /* The third argument to .scomm is the alignment.  */
+   if (*input_line_pointer != ',')
+     align = 8;
+   else
+     {
+       ++input_line_pointer;
+       align = get_absolute_expression ();
+       if (align <= 0)
+ 	{
+ 	  as_warn (_("alignment is not a positive number"));
+ 	  align = 8;
+ 	}
+     }
+ 
+   /* Convert to a power of 2 alignment.  */
+   if (align)
+     {
+       for (align2 = 0; (align & 1) == 0; align >>= 1, ++align2)
+ 	continue;
+       if (align != 1)
+ 	{
+ 	  as_bad (_("alignment is not a power of 2"));
+ 	  ignore_rest_of_line ();
+ 	  return;
+ 	}
+     }
+   else
+     align2 = 0;
+ 
+   *p = 0;
+   symbolP = symbol_find_or_make (name);
+   *p = c;
+ 
+   if (S_IS_DEFINED (symbolP))
+     {
+       /* xgettext:c-format  */
+       as_bad (_("attempt to re-define symbol `%s'"),
+ 	      S_GET_NAME (symbolP));
+       ignore_rest_of_line ();
+       return;
+     }
+ 
+   if (S_GET_VALUE (symbolP) && S_GET_VALUE (symbolP) != (valueT) size)
+     {
+       /* xgettext:c-format  */
+       as_bad (_("attempt to redefine `%s' with a different length"),
+ 	      S_GET_NAME (symbolP));
+ 
+       ignore_rest_of_line ();
+       return;
+     }
+ 
+   if (symbol_get_obj (symbolP)->local)
+     {
+       segT old_sec = now_seg;
+       int old_subsec = now_subseg;
+       char *pfrag;
+ 
+       record_alignment (sbss_section, align2);
+       subseg_set (sbss_section, 0);
+ 
+       if (align2)
+ 	frag_align (align2, 0, 0);
+ 
+       if (S_GET_SEGMENT (symbolP) == sbss_section)
+ 	symbol_get_frag (symbolP)->fr_symbol = 0;
+ 
+       symbol_set_frag (symbolP, frag_now);
+ 
+       pfrag = frag_var (rs_org, 1, 1, (relax_substateT) 0, symbolP, size,
+ 			(char *) 0);
+       *pfrag = 0;
+       S_SET_SIZE (symbolP, size);
+       S_SET_SEGMENT (symbolP, sbss_section);
+       S_CLEAR_EXTERNAL (symbolP);
+       subseg_set (old_sec, old_subsec);
+     }
+   else
+     {
+       S_SET_VALUE (symbolP, (valueT) size);
+       S_SET_ALIGN (symbolP, 1 << align2);
+       S_SET_EXTERNAL (symbolP);
+       S_SET_SEGMENT (symbolP, &scom_section);
+     }
+ 
+   symbol_get_bfdsym (symbolP)->flags |= BSF_OBJECT;
+ 
+   demand_empty_rest_of_line ();
+ }
+ 
  /* Track for each attribute whether it has been set explicitly (and so
     should not have a default value set by the assembler).  */
  static bfd_boolean tic6x_attributes_set_explicitly[NUM_KNOWN_OBJ_ATTRIBUTES];
*************** const pseudo_typeS md_pseudo_table[] =
*** 396,401 ****
--- 533,539 ----
      { "arch", s_tic6x_arch, 0 },
      { "c6xabi_attribute", s_tic6x_c6xabi_attribute, 0 },
      { "nocmp", s_tic6x_nocmp, 0 },
+     { "scomm",	s_tic6x_scomm, 0 },
      { "word", cons, 4 },
      { 0, 0, 0 }
    };
*************** void
*** 411,416 ****
--- 549,557 ----
  md_begin (void)
  {
    tic6x_opcode_id id;
+   flagword applicable;
+   segT seg;
+   subsegT subseg;
  
    bfd_set_arch_mach (stdoutput, TARGET_ARCH, 0);
  
*************** md_begin (void)
*** 427,432 ****
--- 568,599 ----
  	  != NULL)
  	as_fatal ("%s", _(errmsg));
      }
+ 
+   /* Save the current subseg so we can restore it [it's the default one and
+      we don't want the initial section to be .sbss].  */
+   seg = now_seg;
+   subseg = now_subseg;
+ 
+   /* The sbss section is for local .scomm symbols.  */
+   sbss_section = subseg_new (".bss", 0);
+   seg_info (sbss_section)->bss = 1;
+ 
+   /* This is copied from perform_an_assembly_pass.  */
+   applicable = bfd_applicable_section_flags (stdoutput);
+   bfd_set_section_flags (stdoutput, sbss_section, applicable & SEC_ALLOC);
+ 
+   subseg_set (seg, subseg);
+ 
+   /* We must construct a fake section similar to bfd_com_section
+      but with the name .scommon.  */
+   scom_section                = bfd_com_section;
+   scom_section.name           = ".scommon";
+   scom_section.output_section = & scom_section;
+   scom_section.symbol         = & scom_symbol;
+   scom_section.symbol_ptr_ptr = & scom_section.symbol;
+   scom_symbol                 = * bfd_com_section.symbol;
+   scom_symbol.name            = ".scommon";
+   scom_symbol.section         = & scom_section;
  }
  
  /* Whether the current line being parsed had the "||" parallel bars.  */
*************** arelent *
*** 4029,4039 ****
  tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
  {
    arelent *reloc;
    bfd_reloc_code_real_type r_type;
  
    reloc = xmalloc (sizeof (arelent));
    reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
!   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
    reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
    reloc->addend = (tic6x_generate_rela ? fixp->fx_offset : 0);
    r_type = fixp->fx_r_type;
--- 4196,4208 ----
  tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp)
  {
    arelent *reloc;
+   asymbol *symbol;
    bfd_reloc_code_real_type r_type;
  
    reloc = xmalloc (sizeof (arelent));
    reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
!   symbol = symbol_get_bfdsym (fixp->fx_addsy);
!   *reloc->sym_ptr_ptr = symbol;
    reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
    reloc->addend = (tic6x_generate_rela ? fixp->fx_offset : 0);
    r_type = fixp->fx_r_type;
*************** tc_gen_reloc (asection *section ATTRIBUT
*** 4049,4055 ****
  
    /* Correct for adjustments bfd_install_relocation will make.  */
    if (reloc->howto->pcrel_offset && reloc->howto->partial_inplace)
!     reloc->addend += reloc->address;
  
    return reloc;
  }
--- 4218,4228 ----
  
    /* Correct for adjustments bfd_install_relocation will make.  */
    if (reloc->howto->pcrel_offset && reloc->howto->partial_inplace)
!     {
!       reloc->addend += reloc->address;
!       if (!bfd_is_com_section (symbol))
! 	reloc->addend -= symbol->value;
!     }
  
    return reloc;
  }
Index: gas/doc/c-tic6x.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-tic6x.texi,v
retrieving revision 1.9
diff -c -p -r1.9 c-tic6x.texi
*** gas/doc/c-tic6x.texi	3 Feb 2011 23:20:26 -0000	1.9
--- gas/doc/c-tic6x.texi	30 Mar 2011 18:38:07 -0000
*************** The @var{tag} is either an attribute num
*** 151,154 ****
--- 151,160 ----
  Disallow use of C64x+ compact instructions in the current text
  section.
  
+ @cindex @code{.scomm} directive, TIC6X
+ @item .scomm @var{symbol}, @var{size}, @var{align}
+ Like @code{.comm}, creating a common symbol @var{symbol} with size @var{size}
+ and alignment @var{align}, but unlike when using @code{.comm}, this symbol
+ will be placed into the small BSS section by the linker.
+ 
  @end table
Index: gas/testsuite/gas/tic6x/scomm-directive-1.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-1.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-1.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-1.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,4 ----
+ #name: C6X .scomm directive 1
+ #as:
+ #source: scomm-directive-1.s
+ #error: alignment is not a power of 2
Index: gas/testsuite/gas/tic6x/scomm-directive-1.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-1.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-1.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-1.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,2 ----
+ 	.comm	x,4,4
+ 	.scomm	y,4,5
Index: gas/testsuite/gas/tic6x/scomm-directive-2.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-2.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-2.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-2.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,5 ----
+ #name: C6X .scomm directive 2
+ #as:
+ #source: scomm-directive-2.s
+ #error: attempt to re-define symbol
+ 
Index: gas/testsuite/gas/tic6x/scomm-directive-2.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-2.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-2.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-2.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,2 ----
+ 	.scomm	x,4,4
+ 	.scomm	x,8,4
Index: gas/testsuite/gas/tic6x/scomm-directive-3.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-3.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-3.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-3.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,4 ----
+ #name: C6X .scomm directive 3
+ #as:
+ #source: scomm-directive-3.s
+ #error: attempt to re-define symbol
Index: gas/testsuite/gas/tic6x/scomm-directive-3.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-3.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-3.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-3.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,2 ----
+ 	.comm	x,8,4
+ 	.scomm	x,8,4
Index: gas/testsuite/gas/tic6x/scomm-directive-4.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-4.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-4.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-4.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,37 ----
+ #name: C6X .scomm directive 4
+ #as:
+ #source: scomm-directive-4.s
+ #readelf: -Ss
+ 
+ There are 8 section headers, starting at offset 0x88:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.text             PROGBITS        00000000 000034 000000 00  AX  0   0  1
+   \[ 2\] \.data             PROGBITS        00000000 000034 000000 00  WA  0   0  1
+   \[ 3\] \.bss              NOBITS          00000000 000034 000000 00  WA  0   0  1
+   \[ 4\] \.c6xabi\.attribute C6000_ATTRIBUTE 00000000 000034 000013 00      0   0  1
+   \[ 5\] \.shstrtab         STRTAB          00000000 000047 00003f 00      0   0  1
+   \[ 6\] \.symtab           SYMTAB          00000000 0001c8 0000d0 10      7   5  4
+   \[ 7\] \.strtab           STRTAB          00000000 000298 00001d 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Symbol table '\.symtab' contains 13 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00000000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00000000     0 SECTION LOCAL  DEFAULT    2 
+      3: 00000000     0 SECTION LOCAL  DEFAULT    3 
+      4: 00000000     0 SECTION LOCAL  DEFAULT    4 
+      5: 00000004     4 OBJECT  GLOBAL DEFAULT  COM x4a
+      6: 00000004     4 OBJECT  GLOBAL DEFAULT SCOM y4a
+      7: 00000002     4 OBJECT  GLOBAL DEFAULT  COM x4b
+      8: 00000002     4 OBJECT  GLOBAL DEFAULT SCOM y4b
+      9: 00000004     2 OBJECT  GLOBAL DEFAULT  COM x2
+     10: 00000004     2 OBJECT  GLOBAL DEFAULT SCOM y2
+     11: 00000004     1 OBJECT  GLOBAL DEFAULT  COM x1
+     12: 00000004     1 OBJECT  GLOBAL DEFAULT SCOM y1
Index: gas/testsuite/gas/tic6x/scomm-directive-4.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-4.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-4.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-4.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,8 ----
+ 	.comm	x4a,4,4
+ 	.scomm	y4a,4,4
+ 	.comm	x4b,4,2
+ 	.scomm	y4b,4,2
+ 	.comm	x2,2,4
+ 	.scomm	y2,2,4
+ 	.comm	x1,1,4
+ 	.scomm	y1,1,4
Index: gas/testsuite/gas/tic6x/scomm-directive-5.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-5.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-5.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-5.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,4 ----
+ #name: C6X .scomm directive 5
+ #as:
+ #source: scomm-directive-5.s
+ #error: expected comma after symbol name
Index: gas/testsuite/gas/tic6x/scomm-directive-5.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-5.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-5.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-5.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1 ----
+ 	.scomm	x
Index: gas/testsuite/gas/tic6x/scomm-directive-6.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-6.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-6.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-6.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,4 ----
+ #name: C6X .scomm directive 6
+ #as:
+ #source: scomm-directive-6.s
+ #error: bad or irreducible absolute expression
Index: gas/testsuite/gas/tic6x/scomm-directive-6.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-6.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-6.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-6.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1 ----
+ 	.scomm	x,fish
Index: gas/testsuite/gas/tic6x/scomm-directive-7.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-7.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-7.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-7.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,4 ----
+ #name: C6X .scomm directive 7
+ #as:
+ #source: scomm-directive-7.s
+ #warning: alignment is not a positive number
Index: gas/testsuite/gas/tic6x/scomm-directive-7.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-7.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-7.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-7.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1 ----
+ 	.scomm	x,8,-4
Index: gas/testsuite/gas/tic6x/scomm-directive-8.d
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-8.d
diff -N gas/testsuite/gas/tic6x/scomm-directive-8.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-8.d	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1,4 ----
+ #name: C6X .scomm directive 8
+ #as:
+ #source: scomm-directive-8.s
+ #warning: invalid length for .scomm directive
Index: gas/testsuite/gas/tic6x/scomm-directive-8.s
===================================================================
RCS file: gas/testsuite/gas/tic6x/scomm-directive-8.s
diff -N gas/testsuite/gas/tic6x/scomm-directive-8.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- gas/testsuite/gas/tic6x/scomm-directive-8.s	30 Mar 2011 18:38:08 -0000
***************
*** 0 ****
--- 1 ----
+ 	.scomm	x,-8,4
Index: include/elf/tic6x.h
===================================================================
RCS file: /cvs/src/src/include/elf/tic6x.h,v
retrieving revision 1.3
diff -c -p -r1.3 tic6x.h
*** include/elf/tic6x.h	21 Oct 2010 21:16:53 -0000	1.3
--- include/elf/tic6x.h	30 Mar 2011 18:38:08 -0000
***************
*** 1,5 ****
  /* TI C6X ELF support for BFD.
!    Copyright 2010
     Free Software Foundation, Inc.
  
     This file is part of BFD, the Binary File Descriptor library.
--- 1,5 ----
  /* TI C6X ELF support for BFD.
!    Copyright 2010, 2011
     Free Software Foundation, Inc.
  
     This file is part of BFD, the Binary File Descriptor library.
*************** START_RELOC_NUMBERS (elf_tic6x_reloc_typ
*** 53,58 ****
--- 53,62 ----
    RELOC_NUMBER (R_C6000_DSBT_INDEX, 24)
    RELOC_NUMBER (R_C6000_PREL31, 25)
    RELOC_NUMBER (R_C6000_COPY, 26)
+   RELOC_NUMBER (R_C6000_JUMP_SLOT, 27)
+   RELOC_NUMBER (R_C6000_SBR_GOT32, 28)
+   RELOC_NUMBER (R_C6000_PCR_H16, 29)
+   RELOC_NUMBER (R_C6000_PCR_L16, 30)
    RELOC_NUMBER (R_C6000_ALIGN, 253)
    RELOC_NUMBER (R_C6000_FPHEAD, 254)
    RELOC_NUMBER (R_C6000_NOCMP, 255)
*************** END_RELOC_NUMBERS (R_TIC6X_max)
*** 89,94 ****
--- 93,105 ----
  /* Extended program header attributes.  */
  #define SHT_TI_PHATTRS		0x7F000004
  
+ /* Processor specific section indices.  These sections do not actually
+    exist.  Symbols with a st_shndx field corresponding to one of these
+    values have a special meaning.  */
+ 
+ /* Small data area common symbol.  */
+ #define SHN_TIC6X_SCOMMON	SHN_LORESERVE
+ 
  /* Processor-specific segment types.  */
  
  /* Extended Segment Attributes.  */
Index: ld/gen-doc.texi
===================================================================
RCS file: /cvs/src/src/ld/gen-doc.texi,v
retrieving revision 1.12
diff -c -p -r1.12 gen-doc.texi
*** ld/gen-doc.texi	12 Jul 2008 08:54:13 -0000	1.12
--- ld/gen-doc.texi	30 Mar 2011 18:38:08 -0000
***************
*** 4,9 ****
--- 4,10 ----
  
  @c 2. Specific target machines
  @set ARM
+ @set C6X
  @set H8300
  @set HPPA
  @set I960
Index: ld/ld.texinfo
===================================================================
RCS file: /cvs/src/src/ld/ld.texinfo,v
retrieving revision 1.273
diff -c -p -r1.273 ld.texinfo
*** ld/ld.texinfo	4 Mar 2011 23:44:01 -0000	1.273
--- ld/ld.texinfo	30 Mar 2011 18:38:10 -0000
***************
*** 22,27 ****
--- 22,28 ----
  @set UsesEnvVars
  @set GENERIC
  @set ARM
+ @set C6X
  @set H8300
  @set HPPA
  @set I960
*************** The image is Terminal Server aware.
*** 2612,2617 ****
--- 2613,2647 ----
  
  @c man end
  
+ @ifset C6X
+ @subsection Options specific to C6X uClinux targets
+ 
+ @c man begin OPTIONS
+ 
+ The C6X uClinux target uses a binary format called DSBT to support shared
+ libraries.  Each shared library in the system needs to have a unique index;
+ all executables use an index of 0.
+ 
+ @table @gcctabopt
+ 
+ @kindex --dsbt-size
+ @item --dsbt-size @var{size}
+ This option sets the number of entires in the DSBT of the current executable
+ or shared library to @var{size}.  The default is to create a table with 64
+ entries.
+ 
+ @kindex --dsbt-index
+ @item --dsbt-index @var{index}
+ This option sets the DSBT index of the current executable or shared library
+ to @var{index}.  The default is 0, which is appropriate for generating
+ executables.  If a shared library is generated with a DSBT index of 0, the
+ @code{R_C6000_DSBT_INDEX} relocs are copied into the output file.
+ 
+ @end table
+ 
+ @c man end
+ @end ifset
+ 
  @ifset M68HC11
  @subsection Options specific to Motorola 68HC11 and 68HC12 targets
  
Index: ld/emulparams/elf32_tic6x_le.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf32_tic6x_le.sh,v
retrieving revision 1.4
diff -c -p -r1.4 elf32_tic6x_le.sh
*** ld/emulparams/elf32_tic6x_le.sh	21 Oct 2010 21:16:53 -0000	1.4
--- ld/emulparams/elf32_tic6x_le.sh	30 Mar 2011 18:38:10 -0000
***************
*** 1,14 ****
  SCRIPT_NAME=elf
  TEMPLATE_NAME=elf32
  OUTPUT_FORMAT="elf32-tic6x-le"
  # This address is an arbitrary value expected to be suitable for
  # semihosting simulator use, but not on hardware where it is expected
  # to be overridden.
! TEXT_START_ADDR=0x8000
  MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
  ARCH=tic6x
  EXECUTABLE_SYMBOLS="EXTERN (__c6xabi_DSBT_BASE);"
! SDATA_START_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
  # ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
  # far read-only data, ".rodata" is near read-only data.  ".neardata"
  # is near (small) data, ".fardata" is (along with .data) far data.
--- 1,29 ----
  SCRIPT_NAME=elf
  TEMPLATE_NAME=elf32
  OUTPUT_FORMAT="elf32-tic6x-le"
+ BIG_OUTPUT_FORMAT="elf32-tic6x-be"
+ EXTRA_EM_FILE=tic6xdsbt
+ GENERATE_SHLIB_SCRIPT=yes
  # This address is an arbitrary value expected to be suitable for
  # semihosting simulator use, but not on hardware where it is expected
  # to be overridden.
! case ${target} in
!     *-elf)
! 	TEXT_START_ADDR=0x8000
! 	;;
!     *-uclinux)
! 	TEXT_START_ADDR=0x0
! 	GOT="
! .got ${RELOCATING-0} : {
!   *(.dsbt)
!   *(.got.plt) *(.igot.plt) *(.got) *(.igot)
! }"
! 	;;
! esac
  MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
  ARCH=tic6x
  EXECUTABLE_SYMBOLS="EXTERN (__c6xabi_DSBT_BASE);"
! OTHER_GOT_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
  # ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
  # far read-only data, ".rodata" is near read-only data.  ".neardata"
  # is near (small) data, ".fardata" is (along with .data) far data.
*************** OTHER_READWRITE_SECTIONS=".fardata ${REL
*** 24,30 ****
  OTHER_READWRITE_RELOC_SECTIONS="
    .rel.fardata     ${RELOCATING-0} : { *(.rel.fardata${RELOCATING+ .rel.fardata.*}) }
    .rela.fardata    ${RELOCATING-0} : { *(.rela.fardata${RELOCATING+ .rela.fardata.*}) }"
! OTHER_BSS_SECTIONS="
    .heap : 
    { 
      . = ALIGN(4); 
--- 39,47 ----
  OTHER_READWRITE_RELOC_SECTIONS="
    .rel.fardata     ${RELOCATING-0} : { *(.rel.fardata${RELOCATING+ .rel.fardata.*}) }
    .rela.fardata    ${RELOCATING-0} : { *(.rela.fardata${RELOCATING+ .rela.fardata.*}) }"
! case ${target} in
!     *-elf)
! 	OTHER_BSS_SECTIONS="
    .heap : 
    { 
      . = ALIGN(4); 
*************** OTHER_BSS_SECTIONS="
*** 37,40 ****
--- 54,59 ----
      . +=  0x100000;
      _STACK_START = .;
    }"
+ 	;;
+ esac
  ATTRS_SECTIONS='.c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }'
Index: ld/emultempl/tic6xdsbt.em
===================================================================
RCS file: ld/emultempl/tic6xdsbt.em
diff -N ld/emultempl/tic6xdsbt.em
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/emultempl/tic6xdsbt.em	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,105 ----
+ # This shell script emits a C file. -*- C -*-
+ #   Copyright 2011 Free Software Foundation, Inc.
+ #
+ # This file is part of the GNU Binutils.
+ #
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ # MA 02110-1301, USA.
+ #
+ 
+ # This file is sourced from elf32.em, and defines extra C6X DSBT specific
+ # features.
+ #
+ fragment <<EOF
+ #include "ldctor.h"
+ #include "elf32-tic6x.h"
+ 
+ static struct elf32_tic6x_params params =
+ {
+   0, 64
+ };
+ 
+ static int
+ is_tic6x_target (void)
+ {
+   extern const bfd_target bfd_elf32_tic6x_le_vec;
+   extern const bfd_target bfd_elf32_tic6x_be_vec;
+ 
+   return (link_info.output_bfd->xvec == &bfd_elf32_tic6x_le_vec
+   	  || link_info.output_bfd->xvec == &bfd_elf32_tic6x_be_vec);
+ }
+ 
+ /* Pass params to backend.  */
+ 
+ static void
+ tic6x_after_open (void)
+ {
+   if (is_tic6x_target ())
+     {
+       if (params.dsbt_index >= params.dsbt_size)
+ 	{
+ 	  einfo (_("%P%F: invalid --dsbt-index %d, outside DSBT size.\n"),
+ 		 params.dsbt_index);
+ 	}
+       elf32_tic6x_setup (&link_info, &params);
+     }
+ 
+   gld${EMULATION_NAME}_after_open ();
+ }
+ EOF
+ 
+ # This code gets inserted into the generic elf32.sc linker script
+ # and allows us to define our own command line switches.
+ PARSE_AND_LIST_PROLOGUE='
+ #define OPTION_DSBT_INDEX		300
+ #define OPTION_DSBT_SIZE		301
+ '
+ 
+ PARSE_AND_LIST_LONGOPTS='
+   {"dsbt-index", required_argument, NULL, OPTION_DSBT_INDEX},
+   {"dsbt-size", required_argument, NULL, OPTION_DSBT_SIZE},
+ '
+ 
+ PARSE_AND_LIST_OPTIONS='
+   fprintf (file, _("  --dsbt-index <index>\n"));
+   fprintf (file, _("\t\t\tUse this as the DSBT index for the output object\n"));
+   fprintf (file, _("  --dsbt-size <index>\n"));
+   fprintf (file, _("\t\t\tUse this as the number of entries in the DSBT table\n"));
+ '
+ 
+ PARSE_AND_LIST_ARGS_CASES='
+     case OPTION_DSBT_INDEX:
+       {
+ 	char *end;
+ 	params.dsbt_index = strtol (optarg, &end, 0);
+ 	if (*end == 0
+ 	    && params.dsbt_index >= 0 && params.dsbt_index < 0x7fff)
+ 	  break;
+ 	einfo (_("%P%F: invalid --dsbt-index %s\n"), optarg);
+       }
+       break;
+     case OPTION_DSBT_SIZE:
+       {
+ 	char *end;
+ 	params.dsbt_size = strtol (optarg, &end, 0);
+ 	if (*end == 0
+ 	    && params.dsbt_size >= 0 && params.dsbt_size < 0x7fff)
+ 	  break;
+ 	einfo (_("%P%F: invalid --dsbt-size %s\n"), optarg);
+       }
+       break;
+ '
+ 
+ LDEMUL_AFTER_OPEN=tic6x_after_open
Index: ld/testsuite/ld-elf/sec-to-seg.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-elf/sec-to-seg.exp,v
retrieving revision 1.3
diff -c -p -r1.3 sec-to-seg.exp
*** ld/testsuite/ld-elf/sec-to-seg.exp	28 Oct 2010 06:27:55 -0000	1.3
--- ld/testsuite/ld-elf/sec-to-seg.exp	30 Mar 2011 18:38:10 -0000
*************** if {    [istarget avr-*-*]
*** 87,93 ****
       || [istarget moxie-*-*]
       || [istarget msp430-*-*]
       || [istarget mt-*-*]
-      || [istarget tic6x-*-*]
      } {
      set B_test_same_seg 0
  } else {
--- 87,92 ----
Index: ld/testsuite/ld-scripts/crossref.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-scripts/crossref.exp,v
retrieving revision 1.18
diff -c -p -r1.18 crossref.exp
*** ld/testsuite/ld-scripts/crossref.exp	2 Sep 2009 07:25:41 -0000	1.18
--- ld/testsuite/ld-scripts/crossref.exp	30 Mar 2011 18:38:10 -0000
*************** if [istarget mep*-*-elf] {
*** 51,56 ****
--- 51,62 ----
      set CFLAGS "-mtiny=0"
  }
  
+ # The .dsbt section and __c6xabi_DSBT_BASE are not defined in our test
+ # linker scripts.
+ if [istarget tic6x*-*-*] {
+     set CFLAGS "-mno-dsbt -msdata=none"
+ }
+ 
  if { ![ld_compile $CC "$srcdir/$subdir/cross1.c" tmpdir/cross1.o] \
       || ![ld_compile $CC "$srcdir/$subdir/cross2.c" tmpdir/cross2.o] } {
      unresolved $test1
Index: ld/testsuite/ld-tic6x/common.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/common.d
diff -N ld/testsuite/ld-tic6x/common.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/common.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,28 ----
+ #name: C6X common symbols
+ #as: -mlittle-endian
+ #ld: -melf32_tic6x_le -Tcommon.ld
+ #source: common.s
+ #readelf: -Ss
+ 
+ There are 6 section headers, starting at offset 0x7c:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.far              NOBITS          00000080 000080 000008 00  WA  0   0  4
+   \[ 2\] \.bss              NOBITS          00000100 000080 000004 00  WA  0   0  4
+   \[ 3\] \.shstrtab         STRTAB          00000000 000054 000025 00      0   0  1
+   \[ 4\] \.symtab           SYMTAB          00000000 00016c 000050 10      5   3  4
+   \[ 5\] \.strtab           STRTAB          00000000 0001bc 000005 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Symbol table '\.symtab' contains 5 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00000080     0 SECTION LOCAL  DEFAULT    1 
+      2: 00000100     0 SECTION LOCAL  DEFAULT    2 
+      3: 00000100     4 OBJECT  GLOBAL DEFAULT    2 x
+      4: 00000080     8 OBJECT  GLOBAL DEFAULT    1 y
Index: ld/testsuite/ld-tic6x/common.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/common.ld
diff -N ld/testsuite/ld-tic6x/common.ld
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/common.ld	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ SECTIONS
+ {
+   . = 0x80;
+   .far : { *(.far) *(COMMON) }
+   . = 0x100;
+   .bss : { *(.scommon) }
+ 
+   . = 0x10000000;
+   .text : { *(.text*) }
+   /DISCARD/ : { *(*) }
+ }
Index: ld/testsuite/ld-tic6x/common.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/common.s
diff -N ld/testsuite/ld-tic6x/common.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/common.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,2 ----
+ 	.scomm	x,4,4
+ 	.comm	y,8,4
Index: ld/testsuite/ld-tic6x/dsbt-be.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-be.ld
diff -N ld/testsuite/ld-tic6x/dsbt-be.ld
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt-be.ld	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,67 ----
+ OUTPUT_FORMAT("elf32-tic6x-be", "elf32-tic6x-be",
+ 	      "elf32-tic6x-be")
+ EXTERN (__c6xabi_DSBT_BASE);
+ SECTIONS
+ {
+   PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+   . = 0x8000;
+   .hash           : { *(.hash) }
+   .gnu.hash       : { *(.gnu.hash) }
+   .dynsym         : { *(.dynsym) }
+   .dynstr         : { *(.dynstr) }
+   .gnu.version    : { *(.gnu.version) }
+   .gnu.version_d  : { *(.gnu.version_d) }
+   .gnu.version_r  : { *(.gnu.version_r) }
+   .rel.init       : { *(.rel.init) }
+   .rela.init      : { *(.rela.init) }
+   .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+   .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+   .rel.fini       : { *(.rel.fini) }
+   .rela.fini      : { *(.rela.fini) }
+   .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+   .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+   .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+   .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+   .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+   .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+   .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+   .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+   .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+   .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+   .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+   .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+   .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+   .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.ctors      : { *(.rel.ctors) }
+   .rela.ctors     : { *(.rela.ctors) }
+   .rel.dtors      : { *(.rel.dtors) }
+   .rela.dtors     : { *(.rela.dtors) }
+   .rel.got        : { *(.rel.got) }
+   .rela.got       : { *(.rela.got) }
+   .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+   .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+   .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+   .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+   .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+   .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+   .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+   .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+   .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+   .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+   .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+   .dynamic        : { *(.dynamic) }
+   .data : { *(.data*) }
+   . = 0x10000000;
+   .rel.plt        : { *(.rel.plt) }
+   .rela.plt       : { *(.rela.plt) }
+   .plt            : { *(.plt) }
+   .text : { *(.text*) }
+   PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+   .got   : { *(.dsbt) *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+   .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+   .rodata   : { *(.rodata .rodata.*) }
+   .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+   .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+   .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+   /DISCARD/ : { *(*) }
+ }
Index: ld/testsuite/ld-tic6x/dsbt-index-error.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-index-error.d
diff -N ld/testsuite/ld-tic6x/dsbt-index-error.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt-index-error.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,5 ----
+ #name: C6X invalid DSBT_INDEX
+ #as: -mlittle-endian
+ #ld: -melf32_tic6x_le -Tsbr.ld --dsbt-index 5 --dsbt-size 3
+ #source: dsbt-index.s
+ #error: .*invalid --dsbt-index 5, outside DSBT size.*
Index: ld/testsuite/ld-tic6x/dsbt-index.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-index.d
diff -N ld/testsuite/ld-tic6x/dsbt-index.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt-index.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,14 ----
+ #name: C6X DSBT_INDEX reloc
+ #as: -mlittle-endian
+ #ld: -melf32_tic6x_le -Tsbr.ld --dsbt-index 5
+ #source: dsbt-index.s
+ #objdump: -dr
+ 
+ .*: *file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 10000000 <[^>]*>:
+ 10000000:[ \t]+0700056e[ \t]+ldw \.D2T2 \*\+b14\(20\),b14
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/dsbt-index.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-index.s
diff -N ld/testsuite/ld-tic6x/dsbt-index.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt-index.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,3 ----
+ .text
+ .nocmp
+ 	ldw     .d2t2   *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
Index: ld/testsuite/ld-tic6x/dsbt-inrange.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-inrange.ld
diff -N ld/testsuite/ld-tic6x/dsbt-inrange.ld
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt-inrange.ld	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,68 ----
+ EXTERN (__c6xabi_DSBT_BASE);
+ SECTIONS
+ {
+   PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+   . = 0x8000;
+   .hash           : { *(.hash) }
+   .gnu.hash       : { *(.gnu.hash) }
+   .dynsym         : { *(.dynsym) }
+   .dynstr         : { *(.dynstr) }
+   .gnu.version    : { *(.gnu.version) }
+   .gnu.version_d  : { *(.gnu.version_d) }
+   .gnu.version_r  : { *(.gnu.version_r) }
+   .rel.init       : { *(.rel.init) }
+   .rela.init      : { *(.rela.init) }
+   .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+   .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+   .rel.fini       : { *(.rel.fini) }
+   .rela.fini      : { *(.rela.fini) }
+   .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+   .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+   .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+   .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+   .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+   .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+   .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+   .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+   .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+   .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+   .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+   .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+   .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+   .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.ctors      : { *(.rel.ctors) }
+   .rela.ctors     : { *(.rela.ctors) }
+   .rel.dtors      : { *(.rel.dtors) }
+   .rela.dtors     : { *(.rela.dtors) }
+   .rel.got        : { *(.rel.got) }
+   .rela.got       : { *(.rela.got) }
+   .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+   .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+   .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+   .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+   .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+   .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+   .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+   .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+   .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+   .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+   .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+   .dynamic        : { *(.dynamic) }
+   .data : { *(.data*) }
+   . = 0x10000000;
+   .rel.plt        : { *(.rel.plt) }
+   .rela.plt       : { *(.rela.plt) }
+   .plt            : { *(.plt) }
+   .text : { *(.text*) }
+   . = 0x20000000;
+   PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+   .dsbt   : { *(.dsbt) }
+   . = 0x2001fff4;
+   .got   : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+   .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+   .rodata   : { *(.rodata .rodata.*) }
+   .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+   .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+   .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+   /DISCARD/ : { *(*) }
+ }
Index: ld/testsuite/ld-tic6x/dsbt-overflow.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt-overflow.ld
diff -N ld/testsuite/ld-tic6x/dsbt-overflow.ld
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt-overflow.ld	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,68 ----
+ EXTERN (__c6xabi_DSBT_BASE);
+ SECTIONS
+ {
+   PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+   . = 0x8000;
+   .hash           : { *(.hash) }
+   .gnu.hash       : { *(.gnu.hash) }
+   .dynsym         : { *(.dynsym) }
+   .dynstr         : { *(.dynstr) }
+   .gnu.version    : { *(.gnu.version) }
+   .gnu.version_d  : { *(.gnu.version_d) }
+   .gnu.version_r  : { *(.gnu.version_r) }
+   .rel.init       : { *(.rel.init) }
+   .rela.init      : { *(.rela.init) }
+   .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+   .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+   .rel.fini       : { *(.rel.fini) }
+   .rela.fini      : { *(.rela.fini) }
+   .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+   .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+   .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+   .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+   .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+   .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+   .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+   .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+   .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+   .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+   .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+   .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+   .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+   .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.ctors      : { *(.rel.ctors) }
+   .rela.ctors     : { *(.rela.ctors) }
+   .rel.dtors      : { *(.rel.dtors) }
+   .rela.dtors     : { *(.rela.dtors) }
+   .rel.got        : { *(.rel.got) }
+   .rela.got       : { *(.rela.got) }
+   .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+   .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+   .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+   .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+   .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+   .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+   .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+   .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+   .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+   .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+   .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+   .dynamic        : { *(.dynamic) }
+   .data : { *(.data*) }
+   . = 0x10000000;
+   .rel.plt        : { *(.rel.plt) }
+   .rela.plt       : { *(.rela.plt) }
+   .plt            : { *(.plt) }
+   .text : { *(.text*) }
+   . = 0x20000000;
+   PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+   .dsbt   : { *(.dsbt) }
+   . = 0x2001fff8;
+   .got   : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+   .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+   .rodata   : { *(.rodata .rodata.*) }
+   .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+   .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+   .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+   /DISCARD/ : { *(*) }
+ }
Index: ld/testsuite/ld-tic6x/dsbt.ld
===================================================================
RCS file: ld/testsuite/ld-tic6x/dsbt.ld
diff -N ld/testsuite/ld-tic6x/dsbt.ld
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/dsbt.ld	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,65 ----
+ EXTERN (__c6xabi_DSBT_BASE);
+ SECTIONS
+ {
+   PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x0)); . = SEGMENT_START("text-segment", 0x0) + SIZEOF_HEADERS;
+   . = 0x8000;
+   .hash           : { *(.hash) }
+   .gnu.hash       : { *(.gnu.hash) }
+   .dynsym         : { *(.dynsym) }
+   .dynstr         : { *(.dynstr) }
+   .gnu.version    : { *(.gnu.version) }
+   .gnu.version_d  : { *(.gnu.version_d) }
+   .gnu.version_r  : { *(.gnu.version_r) }
+   .rel.init       : { *(.rel.init) }
+   .rela.init      : { *(.rela.init) }
+   .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+   .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+   .rel.fini       : { *(.rel.fini) }
+   .rela.fini      : { *(.rela.fini) }
+   .rel.const     : { *(.rel.const .rel.const.* .rel.gnu.linkonce.r.*) }
+   .rela.const    : { *(.rela.const .rela.const.* .rela.gnu.linkonce.r.*) }
+   .rel.rodata     : { *(.rel.rodata .rel.rodata.*) }
+   .rela.rodata    : { *(.rela.rodata .rela.rodata.*) }
+   .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
+   .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
+   .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+   .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+   .rel.fardata       : { *(.rel.fardata .rel.fardata.*) }
+   .rela.fardata      : { *(.rela.fardata .rela.fardata.*) }
+   .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+   .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+   .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+   .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+   .rel.ctors      : { *(.rel.ctors) }
+   .rela.ctors     : { *(.rela.ctors) }
+   .rel.dtors      : { *(.rel.dtors) }
+   .rela.dtors     : { *(.rela.dtors) }
+   .rel.got        : { *(.rel.got) }
+   .rela.got       : { *(.rela.got) }
+   .rel.neardata      : { *(.rel.neardata .rel.neardata.* .rel.gnu.linkonce.s.*) }
+   .rela.neardata     : { *(.rela.neardata .rela.neardata.* .rela.gnu.linkonce.s.*) }
+   .rel.bss       : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.sb.*) }
+   .rela.bss      : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.sb.*) }
+   .rel.neardata2     : { *(.rel.neardata2 .rel.neardata2.* .rel.gnu.linkonce.s2.*) }
+   .rela.neardata2    : { *(.rela.neardata2 .rela.neardata2.* .rela.gnu.linkonce.s2.*) }
+   .rel.bss2      : { *(.rel.bss2 .rel.bss2.* .rel.gnu.linkonce.sb2.*) }
+   .rela.bss2     : { *(.rela.bss2 .rela.bss2.* .rela.gnu.linkonce.sb2.*) }
+   .rel.far        : { *(.rel.far .rel.far.* .rel.gnu.linkonce.b.*) }
+   .rela.far       : { *(.rela.far .rela.far.* .rela.gnu.linkonce.b.*) }
+   .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
+   .dynamic        : { *(.dynamic) }
+   .data : { *(.data*) }
+   . = 0x10000000;
+   .rel.plt        : { *(.rel.plt) }
+   .rela.plt       : { *(.rela.plt) }
+   .plt            : { *(.plt) }
+   .text : { *(.text*) }
+   PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);
+   .got   : { *(.dsbt) *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+   .neardata : { *(.neardata .neardata.* .gnu.linkonce.s.*) }
+   .rodata   : { *(.rodata .rodata.*) }
+   .bss : { *(.dynbss) *(.bss .bss.* .gnu.linkonce.sb.*) *(.scommon) }
+   .far : { *(.dynfar) *(.far .far.* .gnu.linkonce.b.*) *(COMMON) }
+   .c6xabi.attributes 0 : { KEEP (*(.c6xabi.attributes)) KEEP (*(.gnu.attributes)) }
+   /DISCARD/ : { *(*) }
+ }
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-global-addend-1.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,5 ----
+ #name: C6X GOT relocations, addend
+ #as: -mlittle-endian -mdsbt
+ #ld: -melf32_tic6x_le -Tdsbt.ld --dsbt-index 4 -shared
+ #source: got-reloc-global-addend-1.s
+ #error: .*relocation R_C6000_SBR_GOT_U15_W with non-zero addend 4.*
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-global-addend-1.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ .text
+ .nocmp
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	ldw .d2t1 *+B14($GOT(a)+4), A1
+ 
+ 	.global a
+ 	.section	.neardata,"aw",@progbits
+ 	.align	2
+ 	.type	a, @object
+ 	.size	a, 4
+ a:
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-global-addend-2.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,5 ----
+ #name: C6X GOT relocations, addend
+ #as: -mlittle-endian -mdsbt
+ #ld: -melf32_tic6x_le -Tdsbt.ld --dsbt-index 4 -shared
+ #source: got-reloc-global-addend-2.s
+ #error: .*relocation R_C6000_SBR_GOT_L16_W with non-zero addend 4.*
Index: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s
diff -N ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-global-addend-2.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ .text
+ .nocmp
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	mvkl .s1 $DPR_GOT(a)+4, A1
+ 
+ 	.global a
+ 	.section	.neardata,"aw",@progbits
+ 	.align	2
+ 	.type	a, @object
+ 	.size	a, 4
+ a:
Index: ld/testsuite/ld-tic6x/got-reloc-global.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-global.s
diff -N ld/testsuite/ld-tic6x/got-reloc-global.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-global.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ .text
+ .nocmp
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	ldw .d2t1 *+B14($GOT(a)), A1
+ 
+ 	.global a
+ 	.section	.neardata,"aw",@progbits
+ 	.align	2
+ 	.type	a, @object
+ 	.size	a, 4
+ a:
Index: ld/testsuite/ld-tic6x/got-reloc-inrange.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-inrange.d
diff -N ld/testsuite/ld-tic6x/got-reloc-inrange.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-inrange.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,15 ----
+ #name: C6X GOT relocations, no overflow
+ #as: -mlittle-endian -mdsbt
+ #ld: -melf32_tic6x_le -Tdsbt-inrange.ld --dsbt-index 4 -shared
+ #source: got-reloc-global.s
+ #objdump: -dr
+ 
+ .*: *file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 10000000 <[^>]*>:
+ 10000000:[ \t]+0700046e[ \t]+ldw \.D2T2 \*\+b14\(16\),b14
+ 10000004:[ \t]+00ffff6c[ \t]+ldw \.D2T1 \*\+b14\(131068\),a1
+ [ \t]+...
Index: ld/testsuite/ld-tic6x/got-reloc-local-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-local-1.s
diff -N ld/testsuite/ld-tic6x/got-reloc-local-1.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-local-1.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,8 ----
+ .text
+ .nocmp
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	ldw .d2t1 *+B14($GOT(a)), A1
+ 
+ .data
+ a:
+ 	.word 0
Index: ld/testsuite/ld-tic6x/got-reloc-local-2.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-local-2.s
diff -N ld/testsuite/ld-tic6x/got-reloc-local-2.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-local-2.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,8 ----
+ .text
+ .nocmp
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	ldw .d2t1 *+B14($GOT(b)), A1
+ 
+ .data
+ b:
+ 	.word 0
Index: ld/testsuite/ld-tic6x/got-reloc-local-r.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-local-r.d
diff -N ld/testsuite/ld-tic6x/got-reloc-local-r.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-local-r.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,23 ----
+ #name: C6X GOT relocations, local symbols, -r
+ #as: -mlittle-endian
+ #ld: -r -melf32_tic6x_le
+ #source: got-reloc-local-1.s
+ #source: got-reloc-local-2.s
+ #objdump: -dr
+ 
+ .*: *file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 00000000 <\.text>:
+ [ 	]*0:[ 	]*0700006e[ 	 ]*ldw \.D2T2 \*\+b14\(0\),b14
+ [ 	]*0:[ 	]*R_C6000_DSBT_INDEX	__c6xabi_DSBT_BASE
+ [ 	]*4:[ 	]*0080006c[ 	]*ldw \.D2T1 \*\+b14\(0\),a1
+ [ 	]*4:[ 	]*R_C6000_SBR_GOT_U15_W	a
+ 	\.\.\.
+ [ 	]*20:[ 	]*0700006e[ 	]*ldw \.D2T2 \*\+b14\(0\),b14
+ [ 	]*20: R_C6000_DSBT_INDEX	__c6xabi_DSBT_BASE
+ [ 	]*24:[ 	]*0080006c[ 	]*ldw \.D2T1 \*\+b14\(0\),a1
+ [ 	]*24:[ 	]*R_C6000_SBR_GOT_U15_W	b
+ 	\.\.\.
Index: ld/testsuite/ld-tic6x/got-reloc-overflow.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/got-reloc-overflow.d
diff -N ld/testsuite/ld-tic6x/got-reloc-overflow.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/got-reloc-overflow.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,5 ----
+ #name: C6X GOT relocations, overflow
+ #as: -mlittle-endian -mdsbt
+ #ld: -melf32_tic6x_le -Tdsbt-overflow.ld --dsbt-index 4 -shared
+ #source: got-reloc-global.s
+ #error: .*relocation truncated to fit: R_C6000_SBR_GOT_U15_W.*
Index: ld/testsuite/ld-tic6x/shlib-1.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.dd
diff -N ld/testsuite/ld-tic6x/shlib-1.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,67 ----
+ 
+ tmpdir/libtest\.so:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000050 <sub@plt>:
+ 10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+ 10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+ 10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 1000005c:[ \t]*00002000[ \t]*nop 2
+ 10000060:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000064:[ \t]*00008000[ \t]*nop 5
+ 	\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000080 <sub1>:
+ 10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000084:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000088 <sub0>:
+ 10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+ 10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+ 1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+ 100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+ 100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 100000b0:[ \t]*00004000[ \t]*nop 3
+ 100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000b8:[ \t]*00008000[ \t]*nop 5
+ 100000bc:[ \t]*00000000[ \t]*nop 1
+ 
+ 100000c0 <sub>:
+ 100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 100000cc:[ \t]*00006000[ \t]*nop 4
+ 100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+ 100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+ 100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+ 100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+ 	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.rd
diff -N ld/testsuite/ld-tic6x/shlib-1.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,123 ----
+ There are 17 section headers, starting at offset 0x21c4:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+   \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+   \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+   \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+   \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+   \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+   \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+   \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+   \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+   \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+   \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+   \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is DYN \(Shared object file\)
+ Entry point 0x10000080
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+   DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x117c contains 16 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8118
+  0x00000006 \(SYMTAB\)                     0x8048
+  0x0000000a \(STRSZ\)                      37 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x2
+  0x00000003 \(PLTGOT\)                     0x1000010c
+  0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x8140
+  0x00000008 \(RELASZ\)                     84 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+ 1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+ 10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+ 1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+ 10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+ 
+ Symbol table '\.dynsym' contains 13 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+      3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+      4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+      5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+      6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+      4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+      6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+     14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+     15: 0000817c     0 OBJECT  LOCAL  DEFAULT  ABS _DYNAMIC
+     16: 10000130     4 OBJECT  LOCAL  DEFAULT   12 c
+     17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+     18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.s
diff -N ld/testsuite/ld-tic6x/shlib-1.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,44 ----
+ 	.text
+ 	.nocmp
+ 	.align	2
+ 	.hidden	sub1
+ 	.type	sub1, @function
+ sub1:
+ 		ret .s2 B3
+ 		nop	5
+ 
+ 	.global	sub0
+ 	.type	sub0, @function
+ sub0:
+ 		sub	.d2	B15, 16, B15
+ 		stw	.d2t2	B3, *+B15(12)
+ 		stw	.d2t2	B14, *+B15(16)
+ 		ldw	.d2t2	*+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 		call	.s2	(sub)
+ 		call	.s2	(sub0)
+ 		call	.s2	(sub1)
+ .L2:
+ 		ldw	.d2t2	*+B15(12), B3
+ 		ldw	.d2t2	*+B15(16), B14
+ 		addk	.s2	16, B15
+ 		nop	3
+ 		ret	.s2	B3
+ 		nop	5
+ 	.size	sub0, .-sub0
+ 
+ 	.global	a
+ 	.section	.neardata,"aw",@progbits
+ 	.align	2
+ 	.type	a, @object
+ 	.size	a, 4
+ a:
+ 	.long	sub0
+ 	.weak	g1
+ 	.global g2
+ 	.type	g2, @object
+ 	.size	g2, 4
+ g2:
+ 	.long	g1
+ 
+ 	.hidden c
+ 	.scomm	c,4,4
Index: ld/testsuite/ld-tic6x/shlib-1.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1.sd
diff -N ld/testsuite/ld-tic6x/shlib-1.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,7 ----
+ 
+ tmpdir/libtest\.so:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*10000100 00000000 00000000 00000000 00000000 .*
+ [ \t]*10000110 00000000 20000010 20000010 00000000 .*
+ [ \t]*10000120 30010010 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-1b.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1b.dd
diff -N ld/testsuite/ld-tic6x/shlib-1b.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1b.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,67 ----
+ 
+ tmpdir/libtestb\.so:     file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000050 <sub@plt>:
+ 10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+ 10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+ 10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 1000005c:[ \t]*00002000[ \t]*nop 2
+ 10000060:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000064:[ \t]*00008000[ \t]*nop 5
+ 	\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000080 <sub1>:
+ 10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000084:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000088 <sub0>:
+ 10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+ 10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+ 1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+ 100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+ 100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 100000b0:[ \t]*00004000[ \t]*nop 3
+ 100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000b8:[ \t]*00008000[ \t]*nop 5
+ 100000bc:[ \t]*00000000[ \t]*nop 1
+ 
+ 100000c0 <sub>:
+ 100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 100000cc:[ \t]*00006000[ \t]*nop 4
+ 100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+ 100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+ 100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+ 100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+ 	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1b.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1b.rd
diff -N ld/testsuite/ld-tic6x/shlib-1b.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1b.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,123 ----
+ There are 17 section headers, starting at offset 0x21c4:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+   \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+   \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+   \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+   \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+   \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+   \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+   \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+   \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+   \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+   \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+   \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is DYN \(Shared object file\)
+ Entry point 0x10000080
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+   DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x117c contains 16 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8118
+  0x00000006 \(SYMTAB\)                     0x8048
+  0x0000000a \(STRSZ\)                      37 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x2
+  0x00000003 \(PLTGOT\)                     0x1000010c
+  0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x8140
+  0x00000008 \(RELASZ\)                     84 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+ 1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+ 10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+ 1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+ 10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+ 
+ Symbol table '\.dynsym' contains 13 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+      3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+      4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+      5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+      6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+      4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+      6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+     14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+     15: 0000817c     0 OBJECT  LOCAL  DEFAULT  ABS _DYNAMIC
+     16: 10000130     4 OBJECT  LOCAL  DEFAULT   12 c
+     17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+     18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1b.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1b.sd
diff -N ld/testsuite/ld-tic6x/shlib-1b.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1b.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,7 ----
+ 
+ tmpdir/libtestb\.so:     file format elf32-tic6x-be
+ 
+ Contents of section \.got:
+ [ \t]*10000100 00000000 00000000 00000000 00000000 .*
+ [ \t]*10000110 00000000 10000020 10000020 00000000 .*
+ [ \t]*10000120 10000130 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-1r.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1r.dd
diff -N ld/testsuite/ld-tic6x/shlib-1r.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1r.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,67 ----
+ 
+ tmpdir/libtestr\.so:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000050 <sub@plt>:
+ 10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+ 10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+ 10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 1000005c:[ \t]*00002000[ \t]*nop 2
+ 10000060:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000064:[ \t]*00008000[ \t]*nop 5
+ 	\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000080 <sub1>:
+ 10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000084:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000088 <sub0>:
+ 10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+ 10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+ 1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+ 100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+ 100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 100000b0:[ \t]*00004000[ \t]*nop 3
+ 100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000b8:[ \t]*00008000[ \t]*nop 5
+ 100000bc:[ \t]*00000000[ \t]*nop 1
+ 
+ 100000c0 <sub>:
+ 100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 100000cc:[ \t]*00006000[ \t]*nop 4
+ 100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+ 100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+ 100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+ 100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+ 	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1r.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1r.rd
diff -N ld/testsuite/ld-tic6x/shlib-1r.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1r.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,123 ----
+ There are 17 section headers, starting at offset 0x21c4:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+   \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+   \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+   \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+   \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+   \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+   \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+   \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+   \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+   \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+   \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+   \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is DYN \(Shared object file\)
+ Entry point 0x10000080
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+   DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x117c contains 16 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8118
+  0x00000006 \(SYMTAB\)                     0x8048
+  0x0000000a \(STRSZ\)                      37 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x2
+  0x00000003 \(PLTGOT\)                     0x1000010c
+  0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x8140
+  0x00000008 \(RELASZ\)                     84 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+ 1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+ 10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+ 1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+ 10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+ 
+ Symbol table '\.dynsym' contains 13 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+      3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+      4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+      5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+      6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+      4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+      6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+     14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+     15: 0000817c     0 OBJECT  LOCAL  DEFAULT  ABS _DYNAMIC
+     16: 10000130     4 OBJECT  LOCAL  DEFAULT   12 c
+     17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+     18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1r.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1r.sd
diff -N ld/testsuite/ld-tic6x/shlib-1r.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1r.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,7 ----
+ 
+ tmpdir/libtestr\.so:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*10000100 00000000 00000000 00000000 00000000 .*
+ [ \t]*10000110 00000000 20000010 20000010 00000000 .*
+ [ \t]*10000120 30010010 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-1rb.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1rb.dd
diff -N ld/testsuite/ld-tic6x/shlib-1rb.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1rb.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,67 ----
+ 
+ tmpdir/libtestrb\.so:     file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000050 <sub@plt>:
+ 10000050:[ \t]*0100066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b2
+ 10000054:[ \t]*0000062a[ \t]*mvk \.S2 12,b0
+ 10000058:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 1000005c:[ \t]*00002000[ \t]*nop 2
+ 10000060:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000064:[ \t]*00008000[ \t]*nop 5
+ 	\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000080 <sub1>:
+ 10000080:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000084:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000088 <sub0>:
+ 10000088:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000008c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000090:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000094:[ \t]*0700026e[ \t]*ldw \.D2T2 \*\+b14\(8\),b14
+ 10000098:[ \t]*0ffffa12[ \t]*b \.S2 10000050 <sub@plt>
+ 1000009c:[ \t]*0ffff712[ \t]*b \.S2 10000038 <sub0@plt>
+ 100000a0:[ \t]*0ffffc12[ \t]*b \.S2 10000080 <sub1>
+ 100000a4:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 100000a8:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 100000ac:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 100000b0:[ \t]*00004000[ \t]*nop 3
+ 100000b4:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000b8:[ \t]*00008000[ \t]*nop 5
+ 100000bc:[ \t]*00000000[ \t]*nop 1
+ 
+ 100000c0 <sub>:
+ 100000c0:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 100000c4:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 100000c8:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 100000cc:[ \t]*00006000[ \t]*nop 4
+ 100000d0:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 100000d4:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 100000d8:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 100000dc:[ \t]*000c0362[ \t]*b \.S2 b3
+ 100000e0:[ \t]*0300096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b6
+ 100000e4:[ \t]*0380076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b7
+ 100000e8:[ \t]*0400086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b8
+ 100000ec:[ \t]*04800c6e[ \t]*ldw \.D2T2 \*\+b14\(48\),b9
+ 	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-1rb.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1rb.rd
diff -N ld/testsuite/ld-tic6x/shlib-1rb.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1rb.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,123 ----
+ There are 17 section headers, starting at offset 0x21c4:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            00008140 001140 000024 0c   A  2  10  4
+   \[ 5\] \.rela\.neardata    RELA            00008164 001164 000018 0c   A  2  11  4
+   \[ 6\] \.dynamic          DYNAMIC         0000817c 00117c 0000a8 08  WA  3   0  4
+   \[ 7\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   8  4
+   \[ 8\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+   \[ 9\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+   \[10\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+   \[11\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+   \[12\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+   \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+   \[14\] \.shstrtab         STRTAB          00000000 002149 00007b 00      0   0  1
+   \[15\] \.symtab           SYMTAB          00000000 00246c 0001a0 10     16  19  4
+   \[16\] \.strtab           STRTAB          00000000 00260c 000059 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is DYN \(Shared object file\)
+ Entry point 0x10000080
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00224 0x00224 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+   DYNAMIC        0x00117c 0x0000817c 0x0000817c 0x000a8 0x000a8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x117c contains 16 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8118
+  0x00000006 \(SYMTAB\)                     0x8048
+  0x0000000a \(STRSZ\)                      37 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x2
+  0x00000003 \(PLTGOT\)                     0x1000010c
+  0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x8140
+  0x00000008 \(RELASZ\)                     84 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x1140 contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+ 1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+ 10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1164 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+ 1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+ 10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+ 
+ Symbol table '\.dynsym' contains 13 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      2: 10000080     0 SECTION LOCAL  DEFAULT    9 
+      3: 10000100     0 SECTION LOCAL  DEFAULT   10 
+      4: 10000128     0 SECTION LOCAL  DEFAULT   11 
+      5: 10000130     0 SECTION LOCAL  DEFAULT   12 
+      6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     10: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     11: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     12: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+      4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008164     0 SECTION LOCAL  DEFAULT    5 
+      6: 0000817c     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000080     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000100     0 SECTION LOCAL  DEFAULT   10 
+     11: 10000128     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000130     0 SECTION LOCAL  DEFAULT   12 
+     13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+     14: 10000080     0 FUNC    LOCAL  HIDDEN     9 sub1
+     15: 0000817c     0 OBJECT  LOCAL  DEFAULT  ABS _DYNAMIC
+     16: 10000130     4 OBJECT  LOCAL  DEFAULT   12 c
+     17: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+     18: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     19: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     22: 1000012c     4 OBJECT  GLOBAL DEFAULT   11 g2
+     23: 10000088    52 FUNC    GLOBAL DEFAULT    9 sub0
+     24: 10000128     4 OBJECT  GLOBAL DEFAULT   11 a
+     25: 100000c0    52 FUNC    GLOBAL DEFAULT    9 sub
Index: ld/testsuite/ld-tic6x/shlib-1rb.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-1rb.sd
diff -N ld/testsuite/ld-tic6x/shlib-1rb.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-1rb.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,7 ----
+ 
+ tmpdir/libtestrb\.so:     file format elf32-tic6x-be
+ 
+ Contents of section \.got:
+ [ \t]*10000100 00000000 00000000 00000000 00000000 .*
+ [ \t]*10000110 00000000 10000020 10000020 00000000 .*
+ [ \t]*10000120 10000130 00000000                   .*
Index: ld/testsuite/ld-tic6x/shlib-2.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-2.s
diff -N ld/testsuite/ld-tic6x/shlib-2.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-2.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,23 ----
+ 	.weak a
+ 	.weak b
+ 
+ 	.text
+ 	.nocmp
+ 	.align	2
+ 	.global	sub
+ 	.type	sub, @function
+ sub:
+ 		sub	.d2	B15, 16, B15
+ 		stw	.d2t1	A4, *+B15(12)
+ 		ldw	.d2t1	*+B15(12), A0
+ 		nop	4
+ 		add	.d1	A0, 10, A0
+ 		mv	.d1	A0, A4
+ 		add	.d2	B15, 16, B15
+ 		ret	.s2	B3
+ 		ldw .d2t2 *+B14($GOT(a)), B6
+ 		ldw .d2t2 *+B14($GOT(b)), B7
+ 		ldw .d2t2 *+B14($GOT(c)), B8
+ 		ldw .d2t2 *+B14(c), B9
+ 		nop	1
+ 	.size	sub, .-sub
Index: ld/testsuite/ld-tic6x/shlib-app-1.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,40 ----
+ 
+ tmpdir/shlib-dynapp-1:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ [ \t]*\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000060 <fish>:
+ 10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+ 10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+ 1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+ 10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+ 10000074:[ \t]*02000b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b4
+ 10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+ 1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+ 10000084:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+ 10000088:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+ 1000008c:[ \t]*02800328[ \t]*mvk \.S1 6,a5
+ 10000090:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,13 ----
+ 
+ tmpdir/shlib-dynapp-1:     file format elf32-tic6x-le
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000b8 R_C6000_ABS32     b
+ 100000bc R_C6000_ABS32     a
+ 100000c4 R_C6000_ABS32     g1
+ 100000c8 R_C6000_ABS32     g2
+ 100000cc R_C6000_COPY      a
+ 100000b4 R_C6000_JUMP_SLOT  sub0
+ 
+ 
Index: ld/testsuite/ld-tic6x/shlib-app-1.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,127 ----
+ There are 18 section headers, starting at offset 0x2168:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000044 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008104 001104 000035 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            0000813c 00113c 000018 0c   A  2  11  4
+   \[ 5\] \.rela\.neardata    RELA            00008154 001154 000018 0c   A  2  12  4
+   \[ 6\] \.rela\.bss         RELA            0000816c 00116c 00000c 0c   A  2  13  4
+   \[ 7\] \.dynamic          DYNAMIC         00008178 001178 0000b8 08  WA  3   0  4
+   \[ 8\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   9  4
+   \[ 9\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+   \[10\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+   \[11\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+   \[12\] \.neardata         PROGBITS        100000c0 0020c0 00000c 00  WA  0   0  4
+   \[13\] \.bss              NOBITS          100000cc 0020cc 000004 00  WA  0   0  4
+   \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020cc 000019 00      0   0  1
+   \[15\] \.shstrtab         STRTAB          00000000 0020e5 000080 00      0   0  1
+   \[16\] \.symtab           SYMTAB          00000000 002438 0001a0 10     17  20  4
+   \[17\] \.strtab           STRTAB          00000000 0025d8 000055 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000060
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00230 0x00230 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000cc 0x000d0 RWE 0x1000
+   DYNAMIC        0x001178 0x00008178 0x00008178 0x000b8 0x000b8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.rela\.bss \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1178 contains 18 entries:
+   Tag        Type                         Name/Value
+  0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtest\.so\]
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8104
+  0x00000006 \(SYMTAB\)                     0x8044
+  0x0000000a \(STRSZ\)                      53 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000003 \(PLTGOT\)                     0x100000ac
+  0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x813c
+  0x00000008 \(RELASZ\)                     72 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x113c contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+ 100000bc  00000b01 R_C6000_ABS32          100000cc   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1154 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000c4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 100000c8  00000901 R_C6000_ABS32          00000000   g2 \+ 0
+ 
+ Relocation section '\.rela\.bss' at offset 0x116c contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000cc  00000b1a R_C6000_COPY           100000cc   a \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b4  00000a1b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+ 
+ Symbol table '\.dynsym' contains 12 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    9 
+      2: 10000060     0 SECTION LOCAL  DEFAULT   10 
+      3: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+      4: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+      5: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+      6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+     10: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     11: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008044     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008104     0 SECTION LOCAL  DEFAULT    3 
+      4: 0000813c     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008154     0 SECTION LOCAL  DEFAULT    5 
+      6: 0000816c     0 SECTION LOCAL  DEFAULT    6 
+      7: 00008178     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000000     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000020     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000060     0 SECTION LOCAL  DEFAULT   10 
+     11: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+     12: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+     13: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+     14: 00000000     0 SECTION LOCAL  DEFAULT   14 
+     15: 10000060     0 NOTYPE  LOCAL  DEFAULT   10 fish
+     16: 100000c4     8 OBJECT  LOCAL  DEFAULT   12 w
+     17: 00008178     0 OBJECT  LOCAL  DEFAULT    7 _DYNAMIC
+     18: 100000ac     0 OBJECT  LOCAL  DEFAULT   11 _GLOBAL_OFFSET_TABLE_
+     19: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     20: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+     21: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     22: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     23: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+     24: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     25: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
Index: ld/testsuite/ld-tic6x/shlib-app-1.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.s
diff -N ld/testsuite/ld-tic6x/shlib-app-1.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,31 ----
+ 	.global a
+ 	.text
+ 	.nocmp
+ fish:
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	callp .s2 sub0, B3
+ 	b .s2 sub0
+ 	callp .s2 fish, B3
+ 	b .s2 fish
+ 	ldw .d2t2 *+B14(a), B4
+ 	ldw .d2t2 *+B14(b), B5
+ 	ldw .d2t2 *+B14($GOT(a)), B6
+ 	ldw .d2t2 *+B14($GOT(b)), B6
+ 	mvkl .s1 $DPR_GOT(a), A4
+ 	mvkh .s1 $DPR_GOT(a), A4
+ 	mvkl .s1 $DPR_GOT(b), A5
+ 	mvkh .s1 $DPR_GOT(b), A5
+ 	.global	b
+ 	.section	.neardata,"aw",@progbits
+ 	.align	2
+ 	.type	b, @object
+ 	.size	b, 4
+ b:
+ 	.long	0x12345678
+ 	.weak	g1
+ 	.weak	g2
+ 	.type	w, @object
+ 	.size	w, 8
+ w:
+ 	.long	g1
+ 	.long	g2
Index: ld/testsuite/ld-tic6x/shlib-app-1.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/shlib-dynapp-1:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000b0 00000000 20000010 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-app-1b.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1b.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,40 ----
+ 
+ tmpdir/shlib-dynapp-1b:     file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ [ \t]*\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000060 <fish>:
+ 10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+ 10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+ 1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+ 10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+ 10000074:[ \t]*02000b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b4
+ 10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+ 1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+ 10000084:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+ 10000088:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+ 1000008c:[ \t]*02800328[ \t]*mvk \.S1 6,a5
+ 10000090:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1b.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1b.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,13 ----
+ 
+ tmpdir/shlib-dynapp-1b:     file format elf32-tic6x-be
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000b8 R_C6000_ABS32     b
+ 100000bc R_C6000_ABS32     a
+ 100000c4 R_C6000_ABS32     g1
+ 100000c8 R_C6000_ABS32     g2
+ 100000cc R_C6000_COPY      a
+ 100000b4 R_C6000_JUMP_SLOT  sub0
+ 
+ 
Index: ld/testsuite/ld-tic6x/shlib-app-1b.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1b.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,127 ----
+ There are 18 section headers, starting at offset 0x2168:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000044 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008044 001044 0000c0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008104 001104 000036 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            0000813c 00113c 000018 0c   A  2  11  4
+   \[ 5\] \.rela\.neardata    RELA            00008154 001154 000018 0c   A  2  12  4
+   \[ 6\] \.rela\.bss         RELA            0000816c 00116c 00000c 0c   A  2  13  4
+   \[ 7\] \.dynamic          DYNAMIC         00008178 001178 0000b8 08  WA  3   0  4
+   \[ 8\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   9  4
+   \[ 9\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+   \[10\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+   \[11\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+   \[12\] \.neardata         PROGBITS        100000c0 0020c0 00000c 00  WA  0   0  4
+   \[13\] \.bss              NOBITS          100000cc 0020cc 000004 00  WA  0   0  4
+   \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020cc 000019 00      0   0  1
+   \[15\] \.shstrtab         STRTAB          00000000 0020e5 000080 00      0   0  1
+   \[16\] \.symtab           SYMTAB          00000000 002438 0001a0 10     17  20  4
+   \[17\] \.strtab           STRTAB          00000000 0025d8 000055 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000060
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00230 0x00230 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000cc 0x000d0 RWE 0x1000
+   DYNAMIC        0x001178 0x00008178 0x00008178 0x000b8 0x000b8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.rela\.bss \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1178 contains 18 entries:
+   Tag        Type                         Name/Value
+  0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtestb\.so\]
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8104
+  0x00000006 \(SYMTAB\)                     0x8044
+  0x0000000a \(STRSZ\)                      54 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000003 \(PLTGOT\)                     0x100000ac
+  0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x813c
+  0x00000008 \(RELASZ\)                     72 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x113c contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+ 100000bc  00000b01 R_C6000_ABS32          100000cc   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1154 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000c4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 100000c8  00000901 R_C6000_ABS32          00000000   g2 \+ 0
+ 
+ Relocation section '\.rela\.bss' at offset 0x116c contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000cc  00000b1a R_C6000_COPY           100000cc   a \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b4  00000a1b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+ 
+ Symbol table '\.dynsym' contains 12 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    9 
+      2: 10000060     0 SECTION LOCAL  DEFAULT   10 
+      3: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+      4: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+      5: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+      6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+     10: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     11: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008044     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008104     0 SECTION LOCAL  DEFAULT    3 
+      4: 0000813c     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008154     0 SECTION LOCAL  DEFAULT    5 
+      6: 0000816c     0 SECTION LOCAL  DEFAULT    6 
+      7: 00008178     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000000     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000020     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000060     0 SECTION LOCAL  DEFAULT   10 
+     11: 100000a0     0 SECTION LOCAL  DEFAULT   11 
+     12: 100000c0     0 SECTION LOCAL  DEFAULT   12 
+     13: 100000cc     0 SECTION LOCAL  DEFAULT   13 
+     14: 00000000     0 SECTION LOCAL  DEFAULT   14 
+     15: 10000060     0 NOTYPE  LOCAL  DEFAULT   10 fish
+     16: 100000c4     8 OBJECT  LOCAL  DEFAULT   12 w
+     17: 00008178     0 OBJECT  LOCAL  DEFAULT    7 _DYNAMIC
+     18: 100000ac     0 OBJECT  LOCAL  DEFAULT   11 _GLOBAL_OFFSET_TABLE_
+     19: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     20: 100000c0     4 OBJECT  GLOBAL DEFAULT   12 b
+     21: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     22: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     23: 00000000     0 OBJECT  WEAK   DEFAULT  UND g2
+     24: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     25: 100000cc     4 OBJECT  GLOBAL DEFAULT   13 a
Index: ld/testsuite/ld-tic6x/shlib-app-1b.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1b.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1b.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1b.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/shlib-dynapp-1b:     file format elf32-tic6x-be
+ 
+ Contents of section \.got:
+ [ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000b0 00000000 10000020 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-app-1r.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1r.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,36 ----
+ 
+ tmpdir/shlib-dynapp-1r:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ [ \t]*\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000060 <fish>:
+ 10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+ 10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+ 1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+ 10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+ 10000074:[ \t]*0200096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b4
+ 10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+ 1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1r.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1r.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ 
+ tmpdir/shlib-dynapp-1r:     file format elf32-tic6x-le
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000b8 R_C6000_ABS32     b
+ 100000bc R_C6000_ABS32     a
+ 100000c4 R_C6000_COPY      a
+ 100000b4 R_C6000_JUMP_SLOT  sub0
+ 
+ 
Index: ld/testsuite/ld-tic6x/shlib-app-1r.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1r.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,115 ----
+ There are 17 section headers, starting at offset 0x2158:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 000030 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            0000810c 00110c 000018 0c   A  2  10  4
+   \[ 5\] \.rela\.bss         RELA            00008124 001124 00000c 0c   A  2  12  4
+   \[ 6\] \.dynamic          DYNAMIC         00008130 001130 0000b8 08  WA  3   0  4
+   \[ 7\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   8  4
+   \[ 8\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+   \[ 9\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+   \[10\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+   \[11\] \.neardata         PROGBITS        100000c0 0020c0 000004 00  WA  0   0  4
+   \[12\] \.bss              NOBITS          100000c4 0020c4 000004 00  WA  0   0  4
+   \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020c4 000019 00      0   0  1
+   \[14\] \.shstrtab         STRTAB          00000000 0020dd 00007b 00      0   0  1
+   \[15\] \.symtab           SYMTAB          00000000 002400 000160 10     16  18  4
+   \[16\] \.strtab           STRTAB          00000000 002560 00004d 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000060
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x001e8 0x001e8 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000c4 0x000c8 RWE 0x1000
+   DYNAMIC        0x001130 0x00008130 0x00008130 0x000b8 0x000b8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.bss \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1130 contains 18 entries:
+   Tag        Type                         Name/Value
+  0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtestr\.so\]
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x80dc
+  0x00000006 \(SYMTAB\)                     0x803c
+  0x0000000a \(STRSZ\)                      48 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000003 \(PLTGOT\)                     0x100000ac
+  0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x810c
+  0x00000008 \(RELASZ\)                     48 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x110c contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+ 100000bc  00000901 R_C6000_ABS32          100000c4   a \+ 0
+ 
+ Relocation section '\.rela\.bss' at offset 0x1124 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000c4  0000091a R_C6000_COPY           100000c4   a \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b4  0000081b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+ 
+ Symbol table '\.dynsym' contains 10 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      2: 10000060     0 SECTION LOCAL  DEFAULT    9 
+      3: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+      4: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+      5: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+      6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+      8: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+      9: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
+ 
+ Symbol table '\.symtab' contains 22 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+      3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+      4: 0000810c     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008124     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008130     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000060     0 SECTION LOCAL  DEFAULT    9 
+     10: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+     11: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+     12: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+     13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+     14: 10000060     0 NOTYPE  LOCAL  DEFAULT    9 fish
+     15: 00008130     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+     16: 100000ac     0 OBJECT  LOCAL  DEFAULT   10 _GLOBAL_OFFSET_TABLE_
+     17: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     18: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+     19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     20: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     21: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
Index: ld/testsuite/ld-tic6x/shlib-app-1r.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.s
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1r.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,19 ----
+ 	.global a
+ .text
+ fish:
+ 	ldw .d2t2 *+B14($DSBT_index(__c6xabi_DSBT_BASE)), B14
+ 	callp .s2 sub0, B3
+ 	b .s2 sub0
+ 	callp .s2 fish, B3
+ 	b .s2 fish
+ 	ldw .d2t2 *+B14(a), B4
+ 	ldw .d2t2 *+B14(b), B5
+ 	ldw .d2t2 *+B14($GOT(a)), B6
+ 	ldw .d2t2 *+B14($GOT(b)), B6
+ 	.global	b
+ 	.section	.neardata,"aw",@progbits
+ 	.align	2
+ 	.type	b, @object
+ 	.size	b, 4
+ b:
+ 	.long	0x12345678
Index: ld/testsuite/ld-tic6x/shlib-app-1r.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1r.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1r.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1r.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/shlib-dynapp-1r:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000b0 00000000 20000010 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.dd
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1rb.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,36 ----
+ 
+ tmpdir/shlib-dynapp-1rb:     file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:[ \t]*0100036e[ \t]*ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:[ \t]*0080046e[ \t]*ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:[ \t]*00004000[ \t]*nop 3
+ 1000002c:[ \t]*00080362[ \t]*b \.S2 b2
+ 10000030:[ \t]*00008000[ \t]*nop 5
+ 10000034:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:[ \t]*0100056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:[ \t]*0000002a[ \t]*mvk \.S2 0,b0
+ 10000040:[ \t]*0000006a[ \t]*mvkh \.S2 0,b0
+ 10000044:[ \t]*00002000[ \t]*nop 2
+ 10000048:[ \t]*00080362[ \t]*b \.S2 b2
+ 1000004c:[ \t]*00008000[ \t]*nop 5
+ [ \t]*\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000060 <fish>:
+ 10000060:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000064:[ \t]*1ffffb12[ \t]*callp \.S2 10000038 <sub0@plt>,b3
+ 10000068:[ \t]*0ffffb12[ \t]*b \.S2 10000038 <sub0@plt>
+ 1000006c:[ \t]*10000012[ \t]*callp \.S2 10000060 <fish>,b3
+ 10000070:[ \t]*00000012[ \t]*b \.S2 10000060 <fish>
+ 10000074:[ \t]*0200096e[ \t]*ldw \.D2T2 \*\+b14\(36\),b4
+ 10000078:[ \t]*0280086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b5
+ 1000007c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000080:[ \t]*0300066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b6
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.od
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1rb.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ 
+ tmpdir/shlib-dynapp-1rb:     file format elf32-tic6x-be
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000b8 R_C6000_ABS32     b
+ 100000bc R_C6000_ABS32     a
+ 100000c4 R_C6000_COPY      a
+ 100000b4 R_C6000_JUMP_SLOT  sub0
+ 
+ 
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.rd
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1rb.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,115 ----
+ There are 17 section headers, starting at offset 0x2158:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 000031 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            00008110 001110 000018 0c   A  2  10  4
+   \[ 5\] \.rela\.bss         RELA            00008128 001128 00000c 0c   A  2  12  4
+   \[ 6\] \.dynamic          DYNAMIC         00008134 001134 0000b8 08  WA  3   0  4
+   \[ 7\] \.rela\.plt         RELA            10000000 002000 00000c 0c   A  2   8  4
+   \[ 8\] \.plt              PROGBITS        10000020 002020 000040 18  AX  0   0 32
+   \[ 9\] \.text             PROGBITS        10000060 002060 000040 00  AX  0   0 32
+   \[10\] \.got              PROGBITS        100000a0 0020a0 000020 00  WA  0   0  4
+   \[11\] \.neardata         PROGBITS        100000c0 0020c0 000004 00  WA  0   0  4
+   \[12\] \.bss              NOBITS          100000c4 0020c4 000004 00  WA  0   0  4
+   \[13\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020c4 000019 00      0   0  1
+   \[14\] \.shstrtab         STRTAB          00000000 0020dd 00007b 00      0   0  1
+   \[15\] \.symtab           SYMTAB          00000000 002400 000160 10     16  18  4
+   \[16\] \.strtab           STRTAB          00000000 002560 00004d 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000060
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x001ec 0x001ec RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000c4 0x000c8 RWE 0x1000
+   DYNAMIC        0x001134 0x00008134 0x00008134 0x000b8 0x000b8 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.bss \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1134 contains 18 entries:
+   Tag        Type                         Name/Value
+  0x00000001 \(NEEDED\)                     Shared library: \[tmpdir/libtestrb\.so\]
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x80dc
+  0x00000006 \(SYMTAB\)                     0x803c
+  0x0000000a \(STRSZ\)                      49 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000a0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000003 \(PLTGOT\)                     0x100000ac
+  0x00000002 \(PLTRELSZ\)                   12 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x8110
+  0x00000008 \(RELASZ\)                     48 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x1110 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b8  00000701 R_C6000_ABS32          100000c0   b \+ 0
+ 100000bc  00000901 R_C6000_ABS32          100000c4   a \+ 0
+ 
+ Relocation section '\.rela\.bss' at offset 0x1128 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000c4  0000091a R_C6000_COPY           100000c4   a \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000b4  0000081b R_C6000_JUMP_SLOT      00000000   sub0 \+ 0
+ 
+ Symbol table '\.dynsym' contains 10 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      2: 10000060     0 SECTION LOCAL  DEFAULT    9 
+      3: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+      4: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+      5: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+      6: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+      8: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+      9: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
+ 
+ Symbol table '\.symtab' contains 22 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+      3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+      4: 00008110     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008128     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008134     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000020     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000060     0 SECTION LOCAL  DEFAULT    9 
+     10: 100000a0     0 SECTION LOCAL  DEFAULT   10 
+     11: 100000c0     0 SECTION LOCAL  DEFAULT   11 
+     12: 100000c4     0 SECTION LOCAL  DEFAULT   12 
+     13: 00000000     0 SECTION LOCAL  DEFAULT   13 
+     14: 10000060     0 NOTYPE  LOCAL  DEFAULT    9 fish
+     15: 00008134     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+     16: 100000ac     0 OBJECT  LOCAL  DEFAULT   10 _GLOBAL_OFFSET_TABLE_
+     17: 100000a0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     18: 100000c0     4 OBJECT  GLOBAL DEFAULT   11 b
+     19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     20: 00000000     0 FUNC    GLOBAL DEFAULT  UND sub0
+     21: 100000c4     4 OBJECT  GLOBAL DEFAULT   12 a
Index: ld/testsuite/ld-tic6x/shlib-app-1rb.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-app-1rb.sd
diff -N ld/testsuite/ld-tic6x/shlib-app-1rb.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-app-1rb.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/shlib-dynapp-1rb:     file format elf32-tic6x-be
+ 
+ Contents of section \.got:
+ [ \t]*100000a0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000b0 00000000 10000020 00000000 00000000 .*
Index: ld/testsuite/ld-tic6x/shlib-noindex.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-noindex.dd
diff -N ld/testsuite/ld-tic6x/shlib-noindex.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-noindex.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,67 ----
+ 
+ tmpdir/libtestn\.so:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.plt:
+ 
+ 10000020 <sub0@plt-0x18>:
+ 10000020:	0100036e 	ldw \.D2T2 \*\+b14\(12\),b2
+ 10000024:	0080046e 	ldw \.D2T2 \*\+b14\(16\),b1
+ 10000028:	00004000 	nop 3
+ 1000002c:	00080362 	b \.S2 b2
+ 10000030:	00008000 	nop 5
+ 10000034:	00000000 	nop 1
+ 
+ 10000038 <sub0@plt>:
+ 10000038:	0100056e 	ldw \.D2T2 \*\+b14\(20\),b2
+ 1000003c:	0000002a 	mvk \.S2 0,b0
+ 10000040:	0000006a 	mvkh \.S2 0,b0
+ 10000044:	00002000 	nop 2
+ 10000048:	00080362 	b \.S2 b2
+ 1000004c:	00008000 	nop 5
+ 
+ 10000050 <sub@plt>:
+ 10000050:	0100066e 	ldw \.D2T2 \*\+b14\(24\),b2
+ 10000054:	0000062a 	mvk \.S2 12,b0
+ 10000058:	0000006a 	mvkh \.S2 0,b0
+ 1000005c:	00002000 	nop 2
+ 10000060:	00080362 	b \.S2 b2
+ 10000064:	00008000 	nop 5
+ 	\.\.\.
+ 
+ Disassembly of section \.text:
+ 
+ 10000080 <sub1>:
+ 10000080:	000c0362 	b \.S2 b3
+ 10000084:	00008000 	nop 5
+ 
+ 10000088 <sub0>:
+ 10000088:	07be09c2 	sub \.D2 b15,16,b15
+ 1000008c:	01bc62f6 	stw \.D2T2 b3,\*\+b15\(12\)
+ 10000090:	073c82f6 	stw \.D2T2 b14,\*\+b15\(16\)
+ 10000094:	0700006e 	ldw \.D2T2 \*\+b14\(0\),b14
+ 10000098:	0ffffa12 	b \.S2 10000050 <sub@plt>
+ 1000009c:	0ffff712 	b \.S2 10000038 <sub0@plt>
+ 100000a0:	0ffffc12 	b \.S2 10000080 <sub1>
+ 100000a4:	01bc62e6 	ldw \.D2T2 \*\+b15\(12\),b3
+ 100000a8:	073c82e6 	ldw \.D2T2 \*\+b15\(16\),b14
+ 100000ac:	07800852 	addk \.S2 16,b15
+ 100000b0:	00004000 	nop 3
+ 100000b4:	000c0362 	b \.S2 b3
+ 100000b8:	00008000 	nop 5
+ 100000bc:	00000000 	nop 1
+ 
+ 100000c0 <sub>:
+ 100000c0:	07be09c2 	sub \.D2 b15,16,b15
+ 100000c4:	023c62f4 	stw \.D2T1 a4,\*\+b15\(12\)
+ 100000c8:	003c62e4 	ldw \.D2T1 \*\+b15\(12\),a0
+ 100000cc:	00006000 	nop 4
+ 100000d0:	00014940 	add \.D1 a0,10,a0
+ 100000d4:	020008f0 	or \.D1 0,a0,a4
+ 100000d8:	07be0942 	add \.D2 b15,16,b15
+ 100000dc:	000c0362 	b \.S2 b3
+ 100000e0:	0300096e 	ldw \.D2T2 \*\+b14\(36\),b6
+ 100000e4:	0380076e 	ldw \.D2T2 \*\+b14\(28\),b7
+ 100000e8:	0400086e 	ldw \.D2T2 \*\+b14\(32\),b8
+ 100000ec:	04800c6e 	ldw \.D2T2 \*\+b14\(48\),b9
+ 	\.\.\.
Index: ld/testsuite/ld-tic6x/shlib-noindex.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-noindex.rd
diff -N ld/testsuite/ld-tic6x/shlib-noindex.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-noindex.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,130 ----
+ There are 18 section headers, starting at offset 0x21cc:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 000048 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          00008048 001048 0000d0 10   A  3   6  4
+   \[ 3\] \.dynstr           STRTAB          00008118 001118 000025 00   A  0   0  1
+   \[ 4\] \.rela\.text        RELA            00008140 001140 00000c 0c   A  2  10  4
+   \[ 5\] \.rela\.got         RELA            0000814c 00114c 000024 0c   A  2  11  4
+   \[ 6\] \.rela\.neardata    RELA            00008170 001170 000018 0c   A  2  12  4
+   \[ 7\] \.dynamic          DYNAMIC         00008188 001188 0000b0 08  WA  3   0  4
+   \[ 8\] \.rela\.plt         RELA            10000000 002000 000018 0c   A  2   9  4
+   \[ 9\] \.plt              PROGBITS        10000020 002020 000060 18  AX  0   0 32
+   \[10\] \.text             PROGBITS        10000080 002080 000080 00  AX  0   0 32
+   \[11\] \.got              PROGBITS        10000100 002100 000028 00  WA  0   0  4
+   \[12\] \.neardata         PROGBITS        10000128 002128 000008 00  WA  0   0  4
+   \[13\] \.bss              NOBITS          10000130 002130 000004 00  WA  0   0  4
+   \[14\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 002130 000019 00      0   0  1
+   \[15\] \.shstrtab         STRTAB          00000000 002149 000080 00      0   0  1
+   \[16\] \.symtab           SYMTAB          00000000 00249c 0001b0 10     17  20  4
+   \[17\] \.strtab           STRTAB          00000000 00264c 000059 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is DYN \(Shared object file\)
+ Entry point 0x10000080
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x00238 0x00238 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x00130 0x00134 RWE 0x1000
+   DYNAMIC        0x001188 0x00008188 0x00008188 0x000b0 0x000b0 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.text \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.rela\.plt \.plt \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1188 contains 17 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x8118
+  0x00000006 \(SYMTAB\)                     0x8048
+  0x0000000a \(STRSZ\)                      37 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x70000000 \(C6000_DSBT_BASE\)            0x10000100
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000003 \(PLTGOT\)                     0x1000010c
+  0x00000002 \(PLTRELSZ\)                   24 \(bytes\)
+  0x00000014 \(PLTREL\)                     RELA
+  0x00000017 \(JMPREL\)                     0x10000000
+  0x00000007 \(RELA\)                       0x8140
+  0x00000008 \(RELASZ\)                     96 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000016 \(TEXTREL\)                    0x0
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.text' at offset 0x1140 contains 1 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000094  00000618 R_C6000_DSBT_INDEX     10000100   __c6xabi_DSBT_BASE \+ 0
+ 
+ Relocation section '\.rela\.got' at offset 0x114c contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000120  00000501 R_C6000_ABS32          10000130   \.bss \+ 0
+ 1000011c  00000701 R_C6000_ABS32          00000000   b \+ 0
+ 10000124  00000b01 R_C6000_ABS32          10000128   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1170 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000128  00000a01 R_C6000_ABS32          10000088   sub0 \+ 0
+ 1000012c  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Relocation section '\.rela\.plt' at offset 0x2000 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 10000114  00000a1b R_C6000_JUMP_SLOT      10000088   sub0 \+ 0
+ 10000118  00000c1b R_C6000_JUMP_SLOT      100000c0   sub \+ 0
+ 
+ Symbol table '\.dynsym' contains 13 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000020     0 SECTION LOCAL  DEFAULT    9 
+      2: 10000080     0 SECTION LOCAL  DEFAULT   10 
+      3: 10000100     0 SECTION LOCAL  DEFAULT   11 
+      4: 10000128     0 SECTION LOCAL  DEFAULT   12 
+      5: 10000130     0 SECTION LOCAL  DEFAULT   13 
+      6: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 1000012c     4 OBJECT  GLOBAL DEFAULT   12 g2
+     10: 10000088    52 FUNC    GLOBAL DEFAULT   10 sub0
+     11: 10000128     4 OBJECT  GLOBAL DEFAULT   12 a
+     12: 100000c0    52 FUNC    GLOBAL DEFAULT   10 sub
+ 
+ Symbol table '\.symtab' contains 27 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 00008048     0 SECTION LOCAL  DEFAULT    2 
+      3: 00008118     0 SECTION LOCAL  DEFAULT    3 
+      4: 00008140     0 SECTION LOCAL  DEFAULT    4 
+      5: 0000814c     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008170     0 SECTION LOCAL  DEFAULT    6 
+      7: 00008188     0 SECTION LOCAL  DEFAULT    7 
+      8: 10000000     0 SECTION LOCAL  DEFAULT    8 
+      9: 10000020     0 SECTION LOCAL  DEFAULT    9 
+     10: 10000080     0 SECTION LOCAL  DEFAULT   10 
+     11: 10000100     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000128     0 SECTION LOCAL  DEFAULT   12 
+     13: 10000130     0 SECTION LOCAL  DEFAULT   13 
+     14: 00000000     0 SECTION LOCAL  DEFAULT   14 
+     15: 10000080     0 FUNC    LOCAL  HIDDEN    10 sub1
+     16: 00008188     0 OBJECT  LOCAL  DEFAULT  ABS _DYNAMIC
+     17: 10000130     4 OBJECT  LOCAL  DEFAULT   13 c
+     18: 1000010c     0 OBJECT  LOCAL  DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
+     19: 10000100     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     20: 00000000     0 NOTYPE  WEAK   DEFAULT  UND b
+     21: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     22: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     23: 1000012c     4 OBJECT  GLOBAL DEFAULT   12 g2
+     24: 10000088    52 FUNC    GLOBAL DEFAULT   10 sub0
+     25: 10000128     4 OBJECT  GLOBAL DEFAULT   12 a
+     26: 100000c0    52 FUNC    GLOBAL DEFAULT   10 sub
Index: ld/testsuite/ld-tic6x/shlib-noindex.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/shlib-noindex.sd
diff -N ld/testsuite/ld-tic6x/shlib-noindex.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/shlib-noindex.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,7 ----
+ 
+ tmpdir/libtestn\.so:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*10000100 00000000 00000000 00000000 00000000 .*
+ [ \t]*10000110 00000000 20000010 20000010 00000000 .*
+ [ \t]*10000120 30010010 00000000                   .*
Index: ld/testsuite/ld-tic6x/static-app-1.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.dd
diff -N ld/testsuite/ld-tic6x/static-app-1.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,56 ----
+ 
+ tmpdir/static-app-1:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 10000000 <sub1>:
+ 10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000004:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000008 <sub0>:
+ 10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+ 1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+ 10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+ 10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 10000030:[ \t]*00004000[ \t]*nop 3
+ 10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000038:[ \t]*00008000[ \t]*nop 5
+ 1000003c:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000040 <sub>:
+ 10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 1000004c:[ \t]*00006000[ \t]*nop 4
+ 10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+ 10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+ 1000006c:[ \t]*04800d6e[ \t]*ldw \.D2T2 \*\+b14\(52\),b9
+ [ \t]*\.\.\.
+ 
+ 10000080 <fish>:
+ 10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+ 10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+ 1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+ 10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+ 10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+ 10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+ 1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+ 100000a4:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+ 100000a8:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+ 100000ac:[ \t]*028002a8[ \t]*mvk \.S1 5,a5
+ 100000b0:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.od
diff -N ld/testsuite/ld-tic6x/static-app-1.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,14 ----
+ 
+ tmpdir/static-app-1:     file format elf32-tic6x-le
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000d8 R_C6000_ABS32     \.bss
+ 100000d4 R_C6000_ABS32     b
+ 100000dc R_C6000_ABS32     a
+ 100000e0 R_C6000_ABS32     \.text\+0x00000008
+ 100000e4 R_C6000_ABS32     g1
+ 100000ec R_C6000_ABS32     g1
+ 100000f0 R_C6000_ABS32     \.neardata\+0x00000004
+ 
+ 
Index: ld/testsuite/ld-tic6x/static-app-1.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.rd
diff -N ld/testsuite/ld-tic6x/static-app-1.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,112 ----
+ There are 15 section headers, starting at offset 0x2180:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000030 0c   A  2   9  4
+   \[ 6\] \.dynamic          DYNAMIC         00008150 001150 000090 08  WA  3   0  4
+   \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+   \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+   \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 000014 00  WA  0   0  4
+   \[10\] \.bss              NOBITS          100000f4 0020f4 000004 00  WA  0   0  4
+   \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020f4 000019 00      0   0  1
+   \[12\] \.shstrtab         STRTAB          00000000 00210d 000071 00      0   0  1
+   \[13\] \.symtab           SYMTAB          00000000 0023d8 0001a0 10     14  19  4
+   \[14\] \.strtab           STRTAB          00000000 002578 000060 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000000
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x001e0 0x001e0 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000f4 0x000f8 RWE 0x1000
+   DYNAMIC        0x001150 0x00008150 0x00008150 0x00090 0x00090 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1150 contains 13 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x80dc
+  0x00000006 \(SYMTAB\)                     0x803c
+  0x0000000a \(STRSZ\)                      29 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000007 \(RELA\)                       0x80fc
+  0x00000008 \(RELASZ\)                     84 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000d8  00000401 R_C6000_ABS32          100000f4   \.bss \+ 0
+ 100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+ 100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1120 contains 4 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+ 100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 100000ec  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 100000f0  00000301 R_C6000_ABS32          100000e0   \.neardata \+ 4
+ 
+ Symbol table '\.dynsym' contains 10 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+      4: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+      5: 100000f4     4 OBJECT  LOCAL  DEFAULT   10 c
+      6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+      3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+      4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008150     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     10: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+     11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+     13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+     14: 100000ec     8 OBJECT  LOCAL  DEFAULT    9 w
+     15: 00008150     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+     16: 100000f4     4 OBJECT  LOCAL  DEFAULT   10 c
+     17: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+     18: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     19: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     22: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+     23: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+     24: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+     25: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1.sd
diff -N ld/testsuite/ld-tic6x/static-app-1.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/static-app-1:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000d0 00000000 00000000 f4000010 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1b.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.dd
diff -N ld/testsuite/ld-tic6x/static-app-1b.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1b.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,56 ----
+ 
+ tmpdir/static-app-1b:     file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 10000000 <sub1>:
+ 10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000004:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000008 <sub0>:
+ 10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+ 1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+ 10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+ 10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 10000030:[ \t]*00004000[ \t]*nop 3
+ 10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000038:[ \t]*00008000[ \t]*nop 5
+ 1000003c:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000040 <sub>:
+ 10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 1000004c:[ \t]*00006000[ \t]*nop 4
+ 10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+ 10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+ 1000006c:[ \t]*04800d6e[ \t]*ldw \.D2T2 \*\+b14\(52\),b9
+ [ \t]*\.\.\.
+ 
+ 10000080 <fish>:
+ 10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+ 10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+ 1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+ 10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+ 10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+ 10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+ 1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+ 100000a4:[ \t]*020003a8[ \t]*mvk \.S1 7,a4
+ 100000a8:[ \t]*02000068[ \t]*mvkh \.S1 0,a4
+ 100000ac:[ \t]*028002a8[ \t]*mvk \.S1 5,a5
+ 100000b0:[ \t]*02800068[ \t]*mvkh \.S1 0,a5
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1b.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.od
diff -N ld/testsuite/ld-tic6x/static-app-1b.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1b.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,14 ----
+ 
+ tmpdir/static-app-1b:     file format elf32-tic6x-be
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000d8 R_C6000_ABS32     \.bss
+ 100000d4 R_C6000_ABS32     b
+ 100000dc R_C6000_ABS32     a
+ 100000e0 R_C6000_ABS32     \.text\+0x00000008
+ 100000e4 R_C6000_ABS32     g1
+ 100000ec R_C6000_ABS32     g1
+ 100000f0 R_C6000_ABS32     \.neardata\+0x00000004
+ 
+ 
Index: ld/testsuite/ld-tic6x/static-app-1b.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.rd
diff -N ld/testsuite/ld-tic6x/static-app-1b.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1b.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,112 ----
+ There are 15 section headers, starting at offset 0x2180:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000030 0c   A  2   9  4
+   \[ 6\] \.dynamic          DYNAMIC         00008150 001150 000090 08  WA  3   0  4
+   \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+   \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+   \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 000014 00  WA  0   0  4
+   \[10\] \.bss              NOBITS          100000f4 0020f4 000004 00  WA  0   0  4
+   \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020f4 000019 00      0   0  1
+   \[12\] \.shstrtab         STRTAB          00000000 00210d 000071 00      0   0  1
+   \[13\] \.symtab           SYMTAB          00000000 0023d8 0001a0 10     14  19  4
+   \[14\] \.strtab           STRTAB          00000000 002578 000060 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000000
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x001e0 0x001e0 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000f4 0x000f8 RWE 0x1000
+   DYNAMIC        0x001150 0x00008150 0x00008150 0x00090 0x00090 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1150 contains 13 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x80dc
+  0x00000006 \(SYMTAB\)                     0x803c
+  0x0000000a \(STRSZ\)                      29 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000007 \(RELA\)                       0x80fc
+  0x00000008 \(RELASZ\)                     84 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000d8  00000401 R_C6000_ABS32          100000f4   \.bss \+ 0
+ 100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+ 100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1120 contains 4 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+ 100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 100000ec  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 100000f0  00000301 R_C6000_ABS32          100000e0   \.neardata \+ 4
+ 
+ Symbol table '\.dynsym' contains 10 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+      4: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+      5: 100000f4     4 OBJECT  LOCAL  DEFAULT   10 c
+      6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+ 
+ Symbol table '\.symtab' contains 26 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+      3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+      4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008150     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     10: 100000f4     0 SECTION LOCAL  DEFAULT   10 
+     11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+     13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+     14: 100000ec     8 OBJECT  LOCAL  DEFAULT    9 w
+     15: 00008150     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+     16: 100000f4     4 OBJECT  LOCAL  DEFAULT   10 c
+     17: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+     18: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     19: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     20: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     21: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     22: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+     23: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+     24: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+     25: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1b.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1b.sd
diff -N ld/testsuite/ld-tic6x/static-app-1b.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1b.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/static-app-1b:     file format elf32-tic6x-be
+ 
+ Contents of section \.got:
+ [ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000d0 00000000 00000000 100000f4 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1r.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.dd
diff -N ld/testsuite/ld-tic6x/static-app-1r.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1r.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,52 ----
+ 
+ tmpdir/static-app-1r:     file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 10000000 <sub1>:
+ 10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000004:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000008 <sub0>:
+ 10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+ 1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+ 10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+ 10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 10000030:[ \t]*00004000[ \t]*nop 3
+ 10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000038:[ \t]*00008000[ \t]*nop 5
+ 1000003c:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000040 <sub>:
+ 10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 1000004c:[ \t]*00006000[ \t]*nop 4
+ 10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+ 10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+ 1000006c:[ \t]*04800b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b9
+ [ \t]*\.\.\.
+ 
+ 10000080 <fish>:
+ 10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+ 10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+ 1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+ 10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+ 10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+ 10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+ 1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1r.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.od
diff -N ld/testsuite/ld-tic6x/static-app-1r.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1r.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,12 ----
+ 
+ tmpdir/static-app-1r:     file format elf32-tic6x-le
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000d8 R_C6000_ABS32     \.bss
+ 100000d4 R_C6000_ABS32     b
+ 100000dc R_C6000_ABS32     a
+ 100000e0 R_C6000_ABS32     \.text\+0x00000008
+ 100000e4 R_C6000_ABS32     g1
+ 
+ 
Index: ld/testsuite/ld-tic6x/static-app-1r.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.rd
diff -N ld/testsuite/ld-tic6x/static-app-1r.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1r.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,109 ----
+ There are 15 section headers, starting at offset 0x2178:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000018 0c   A  2   9  4
+   \[ 6\] \.dynamic          DYNAMIC         00008138 001138 000090 08  WA  3   0  4
+   \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+   \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+   \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 00000c 00  WA  0   0  4
+   \[10\] \.bss              NOBITS          100000ec 0020ec 000004 00  WA  0   0  4
+   \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020ec 000019 00      0   0  1
+   \[12\] \.shstrtab         STRTAB          00000000 002105 000071 00      0   0  1
+   \[13\] \.symtab           SYMTAB          00000000 0023d0 000190 10     14  18  4
+   \[14\] \.strtab           STRTAB          00000000 002560 00005e 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000000
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x001c8 0x001c8 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000ec 0x000f0 RWE 0x1000
+   DYNAMIC        0x001138 0x00008138 0x00008138 0x00090 0x00090 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1138 contains 13 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x80dc
+  0x00000006 \(SYMTAB\)                     0x803c
+  0x0000000a \(STRSZ\)                      29 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000007 \(RELA\)                       0x80fc
+  0x00000008 \(RELASZ\)                     60 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000d8  00000401 R_C6000_ABS32          100000ec   \.bss \+ 0
+ 100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+ 100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1120 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+ 100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Symbol table '\.dynsym' contains 10 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+      4: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+      5: 100000ec     4 OBJECT  LOCAL  DEFAULT   10 c
+      6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+ 
+ Symbol table '\.symtab' contains 25 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+      3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+      4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008138     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     10: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+     11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+     13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+     14: 00008138     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+     15: 100000ec     4 OBJECT  LOCAL  DEFAULT   10 c
+     16: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+     17: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     18: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     20: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     21: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+     22: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+     23: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+     24: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1r.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1r.sd
diff -N ld/testsuite/ld-tic6x/static-app-1r.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1r.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/static-app-1r:     file format elf32-tic6x-le
+ 
+ Contents of section \.got:
+ [ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000d0 00000000 00000000 ec000010 00000000 .*
Index: ld/testsuite/ld-tic6x/static-app-1rb.dd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.dd
diff -N ld/testsuite/ld-tic6x/static-app-1rb.dd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1rb.dd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,52 ----
+ 
+ tmpdir/static-app-1rb:     file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.text:
+ 
+ 10000000 <sub1>:
+ 10000000:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000004:[ \t]*00008000[ \t]*nop 5
+ 
+ 10000008 <sub0>:
+ 10000008:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 1000000c:[ \t]*01bc62f6[ \t]*stw \.D2T2 b3,\*\+b15\(12\)
+ 10000010:[ \t]*073c82f6[ \t]*stw \.D2T2 b14,\*\+b15\(16\)
+ 10000014:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000018:[ \t]*00000812[ \t]*b \.S2 10000040 <sub>
+ 1000001c:[ \t]*00000112[ \t]*b \.S2 10000008 <sub0>
+ 10000020:[ \t]*0ffffc12[ \t]*b \.S2 10000000 <sub1>
+ 10000024:[ \t]*01bc62e6[ \t]*ldw \.D2T2 \*\+b15\(12\),b3
+ 10000028:[ \t]*073c82e6[ \t]*ldw \.D2T2 \*\+b15\(16\),b14
+ 1000002c:[ \t]*07800852[ \t]*addk \.S2 16,b15
+ 10000030:[ \t]*00004000[ \t]*nop 3
+ 10000034:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000038:[ \t]*00008000[ \t]*nop 5
+ 1000003c:[ \t]*00000000[ \t]*nop 1
+ 
+ 10000040 <sub>:
+ 10000040:[ \t]*07be09c2[ \t]*sub \.D2 b15,16,b15
+ 10000044:[ \t]*023c62f4[ \t]*stw \.D2T1 a4,\*\+b15\(12\)
+ 10000048:[ \t]*003c62e4[ \t]*ldw \.D2T1 \*\+b15\(12\),a0
+ 1000004c:[ \t]*00006000[ \t]*nop 4
+ 10000050:[ \t]*00014940[ \t]*add \.D1 a0,10,a0
+ 10000054:[ \t]*020008f0[ \t]*or \.D1 0,a0,a4
+ 10000058:[ \t]*07be0942[ \t]*add \.D2 b15,16,b15
+ 1000005c:[ \t]*000c0362[ \t]*b \.S2 b3
+ 10000060:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 10000064:[ \t]*0380056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b7
+ 10000068:[ \t]*0400066e[ \t]*ldw \.D2T2 \*\+b14\(24\),b8
+ 1000006c:[ \t]*04800b6e[ \t]*ldw \.D2T2 \*\+b14\(44\),b9
+ [ \t]*\.\.\.
+ 
+ 10000080 <fish>:
+ 10000080:[ \t]*0700006e[ \t]*ldw \.D2T2 \*\+b14\(0\),b14
+ 10000084:[ \t]*1ffff112[ \t]*callp \.S2 10000008 <sub0>,b3
+ 10000088:[ \t]*0ffff112[ \t]*b \.S2 10000008 <sub0>
+ 1000008c:[ \t]*10000012[ \t]*callp \.S2 10000080 <fish>,b3
+ 10000090:[ \t]*00000012[ \t]*b \.S2 10000080 <fish>
+ 10000094:[ \t]*0200086e[ \t]*ldw \.D2T2 \*\+b14\(32\),b4
+ 10000098:[ \t]*02800a6e[ \t]*ldw \.D2T2 \*\+b14\(40\),b5
+ 1000009c:[ \t]*0300076e[ \t]*ldw \.D2T2 \*\+b14\(28\),b6
+ 100000a0:[ \t]*0300056e[ \t]*ldw \.D2T2 \*\+b14\(20\),b6
+ [ \t]*\.\.\.
Index: ld/testsuite/ld-tic6x/static-app-1rb.od
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.od
diff -N ld/testsuite/ld-tic6x/static-app-1rb.od
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1rb.od	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,12 ----
+ 
+ tmpdir/static-app-1rb:     file format elf32-tic6x-be
+ 
+ DYNAMIC RELOCATION RECORDS
+ OFFSET   TYPE              VALUE 
+ 100000d8 R_C6000_ABS32     \.bss
+ 100000d4 R_C6000_ABS32     b
+ 100000dc R_C6000_ABS32     a
+ 100000e0 R_C6000_ABS32     \.text\+0x00000008
+ 100000e4 R_C6000_ABS32     g1
+ 
+ 
Index: ld/testsuite/ld-tic6x/static-app-1rb.rd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.rd
diff -N ld/testsuite/ld-tic6x/static-app-1rb.rd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1rb.rd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,109 ----
+ There are 15 section headers, starting at offset 0x2178:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+   \[ 1\] \.hash             HASH            00008000 001000 00003c 04   A  2   0  4
+   \[ 2\] \.dynsym           DYNSYM          0000803c 00103c 0000a0 10   A  3   5  4
+   \[ 3\] \.dynstr           STRTAB          000080dc 0010dc 00001d 00   A  0   0  1
+   \[ 4\] \.rela\.got         RELA            000080fc 0010fc 000024 0c   A  2   8  4
+   \[ 5\] \.rela\.neardata    RELA            00008120 001120 000018 0c   A  2   9  4
+   \[ 6\] \.dynamic          DYNAMIC         00008138 001138 000090 08  WA  3   0  4
+   \[ 7\] \.text             PROGBITS        10000000 002000 0000c0 00  AX  0   0 32
+   \[ 8\] \.got              PROGBITS        100000c0 0020c0 000020 00  WA  0   0  4
+   \[ 9\] \.neardata         PROGBITS        100000e0 0020e0 00000c 00  WA  0   0  4
+   \[10\] \.bss              NOBITS          100000ec 0020ec 000004 00  WA  0   0  4
+   \[11\] \.c6xabi\.attributes C6000_ATTRIBUTES 00000000 0020ec 000019 00      0   0  1
+   \[12\] \.shstrtab         STRTAB          00000000 002105 000071 00      0   0  1
+   \[13\] \.symtab           SYMTAB          00000000 0023d0 000190 10     14  18  4
+   \[14\] \.strtab           STRTAB          00000000 002560 00005e 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x10000000
+ There are 4 program headers, starting at offset 52
+ 
+ Program Headers:
+   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
+   LOAD           0x001000 0x00008000 0x00008000 0x001c8 0x001c8 RW  0x1000
+   LOAD           0x002000 0x10000000 0x10000000 0x000ec 0x000f0 RWE 0x1000
+   DYNAMIC        0x001138 0x00008138 0x00008138 0x00090 0x00090 RW  0x4
+   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x20000 RWE 0x8
+ 
+  Section to Segment mapping:
+   Segment Sections\.\.\.
+    00     \.hash \.dynsym \.dynstr \.rela\.got \.rela\.neardata \.dynamic 
+    01     \.text \.got \.neardata \.bss 
+    02     \.dynamic 
+    03     
+ 
+ Dynamic section at offset 0x1138 contains 13 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x8000
+  0x00000005 \(STRTAB\)                     0x80dc
+  0x00000006 \(SYMTAB\)                     0x803c
+  0x0000000a \(STRSZ\)                      29 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+  0x00000015 \(DEBUG\)                      0x0
+  0x70000000 \(C6000_DSBT_BASE\)            0x100000c0
+  0x70000001 \(C6000_DSBT_SIZE\)            0x3
+  0x70000003 \(C6000_DSBT_INDEX\)           0x0
+  0x00000007 \(RELA\)                       0x80fc
+  0x00000008 \(RELASZ\)                     60 \(bytes\)
+  0x00000009 \(RELAENT\)                    12 \(bytes\)
+  0x00000000 \(NULL\)                       0x0
+ 
+ Relocation section '\.rela\.got' at offset 0x10fc contains 3 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000d8  00000401 R_C6000_ABS32          100000ec   \.bss \+ 0
+ 100000d4  00000701 R_C6000_ABS32          100000e8   b \+ 0
+ 100000dc  00000901 R_C6000_ABS32          100000e0   a \+ 0
+ 
+ Relocation section '\.rela\.neardata' at offset 0x1120 contains 2 entries:
+  Offset     Info    Type                Sym\. Value  Symbol's Name \+ Addend
+ 100000e0  00000101 R_C6000_ABS32          10000000   \.text \+ 8
+ 100000e4  00000801 R_C6000_ABS32          00000000   g1 \+ 0
+ 
+ Symbol table '\.dynsym' contains 10 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      2: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      3: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+      4: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+      5: 100000ec     4 OBJECT  LOCAL  DEFAULT   10 c
+      6: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+      7: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+      8: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+      9: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+ 
+ Symbol table '\.symtab' contains 25 entries:
+    Num:    Value  Size Type    Bind   Vis      Ndx Name
+      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+      1: 00008000     0 SECTION LOCAL  DEFAULT    1 
+      2: 0000803c     0 SECTION LOCAL  DEFAULT    2 
+      3: 000080dc     0 SECTION LOCAL  DEFAULT    3 
+      4: 000080fc     0 SECTION LOCAL  DEFAULT    4 
+      5: 00008120     0 SECTION LOCAL  DEFAULT    5 
+      6: 00008138     0 SECTION LOCAL  DEFAULT    6 
+      7: 10000000     0 SECTION LOCAL  DEFAULT    7 
+      8: 100000c0     0 SECTION LOCAL  DEFAULT    8 
+      9: 100000e0     0 SECTION LOCAL  DEFAULT    9 
+     10: 100000ec     0 SECTION LOCAL  DEFAULT   10 
+     11: 00000000     0 SECTION LOCAL  DEFAULT   11 
+     12: 10000000     0 FUNC    LOCAL  HIDDEN     7 sub1
+     13: 10000080     0 NOTYPE  LOCAL  DEFAULT    7 fish
+     14: 00008138     0 OBJECT  LOCAL  DEFAULT    6 _DYNAMIC
+     15: 100000ec     4 OBJECT  LOCAL  DEFAULT   10 c
+     16: 100000cc     0 OBJECT  LOCAL  DEFAULT    8 _GLOBAL_OFFSET_TABLE_
+     17: 100000c0     0 NOTYPE  LOCAL  DEFAULT  ABS __c6xabi_DSBT_BASE
+     18: 100000e8     4 OBJECT  GLOBAL DEFAULT    9 b
+     19: 00020000     0 OBJECT  GLOBAL DEFAULT  ABS __stacksize
+     20: 00000000     0 NOTYPE  WEAK   DEFAULT  UND g1
+     21: 100000e4     4 OBJECT  GLOBAL DEFAULT    9 g2
+     22: 10000008    52 FUNC    GLOBAL DEFAULT    7 sub0
+     23: 100000e0     4 OBJECT  GLOBAL DEFAULT    9 a
+     24: 10000040    52 FUNC    GLOBAL DEFAULT    7 sub
Index: ld/testsuite/ld-tic6x/static-app-1rb.sd
===================================================================
RCS file: ld/testsuite/ld-tic6x/static-app-1rb.sd
diff -N ld/testsuite/ld-tic6x/static-app-1rb.sd
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/static-app-1rb.sd	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,6 ----
+ 
+ tmpdir/static-app-1rb:     file format elf32-tic6x-be
+ 
+ Contents of section \.got:
+ [ \t]*100000c0 00000000 00000000 00000000 00000000 .*
+ [ \t]*100000d0 00000000 00000000 100000ec 00000000 .*
Index: ld/testsuite/ld-tic6x/tic6x.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-tic6x/tic6x.exp,v
retrieving revision 1.1
diff -c -p -r1.1 tic6x.exp
*** ld/testsuite/ld-tic6x/tic6x.exp	25 Mar 2010 21:12:34 -0000	1.1
--- ld/testsuite/ld-tic6x/tic6x.exp	30 Mar 2011 18:38:10 -0000
***************
*** 1,7 ****
! if { [istarget tic6x-*-*] } {
!     foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
! 	if { [runtest_file_p $runtests $test] } {
! 	    run_dump_test [file rootname $test]
! 	}
      }
  }
--- 1,114 ----
! if { ! [istarget tic6x-*-*] } {
!     return
! }
! 
! foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] {
!     if { [runtest_file_p $runtests $test] } {
! 	run_dump_test [file rootname $test]
      }
  }
+ 
+ set shlibtests {
+     {"C6X shared library without --dsbt-index"
+      "-shared  -Tdsbt.ld --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near" {shlib-1.s shlib-2.s}
+      {{readelf -WSsrld shlib-noindex.rd}
+       {objdump "-drj.plt -j.text" shlib-noindex.dd}
+       {objdump -sj.got shlib-noindex.sd}}
+       "libtestn.so"}
+     {"C6X shared library, LE, RELA"
+      "-shared  -Tdsbt.ld --dsbt-index=2 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near" {shlib-1.s shlib-2.s}
+      {{readelf -WSsrld shlib-1.rd}
+       {objdump "-drj.plt -j.text" shlib-1.dd}
+       {objdump -sj.got shlib-1.sd}}
+       "libtest.so"}
+     {"C6X nonstatic app using shared library, LE, RELA"
+      "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtest.so"
+      "-mdsbt -mpic -mpid=near" {shlib-app-1.s}
+      {{readelf -WSsrld shlib-app-1.rd}
+       {objdump "-drj.plt -j.text" shlib-app-1.dd}
+       {objdump -sj.got shlib-app-1.sd}
+       {objdump -R shlib-app-1.od}}
+      "shlib-dynapp-1"}
+     {"C6X shared library, LE, REL"
+      "-shared  -Tdsbt.ld --dsbt-index=2 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near -mgenerate-rel" {shlib-1.s shlib-2.s}
+      {{readelf -WSsrld shlib-1r.rd}
+       {objdump "-drj.plt -j.text" shlib-1r.dd}
+       {objdump -sj.got shlib-1r.sd}}
+       "libtestr.so"}
+     {"C6X nonstatic app using shared library, LE, REL"
+      "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtestr.so"
+      "-mdsbt -mpic -mpid=near -mgenerate-rel" {shlib-app-1r.s}
+      {{readelf -WSsrld shlib-app-1r.rd}
+       {objdump "-drj.plt -j.text" shlib-app-1r.dd}
+       {objdump -sj.got shlib-app-1r.sd}
+       {objdump -R shlib-app-1r.od}}
+      "shlib-dynapp-1r"}
+     {"C6X shared library, BE, RELA"
+      "-shared  -Tdsbt-be.ld --dsbt-index=2 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near -mbig-endian" {shlib-1.s shlib-2.s}
+      {{readelf -WSsrld shlib-1b.rd}
+       {objdump "-drj.plt -j.text" shlib-1b.dd}
+       {objdump -sj.got shlib-1b.sd}}
+       "libtestb.so"}
+     {"C6X nonstatic app using shared library, BE, RELA"
+      "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtestb.so"
+      "-mdsbt -mpic -mpid=near -mbig-endian" {shlib-app-1.s}
+      {{readelf -WSsrld shlib-app-1b.rd}
+       {objdump "-drj.plt -j.text" shlib-app-1b.dd}
+       {objdump -sj.got shlib-app-1b.sd}
+       {objdump -R shlib-app-1b.od}}
+      "shlib-dynapp-1b"}
+     {"C6X shared library, BE, REL"
+      "-shared  -Tdsbt-be.ld --dsbt-index=2 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near -mgenerate-rel -mbig-endian" {shlib-1.s shlib-2.s}
+      {{readelf -WSsrld shlib-1rb.rd}
+       {objdump "-drj.plt -j.text" shlib-1rb.dd}
+       {objdump -sj.got shlib-1rb.sd}}
+       "libtestrb.so"}
+     {"C6X nonstatic app using shared library, BE, REL"
+      "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3 tmpdir/libtestrb.so"
+      "-mdsbt -mpic -mpid=near -mgenerate-rel -mbig-endian" {shlib-app-1r.s}
+      {{readelf -WSsrld shlib-app-1rb.rd}
+       {objdump "-drj.plt -j.text" shlib-app-1rb.dd}
+       {objdump -sj.got shlib-app-1rb.sd}
+       {objdump -R shlib-app-1rb.od}}
+      "shlib-dynapp-1rb"}
+ 
+     {"C6X static app, LE, RELA"
+      "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near" {shlib-1.s shlib-2.s shlib-app-1.s}
+      {{readelf -WSsrld static-app-1.rd}
+       {objdump "-drj.plt -j.text" static-app-1.dd}
+       {objdump -sj.got static-app-1.sd}
+       {objdump -R static-app-1.od}}
+      "static-app-1"}
+     {"C6X static app, LE, REL"
+      "-Tdsbt.ld --dsbt-index 0 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near -mgenerate-rel" {shlib-1.s shlib-2.s shlib-app-1r.s}
+      {{readelf -WSsrld static-app-1r.rd}
+       {objdump "-drj.plt -j.text" static-app-1r.dd}
+       {objdump -sj.got static-app-1r.sd}
+       {objdump -R static-app-1r.od}}
+      "static-app-1r"}
+     {"C6X static app, BE, RELA"
+      "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near -mbig-endian" {shlib-1.s shlib-2.s shlib-app-1.s}
+      {{readelf -WSsrld static-app-1b.rd}
+       {objdump "-drj.plt -j.text" static-app-1b.dd}
+       {objdump -sj.got static-app-1b.sd}
+       {objdump -R static-app-1b.od}}
+      "static-app-1b"}
+     {"C6X static app, BE, REL"
+      "-Tdsbt-be.ld --dsbt-index 0 --dsbt-size=3"
+      "-mdsbt -mpic -mpid=near -mbig-endian -mgenerate-rel" {shlib-1.s shlib-2.s shlib-app-1r.s}
+      {{readelf -WSsrld static-app-1rb.rd}
+       {objdump "-drj.plt -j.text" static-app-1rb.dd}
+       {objdump -sj.got static-app-1rb.sd}
+       {objdump -R static-app-1rb.od}}
+      "static-app-1rb"}
+ }
+ 
+ run_ld_link_tests $shlibtests
Index: ld/testsuite/ld-tic6x/weak-be.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak-be.d
diff -N ld/testsuite/ld-tic6x/weak-be.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/weak-be.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,19 ----
+ #name: C6X relocs to weak symbols, big endian
+ #as: -mbig-endian
+ #ld: -melf32_tic6x_be -Tsbr.ld
+ #source: weak.s
+ #objdump: -dr
+ 
+ .*: *file format elf32-tic6x-be
+ 
+ 
+ Disassembly of section \.text:
+ 10000000 <[^>]*>:
+ 10000000:[ \t]+000c0362[ \t]+b \.S2 b3
+ 10000004:[ \t]+a00c0362[ \t]+\[a2\] b \.S2 b3
+ 10000008:[ \t]+000c0363[ \t]+b \.S2 b3
+ 1000000c:[ \t]+00800028[ \t]+\|\| mvk \.S1 0,a1
+ 10000010:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+ 10000014:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+ 10000018:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+ 1000001c:[ \t]+00000000[ \t]+nop 1
Index: ld/testsuite/ld-tic6x/weak-data.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak-data.d
diff -N ld/testsuite/ld-tic6x/weak-data.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/weak-data.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,11 ----
+ #name: C6X ABS relocs to undefined weak symbols
+ #as: -mlittle-endian
+ #ld: -melf32_tic6x_le -Tsbr.ld
+ #source: weak.s
+ #objdump: -s -j .data
+ 
+ .*: *file format elf32-tic6x-le
+ 
+ 
+ Contents of section \.data:
+ [ \t]+0+80 00000000 00000000[ \t]+\.*[ \t]*
Index: ld/testsuite/ld-tic6x/weak.d
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak.d
diff -N ld/testsuite/ld-tic6x/weak.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/weak.d	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,19 ----
+ #name: C6X relocs to weak symbols, little endian
+ #as: -mlittle-endian
+ #ld: -melf32_tic6x_le -Tsbr.ld
+ #source: weak.s
+ #objdump: -dr
+ 
+ .*: *file format elf32-tic6x-le
+ 
+ 
+ Disassembly of section \.text:
+ 10000000 <[^>]*>:
+ 10000000:[ \t]+000c0362[ \t]+b \.S2 b3
+ 10000004:[ \t]+a00c0362[ \t]+\[a2\] b \.S2 b3
+ 10000008:[ \t]+000c0363[ \t]+b \.S2 b3
+ 1000000c:[ \t]+00800028[ \t]+\|\| mvk \.S1 0,a1
+ 10000010:[ \t]+0080006e[ \t]+ldw \.D2T2 \*\+b14\(0\),b1
+ 10000014:[ \t]+00800028[ \t]+mvk \.S1 0,a1
+ 10000018:[ \t]+00800068[ \t]+mvkh \.S1 0,a1
+ 1000001c:[ \t]+00000000[ \t]+nop 1
Index: ld/testsuite/ld-tic6x/weak.s
===================================================================
RCS file: ld/testsuite/ld-tic6x/weak.s
diff -N ld/testsuite/ld-tic6x/weak.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- ld/testsuite/ld-tic6x/weak.s	30 Mar 2011 18:38:10 -0000
***************
*** 0 ****
--- 1,19 ----
+ 	.weak	g
+ 	.weak	g1
+ .text
+ 	b .s2		g
+ [a2]	b .s2		g
+ 	b .s2		g
+ ||	mvk .s1		0, a1
+ 	ldw .d2t2	*+B14(g1), B1
+ 	mvkl	.s1	g, a1
+ 	mvkh	.s1	g, a1
+ 
+ 	.section	.data,"aw",@progbits
+ 	.align	2
+ 	.type	a, @object
+ 	.size	a, 4
+ a:
+ 	.long	g1
+ 	.short	g1
+ 	.byte	g1

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-30 18:46                   ` Bernd Schmidt
@ 2011-03-30 19:34                     ` Joseph S. Myers
  2011-03-31 14:40                     ` Tristan Gingold
  1 sibling, 0 replies; 14+ messages in thread
From: Joseph S. Myers @ 2011-03-30 19:34 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils, Paul Brook

On Wed, 30 Mar 2011, Bernd Schmidt wrote:

> Here's a new version which includes all the changes you requested, and
> some behaviour changes for shared libraries with DSBT index 0 requested
> by TI.

This version still defines R_C6000_SBR_GOT32 in include/elf/tic6x.h, 
although the corresponding ChangeLog entry is updated to use the correct 
name.  (And while it has BFD_RELOC_* values for the new relocations, only 
BFD_RELOC_C6000_JUMP_SLOT, R_C6000_JUMP_SLOT is added to 
elf32_tic6x_reloc_map, without entries there for the other three 
relocations.)  OK with those issues fixed.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-30 18:46                   ` Bernd Schmidt
  2011-03-30 19:34                     ` Joseph S. Myers
@ 2011-03-31 14:40                     ` Tristan Gingold
  2011-03-31 16:14                       ` Bernd Schmidt
  1 sibling, 1 reply; 14+ messages in thread
From: Tristan Gingold @ 2011-03-31 14:40 UTC (permalink / raw)
  To: Bernd Schmidt; +Cc: binutils

Bernd,

note that the ChangeLog entry for tic6x.h must be in include/elf/ChangeLog (and not in include/ChangeLog).

Tristan.

On Mar 30, 2011, at 8:42 PM, Bernd Schmidt wrote:

> On 03/30/2011 01:18 PM, Joseph S. Myers wrote:
>> On Wed, 30 Mar 2011, Bernd Schmidt wrote:
>> 
>>>> (from elf32_tic6x_le.sh).  What is the far analogue of .scommon?
>>> 
>>>  .far            :
>>>  {
>>>   *(.dynfar)
>>>   *(.far .far.* .gnu.linkonce.b.*)
>>>   *(COMMON)				<-----------
>>> 
>>> This, I'd think. Certainly if you remove that, far common symbols are
>>> dropped.
>>> 
>>> As far as I can tell .scommon (and its far analogue) exists only
>>> internally in the linker, but it needs to be given some name to be
>>> placed in the right output section (.sbss).
>> 
>> Thanks.  If it never appears in assembler output (and supposing the 
>> requested assembler tests for .scomm show that it does not appear in 
>> assembler output) then that resolves the .scommon questions - and 
>> indicates that it should *not* be added to the ABI since it's 
>> linker-internal - even if it would be better for the linker to know about 
>> *(SCOMMON) rather than hardcoding an internal name in linker scripts.
> 
> Here's a new version which includes all the changes you requested, and
> some behaviour changes for shared libraries with DSBT index 0 requested
> by TI.
> 
> 
> Bernd
> <mainline-0330d.diff>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Patch: Add c6x-uclinux support
  2011-03-31 14:40                     ` Tristan Gingold
@ 2011-03-31 16:14                       ` Bernd Schmidt
  0 siblings, 0 replies; 14+ messages in thread
From: Bernd Schmidt @ 2011-03-31 16:14 UTC (permalink / raw)
  To: Tristan Gingold; +Cc: binutils

On 03/31/2011 04:27 PM, Tristan Gingold wrote:
> note that the ChangeLog entry for tic6x.h must be in include/elf/ChangeLog (and not in include/ChangeLog).

Fixed.


Bernd

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2011-03-31 14:40 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-11 11:42 Patch: Add c6x-uclinux support Bernd Schmidt
2011-03-28 22:34 ` Joseph S. Myers
2011-03-28 23:18   ` Bernd Schmidt
2011-03-29 16:13     ` Joseph S. Myers
2011-03-29 22:59       ` Bernd Schmidt
2011-03-29 23:42         ` Joseph S. Myers
2011-03-30  8:23           ` Bernd Schmidt
2011-03-30 10:14             ` Joseph S. Myers
2011-03-30 11:12               ` Bernd Schmidt
2011-03-30 11:19                 ` Joseph S. Myers
2011-03-30 18:46                   ` Bernd Schmidt
2011-03-30 19:34                     ` Joseph S. Myers
2011-03-31 14:40                     ` Tristan Gingold
2011-03-31 16:14                       ` Bernd Schmidt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).