diff --git a/bfd/archive.c b/bfd/archive.c
index dc0400d1cf..ccc09ad49f 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -856,7 +856,7 @@ bfd_generic_archive_p (bfd *abfd)
       return NULL;
     }
 
-  bfd_is_thin_archive (abfd) = (strncmp (armag, ARMAGT, SARMAG) == 0);
+  bfd_set_thin_archive (abfd, strncmp (armag, ARMAGT, SARMAG) == 0);
 
   if (strncmp (armag, ARMAG, SARMAG) != 0
       && ! bfd_is_thin_archive (abfd))
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index e55e3e90ba..34c1c3ad0e 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -509,38 +509,6 @@ extern int bfd_stat (bfd *, struct stat *);
 #endif
 extern void _bfd_warn_deprecated (const char *, const char *, int, const char *);
 
-#define bfd_get_filename(abfd) ((abfd)->filename)
-#define bfd_get_cacheable(abfd) ((abfd)->cacheable)
-#define bfd_get_format(abfd) ((abfd)->format)
-#define bfd_get_target(abfd) ((abfd)->xvec->name)
-#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
-#define bfd_family_coff(abfd) \
-  (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \
-   bfd_get_flavour (abfd) == bfd_target_xcoff_flavour)
-#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG)
-#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE)
-#define bfd_header_big_endian(abfd) \
-  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG)
-#define bfd_header_little_endian(abfd) \
-  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
-#define bfd_get_file_flags(abfd) ((abfd)->flags)
-#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
-#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
-#define bfd_has_map(abfd) ((abfd)->has_armap)
-#define bfd_is_thin_archive(abfd) ((abfd)->is_thin_archive)
-
-#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
-#define bfd_usrdata(abfd) ((abfd)->usrdata)
-
-#define bfd_get_start_address(abfd) ((abfd)->start_address)
-#define bfd_get_symcount(abfd) ((abfd)->symcount)
-#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
-#define bfd_count_sections(abfd) ((abfd)->section_count)
-
-#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount)
-
-#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
-
 extern bfd_boolean bfd_cache_close
   (bfd *abfd);
 /* NB: This declaration should match the autogenerated one in libbfd.h.  */
diff --git a/bfd/targets.c b/bfd/targets.c
index b02dfc5484..116a5c34de 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -584,6 +584,66 @@ to find an alternative output format that is suitable.
 .
 .} bfd_target;
 .
+.static inline const char *
+.bfd_get_target (const bfd *abfd)
+.{
+.  return abfd->xvec->name;
+.}
+.
+.static inline enum bfd_flavour
+.bfd_get_flavour (const bfd *abfd)
+.{
+.  return abfd->xvec->flavour;
+.}
+.
+.static inline flagword
+.bfd_applicable_file_flags (const bfd *abfd)
+.{
+.  return abfd->xvec->object_flags;
+.}
+.
+.static inline bfd_boolean
+.bfd_family_coff (const bfd *abfd)
+.{
+.  return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
+.          || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
+.}
+.
+.static inline bfd_boolean
+.bfd_big_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
+.}
+.static inline bfd_boolean
+.bfd_little_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
+.}
+.
+.static inline bfd_boolean
+.bfd_header_big_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
+.}
+.
+.static inline bfd_boolean
+.bfd_header_little_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
+.}
+.
+.static inline flagword
+.bfd_applicable_section_flags (const bfd *abfd)
+.{
+.  return abfd->xvec->section_flags;
+.}
+.
+.static inline char
+.bfd_get_symbol_leading_char (const bfd *abfd)
+.{
+.  return abfd->xvec->symbol_leading_char;
+.}
+.
 */
 
 /* All known xvecs (even those that don't compile on all systems).
diff --git a/binutils/ar.c b/binutils/ar.c
index 4e953c054d..6bac862bc7 100644
--- a/binutils/ar.c
+++ b/binutils/ar.c
@@ -1200,7 +1200,7 @@ write_archive (bfd *iarch)
     obfd->flags |= BFD_DETERMINISTIC_OUTPUT;
 
   if (make_thin_archive || bfd_is_thin_archive (iarch))
-    bfd_is_thin_archive (obfd) = 1;
+    bfd_set_thin_archive (obfd, TRUE);
 
   if (!bfd_set_archive_head (obfd, contents_head))
     bfd_fatal (old_name);
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 5e71ded203..1052501c35 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3584,14 +3584,14 @@ dwarf2_read_gdb_index
 	return 0;
 
       if (!read_gdb_index_from_buffer (objfile,
-				       bfd_get_filename (dwz->dwz_bfd), 1,
-				       dwz_index_content, &dwz_map,
+				       bfd_get_filename (dwz->dwz_bfd.get ()),
+				       1, dwz_index_content, &dwz_map,
 				       &dwz_list, &dwz_list_elements,
 				       &dwz_types_ignore,
 				       &dwz_types_elements_ignore))
 	{
 	  warning (_("could not read '.gdb_index' section from %s; skipping"),
-		   bfd_get_filename (dwz->dwz_bfd));
+		   bfd_get_filename (dwz->dwz_bfd.get ()));
 	  return 0;
 	}
     }
@@ -5596,11 +5596,11 @@ dwarf2_read_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile)
   if (dwz != NULL)
     {
       if (!read_debug_names_from_section (objfile,
-					  bfd_get_filename (dwz->dwz_bfd),
+					  bfd_get_filename (dwz->dwz_bfd.get ()),
 					  &dwz->debug_names, dwz_map))
 	{
 	  warning (_("could not read '.debug_names' section from %s; skipping"),
-		   bfd_get_filename (dwz->dwz_bfd));
+		   bfd_get_filename (dwz->dwz_bfd.get ()));
 	  return false;
 	}
     }
@@ -19759,11 +19759,11 @@ read_indirect_string_from_dwz (struct objfile *objfile, struct dwz_file *dwz,
   if (dwz->str.buffer == NULL)
     error (_("DW_FORM_GNU_strp_alt used without .debug_str "
 	     "section [in module %s]"),
-	   bfd_get_filename (dwz->dwz_bfd));
+	   bfd_get_filename (dwz->dwz_bfd.get ()));
   if (str_offset >= dwz->str.size)
     error (_("DW_FORM_GNU_strp_alt pointing outside of "
 	     ".debug_str section [in module %s]"),
-	   bfd_get_filename (dwz->dwz_bfd));
+	   bfd_get_filename (dwz->dwz_bfd.get ()));
   gdb_assert (HOST_CHAR_BIT == 8);
   if (dwz->str.buffer[str_offset] == '\0')
     return NULL;
diff --git a/gdb/dwarf2read.h b/gdb/dwarf2read.h
index e9b946247b..d5a02990d4 100644
--- a/gdb/dwarf2read.h
+++ b/gdb/dwarf2read.h
@@ -417,7 +417,7 @@ struct dwz_file
 
   const char *filename () const
   {
-    return bfd_get_filename (this->dwz_bfd);
+    return bfd_get_filename (this->dwz_bfd.get ());
   }
 
   /* A dwz file can only contain a few sections.  */
diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
index 8a67d5e97d..69618a27e1 100644
--- a/gdb/gdb_bfd.c
+++ b/gdb/gdb_bfd.c
@@ -546,7 +546,7 @@ gdb_bfd_ref (struct bfd *abfd)
   abfd->flags |= BFD_DECOMPRESS;
 
   gdata = new gdb_bfd_data (abfd);
-  bfd_usrdata (abfd) = gdata;
+  bfd_set_usrdata (abfd, gdata);
   bfd_alloc_data (abfd);
 
   /* This is the first we've seen it, so add it to the hash table.  */
@@ -608,7 +608,7 @@ gdb_bfd_unref (struct bfd *abfd)
 
   bfd_free_data (abfd);
   delete gdata;
-  bfd_usrdata (abfd) = NULL;  /* Paranoia.  */
+  bfd_set_usrdata (abfd, NULL);  /* Paranoia.  */
 
   htab_remove_elt (all_bfds, abfd);
 
diff --git a/gdb/machoread.c b/gdb/machoread.c
index 1795982a3e..a015d297c3 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -671,7 +671,7 @@ macho_symfile_read_all_oso (std::vector<oso_el> *oso_vector_ptr,
           /* Load all oso in this library.  */
 	  while (member_bfd != NULL)
 	    {
-	      const char *member_name = member_bfd->filename;
+	      const char *member_name = bfd_get_filename (member_bfd.get ());
               int member_len = strlen (member_name);
 
               /* If this member is referenced, add it as a symfile.  */
@@ -685,7 +685,7 @@ macho_symfile_read_all_oso (std::vector<oso_el> *oso_vector_ptr,
                                   member_len))
                     {
                       macho_add_oso_symfile (oso2, member_bfd,
-					     bfd_get_filename (member_bfd),
+					     bfd_get_filename (member_bfd.get ()),
                                              main_objfile, symfile_flags);
                       oso2->name = NULL;
                       break;
diff --git a/gdb/solib.c b/gdb/solib.c
index 86000f6d61..b9a61e265b 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -502,14 +502,14 @@ solib_bfd_open (const char *pathname)
   /* Check bfd format.  */
   if (!bfd_check_format (abfd.get (), bfd_object))
     error (_("`%s': not in executable format: %s"),
-	   bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
+	   bfd_get_filename (abfd.get ()), bfd_errmsg (bfd_get_error ()));
 
   /* Check bfd arch.  */
   b = gdbarch_bfd_arch_info (target_gdbarch ());
   if (!b->compatible (b, bfd_get_arch_info (abfd.get ())))
     warning (_("`%s': Shared library architecture %s is not compatible "
-               "with target architecture %s."), bfd_get_filename (abfd),
-             bfd_get_arch_info (abfd.get ())->printable_name,
+	       "with target architecture %s."), bfd_get_filename (abfd.get ()),
+	     bfd_get_arch_info (abfd.get ())->printable_name,
 	     b->printable_name);
 
   return abfd;
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index bd5c888782..208d169404 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -217,7 +217,7 @@ build_section_lists (lang_statement_union_type *statement)
     {
       asection *i = statement->input_section.section;
 
-      if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
+      if (!bfd_input_just_syms (i->owner)
 	  && (i->flags & SEC_EXCLUDE) == 0
 	  && i->output_section != NULL
 	  && i->output_section->owner == link_info.output_bfd)
diff --git a/ld/emultempl/mmo.em b/ld/emultempl/mmo.em
index fff48942bc..85c5863953 100644
--- a/ld/emultempl/mmo.em
+++ b/ld/emultempl/mmo.em
@@ -116,9 +116,7 @@ mmo_place_orphan (asection *s,
 	    && (nexts->flags & SEC_EXCLUDE) == 0
 	    && ((nexts->flags ^ flags) & (SEC_LOAD | SEC_ALLOC)) == 0
 	    && (nexts->owner->flags & DYNAMIC) == 0
-	    && nexts->owner->usrdata != NULL
-	    && !(((lang_input_statement_type *) nexts->owner->usrdata)
-		 ->flags.just_syms))
+	    && !bfd_input_just_syms (nexts->owner))
 	  flags = (((flags ^ SEC_READONLY) | (nexts->flags ^ SEC_READONLY))
 		   ^ SEC_READONLY);
     }
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 70f771cebd..150c98296f 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -2116,9 +2116,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
 		&& (nexts->flags & SEC_EXCLUDE) == 0
 		&& ((nexts->flags ^ flags) & (SEC_LOAD | SEC_ALLOC)) == 0
 		&& (nexts->owner->flags & DYNAMIC) == 0
