]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - ld/ldctor.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / ld / ldctor.h
index 72ca8beec8e4c2fdd4d364c72afbc83654acac51..e77ebfc3ca092d5f148e0a2ec78659d3da4b6cf8 100644 (file)
@@ -1,9 +1,62 @@
+/* ldctor.h - linker constructor support
+   Copyright (C) 1991-2022 Free Software Foundation, Inc.
 
-void EXFUN(find_constructors,(void));
-void EXFUN(ldlang_check_for_constructors,(
-                                    struct
-                                    lang_input_statement_struct *));
+   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.
 
-void EXFUN(ldlang_add_constructor,(ldsym_type *name));
+   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.  */
+
+#ifndef LDCTOR_H
+#define LDCTOR_H
+
+/* List of statements needed to handle constructors */
+extern lang_statement_list_type constructor_list;
+
+/* Whether the constructors should be sorted.  Note that this is
+   global for the entire link; we assume that there is only a single
+   CONSTRUCTORS command in the linker script.  */
+extern bool constructors_sorted;
+
+/* We keep a list of these structures for each set we build.  */
+
+struct set_info {
+  struct set_info *next;               /* Next set.  */
+  struct bfd_link_hash_entry *h;       /* Hash table entry.  */
+  bfd_reloc_code_real_type reloc;      /* Reloc to use for an entry.  */
+  size_t count;                                /* Number of elements.  */
+  struct set_element *elements;                /* Elements in set.  */
+};
+
+struct set_element {
+  union {
+    struct set_element *next;          /* Next element.  */
+    long idx;
+  } u;
+  const char *name;                    /* Name in set (may be NULL).  */
+  asection *section;                   /* Section of value in set.  */
+  bfd_vma value;                       /* Value in set.  */
+};
+
+/* The sets we have seen.  */
+
+extern struct set_info *sets;
+
+extern void ldctor_add_set_entry
+  (struct bfd_link_hash_entry *, bfd_reloc_code_real_type, const char *,
+   asection *, bfd_vma);
+extern void ldctor_build_sets
+  (void);
+
+#endif