elf_hash_table (info)->hgot = h;
_bfd_elf_create_got_section (abfd, info)     bfd *abfd;     struct bfd_link_info *info;{  flagword flags;  register asection *s;  struct elf_link_hash_entry *h;  struct elf_backend_data *bed = get_elf_backend_data (abfd);  /* This function may be called more than once.  */  if (bfd_get_section_by_name (abfd, ".got") != NULL)    return true;  flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY;  s = bfd_make_section (abfd, ".got");  if (s == NULL      || !bfd_set_section_flags (abfd, s, flags)      || !bfd_set_section_alignment (abfd, s, 2))    return false;  if (bed->want_got_plt)    {      s = bfd_make_section (abfd, ".got.plt");      if (s == NULL	  || !bfd_set_section_flags (abfd, s, flags)	  || !bfd_set_section_alignment (abfd, s, 2))	return false;    }  /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got     (or .got.plt) section.  We don't do this in the linker script     because we don't want to define the symbol if we are not creating     a global offset table.  */  h = NULL;  if (!(_bfd_generic_link_add_one_symbol	(info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s, (bfd_vma) 0,	 (const char *) NULL, false, get_elf_backend_data (abfd)->collect,	 (struct bfd_link_hash_entry **) &h)))    return false;  h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;  h->type = STT_OBJECT;  if (info->shared      && ! _bfd_elf_link_record_dynamic_symbol (info, h))    return false;  /* The first three global offset table entries are reserved.  */  s->_raw_size += 3 * 4;  return true;}