-		&& nexts->owner->usrdata != NULL
-		&& !(((lang_input_statement_type *) nexts->owner->usrdata)
-		     ->flags.just_syms))
+		&& !bfd_input_just_syms (nexts->owner))
 	      flags = (((flags ^ SEC_READONLY)
 			| (nexts->flags ^ SEC_READONLY))
 		       ^ SEC_READONLY);
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index 6d150d211a..ab2a989bc5 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -1914,9 +1914,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
 		&& (nexts->flags & SEC_EXCLUDE) == 0
 		&& ((nexts->flags ^ flags) & (SEC_LOAD | SEC_ALLOC)) == 0
 		&& (nexts->owner->flags & DYNAMIC) == 0
-		&& nexts->owner->usrdata != NULL
-		&& !(((lang_input_statement_type *) nexts->owner->usrdata)
-		     ->flags.just_syms))
+		&& !bfd_input_just_syms (nexts->owner))
 	      flags = (((flags ^ SEC_READONLY)
 			| (nexts->flags ^ SEC_READONLY))
 		       ^ SEC_READONLY);
diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
index ee71f256c6..aad56cfddd 100644
--- a/ld/emultempl/ppc64elf.em
+++ b/ld/emultempl/ppc64elf.em
@@ -489,7 +489,7 @@ build_section_lists (lang_statement_union_type *statement)
     {
       asection *i = statement->input_section.section;
 
-      if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
+      if (!bfd_input_just_syms (i->owner)
 	  && (i->flags & SEC_EXCLUDE) == 0
 	  && i->output_section != NULL
 	  && i->output_section->owner == link_info.output_bfd)
diff --git a/ld/ldelf.c b/ld/ldelf.c
index 8d4a2e58a1..e43d33d432 100644
--- a/ld/ldelf.c
+++ b/ld/ldelf.c
@@ -1018,7 +1018,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
 	   abfd != (bfd *) NULL; abfd = abfd->link.next)
 	if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
 	    && bfd_count_sections (abfd) != 0
