(SEC_HAS_GOT_REF): Define new flag for asection.
(bfd_get_unique_section_name): New function.
This commit is contained in:
parent
832d951ba4
commit
1bd916895e
3 changed files with 79 additions and 5 deletions
|
@ -1,5 +1,9 @@
|
|||
2000-09-05 Alan Modra <alan@linuxcare.com.au>
|
||||
|
||||
* section.c (SEC_HAS_GOT_REF): Define new flag for asection.
|
||||
(bfd_get_unique_section_name): New function.
|
||||
* bfd_in2.h: Regenerate.
|
||||
|
||||
* elf64-hppa.c (elf64_hppa_check_relocs): Handle R_PARISC_PCREL12F.
|
||||
(elf64_hppa_size_dynamic_sections): Remove the FIXME at bfd_zalloc
|
||||
comment.
|
||||
|
|
|
@ -1008,6 +1008,14 @@ typedef struct sec
|
|||
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
|
||||
|
@ -1274,6 +1282,11 @@ extern const struct symbol_cache_entry * const bfd_ind_symbol;
|
|||
asection *
|
||||
bfd_get_section_by_name PARAMS ((bfd *abfd, const char *name));
|
||||
|
||||
char *
|
||||
bfd_get_unique_section_name PARAMS ((bfd *abfd,
|
||||
const char *template,
|
||||
int *count));
|
||||
|
||||
asection *
|
||||
bfd_make_section_old_way PARAMS ((bfd *abfd, const char *name));
|
||||
|
||||
|
@ -2024,11 +2037,6 @@ to compensate for the borrow when the low bits are added. */
|
|||
BFD_RELOC_MIPS_GOT_PAGE,
|
||||
BFD_RELOC_MIPS_GOT_OFST,
|
||||
BFD_RELOC_MIPS_GOT_DISP,
|
||||
BFD_RELOC_SH_COPY,
|
||||
BFD_RELOC_SH_GLOB_DAT,
|
||||
BFD_RELOC_SH_JMP_SLOT,
|
||||
BFD_RELOC_SH_RELATIVE,
|
||||
BFD_RELOC_SH_GOTPC,
|
||||
|
||||
|
||||
/* i386/elf relocations */
|
||||
|
@ -2167,6 +2175,11 @@ field in the instruction. */
|
|||
BFD_RELOC_SH_LABEL,
|
||||
BFD_RELOC_SH_LOOP_START,
|
||||
BFD_RELOC_SH_LOOP_END,
|
||||
BFD_RELOC_SH_COPY,
|
||||
BFD_RELOC_SH_GLOB_DAT,
|
||||
BFD_RELOC_SH_JMP_SLOT,
|
||||
BFD_RELOC_SH_RELATIVE,
|
||||
BFD_RELOC_SH_GOTPC,
|
||||
|
||||
/* Thumb 23-, 12- and 9-bit pc-relative branches. The lowest bit must
|
||||
be zero and is not stored in the instruction. */
|
||||
|
|
|
@ -264,6 +264,14 @@ CODE_FRAGMENT
|
|||
. 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
|
||||
|
@ -635,6 +643,55 @@ bfd_get_section_by_name (abfd, name)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue