if (! bfd_big_endian (output_bfd) && ! bfd_little_endian (output_bfd)) { boolean swap;  swap = false; if (command_line.endian == ENDIAN_LITTLE) swap = true; else if (command_line.endian == ENDIAN_UNSET) { LANG_FOR_EACH_INPUT_STATEMENT (s) { if (s->the_bfd != NULL) { if (bfd_little_endian (s->the_bfd)) swap = true; break; } } }  if (swap) { bfd_byte buffer[8];  switch (statement->data_statement.type) { case QUAD: bfd_putl64 (value, buffer); value = bfd_getb64 (buffer); break; case LONG: bfd_putl32 (value, buffer); value = bfd_getb32 (buffer); break; case SHORT: bfd_putl16 (value, buffer); value = bfd_getb16 (buffer); break; case BYTE: break; default: abort (); } } }
build_link_order (statement)     lang_statement_union_type *statement;{  switch (statement->header.type)    {    case lang_data_statement_enum:      {	asection *output_section;	struct bfd_link_order *link_order;	bfd_vma value;	output_section = statement->data_statement.output_section;	ASSERT (output_section->owner == output_bfd);	link_order = bfd_new_link_order (output_bfd, output_section);	if (link_order == NULL)	  einfo ("%P%F: bfd_new_link_order failed\n");	link_order->type = bfd_data_link_order;	link_order->offset = statement->data_statement.output_vma;	link_order->u.data.contents = (bfd_byte *) xmalloc (QUAD_SIZE);	value = statement->data_statement.value;	ASSERT (output_section->owner == output_bfd);	switch (statement->data_statement.type)	  {	  case QUAD:	    bfd_put_64 (output_bfd, value, link_order->u.data.contents);	    link_order->size = QUAD_SIZE;	    break;	  case LONG:	    bfd_put_32 (output_bfd, value, link_order->u.data.contents);	    link_order->size = LONG_SIZE;	    break;	  case SHORT:	    bfd_put_16 (output_bfd, value, link_order->u.data.contents);	    link_order->size = SHORT_SIZE;	    break;	  case BYTE:	    bfd_put_8 (output_bfd, value, link_order->u.data.contents);	    link_order->size = BYTE_SIZE;	    break;	  default:	    abort ();	  }      }      break;    case lang_reloc_statement_enum:      {	lang_reloc_statement_type *rs;	asection *output_section;	struct bfd_link_order *link_order;	rs = &statement->reloc_statement;	output_section = rs->output_section;	ASSERT (output_section->owner == output_bfd);	link_order = bfd_new_link_order (output_bfd, output_section);	if (link_order == NULL)	  einfo ("%P%F: bfd_new_link_order failed\n");	link_order->offset = rs->output_vma;	link_order->size = bfd_get_reloc_size (rs->howto);	link_order->u.reloc.p =	  ((struct bfd_link_order_reloc *)	   xmalloc (sizeof (struct bfd_link_order_reloc)));	link_order->u.reloc.p->reloc = rs->reloc;	link_order->u.reloc.p->addend = rs->addend_value;	if (rs->name == NULL)	  {	    link_order->type = bfd_section_reloc_link_order;	    if (rs->section->owner == output_bfd)	      link_order->u.reloc.p->u.section = rs->section;	    else	      {		link_order->u.reloc.p->u.section = rs->section->output_section;		link_order->u.reloc.p->addend += rs->section->output_offset;	      }	  }	else	  {	    link_order->type = bfd_symbol_reloc_link_order;	    link_order->u.reloc.p->u.name = rs->name;	  }      }      break;    case lang_input_section_enum:      /* Create a new link_order in the output section with this	 attached */      if (statement->input_section.ifile->just_syms_flag == false)	{	  asection *i = statement->input_section.section;	  asection *output_section = i->output_section;	  ASSERT (output_section->owner == output_bfd);	  if ((output_section->flags & SEC_HAS_CONTENTS) != 0)	    {	      struct bfd_link_order *link_order;	      link_order = bfd_new_link_order (output_bfd, output_section);	      if (i->flags & SEC_NEVER_LOAD)		{		  /* We've got a never load section inside one which		     is going to be output, we'll change it into a		     fill link_order */		  link_order->type = bfd_fill_link_order;		  link_order->u.fill.value = 0;		}	      else		{		  link_order->type = bfd_indirect_link_order;		  link_order->u.indirect.section = i;		  ASSERT (i->output_section == output_section);		}	      if (i->_cooked_size)		link_order->size = i->_cooked_size;	      else		link_order->size = bfd_get_section_size_before_reloc (i);	      link_order->offset = i->output_offset;	    }	}      break;    case lang_padding_statement_enum:      /* Make a new link_order with the right filler */      {	asection *output_section;	struct bfd_link_order *link_order;	output_section = statement->padding_statement.output_section;	ASSERT (statement->padding_statement.output_section->owner		== output_bfd);	if ((output_section->flags & SEC_HAS_CONTENTS) != 0)	  {	    link_order = bfd_new_link_order (output_bfd, output_section);	    link_order->type = bfd_fill_link_order;	    link_order->size = statement->padding_statement.size;	    link_order->offset = statement->padding_statement.output_offset;	    link_order->u.fill.value = statement->padding_statement.fill;	  }      }      break;    default:      /* All the other ones fall through */      break;    }}