-	    && !((lang_input_statement_type *) abfd->usrdata)->flags.just_syms)
+	    && !bfd_input_just_syms (abfd))
 	  break;
 
       /* PR 10555: If there are no ELF input files do not try to
@@ -1060,7 +1060,7 @@ ldelf_after_open (int use_libpath, int native, int is_linux, int is_freebsd,
 	{
 	  int type = 0;
 
-	  if (((lang_input_statement_type *) abfd->usrdata)->flags.just_syms)
+	  if (bfd_input_just_syms (abfd))
 	    continue;
 
 	  for (s = abfd->sections; s && type < COMPACT_EH_HDR; s = s->next)
@@ -2065,9 +2065,7 @@ ldelf_place_orphan (asection *s, const char *secname, int constraint)
 	    && (nexts->flags & SEC_EXCLUDE) == 0
 	    && ((nexts->flags ^ flags) & (SEC_LOAD | SEC_ALLOC)) == 0
 	    && (nexts->owner->flags & DYNAMIC) == 0
-	    && nexts->owner->usrdata != NULL
-	    && !(((lang_input_statement_type *) nexts->owner->usrdata)
-		 ->flags.just_syms)
+	    && !bfd_input_just_syms (nexts->owner)
 	    && _bfd_elf_match_sections_by_type (nexts->owner, nexts,
 						s->owner, s))
 	  flags = (((flags ^ SEC_READONLY)
diff --git a/ld/ldlang.c b/ld/ldlang.c
index a3843623fb..0ffcf34473 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -902,12 +902,8 @@ walk_wild_file (lang_wild_statement_type *s,
 	     archive which is included, BFD will call ldlang_add_file,
 	     which will set the usrdata field of the member to the
 	     lang_input_statement.  */
-	  if (member->usrdata != NULL)
-	    {
-	      walk_wild_section (s,
-				 (lang_input_statement_type *) member->usrdata,
-				 callback, data);
-	    }
+	  if (bfd_usrdata (member) != NULL)
+	    walk_wild_section (s, bfd_usrdata (member), callback, data);
 
 	  member = bfd_openr_next_archived_file (f->the_bfd, member);
 	}
@@ -3038,7 +3034,7 @@ load_symbols (lang_input_statement_type *entry,
     case bfd_archive:
       check_excluded_libs (entry->the_bfd);
 
-      entry->the_bfd->usrdata = entry;
+      bfd_set_usrdata (entry->the_bfd, entry);
       if (entry->flags.whole_archive)
 	{
 	  bfd *member = NULL;
@@ -6898,7 +6894,7 @@ ldlang_add_file (lang_input_statement_type *entry)
 
   *link_info.input_bfds_tail = entry->the_bfd;
   link_info.input_bfds_tail = &entry->the_bfd->link.next;
-  entry->the_bfd->usrdata = entry;
+  bfd_set_usrdata (entry->the_bfd, entry);
   bfd_set_gp_size (entry->the_bfd, g_switch_value);
 
   /* Look through the sections and check for any which should not be
@@ -7540,7 +7536,7 @@ lang_process (void)
 	      *iter = temp;
 	      if (my_arch != NULL)
 		{
-		  lang_input_statement_type *parent = my_arch->usrdata;
+		  lang_input_statement_type *parent = bfd_usrdata (my_arch);
 		  if (parent != NULL)
 		    parent->next = (lang_input_statement_type *)
 		      ((char *) iter
diff --git a/ld/ldlang.h b/ld/ldlang.h
index 686e44f841..9fb10f80a7 100644
--- a/ld/ldlang.h
+++ b/ld/ldlang.h
@@ -331,6 +331,12 @@ typedef struct input_section_userdata_struct
 
 #define get_userdata(x) ((x)->userdata)
 
+static inline bfd_boolean
+bfd_input_just_syms (const bfd *abfd)
+{
+  lang_input_statement_type *is = bfd_usrdata (abfd);
+  return is != NULL && is->flags.just_syms;
+}
 
 typedef struct lang_wild_statement_struct lang_wild_statement_type;
 
diff --git a/ld/ldmain.c b/ld/ldmain.c
index e24194ef87..34c1922313 100644
--- a/ld/ldmain.c
+++ b/ld/ldmain.c
@@ -816,7 +816,7 @@ add_archive_element (struct bfd_link_info *info,
   input->local_sym_name = abfd->filename;
   input->the_bfd = abfd;
 
-  parent = abfd->my_archive->usrdata;
+  parent = bfd_usrdata (abfd->my_archive);
   if (parent != NULL && !parent->flags.reload)
     parent->next = input;
 
diff --git a/sim/ppc/emul_generic.c b/sim/ppc/emul_generic.c
index dc0b2cf1e0..64c0219309 100644
--- a/sim/ppc/emul_generic.c
+++ b/sim/ppc/emul_generic.c
@@ -262,12 +262,7 @@ emul_add_tree_options(device *tree,
   if (tree_find_property(tree, "/options/little-endian?"))
     little_endian = tree_find_boolean_property(tree, "/options/little-endian?");
   else {
-#ifdef bfd_little_endian	/* new bfd */
     little_endian = (image != NULL && bfd_little_endian(image));
-#else
-    little_endian = (image != NULL &&
-		     !image->xvec->byteorder_big_p);
-#endif
     tree_parse(tree, "/options/little-endian? %s",
 	       little_endian ? "true" : "false");
   }
