. sections. *}
.#define SEC_COFF_SHARED_LIBRARY 0x800
.
+. {* The section has GOT references. This flag is only for the
+. linker, and is currently only used by the elf32-hppa back end.
+. It will be set if global offset table references were detected
+. in this section, which indicate to the linker that the section
+. contains PIC code, and must be handled specially when doing a
+. static link. *}
+.#define SEC_HAS_GOT_REF 0x4000
+.
. {* The section contains common symbols (symbols may be defined
. multiple times, the value of a symbol is the amount of
. space it requires, and the largest symbol value is the one
. {* A mark flag used by some linker backends for garbage collection. *}
. unsigned int gc_mark : 1;
.
+. {* Used by the ELF code to mark sections which have been allocated to segments. *}
+. unsigned int segment_mark : 1;
+.
. {* End of internal packed boolean fields. *}
.
. {* The virtual memory address of the section - where it will be
GLOBAL_SYM_INIT (BFD_IND_SECTION_NAME, &bfd_ind_section)
};
-#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
- const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
- const asection SEC = \
- /* name, id, index, next, flags, user_set_vma, reloc_done, */ \
- { NAME, -1-(IDX), 0, NULL, FLAGS, 0, 0, \
+#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
+ const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
+ const asection SEC = \
+ /* name, id, index, next, flags, user_set_vma, reloc_done, */ \
+ { NAME, IDX, 0, NULL, FLAGS, 0, 0, \
\
- /* linker_mark, gc_mark, vma, lma, _cooked_size, _raw_size, */ \
- 0, 0, 0, 0, 0, 0, \
+ /* linker_mark, gc_mark, segment_mark, vma, lma, _cooked_size, */ \
+ 0, 0, 0, 0, 0, 0, \
\
- /* output_offset, output_section, alignment_power, */ \
- 0, (struct sec *) &SEC, 0, \
+ /* _raw_size, output_offset, output_section, alignment_power, */ \
+ 0, 0, (struct sec *) &SEC, 0, \
\
/* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
NULL, NULL, 0, 0, 0, \
}
+/*
+FUNCTION
+ bfd_get_unique_section_name
+
+SYNOPSIS
+ char *bfd_get_unique_section_name(bfd *abfd,
+ const char *template,
+ int *count);
+
+DESCRIPTION
+ Invent a section name that is unique in @var{abfd} by tacking
+ a digit suffix onto the original @var{template}. If @var{count}
+ is non-NULL, then it specifies the first number tried as a
+ suffix to generate a unique name. The value pointed to by
+ @var{count} will be incremented in this case.
+*/
+
+char *
+bfd_get_unique_section_name (abfd, template, count)
+ bfd *abfd;
+ const char *template;
+ int *count;
+{
+ int num;
+ unsigned int len;
+ char *sname;
+
+ len = strlen (template);
+ sname = bfd_malloc (len + 7);
+ strcpy (sname, template);
+ num = 1;
+ if (count != NULL)
+ num = *count;
+
+ do
+ {
+ /* If we have a million sections, something is badly wrong. */
+ if (num > 999999)
+ abort ();
+ sprintf (sname + len, "%d", num++);
+ }
+ while (bfd_get_section_by_name (abfd, sname) != NULL);
+
+ if (count != NULL)
+ *count = num;
+ return sname;
+}
+
+
/*
FUNCTION
bfd_make_section_old_way
bfd *abfd;
const char *name;
{
- static int section_id = 0;
+ static int section_id = 0x10; /* id 0 to 3 used by STD_SECTION. */
asection *newsect;
asection **prev = &abfd->sections;
asection *sect = abfd->sections;