* elf32-sh.c (sh_elf_create_dynamic_sections): Return if dynamic
[deliverable/binutils-gdb.git] / bfd / elf-bfd.h
index 073aee8a1794bd6d2872a2516a8721a1916253de..1b9ec8ae2566e1cdc6dcdd1d9e593639a396c00e 100644 (file)
@@ -210,6 +210,30 @@ struct elf_link_hash_entry
 #define ELF_LINK_DYNAMIC_WEAK 040000
 };
 
+/* Will references to this symbol always reference the symbol
+   in this object?  STV_PROTECTED is excluded from the visibility test
+   here so that function pointer comparisons work properly.  Since
+   function symbols not defined in an app are set to their .plt entry,
+   it's necessary for shared libs to also reference the .plt even
+   though the symbol is really local to the shared lib.  */
+#define SYMBOL_REFERENCES_LOCAL(INFO, H)                               \
+  ((! (INFO)->shared                                                   \
+    || (INFO)->symbolic                                                        \
+    || (H)->dynindx == -1                                              \
+    || ELF_ST_VISIBILITY ((H)->other) == STV_INTERNAL                  \
+    || ELF_ST_VISIBILITY ((H)->other) == STV_HIDDEN                    \
+    || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)                \
+   && ((H)->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
+
+/* Will _calls_ to this symbol always call the version in this object?  */
+#define SYMBOL_CALLS_LOCAL(INFO, H)                                    \
+  ((! (INFO)->shared                                                   \
+    || (INFO)->symbolic                                                        \
+    || (H)->dynindx == -1                                              \
+    || ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT                   \
+    || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)                \
+   && ((H)->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
+
 /* Records local symbols to be emitted in the dynamic symbol table.  */
 
 struct elf_link_local_dynamic_entry
@@ -682,7 +706,7 @@ struct elf_backend_data
 
      This function is responsible for adjust the section contents as
      necessary, and (if using Rela relocs and generating a
-     relocateable output file) adjusting the reloc addend as
+     relocatable output file) adjusting the reloc addend as
      necessary.
 
      This function does not have to worry about setting the reloc
@@ -696,7 +720,7 @@ struct elf_backend_data
      The global hash table entry for the global symbols can be found
      via elf_sym_hashes (input_bfd).
 
-     When generating relocateable output, this function must handle
+     When generating relocatable output, this function must handle
      STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
      going to be the section symbol corresponding to the output
      section, which means that the addend must be adjusted
@@ -851,6 +875,12 @@ struct elf_backend_data
      Used for the MIPS ELF .mdebug section.  */
   const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
 
+  /* This function implements `bfd_elf_bfd_from_remote_memory';
+     see elf.c, elfcode.h.  */
+  bfd *(*elf_backend_bfd_from_remote_memory)
+     PARAMS ((bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
+             int (*target_read_memory) (bfd_vma vma, char *myaddr, int len)));
+
   /* Alternate EM_xxxx machine codes for this backend.  */
   int elf_machine_alt1;
   int elf_machine_alt2;
@@ -1224,6 +1254,9 @@ struct elf_obj_tdata
   /* Number of symbol version references we are about to emit.  */
   unsigned int cverrefs;
 
+  /* Segment flags for the PT_GNU_STACK segment.  */
+  unsigned int stack_flags;  
+
   /* Symbol version definitions in external objects.  */
   Elf_Internal_Verdef *verdef;
 
@@ -1521,35 +1554,6 @@ extern bfd_boolean _bfd_elfcore_make_pseudosection
 extern char *_bfd_elfcore_strndup
   PARAMS ((bfd *, char *, size_t));
 
-extern elf_linker_section_t *_bfd_elf_create_linker_section
-  PARAMS ((bfd *, struct bfd_link_info *, enum elf_linker_section_enum,
-          elf_linker_section_t *));
-
-extern elf_linker_section_pointers_t *_bfd_elf_find_pointer_linker_section
-  PARAMS ((elf_linker_section_pointers_t *, bfd_vma,
-          elf_linker_section_enum_t));
-
-extern bfd_boolean bfd_elf32_create_pointer_linker_section
-  PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
-          struct elf_link_hash_entry *, const Elf_Internal_Rela *));
-
-extern bfd_vma bfd_elf32_finish_pointer_linker_section
-  PARAMS ((bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *,
-          struct elf_link_hash_entry *, bfd_vma,
-          const Elf_Internal_Rela *, int));
-
-extern bfd_boolean bfd_elf64_create_pointer_linker_section
-  PARAMS ((bfd *, struct bfd_link_info *, elf_linker_section_t *,
-          struct elf_link_hash_entry *, const Elf_Internal_Rela *));
-
-extern bfd_vma bfd_elf64_finish_pointer_linker_section
-  PARAMS ((bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *,
-          struct elf_link_hash_entry *, bfd_vma,
-          const Elf_Internal_Rela *, int));
-
-extern bfd_boolean _bfd_elf_make_linker_section_rela
-  PARAMS ((bfd *, elf_linker_section_t *, int));
-
 extern Elf_Internal_Rela *_bfd_elf_link_read_relocs
   PARAMS ((bfd *, asection *, PTR, Elf_Internal_Rela *, bfd_boolean));
 
@@ -1726,6 +1730,13 @@ extern char *elfcore_write_prxfpreg
 extern char *elfcore_write_lwpstatus
   PARAMS ((bfd *, char *, int *, long, int, const PTR));
 
+extern bfd *_bfd_elf32_bfd_from_remote_memory
+  PARAMS ((bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
+          int (*target_read_memory) (bfd_vma, char *, int)));
+extern bfd *_bfd_elf64_bfd_from_remote_memory
+  PARAMS ((bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
+          int (*target_read_memory) (bfd_vma, char *, int)));
+
 /* SH ELF specific routine.  */
 
 extern bfd_boolean _sh_elf_set_mach_from_flags
This page took 0.02464 seconds and 4 git commands to generate.