2001-01-03 Kazu Hirata <kazu@hxi.com>
* ecoffswap.h: Fix formatting. * elf-bfd.h: Likewise. * elfarm-nabi.c: Likewise. * elfarm-oabi.c: Likewise. * elfcode.h: Likewise. * elfcore.h: Likewise. * elflink.c: Likewise. * elflink.h: Likewise. * elfxx-ia64.c: Likewise. * elfxx-target.h: Likewise.
This commit is contained in:
parent
ad2a4d0953
commit
3e932841da
@ -1,6 +1,16 @@
|
|||||||
2001-01-03 Kazu Hirata <kazu@hxi.com>
|
2001-01-03 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
* libbfd.c: Fix formatting.
|
* ecoffswap.h: Fix formatting.
|
||||||
|
* elf-bfd.h: Likewise.
|
||||||
|
* elfarm-nabi.c: Likewise.
|
||||||
|
* elfarm-oabi.c: Likewise.
|
||||||
|
* elfcode.h: Likewise.
|
||||||
|
* elfcore.h: Likewise.
|
||||||
|
* elflink.c: Likewise.
|
||||||
|
* elflink.h: Likewise.
|
||||||
|
* elfxx-ia64.c: Likewise.
|
||||||
|
* elfxx-target.h: Likewise.
|
||||||
|
* libbfd.c: Likewise
|
||||||
* linker.c: Likewise.
|
* linker.c: Likewise.
|
||||||
* lynx-core.c: Likewise.
|
* lynx-core.c: Likewise.
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ ecoff_swap_hdr_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ ecoff_swap_hdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ ecoff_swap_fdr_in (abfd, ext_copy, intern)
|
|||||||
struct fdr_ext ext[1];
|
struct fdr_ext ext[1];
|
||||||
|
|
||||||
*ext = *(struct fdr_ext *) ext_copy;
|
*ext = *(struct fdr_ext *) ext_copy;
|
||||||
|
|
||||||
intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->f_adr);
|
intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->f_adr);
|
||||||
intern->rss = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_rss);
|
intern->rss = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_rss);
|
||||||
#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64)
|
#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64)
|
||||||
@ -219,7 +219,7 @@ ecoff_swap_fdr_in (abfd, ext_copy, intern)
|
|||||||
intern->rfdBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_rfdBase);
|
intern->rfdBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_rfdBase);
|
||||||
intern->crfd = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_crfd);
|
intern->crfd = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_crfd);
|
||||||
|
|
||||||
/* now the fun stuff... */
|
/* now the fun stuff... */
|
||||||
if (bfd_header_big_endian (abfd)) {
|
if (bfd_header_big_endian (abfd)) {
|
||||||
intern->lang = (ext->f_bits1[0] & FDR_BITS1_LANG_BIG)
|
intern->lang = (ext->f_bits1[0] & FDR_BITS1_LANG_BIG)
|
||||||
>> FDR_BITS1_LANG_SH_BIG;
|
>> FDR_BITS1_LANG_SH_BIG;
|
||||||
@ -244,7 +244,7 @@ ecoff_swap_fdr_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ ecoff_swap_fdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
FDR intern[1];
|
FDR intern[1];
|
||||||
|
|
||||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||||
|
|
||||||
ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->f_adr);
|
ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->f_adr);
|
||||||
bfd_h_put_32 (abfd, intern->rss, (bfd_byte *)ext->f_rss);
|
bfd_h_put_32 (abfd, intern->rss, (bfd_byte *)ext->f_rss);
|
||||||
bfd_h_put_32 (abfd, intern->issBase, (bfd_byte *)ext->f_issBase);
|
bfd_h_put_32 (abfd, intern->issBase, (bfd_byte *)ext->f_issBase);
|
||||||
@ -284,7 +284,7 @@ ecoff_swap_fdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
bfd_h_put_32 (abfd, intern->rfdBase, (bfd_byte *)ext->f_rfdBase);
|
bfd_h_put_32 (abfd, intern->rfdBase, (bfd_byte *)ext->f_rfdBase);
|
||||||
bfd_h_put_32 (abfd, intern->crfd, (bfd_byte *)ext->f_crfd);
|
bfd_h_put_32 (abfd, intern->crfd, (bfd_byte *)ext->f_crfd);
|
||||||
|
|
||||||
/* now the fun stuff... */
|
/* now the fun stuff... */
|
||||||
if (bfd_header_big_endian (abfd)) {
|
if (bfd_header_big_endian (abfd)) {
|
||||||
ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_BIG)
|
ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_BIG)
|
||||||
& FDR_BITS1_LANG_BIG)
|
& FDR_BITS1_LANG_BIG)
|
||||||
@ -312,7 +312,7 @@ ecoff_swap_fdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,11 +373,11 @@ ecoff_swap_pdr_in (abfd, ext_copy, intern)
|
|||||||
<< PDR_BITS2_RESERVED_SH_LEFT_LITTLE));
|
<< PDR_BITS2_RESERVED_SH_LEFT_LITTLE));
|
||||||
}
|
}
|
||||||
intern->localoff = bfd_h_get_8 (abfd, (bfd_byte *) ext->p_localoff);
|
intern->localoff = bfd_h_get_8 (abfd, (bfd_byte *) ext->p_localoff);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,7 +393,7 @@ ecoff_swap_pdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
PDR intern[1];
|
PDR intern[1];
|
||||||
|
|
||||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||||
|
|
||||||
ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->p_adr);
|
ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->p_adr);
|
||||||
bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym);
|
bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym);
|
||||||
bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline);
|
bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline);
|
||||||
@ -434,17 +434,17 @@ ecoff_swap_pdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
& PDR_BITS2_RESERVED_LITTLE);
|
& PDR_BITS2_RESERVED_LITTLE);
|
||||||
}
|
}
|
||||||
bfd_h_put_8 (abfd, intern->localoff, (bfd_byte *) ext->p_localoff);
|
bfd_h_put_8 (abfd, intern->localoff, (bfd_byte *) ext->p_localoff);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* MPW_C */
|
#else /* MPW_C */
|
||||||
/* Same routines, but with ECOFF_64 code removed, so ^&%$#&! MPW C doesn't
|
/* Same routines, but with ECOFF_64 code removed, so ^&%$#&! MPW C doesn't
|
||||||
corrupt itself and then freak out. */
|
corrupt itself and then freak out. */
|
||||||
/* Swap in the procedure descriptor record. */
|
/* Swap in the procedure descriptor record. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -456,7 +456,7 @@ ecoff_swap_pdr_in (abfd, ext_copy, intern)
|
|||||||
struct pdr_ext ext[1];
|
struct pdr_ext ext[1];
|
||||||
|
|
||||||
*ext = *(struct pdr_ext *) ext_copy;
|
*ext = *(struct pdr_ext *) ext_copy;
|
||||||
|
|
||||||
intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->p_adr);
|
intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->p_adr);
|
||||||
intern->isym = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_isym);
|
intern->isym = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_isym);
|
||||||
intern->iline = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_iline);
|
intern->iline = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_iline);
|
||||||
@ -477,7 +477,7 @@ ecoff_swap_pdr_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,7 +493,7 @@ ecoff_swap_pdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
PDR intern[1];
|
PDR intern[1];
|
||||||
|
|
||||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||||
|
|
||||||
ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->p_adr);
|
ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->p_adr);
|
||||||
bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym);
|
bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym);
|
||||||
bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline);
|
bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline);
|
||||||
@ -511,7 +511,7 @@ ecoff_swap_pdr_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* MPW_C */
|
#endif /* MPW_C */
|
||||||
@ -527,11 +527,11 @@ ecoff_swap_sym_in (abfd, ext_copy, intern)
|
|||||||
struct sym_ext ext[1];
|
struct sym_ext ext[1];
|
||||||
|
|
||||||
*ext = *(struct sym_ext *) ext_copy;
|
*ext = *(struct sym_ext *) ext_copy;
|
||||||
|
|
||||||
intern->iss = bfd_h_get_32 (abfd, (bfd_byte *)ext->s_iss);
|
intern->iss = bfd_h_get_32 (abfd, (bfd_byte *)ext->s_iss);
|
||||||
intern->value = ecoff_get_off (abfd, (bfd_byte *)ext->s_value);
|
intern->value = ecoff_get_off (abfd, (bfd_byte *)ext->s_value);
|
||||||
|
|
||||||
/* now the fun stuff... */
|
/* now the fun stuff... */
|
||||||
if (bfd_header_big_endian (abfd)) {
|
if (bfd_header_big_endian (abfd)) {
|
||||||
intern->st = (ext->s_bits1[0] & SYM_BITS1_ST_BIG)
|
intern->st = (ext->s_bits1[0] & SYM_BITS1_ST_BIG)
|
||||||
>> SYM_BITS1_ST_SH_BIG;
|
>> SYM_BITS1_ST_SH_BIG;
|
||||||
@ -561,7 +561,7 @@ ecoff_swap_sym_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,11 +577,11 @@ ecoff_swap_sym_out (abfd, intern_copy, ext_ptr)
|
|||||||
SYMR intern[1];
|
SYMR intern[1];
|
||||||
|
|
||||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||||
|
|
||||||
bfd_h_put_32 (abfd, intern->iss, (bfd_byte *)ext->s_iss);
|
bfd_h_put_32 (abfd, intern->iss, (bfd_byte *)ext->s_iss);
|
||||||
ecoff_put_off (abfd, intern->value, (bfd_byte *)ext->s_value);
|
ecoff_put_off (abfd, intern->value, (bfd_byte *)ext->s_value);
|
||||||
|
|
||||||
/* now the fun stuff... */
|
/* now the fun stuff... */
|
||||||
if (bfd_header_big_endian (abfd)) {
|
if (bfd_header_big_endian (abfd)) {
|
||||||
ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_BIG)
|
ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_BIG)
|
||||||
& SYM_BITS1_ST_BIG)
|
& SYM_BITS1_ST_BIG)
|
||||||
@ -610,7 +610,7 @@ ecoff_swap_sym_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -625,8 +625,8 @@ ecoff_swap_ext_in (abfd, ext_copy, intern)
|
|||||||
struct ext_ext ext[1];
|
struct ext_ext ext[1];
|
||||||
|
|
||||||
*ext = *(struct ext_ext *) ext_copy;
|
*ext = *(struct ext_ext *) ext_copy;
|
||||||
|
|
||||||
/* now the fun stuff... */
|
/* now the fun stuff... */
|
||||||
if (bfd_header_big_endian (abfd)) {
|
if (bfd_header_big_endian (abfd)) {
|
||||||
intern->jmptbl = 0 != (ext->es_bits1[0] & EXT_BITS1_JMPTBL_BIG);
|
intern->jmptbl = 0 != (ext->es_bits1[0] & EXT_BITS1_JMPTBL_BIG);
|
||||||
intern->cobol_main = 0 != (ext->es_bits1[0] & EXT_BITS1_COBOL_MAIN_BIG);
|
intern->cobol_main = 0 != (ext->es_bits1[0] & EXT_BITS1_COBOL_MAIN_BIG);
|
||||||
@ -649,7 +649,7 @@ ecoff_swap_ext_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -665,8 +665,8 @@ ecoff_swap_ext_out (abfd, intern_copy, ext_ptr)
|
|||||||
EXTR intern[1];
|
EXTR intern[1];
|
||||||
|
|
||||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||||
|
|
||||||
/* now the fun stuff... */
|
/* now the fun stuff... */
|
||||||
if (bfd_header_big_endian (abfd)) {
|
if (bfd_header_big_endian (abfd)) {
|
||||||
ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_BIG : 0)
|
ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_BIG : 0)
|
||||||
| (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_BIG : 0)
|
| (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_BIG : 0)
|
||||||
@ -698,7 +698,7 @@ ecoff_swap_ext_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -716,7 +716,7 @@ ecoff_swap_rfd_in (abfd, ext_ptr, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -734,7 +734,7 @@ ecoff_swap_rfd_out (abfd, intern, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -775,7 +775,7 @@ ecoff_swap_opt_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,7 +814,7 @@ ecoff_swap_opt_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -835,7 +835,7 @@ ecoff_swap_dnr_in (abfd, ext_copy, intern)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -857,6 +857,6 @@ ecoff_swap_dnr_out (abfd, intern_copy, ext_ptr)
|
|||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||||
abort();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ struct elf_link_local_dynamic_entry
|
|||||||
|
|
||||||
/* The index in the outgoing dynamic symbol table. */
|
/* The index in the outgoing dynamic symbol table. */
|
||||||
long dynindx;
|
long dynindx;
|
||||||
|
|
||||||
/* A copy of the input symbol. */
|
/* A copy of the input symbol. */
|
||||||
Elf_Internal_Sym isym;
|
Elf_Internal_Sym isym;
|
||||||
};
|
};
|
||||||
@ -375,7 +375,7 @@ struct elf_backend_data
|
|||||||
unsigned int));
|
unsigned int));
|
||||||
|
|
||||||
/* A function to set the type of the info field. Processor-specific
|
/* A function to set the type of the info field. Processor-specific
|
||||||
types should be handled here. */
|
types should be handled here. */
|
||||||
int (*elf_backend_get_symbol_type) PARAMS (( Elf_Internal_Sym *, int));
|
int (*elf_backend_get_symbol_type) PARAMS (( Elf_Internal_Sym *, int));
|
||||||
|
|
||||||
/* A function to do additional processing on the ELF section header
|
/* A function to do additional processing on the ELF section header
|
||||||
@ -397,7 +397,7 @@ struct elf_backend_data
|
|||||||
Elf32_Internal_Shdr *));
|
Elf32_Internal_Shdr *));
|
||||||
|
|
||||||
/* A function to handle unusual program segment types when creating BFD
|
/* A function to handle unusual program segment types when creating BFD
|
||||||
sections from ELF program segments. */
|
sections from ELF program segments. */
|
||||||
boolean (*elf_backend_section_from_phdr) PARAMS ((bfd *,
|
boolean (*elf_backend_section_from_phdr) PARAMS ((bfd *,
|
||||||
Elf32_Internal_Phdr *,
|
Elf32_Internal_Phdr *,
|
||||||
int));
|
int));
|
||||||
@ -796,14 +796,14 @@ struct elf_obj_tdata
|
|||||||
file_ptr next_file_pos;
|
file_ptr next_file_pos;
|
||||||
#if 0
|
#if 0
|
||||||
/* we don't need these inside bfd anymore, and I think
|
/* we don't need these inside bfd anymore, and I think
|
||||||
these weren't used outside bfd. */
|
these weren't used outside bfd. */
|
||||||
void *prstatus; /* The raw /proc prstatus structure */
|
void *prstatus; /* The raw /proc prstatus structure */
|
||||||
void *prpsinfo; /* The raw /proc prpsinfo structure */
|
void *prpsinfo; /* The raw /proc prpsinfo structure */
|
||||||
#endif
|
#endif
|
||||||
bfd_vma gp; /* The gp value (MIPS only, for now) */
|
bfd_vma gp; /* The gp value (MIPS only, for now) */
|
||||||
unsigned int gp_size; /* The gp size (MIPS only, for now) */
|
unsigned int gp_size; /* The gp size (MIPS only, for now) */
|
||||||
|
|
||||||
/* Information grabbed from an elf core file. */
|
/* Information grabbed from an elf core file. */
|
||||||
int core_signal;
|
int core_signal;
|
||||||
int core_pid;
|
int core_pid;
|
||||||
int core_lwpid;
|
int core_lwpid;
|
||||||
@ -825,7 +825,7 @@ struct elf_obj_tdata
|
|||||||
document the intent of any particular piece of code. The field
|
document the intent of any particular piece of code. The field
|
||||||
should be used as a count until size_dynamic_sections, at which
|
should be used as a count until size_dynamic_sections, at which
|
||||||
point the contents of the .got is fixed. Afterward, if an entry
|
point the contents of the .got is fixed. Afterward, if an entry
|
||||||
is -1, then the symbol does not require a global offset table entry. */
|
is -1, then the symbol does not require a global offset table entry. */
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
bfd_signed_vma *refcounts;
|
bfd_signed_vma *refcounts;
|
||||||
@ -851,7 +851,7 @@ struct elf_obj_tdata
|
|||||||
ELF emulation code, we need to add the shared object to the
|
ELF emulation code, we need to add the shared object to the
|
||||||
DT_NEEDED list of the resulting binary to indicate the dependency
|
DT_NEEDED list of the resulting binary to indicate the dependency
|
||||||
as if the -l option is passed to the linker. This field holds the
|
as if the -l option is passed to the linker. This field holds the
|
||||||
name of the loaded shared object. */
|
name of the loaded shared object. */
|
||||||
const char *dt_soname;
|
const char *dt_soname;
|
||||||
|
|
||||||
/* Irix 5 often screws up the symbol table, sorting local symbols
|
/* Irix 5 often screws up the symbol table, sorting local symbols
|
||||||
@ -873,10 +873,10 @@ struct elf_obj_tdata
|
|||||||
find_nearest_line. */
|
find_nearest_line. */
|
||||||
struct mips_elf_find_line *find_line_info;
|
struct mips_elf_find_line *find_line_info;
|
||||||
|
|
||||||
/* A place to stash dwarf1 info for this bfd. */
|
/* A place to stash dwarf1 info for this bfd. */
|
||||||
struct dwarf1_debug *dwarf1_find_line_info;
|
struct dwarf1_debug *dwarf1_find_line_info;
|
||||||
|
|
||||||
/* A place to stash dwarf2 info for this bfd. */
|
/* A place to stash dwarf2 info for this bfd. */
|
||||||
PTR dwarf2_find_line_info;
|
PTR dwarf2_find_line_info;
|
||||||
|
|
||||||
/* An array of stub sections indexed by symbol number, used by the
|
/* An array of stub sections indexed by symbol number, used by the
|
||||||
|
@ -44,8 +44,8 @@ static reloc_howto_type * elf32_arm_reloc_type_lookup
|
|||||||
PARAMS ((bfd * abfd, bfd_reloc_code_real_type code));
|
PARAMS ((bfd * abfd, bfd_reloc_code_real_type code));
|
||||||
|
|
||||||
/* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g.
|
/* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g.
|
||||||
R_ARM_PC24 as an index into this, and find the R_ARM_PC24 HOWTO
|
R_ARM_PC24 as an index into this, and find the R_ARM_PC24 HOWTO
|
||||||
in that slot. */
|
in that slot. */
|
||||||
|
|
||||||
static reloc_howto_type elf32_arm_howto_table[] =
|
static reloc_howto_type elf32_arm_howto_table[] =
|
||||||
{
|
{
|
||||||
@ -280,7 +280,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0x00ffffff, /* src_mask */
|
0x00ffffff, /* src_mask */
|
||||||
0x00ffffff, /* dst_mask */
|
0x00ffffff, /* dst_mask */
|
||||||
true), /* pcrel_offset */
|
true), /* pcrel_offset */
|
||||||
|
|
||||||
/* BLX instruction for the Thumb. */
|
/* BLX instruction for the Thumb. */
|
||||||
HOWTO (R_ARM_THM_XPC22, /* type */
|
HOWTO (R_ARM_THM_XPC22, /* type */
|
||||||
2, /* rightshift */
|
2, /* rightshift */
|
||||||
@ -295,7 +295,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0x07ff07ff, /* src_mask */
|
0x07ff07ff, /* src_mask */
|
||||||
0x07ff07ff, /* dst_mask */
|
0x07ff07ff, /* dst_mask */
|
||||||
true), /* pcrel_offset */
|
true), /* pcrel_offset */
|
||||||
|
|
||||||
/* These next three relocs are not defined, but we need to fill the space. */
|
/* These next three relocs are not defined, but we need to fill the space. */
|
||||||
|
|
||||||
HOWTO (R_ARM_NONE, /* type */
|
HOWTO (R_ARM_NONE, /* type */
|
||||||
@ -341,7 +341,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
/* Relocs used in ARM Linux */
|
/* Relocs used in ARM Linux */
|
||||||
|
|
||||||
HOWTO (R_ARM_COPY, /* type */
|
HOWTO (R_ARM_COPY, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -369,7 +369,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0xffffffff, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0xffffffff, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_JUMP_SLOT, /* type */
|
HOWTO (R_ARM_JUMP_SLOT, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -383,7 +383,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0xffffffff, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0xffffffff, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_RELATIVE, /* type */
|
HOWTO (R_ARM_RELATIVE, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -397,7 +397,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0xffffffff, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0xffffffff, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_GOTOFF, /* type */
|
HOWTO (R_ARM_GOTOFF, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -411,7 +411,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0xffffffff, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0xffffffff, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_GOTPC, /* type */
|
HOWTO (R_ARM_GOTPC, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -425,7 +425,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0xffffffff, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0xffffffff, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
true), /* pcrel_offset */
|
true), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_GOT32, /* type */
|
HOWTO (R_ARM_GOT32, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -439,7 +439,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0xffffffff, /* src_mask */
|
0xffffffff, /* src_mask */
|
||||||
0xffffffff, /* dst_mask */
|
0xffffffff, /* dst_mask */
|
||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
HOWTO (R_ARM_PLT32, /* type */
|
HOWTO (R_ARM_PLT32, /* type */
|
||||||
2, /* rightshift */
|
2, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -453,8 +453,8 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0x00ffffff, /* src_mask */
|
0x00ffffff, /* src_mask */
|
||||||
0x00ffffff, /* dst_mask */
|
0x00ffffff, /* dst_mask */
|
||||||
true), /* pcrel_offset */
|
true), /* pcrel_offset */
|
||||||
|
|
||||||
/* End of relocs used in ARM Linux */
|
/* End of relocs used in ARM Linux */
|
||||||
|
|
||||||
HOWTO (R_ARM_RREL32, /* type */
|
HOWTO (R_ARM_RREL32, /* type */
|
||||||
0, /* rightshift */
|
0, /* rightshift */
|
||||||
@ -578,7 +578,6 @@ static reloc_howto_type elf32_arm_thm_pc9_howto =
|
|||||||
0x000000ff, /* dst_mask */
|
0x000000ff, /* dst_mask */
|
||||||
true); /* pcrel_offset */
|
true); /* pcrel_offset */
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc)
|
elf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc)
|
||||||
bfd * abfd ATTRIBUTE_UNUSED;
|
bfd * abfd ATTRIBUTE_UNUSED;
|
||||||
@ -586,7 +585,7 @@ elf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc)
|
|||||||
Elf32_Internal_Rel * elf_reloc;
|
Elf32_Internal_Rel * elf_reloc;
|
||||||
{
|
{
|
||||||
unsigned int r_type;
|
unsigned int r_type;
|
||||||
|
|
||||||
r_type = ELF32_R_TYPE (elf_reloc->r_info);
|
r_type = ELF32_R_TYPE (elf_reloc->r_info);
|
||||||
|
|
||||||
switch (r_type)
|
switch (r_type)
|
||||||
@ -594,19 +593,19 @@ elf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc)
|
|||||||
case R_ARM_GNU_VTINHERIT:
|
case R_ARM_GNU_VTINHERIT:
|
||||||
bfd_reloc->howto = & elf32_arm_vtinherit_howto;
|
bfd_reloc->howto = & elf32_arm_vtinherit_howto;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_ARM_GNU_VTENTRY:
|
case R_ARM_GNU_VTENTRY:
|
||||||
bfd_reloc->howto = & elf32_arm_vtentry_howto;
|
bfd_reloc->howto = & elf32_arm_vtentry_howto;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_ARM_THM_PC11:
|
case R_ARM_THM_PC11:
|
||||||
bfd_reloc->howto = & elf32_arm_thm_pc11_howto;
|
bfd_reloc->howto = & elf32_arm_thm_pc11_howto;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_ARM_THM_PC9:
|
case R_ARM_THM_PC9:
|
||||||
bfd_reloc->howto = & elf32_arm_thm_pc9_howto;
|
bfd_reloc->howto = & elf32_arm_thm_pc9_howto;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (r_type >= NUM_ELEM (elf32_arm_howto_table))
|
if (r_type >= NUM_ELEM (elf32_arm_howto_table))
|
||||||
bfd_reloc->howto = NULL;
|
bfd_reloc->howto = NULL;
|
||||||
@ -615,7 +614,7 @@ elf32_arm_info_to_howto (abfd, bfd_reloc, elf_reloc)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct elf32_arm_reloc_map
|
struct elf32_arm_reloc_map
|
||||||
{
|
{
|
||||||
bfd_reloc_code_real_type bfd_reloc_val;
|
bfd_reloc_code_real_type bfd_reloc_val;
|
||||||
@ -670,7 +669,7 @@ elf32_arm_reloc_type_lookup (abfd, code)
|
|||||||
for (i = 0; i < NUM_ELEM (elf32_arm_reloc_map); i ++)
|
for (i = 0; i < NUM_ELEM (elf32_arm_reloc_map); i ++)
|
||||||
if (elf32_arm_reloc_map[i].bfd_reloc_val == code)
|
if (elf32_arm_reloc_map[i].bfd_reloc_val == code)
|
||||||
return & elf32_arm_howto_table[elf32_arm_reloc_map[i].elf_reloc_val];
|
return & elf32_arm_howto_table[elf32_arm_reloc_map[i].elf_reloc_val];
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -265,7 +265,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
false), /* pcrel_offset */
|
false), /* pcrel_offset */
|
||||||
|
|
||||||
/* XXX - gap in index numbering here. */
|
/* XXX - gap in index numbering here. */
|
||||||
|
|
||||||
HOWTO (R_ARM_PLT32, /* type */
|
HOWTO (R_ARM_PLT32, /* type */
|
||||||
2, /* rightshift */
|
2, /* rightshift */
|
||||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||||
@ -279,7 +279,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
|||||||
0x00ffffff, /* src_mask */
|
0x00ffffff, /* src_mask */
|
||||||
0x00ffffff, /* dst_mask */
|
0x00ffffff, /* dst_mask */
|
||||||
true), /* pcrel_offset */
|
true), /* pcrel_offset */
|
||||||
|
|
||||||
/* XXX - gap in index numbering here. */
|
/* XXX - gap in index numbering here. */
|
||||||
|
|
||||||
HOWTO (R_ARM_RREL32, /* type */
|
HOWTO (R_ARM_RREL32, /* type */
|
||||||
@ -346,7 +346,7 @@ find_howto (r_type)
|
|||||||
unsigned int r_type;
|
unsigned int r_type;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = NUM_ELEM (elf32_arm_howto_table); i--;)
|
for (i = NUM_ELEM (elf32_arm_howto_table); i--;)
|
||||||
if (elf32_arm_howto_table [i].type == r_type)
|
if (elf32_arm_howto_table [i].type == r_type)
|
||||||
return elf32_arm_howto_table + i;
|
return elf32_arm_howto_table + i;
|
||||||
@ -390,7 +390,7 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] =
|
|||||||
{BFD_RELOC_NONE, R_ARM_SBREL32 },
|
{BFD_RELOC_NONE, R_ARM_SBREL32 },
|
||||||
{BFD_RELOC_NONE, R_ARM_AMP_VCALL9 },
|
{BFD_RELOC_NONE, R_ARM_AMP_VCALL9 },
|
||||||
{BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11 },
|
{BFD_RELOC_THUMB_PCREL_BRANCH12, R_ARM_THM_PC11 },
|
||||||
{BFD_RELOC_THUMB_PCREL_BRANCH9, R_ARM_THM_PC9 },
|
{BFD_RELOC_THUMB_PCREL_BRANCH9, R_ARM_THM_PC9 },
|
||||||
{BFD_RELOC_VTABLE_INHERIT, R_ARM_GNU_VTINHERIT },
|
{BFD_RELOC_VTABLE_INHERIT, R_ARM_GNU_VTINHERIT },
|
||||||
{BFD_RELOC_VTABLE_ENTRY, R_ARM_GNU_VTENTRY }
|
{BFD_RELOC_VTABLE_ENTRY, R_ARM_GNU_VTENTRY }
|
||||||
};
|
};
|
||||||
@ -408,7 +408,7 @@ elf32_arm_reloc_type_lookup (abfd, code)
|
|||||||
|
|
||||||
if (code == BFD_RELOC_ARM_PLT32)
|
if (code == BFD_RELOC_ARM_PLT32)
|
||||||
return find_howto (R_ARM_PLT32);
|
return find_howto (R_ARM_PLT32);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ static char *elf_symbol_flags PARAMS ((flagword));
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Translate an ELF symbol in external format into an ELF symbol in internal
|
/* Translate an ELF symbol in external format into an ELF symbol in internal
|
||||||
format. */
|
format. */
|
||||||
|
|
||||||
void
|
void
|
||||||
elf_swap_symbol_in (abfd, src, dst)
|
elf_swap_symbol_in (abfd, src, dst)
|
||||||
@ -219,7 +219,7 @@ elf_swap_symbol_in (abfd, src, dst)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Translate an ELF symbol in internal format into an ELF symbol in external
|
/* Translate an ELF symbol in internal format into an ELF symbol in external
|
||||||
format. */
|
format. */
|
||||||
|
|
||||||
void
|
void
|
||||||
elf_swap_symbol_out (abfd, src, cdst)
|
elf_swap_symbol_out (abfd, src, cdst)
|
||||||
@ -236,9 +236,8 @@ elf_swap_symbol_out (abfd, src, cdst)
|
|||||||
bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
|
bfd_h_put_16 (abfd, src->st_shndx, dst->st_shndx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Translate an ELF file header in external format into an ELF file header in
|
/* Translate an ELF file header in external format into an ELF file header in
|
||||||
internal format. */
|
internal format. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_swap_ehdr_in (abfd, src, dst)
|
elf_swap_ehdr_in (abfd, src, dst)
|
||||||
@ -267,7 +266,7 @@ elf_swap_ehdr_in (abfd, src, dst)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Translate an ELF file header in internal format into an ELF file header in
|
/* Translate an ELF file header in internal format into an ELF file header in
|
||||||
external format. */
|
external format. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_swap_ehdr_out (abfd, src, dst)
|
elf_swap_ehdr_out (abfd, src, dst)
|
||||||
@ -277,7 +276,7 @@ elf_swap_ehdr_out (abfd, src, dst)
|
|||||||
{
|
{
|
||||||
int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
|
int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
|
||||||
memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
|
memcpy (dst->e_ident, src->e_ident, EI_NIDENT);
|
||||||
/* note that all elements of dst are *arrays of unsigned char* already... */
|
/* note that all elements of dst are *arrays of unsigned char* already... */
|
||||||
bfd_h_put_16 (abfd, src->e_type, dst->e_type);
|
bfd_h_put_16 (abfd, src->e_type, dst->e_type);
|
||||||
bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
|
bfd_h_put_16 (abfd, src->e_machine, dst->e_machine);
|
||||||
bfd_h_put_32 (abfd, src->e_version, dst->e_version);
|
bfd_h_put_32 (abfd, src->e_version, dst->e_version);
|
||||||
@ -296,9 +295,8 @@ elf_swap_ehdr_out (abfd, src, dst)
|
|||||||
bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
|
bfd_h_put_16 (abfd, src->e_shstrndx, dst->e_shstrndx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Translate an ELF section header table entry in external format into an
|
/* Translate an ELF section header table entry in external format into an
|
||||||
ELF section header table entry in internal format. */
|
ELF section header table entry in internal format. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_swap_shdr_in (abfd, src, dst)
|
elf_swap_shdr_in (abfd, src, dst)
|
||||||
@ -326,7 +324,7 @@ elf_swap_shdr_in (abfd, src, dst)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Translate an ELF section header table entry in internal format into an
|
/* Translate an ELF section header table entry in internal format into an
|
||||||
ELF section header table entry in external format. */
|
ELF section header table entry in external format. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_swap_shdr_out (abfd, src, dst)
|
elf_swap_shdr_out (abfd, src, dst)
|
||||||
@ -334,7 +332,7 @@ elf_swap_shdr_out (abfd, src, dst)
|
|||||||
const Elf_Internal_Shdr *src;
|
const Elf_Internal_Shdr *src;
|
||||||
Elf_External_Shdr *dst;
|
Elf_External_Shdr *dst;
|
||||||
{
|
{
|
||||||
/* note that all elements of dst are *arrays of unsigned char* already... */
|
/* note that all elements of dst are *arrays of unsigned char* already... */
|
||||||
bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
|
bfd_h_put_32 (abfd, src->sh_name, dst->sh_name);
|
||||||
bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
|
bfd_h_put_32 (abfd, src->sh_type, dst->sh_type);
|
||||||
put_word (abfd, src->sh_flags, dst->sh_flags);
|
put_word (abfd, src->sh_flags, dst->sh_flags);
|
||||||
@ -347,9 +345,8 @@ elf_swap_shdr_out (abfd, src, dst)
|
|||||||
put_word (abfd, src->sh_entsize, dst->sh_entsize);
|
put_word (abfd, src->sh_entsize, dst->sh_entsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Translate an ELF program header table entry in external format into an
|
/* Translate an ELF program header table entry in external format into an
|
||||||
ELF program header table entry in internal format. */
|
ELF program header table entry in internal format. */
|
||||||
|
|
||||||
void
|
void
|
||||||
elf_swap_phdr_in (abfd, src, dst)
|
elf_swap_phdr_in (abfd, src, dst)
|
||||||
@ -383,7 +380,7 @@ elf_swap_phdr_out (abfd, src, dst)
|
|||||||
const Elf_Internal_Phdr *src;
|
const Elf_Internal_Phdr *src;
|
||||||
Elf_External_Phdr *dst;
|
Elf_External_Phdr *dst;
|
||||||
{
|
{
|
||||||
/* note that all elements of dst are *arrays of unsigned char* already... */
|
/* note that all elements of dst are *arrays of unsigned char* already... */
|
||||||
bfd_h_put_32 (abfd, src->p_type, dst->p_type);
|
bfd_h_put_32 (abfd, src->p_type, dst->p_type);
|
||||||
put_word (abfd, src->p_offset, dst->p_offset);
|
put_word (abfd, src->p_offset, dst->p_offset);
|
||||||
put_word (abfd, src->p_vaddr, dst->p_vaddr);
|
put_word (abfd, src->p_vaddr, dst->p_vaddr);
|
||||||
@ -394,7 +391,7 @@ elf_swap_phdr_out (abfd, src, dst)
|
|||||||
put_word (abfd, src->p_align, dst->p_align);
|
put_word (abfd, src->p_align, dst->p_align);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Translate an ELF reloc from external format to internal format. */
|
/* Translate an ELF reloc from external format to internal format. */
|
||||||
INLINE void
|
INLINE void
|
||||||
elf_swap_reloc_in (abfd, src, dst)
|
elf_swap_reloc_in (abfd, src, dst)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
@ -416,7 +413,7 @@ elf_swap_reloca_in (abfd, src, dst)
|
|||||||
dst->r_addend = get_signed_word (abfd, (bfd_byte *) src->r_addend);
|
dst->r_addend = get_signed_word (abfd, (bfd_byte *) src->r_addend);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Translate an ELF reloc from internal format to external format. */
|
/* Translate an ELF reloc from internal format to external format. */
|
||||||
INLINE void
|
INLINE void
|
||||||
elf_swap_reloc_out (abfd, src, dst)
|
elf_swap_reloc_out (abfd, src, dst)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
@ -464,7 +461,6 @@ elf_swap_dyn_out (abfd, src, p)
|
|||||||
|
|
||||||
/* ELF .o/exec file reading */
|
/* ELF .o/exec file reading */
|
||||||
|
|
||||||
|
|
||||||
/* Begin processing a given object.
|
/* Begin processing a given object.
|
||||||
|
|
||||||
First we validate the file by reading in the ELF header and checking
|
First we validate the file by reading in the ELF header and checking
|
||||||
@ -526,7 +522,7 @@ elf_object_p (abfd)
|
|||||||
make use of. The magic number must match, the address size ('class')
|
make use of. The magic number must match, the address size ('class')
|
||||||
and byte-swapping must match our XVEC entry, and it must have a
|
and byte-swapping must match our XVEC entry, and it must have a
|
||||||
section header table (FIXME: See comments re sections at top of this
|
section header table (FIXME: See comments re sections at top of this
|
||||||
file). */
|
file). */
|
||||||
|
|
||||||
if ((elf_file_p (&x_ehdr) == false) ||
|
if ((elf_file_p (&x_ehdr) == false) ||
|
||||||
(x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
|
(x_ehdr.e_ident[EI_VERSION] != EV_CURRENT) ||
|
||||||
@ -569,13 +565,13 @@ elf_object_p (abfd)
|
|||||||
if (i_ehdrp->e_type == ET_CORE)
|
if (i_ehdrp->e_type == ET_CORE)
|
||||||
goto got_wrong_format_error;
|
goto got_wrong_format_error;
|
||||||
|
|
||||||
/* If there is no section header table, we're hosed. */
|
/* If there is no section header table, we're hosed. */
|
||||||
if (i_ehdrp->e_shoff == 0)
|
if (i_ehdrp->e_shoff == 0)
|
||||||
goto got_wrong_format_error;
|
goto got_wrong_format_error;
|
||||||
|
|
||||||
/* As a simple sanity check, verify that the what BFD thinks is the
|
/* As a simple sanity check, verify that the what BFD thinks is the
|
||||||
size of each section header table entry actually matches the size
|
size of each section header table entry actually matches the size
|
||||||
recorded in the file. */
|
recorded in the file. */
|
||||||
if (i_ehdrp->e_shentsize != sizeof (x_shdr))
|
if (i_ehdrp->e_shentsize != sizeof (x_shdr))
|
||||||
goto got_wrong_format_error;
|
goto got_wrong_format_error;
|
||||||
|
|
||||||
@ -629,7 +625,7 @@ elf_object_p (abfd)
|
|||||||
goto got_no_match;
|
goto got_no_match;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remember the entry point specified in the ELF file header. */
|
/* Remember the entry point specified in the ELF file header. */
|
||||||
bfd_set_start_address (abfd, i_ehdrp->e_entry);
|
bfd_set_start_address (abfd, i_ehdrp->e_entry);
|
||||||
|
|
||||||
/* Allocate space for a copy of the section header table in
|
/* Allocate space for a copy of the section header table in
|
||||||
@ -695,7 +691,7 @@ elf_object_p (abfd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Read in the string table containing the names of the sections. We
|
/* Read in the string table containing the names of the sections. We
|
||||||
will need the base pointer to this table later. */
|
will need the base pointer to this table later. */
|
||||||
/* We read this inline now, so that we don't have to go through
|
/* We read this inline now, so that we don't have to go through
|
||||||
bfd_section_from_shdr with it (since this particular strtab is
|
bfd_section_from_shdr with it (since this particular strtab is
|
||||||
used to find all of the ELF section names.) */
|
used to find all of the ELF section names.) */
|
||||||
@ -822,7 +818,7 @@ elf_write_relocs (abfd, sec, data)
|
|||||||
SHT_REL section. */
|
SHT_REL section. */
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
/* orelocation has the data, reloc_count has the count... */
|
/* orelocation has the data, reloc_count has the count... */
|
||||||
if (use_rela_p)
|
if (use_rela_p)
|
||||||
{
|
{
|
||||||
outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
|
outbound_relocas = (Elf_External_Rela *) rela_hdr->contents;
|
||||||
@ -968,7 +964,7 @@ elf_write_shdrs_and_ehdr (abfd)
|
|||||||
i_ehdrp = elf_elfheader (abfd);
|
i_ehdrp = elf_elfheader (abfd);
|
||||||
i_shdrp = elf_elfsections (abfd);
|
i_shdrp = elf_elfsections (abfd);
|
||||||
|
|
||||||
/* swap the header before spitting it out... */
|
/* swap the header before spitting it out... */
|
||||||
|
|
||||||
#if DEBUG & 1
|
#if DEBUG & 1
|
||||||
elf_debug_file (i_ehdrp);
|
elf_debug_file (i_ehdrp);
|
||||||
@ -979,7 +975,7 @@ elf_write_shdrs_and_ehdr (abfd)
|
|||||||
!= sizeof (x_ehdr)))
|
!= sizeof (x_ehdr)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* at this point we've concocted all the ELF sections... */
|
/* at this point we've concocted all the ELF sections... */
|
||||||
x_shdrp = (Elf_External_Shdr *)
|
x_shdrp = (Elf_External_Shdr *)
|
||||||
bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
|
bfd_alloc (abfd, sizeof (*x_shdrp) * (i_ehdrp->e_shnum));
|
||||||
if (!x_shdrp)
|
if (!x_shdrp)
|
||||||
@ -997,7 +993,7 @@ elf_write_shdrs_and_ehdr (abfd)
|
|||||||
!= sizeof (*x_shdrp) * i_ehdrp->e_shnum))
|
!= sizeof (*x_shdrp) * i_ehdrp->e_shnum))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* need to dump the string table too... */
|
/* need to dump the string table too... */
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1025,7 +1021,7 @@ elf_slurp_symbol_table (abfd, symptrs, dynamic)
|
|||||||
based on a one-to-one mapping of the ELF symbols to canonical
|
based on a one-to-one mapping of the ELF symbols to canonical
|
||||||
symbols. We actually use all the ELF symbols, so there will be no
|
symbols. We actually use all the ELF symbols, so there will be no
|
||||||
space left over at the end. When we have all the symbols, we
|
space left over at the end. When we have all the symbols, we
|
||||||
build the caller's pointer vector. */
|
build the caller's pointer vector. */
|
||||||
|
|
||||||
if (! dynamic)
|
if (! dynamic)
|
||||||
{
|
{
|
||||||
@ -1421,7 +1417,6 @@ elf_slurp_reloc_table (abfd, asect, symbols, dynamic)
|
|||||||
symbols, dynamic))
|
symbols, dynamic))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
asect->relocation = relents;
|
asect->relocation = relents;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
elf_core_file_failing_command (abfd)
|
elf_core_file_failing_command (abfd)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
@ -32,7 +31,6 @@ elf_core_file_failing_signal (abfd)
|
|||||||
return elf_tdata (abfd)->core_signal;
|
return elf_tdata (abfd)->core_signal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
elf_core_file_matches_executable_p (core_bfd, exec_bfd)
|
elf_core_file_matches_executable_p (core_bfd, exec_bfd)
|
||||||
bfd *core_bfd;
|
bfd *core_bfd;
|
||||||
@ -40,7 +38,7 @@ elf_core_file_matches_executable_p (core_bfd, exec_bfd)
|
|||||||
{
|
{
|
||||||
char* corename;
|
char* corename;
|
||||||
|
|
||||||
/* xvecs must match if both are ELF files for the same target. */
|
/* xvecs must match if both are ELF files for the same target. */
|
||||||
|
|
||||||
if (core_bfd->xvec != exec_bfd->xvec)
|
if (core_bfd->xvec != exec_bfd->xvec)
|
||||||
{
|
{
|
||||||
@ -48,7 +46,7 @@ elf_core_file_matches_executable_p (core_bfd, exec_bfd)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if the name in the corefile matches the executable name. */
|
/* See if the name in the corefile matches the executable name. */
|
||||||
|
|
||||||
corename = elf_tdata (core_bfd)->core_program;
|
corename = elf_tdata (core_bfd)->core_program;
|
||||||
if (corename != NULL)
|
if (corename != NULL)
|
||||||
@ -63,7 +61,6 @@ elf_core_file_matches_executable_p (core_bfd, exec_bfd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Core files are simply standard ELF formatted files that partition
|
/* Core files are simply standard ELF formatted files that partition
|
||||||
the file using the execution view of the file (program header table)
|
the file using the execution view of the file (program header table)
|
||||||
rather than the linking view. In fact, there is no section header
|
rather than the linking view. In fact, there is no section header
|
||||||
@ -97,17 +94,17 @@ elf_core_file_p (abfd)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check the magic number. */
|
/* Check the magic number. */
|
||||||
if (elf_file_p (&x_ehdr) == false)
|
if (elf_file_p (&x_ehdr) == false)
|
||||||
goto wrong;
|
goto wrong;
|
||||||
|
|
||||||
/* FIXME: Check EI_VERSION here ! */
|
/* FIXME: Check EI_VERSION here ! */
|
||||||
|
|
||||||
/* Check the address size ("class"). */
|
/* Check the address size ("class"). */
|
||||||
if (x_ehdr.e_ident[EI_CLASS] != ELFCLASS)
|
if (x_ehdr.e_ident[EI_CLASS] != ELFCLASS)
|
||||||
goto wrong;
|
goto wrong;
|
||||||
|
|
||||||
/* Check the byteorder. */
|
/* Check the byteorder. */
|
||||||
switch (x_ehdr.e_ident[EI_DATA])
|
switch (x_ehdr.e_ident[EI_DATA])
|
||||||
{
|
{
|
||||||
case ELFDATA2MSB: /* Big-endian */
|
case ELFDATA2MSB: /* Big-endian */
|
||||||
@ -122,14 +119,14 @@ elf_core_file_p (abfd)
|
|||||||
goto wrong;
|
goto wrong;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Give abfd an elf_obj_tdata. */
|
/* Give abfd an elf_obj_tdata. */
|
||||||
new_tdata =
|
new_tdata =
|
||||||
(struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
|
(struct elf_obj_tdata *) bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
|
||||||
if (new_tdata == NULL)
|
if (new_tdata == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
elf_tdata (abfd) = new_tdata;
|
elf_tdata (abfd) = new_tdata;
|
||||||
|
|
||||||
/* Swap in the rest of the header, now that we have the byte order. */
|
/* Swap in the rest of the header, now that we have the byte order. */
|
||||||
i_ehdrp = elf_elfheader (abfd);
|
i_ehdrp = elf_elfheader (abfd);
|
||||||
elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
|
elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);
|
||||||
|
|
||||||
@ -173,7 +170,7 @@ elf_core_file_p (abfd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If there is no program header, or the type is not a core file, then
|
/* If there is no program header, or the type is not a core file, then
|
||||||
we are hosed. */
|
we are hosed. */
|
||||||
if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
|
if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != ET_CORE)
|
||||||
goto wrong;
|
goto wrong;
|
||||||
|
|
||||||
@ -185,8 +182,8 @@ elf_core_file_p (abfd)
|
|||||||
/* Move to the start of the program headers. */
|
/* Move to the start of the program headers. */
|
||||||
if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0)
|
if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0)
|
||||||
goto wrong;
|
goto wrong;
|
||||||
|
|
||||||
/* Allocate space for the program headers. */
|
/* Allocate space for the program headers. */
|
||||||
i_phdrp = (Elf_Internal_Phdr *)
|
i_phdrp = (Elf_Internal_Phdr *)
|
||||||
bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
|
bfd_alloc (abfd, sizeof (*i_phdrp) * i_ehdrp->e_phnum);
|
||||||
if (!i_phdrp)
|
if (!i_phdrp)
|
||||||
@ -194,7 +191,7 @@ elf_core_file_p (abfd)
|
|||||||
|
|
||||||
elf_tdata (abfd)->phdr = i_phdrp;
|
elf_tdata (abfd)->phdr = i_phdrp;
|
||||||
|
|
||||||
/* Read and convert to internal form. */
|
/* Read and convert to internal form. */
|
||||||
for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
|
for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
|
||||||
{
|
{
|
||||||
Elf_External_Phdr x_phdr;
|
Elf_External_Phdr x_phdr;
|
||||||
@ -205,14 +202,14 @@ elf_core_file_p (abfd)
|
|||||||
elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
|
elf_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process each program header. */
|
/* Process each program header. */
|
||||||
for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
|
for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
|
||||||
{
|
{
|
||||||
if (!_bfd_elfcore_section_from_phdr (abfd, i_phdrp + phindex, phindex))
|
if (!_bfd_elfcore_section_from_phdr (abfd, i_phdrp + phindex, phindex))
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the machine architecture. */
|
/* Set the machine architecture. */
|
||||||
if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
|
if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
|
||||||
{
|
{
|
||||||
/* It's OK if this fails for the generic target. */
|
/* It's OK if this fails for the generic target. */
|
||||||
@ -220,7 +217,7 @@ elf_core_file_p (abfd)
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save the entry point from the ELF header. */
|
/* Save the entry point from the ELF header. */
|
||||||
bfd_get_start_address (abfd) = i_ehdrp->e_entry;
|
bfd_get_start_address (abfd) = i_ehdrp->e_entry;
|
||||||
|
|
||||||
/* Let the backend double check the format and override global
|
/* Let the backend double check the format and override global
|
||||||
|
@ -163,7 +163,7 @@ _bfd_elf_create_dynamic_sections (abfd, info)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = bfd_make_section (abfd,
|
s = bfd_make_section (abfd,
|
||||||
bed->default_use_rela_p ? ".rela.plt" : ".rel.plt");
|
bed->default_use_rela_p ? ".rela.plt" : ".rel.plt");
|
||||||
if (s == NULL
|
if (s == NULL
|
||||||
|| ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|
|| ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|
||||||
@ -199,9 +199,9 @@ _bfd_elf_create_dynamic_sections (abfd, info)
|
|||||||
copy relocs. */
|
copy relocs. */
|
||||||
if (! info->shared)
|
if (! info->shared)
|
||||||
{
|
{
|
||||||
s = bfd_make_section (abfd,
|
s = bfd_make_section (abfd,
|
||||||
(bed->default_use_rela_p
|
(bed->default_use_rela_p
|
||||||
? ".rela.bss" : ".rel.bss"));
|
? ".rela.bss" : ".rel.bss"));
|
||||||
if (s == NULL
|
if (s == NULL
|
||||||
|| ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|
|| ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
|
||||||
|| ! bfd_set_section_alignment (abfd, s, ptralign))
|
|| ! bfd_set_section_alignment (abfd, s, ptralign))
|
||||||
|
119
bfd/elflink.h
119
bfd/elflink.h
@ -50,14 +50,14 @@ static boolean elf_link_assign_sym_version
|
|||||||
PARAMS ((struct elf_link_hash_entry *, PTR));
|
PARAMS ((struct elf_link_hash_entry *, PTR));
|
||||||
static boolean elf_collect_hash_codes
|
static boolean elf_collect_hash_codes
|
||||||
PARAMS ((struct elf_link_hash_entry *, PTR));
|
PARAMS ((struct elf_link_hash_entry *, PTR));
|
||||||
static boolean elf_link_read_relocs_from_section
|
static boolean elf_link_read_relocs_from_section
|
||||||
PARAMS ((bfd *, Elf_Internal_Shdr *, PTR, Elf_Internal_Rela *));
|
PARAMS ((bfd *, Elf_Internal_Shdr *, PTR, Elf_Internal_Rela *));
|
||||||
static void elf_link_output_relocs
|
static void elf_link_output_relocs
|
||||||
PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
|
PARAMS ((bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *));
|
||||||
static boolean elf_link_size_reloc_section
|
static boolean elf_link_size_reloc_section
|
||||||
PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
|
PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
|
||||||
static void elf_link_adjust_relocs
|
static void elf_link_adjust_relocs
|
||||||
PARAMS ((bfd *, Elf_Internal_Shdr *, unsigned int,
|
PARAMS ((bfd *, Elf_Internal_Shdr *, unsigned int,
|
||||||
struct elf_link_hash_entry **));
|
struct elf_link_hash_entry **));
|
||||||
|
|
||||||
/* Given an ELF BFD, add symbols to the global hash table as
|
/* Given an ELF BFD, add symbols to the global hash table as
|
||||||
@ -94,7 +94,7 @@ is_global_symbol_definition (abfd, sym)
|
|||||||
/* If the section is undefined, then so is the symbol. */
|
/* If the section is undefined, then so is the symbol. */
|
||||||
if (sym->st_shndx == SHN_UNDEF)
|
if (sym->st_shndx == SHN_UNDEF)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* If the symbol is defined in the common section, then
|
/* If the symbol is defined in the common section, then
|
||||||
it is a common definition and so does not count. */
|
it is a common definition and so does not count. */
|
||||||
if (sym->st_shndx == SHN_COMMON)
|
if (sym->st_shndx == SHN_COMMON)
|
||||||
@ -104,18 +104,17 @@ is_global_symbol_definition (abfd, sym)
|
|||||||
must rely upon the backend to tell us what it is. */
|
must rely upon the backend to tell us what it is. */
|
||||||
if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
|
if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
|
||||||
/* FIXME - this function is not coded yet:
|
/* FIXME - this function is not coded yet:
|
||||||
|
|
||||||
return _bfd_is_global_symbol_definition (abfd, sym);
|
return _bfd_is_global_symbol_definition (abfd, sym);
|
||||||
|
|
||||||
Instead for now assume that the definition is not global,
|
Instead for now assume that the definition is not global,
|
||||||
Even if this is wrong, at least the linker will behave
|
Even if this is wrong, at least the linker will behave
|
||||||
in the same way that it used to do. */
|
in the same way that it used to do. */
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Search the symbol table of the archive element of the archive ABFD
|
/* Search the symbol table of the archive element of the archive ABFD
|
||||||
whoes archove map contains a mention of SYMDEF, and determine if
|
whoes archove map contains a mention of SYMDEF, and determine if
|
||||||
the symbol is defined in this element. */
|
the symbol is defined in this element. */
|
||||||
@ -132,7 +131,7 @@ elf_link_is_defined_archive_symbol (abfd, symdef)
|
|||||||
size_t extsymcount;
|
size_t extsymcount;
|
||||||
size_t extsymoff;
|
size_t extsymoff;
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
|
|
||||||
abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
|
abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
|
||||||
if (abfd == (bfd *) NULL)
|
if (abfd == (bfd *) NULL)
|
||||||
return false;
|
return false;
|
||||||
@ -146,7 +145,7 @@ elf_link_is_defined_archive_symbol (abfd, symdef)
|
|||||||
(re)include this element. */
|
(re)include this element. */
|
||||||
if (abfd->archive_pass)
|
if (abfd->archive_pass)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Select the appropriate symbol table. */
|
/* Select the appropriate symbol table. */
|
||||||
if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
|
if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
|
||||||
hdr = &elf_tdata (abfd)->symtab_hdr;
|
hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||||
@ -208,7 +207,7 @@ elf_link_is_defined_archive_symbol (abfd, symdef)
|
|||||||
}
|
}
|
||||||
|
|
||||||
free (buf);
|
free (buf);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,7 +627,7 @@ elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash,
|
|||||||
/* It's OK to change the type if either the existing symbol or the
|
/* It's OK to change the type if either the existing symbol or the
|
||||||
new symbol is weak unless it comes from a DT_NEEDED entry of
|
new symbol is weak unless it comes from a DT_NEEDED entry of
|
||||||
a shared object, in which case, the DT_NEEDED entry may not be
|
a shared object, in which case, the DT_NEEDED entry may not be
|
||||||
required at the run time. */
|
required at the run time. */
|
||||||
|
|
||||||
if ((! dt_needed && h->root.type == bfd_link_hash_defweak)
|
if ((! dt_needed && h->root.type == bfd_link_hash_defweak)
|
||||||
|| h->root.type == bfd_link_hash_undefweak
|
|| h->root.type == bfd_link_hash_undefweak
|
||||||
@ -684,7 +683,7 @@ elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash,
|
|||||||
We prefer a non-weak definition in a shared library to a weak
|
We prefer a non-weak definition in a shared library to a weak
|
||||||
definition in the executable unless it comes from a DT_NEEDED
|
definition in the executable unless it comes from a DT_NEEDED
|
||||||
entry of a shared object, in which case, the DT_NEEDED entry
|
entry of a shared object, in which case, the DT_NEEDED entry
|
||||||
may not be required at the run time. */
|
may not be required at the run time. */
|
||||||
|
|
||||||
if (newdyn
|
if (newdyn
|
||||||
&& newdef
|
&& newdef
|
||||||
@ -692,7 +691,7 @@ elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash,
|
|||||||
|| (h->root.type == bfd_link_hash_common
|
|| (h->root.type == bfd_link_hash_common
|
||||||
&& (bind == STB_WEAK
|
&& (bind == STB_WEAK
|
||||||
|| ELF_ST_TYPE (sym->st_info) == STT_FUNC)))
|
|| ELF_ST_TYPE (sym->st_info) == STT_FUNC)))
|
||||||
&& (h->root.type != bfd_link_hash_defweak
|
&& (h->root.type != bfd_link_hash_defweak
|
||||||
|| dt_needed
|
|| dt_needed
|
||||||
|| bind == STB_WEAK))
|
|| bind == STB_WEAK))
|
||||||
{
|
{
|
||||||
@ -830,7 +829,7 @@ elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash,
|
|||||||
followed by a non-weak definition in a shared object. In this
|
followed by a non-weak definition in a shared object. In this
|
||||||
case, we prefer the definition in the shared object unless it
|
case, we prefer the definition in the shared object unless it
|
||||||
comes from a DT_NEEDED entry of a shared object, in which case,
|
comes from a DT_NEEDED entry of a shared object, in which case,
|
||||||
the DT_NEEDED entry may not be required at the run time. */
|
the DT_NEEDED entry may not be required at the run time. */
|
||||||
if (olddef
|
if (olddef
|
||||||
&& ! dt_needed
|
&& ! dt_needed
|
||||||
&& h->root.type == bfd_link_hash_defweak
|
&& h->root.type == bfd_link_hash_defweak
|
||||||
@ -1218,7 +1217,7 @@ elf_link_add_object_symbols (abfd, info)
|
|||||||
runpath = 1;
|
runpath = 1;
|
||||||
rpath = 0;
|
rpath = 0;
|
||||||
}
|
}
|
||||||
/* Ignore DT_RPATH if we have seen DT_RUNPATH. */
|
/* Ignore DT_RPATH if we have seen DT_RUNPATH. */
|
||||||
if (!runpath && dyn.d_tag == DT_RPATH)
|
if (!runpath && dyn.d_tag == DT_RPATH)
|
||||||
{
|
{
|
||||||
struct bfd_link_needed_list *n, **pn;
|
struct bfd_link_needed_list *n, **pn;
|
||||||
@ -1660,10 +1659,10 @@ elf_link_add_object_symbols (abfd, info)
|
|||||||
/* Combine visibilities, using the most constraining one. */
|
/* Combine visibilities, using the most constraining one. */
|
||||||
unsigned char hvis = ELF_ST_VISIBILITY (h->other);
|
unsigned char hvis = ELF_ST_VISIBILITY (h->other);
|
||||||
unsigned char symvis = ELF_ST_VISIBILITY (sym.st_other);
|
unsigned char symvis = ELF_ST_VISIBILITY (sym.st_other);
|
||||||
|
|
||||||
if (symvis && (hvis > symvis || hvis == 0))
|
if (symvis && (hvis > symvis || hvis == 0))
|
||||||
h->other = sym.st_other;
|
h->other = sym.st_other;
|
||||||
|
|
||||||
/* If neither has visibility, use the st_other of the
|
/* If neither has visibility, use the st_other of the
|
||||||
definition. This is an arbitrary choice, since the
|
definition. This is an arbitrary choice, since the
|
||||||
other bits have no general meaning. */
|
other bits have no general meaning. */
|
||||||
@ -1942,7 +1941,7 @@ elf_link_add_object_symbols (abfd, info)
|
|||||||
switch (ELF_ST_VISIBILITY (h->other))
|
switch (ELF_ST_VISIBILITY (h->other))
|
||||||
{
|
{
|
||||||
case STV_INTERNAL:
|
case STV_INTERNAL:
|
||||||
case STV_HIDDEN:
|
case STV_HIDDEN:
|
||||||
h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
|
h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
|
||||||
(*bed->elf_backend_hide_symbol) (info, h);
|
(*bed->elf_backend_hide_symbol) (info, h);
|
||||||
break;
|
break;
|
||||||
@ -1957,7 +1956,7 @@ elf_link_add_object_symbols (abfd, info)
|
|||||||
|
|
||||||
/* The symbol from a DT_NEEDED object is referenced from
|
/* The symbol from a DT_NEEDED object is referenced from
|
||||||
the regular object to create a dynamic executable. We
|
the regular object to create a dynamic executable. We
|
||||||
have to make sure there is a DT_NEEDED entry for it. */
|
have to make sure there is a DT_NEEDED entry for it. */
|
||||||
|
|
||||||
dt_needed = false;
|
dt_needed = false;
|
||||||
oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
|
oldsize = _bfd_stringtab_size (elf_hash_table (info)->dynstr);
|
||||||
@ -2534,7 +2533,7 @@ NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs,
|
|||||||
{
|
{
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
size = (o->reloc_count * bed->s->int_rels_per_ext_rel
|
size = (o->reloc_count * bed->s->int_rels_per_ext_rel
|
||||||
* sizeof (Elf_Internal_Rela));
|
* sizeof (Elf_Internal_Rela));
|
||||||
if (keep_memory)
|
if (keep_memory)
|
||||||
internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
|
internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
|
||||||
@ -2560,8 +2559,8 @@ NAME(_bfd_elf,link_read_relocs) (abfd, o, external_relocs, internal_relocs,
|
|||||||
external_relocs,
|
external_relocs,
|
||||||
internal_relocs))
|
internal_relocs))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
if (!elf_link_read_relocs_from_section
|
if (!elf_link_read_relocs_from_section
|
||||||
(abfd,
|
(abfd,
|
||||||
elf_section_data (o)->rel_hdr2,
|
elf_section_data (o)->rel_hdr2,
|
||||||
((bfd_byte *) external_relocs) + rel_hdr->sh_size,
|
((bfd_byte *) external_relocs) + rel_hdr->sh_size,
|
||||||
internal_relocs + (rel_hdr->sh_size / rel_hdr->sh_entsize
|
internal_relocs + (rel_hdr->sh_size / rel_hdr->sh_entsize
|
||||||
@ -3000,7 +2999,7 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
|
|||||||
/* If there are initialization and/or finalization functions to
|
/* If there are initialization and/or finalization functions to
|
||||||
call then add the corresponding DT_INIT/DT_FINI entries. */
|
call then add the corresponding DT_INIT/DT_FINI entries. */
|
||||||
h = (info->init_function
|
h = (info->init_function
|
||||||
? elf_link_hash_lookup (elf_hash_table (info),
|
? elf_link_hash_lookup (elf_hash_table (info),
|
||||||
info->init_function, false,
|
info->init_function, false,
|
||||||
false, false)
|
false, false)
|
||||||
: NULL);
|
: NULL);
|
||||||
@ -3012,7 +3011,7 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
h = (info->fini_function
|
h = (info->fini_function
|
||||||
? elf_link_hash_lookup (elf_hash_table (info),
|
? elf_link_hash_lookup (elf_hash_table (info),
|
||||||
info->fini_function, false,
|
info->fini_function, false,
|
||||||
false, false)
|
false, false)
|
||||||
: NULL);
|
: NULL);
|
||||||
@ -3349,7 +3348,7 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Assign dynsym indicies. In a shared library we generate a
|
/* Assign dynsym indicies. In a shared library we generate a
|
||||||
section symbol for each output section, which come first.
|
section symbol for each output section, which come first.
|
||||||
Next come all of the back-end allocated local dynamic syms,
|
Next come all of the back-end allocated local dynamic syms,
|
||||||
followed by the rest of the global symbols. */
|
followed by the rest of the global symbols. */
|
||||||
@ -3420,7 +3419,7 @@ NAME(bfd_elf,size_dynamic_sections) (output_bfd, soname, rpath,
|
|||||||
memset (s->contents, 0, (size_t) s->_raw_size);
|
memset (s->contents, 0, (size_t) s->_raw_size);
|
||||||
|
|
||||||
bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
|
bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
|
||||||
bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
|
bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
|
||||||
s->contents + hash_entry_size);
|
s->contents + hash_entry_size);
|
||||||
|
|
||||||
elf_hash_table (info)->bucketcount = bucketcount;
|
elf_hash_table (info)->bucketcount = bucketcount;
|
||||||
@ -3895,7 +3894,7 @@ elf_link_assign_sym_version (h, data)
|
|||||||
int version_index;
|
int version_index;
|
||||||
|
|
||||||
/* If we aren't going to export this symbol, we don't need
|
/* If we aren't going to export this symbol, we don't need
|
||||||
to worry about it. */
|
to worry about it. */
|
||||||
if (h->dynindx == -1)
|
if (h->dynindx == -1)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -4109,7 +4108,7 @@ elf_link_size_reloc_section (abfd, rel_hdr, o)
|
|||||||
rel_hdr->contents = (PTR) bfd_zalloc (abfd, rel_hdr->sh_size);
|
rel_hdr->contents = (PTR) bfd_zalloc (abfd, rel_hdr->sh_size);
|
||||||
if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
|
if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* We only allocate one set of hash entries, so we only do it the
|
/* We only allocate one set of hash entries, so we only do it the
|
||||||
first time we are called. */
|
first time we are called. */
|
||||||
if (elf_section_data (o)->rel_hashes == NULL)
|
if (elf_section_data (o)->rel_hashes == NULL)
|
||||||
@ -4155,7 +4154,7 @@ elf_link_adjust_relocs (abfd, rel_hdr, count, rel_hash)
|
|||||||
{
|
{
|
||||||
Elf_External_Rel *erel;
|
Elf_External_Rel *erel;
|
||||||
Elf_Internal_Rel irel;
|
Elf_Internal_Rel irel;
|
||||||
|
|
||||||
erel = (Elf_External_Rel *) rel_hdr->contents + i;
|
erel = (Elf_External_Rel *) rel_hdr->contents + i;
|
||||||
if (bed->s->swap_reloc_in)
|
if (bed->s->swap_reloc_in)
|
||||||
(*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, &irel);
|
(*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, &irel);
|
||||||
@ -4172,10 +4171,10 @@ elf_link_adjust_relocs (abfd, rel_hdr, count, rel_hash)
|
|||||||
{
|
{
|
||||||
Elf_External_Rela *erela;
|
Elf_External_Rela *erela;
|
||||||
Elf_Internal_Rela irela;
|
Elf_Internal_Rela irela;
|
||||||
|
|
||||||
BFD_ASSERT (rel_hdr->sh_entsize
|
BFD_ASSERT (rel_hdr->sh_entsize
|
||||||
== sizeof (Elf_External_Rela));
|
== sizeof (Elf_External_Rela));
|
||||||
|
|
||||||
erela = (Elf_External_Rela *) rel_hdr->contents + i;
|
erela = (Elf_External_Rela *) rel_hdr->contents + i;
|
||||||
if (bed->s->swap_reloca_in)
|
if (bed->s->swap_reloca_in)
|
||||||
(*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, &irela);
|
(*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, &irela);
|
||||||
@ -4366,9 +4365,9 @@ elf_bfd_final_link (abfd, info)
|
|||||||
if (output_section != NULL
|
if (output_section != NULL
|
||||||
&& (o->flags & SEC_RELOC) != 0)
|
&& (o->flags & SEC_RELOC) != 0)
|
||||||
{
|
{
|
||||||
struct bfd_elf_section_data *esdi
|
struct bfd_elf_section_data *esdi
|
||||||
= elf_section_data (o);
|
= elf_section_data (o);
|
||||||
struct bfd_elf_section_data *esdo
|
struct bfd_elf_section_data *esdo
|
||||||
= elf_section_data (output_section);
|
= elf_section_data (output_section);
|
||||||
unsigned int *rel_count;
|
unsigned int *rel_count;
|
||||||
unsigned int *rel_count2;
|
unsigned int *rel_count2;
|
||||||
@ -4385,11 +4384,11 @@ elf_bfd_final_link (abfd, info)
|
|||||||
rel_count = &esdo->rel_count2;
|
rel_count = &esdo->rel_count2;
|
||||||
rel_count2 = &esdo->rel_count;
|
rel_count2 = &esdo->rel_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
*rel_count += (esdi->rel_hdr.sh_size
|
*rel_count += (esdi->rel_hdr.sh_size
|
||||||
/ esdi->rel_hdr.sh_entsize);
|
/ esdi->rel_hdr.sh_entsize);
|
||||||
if (esdi->rel_hdr2)
|
if (esdi->rel_hdr2)
|
||||||
*rel_count2 += (esdi->rel_hdr2->sh_size
|
*rel_count2 += (esdi->rel_hdr2->sh_size
|
||||||
/ esdi->rel_hdr2->sh_entsize);
|
/ esdi->rel_hdr2->sh_entsize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4413,7 +4412,7 @@ elf_bfd_final_link (abfd, info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
|
/* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
|
||||||
to count upwards while actually outputting the relocations. */
|
to count upwards while actually outputting the relocations. */
|
||||||
elf_section_data (o)->rel_count = 0;
|
elf_section_data (o)->rel_count = 0;
|
||||||
elf_section_data (o)->rel_count2 = 0;
|
elf_section_data (o)->rel_count2 = 0;
|
||||||
}
|
}
|
||||||
@ -4592,7 +4591,7 @@ elf_bfd_final_link (abfd, info)
|
|||||||
/* That wrote out all the local symbols. Finish up the symbol table
|
/* That wrote out all the local symbols. Finish up the symbol table
|
||||||
with the global symbols. Even if we want to strip everything we
|
with the global symbols. Even if we want to strip everything we
|
||||||
can, we still need to deal with those global symbols that got
|
can, we still need to deal with those global symbols that got
|
||||||
converted to local in a version script. */
|
converted to local in a version script. */
|
||||||
|
|
||||||
if (info->shared)
|
if (info->shared)
|
||||||
{
|
{
|
||||||
@ -4705,7 +4704,7 @@ elf_bfd_final_link (abfd, info)
|
|||||||
Elf_Internal_Sym *, asection *)))
|
Elf_Internal_Sym *, asection *)))
|
||||||
elf_link_output_sym))
|
elf_link_output_sym))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flush all symbols to the file. */
|
/* Flush all symbols to the file. */
|
||||||
if (! elf_link_flush_output_syms (&finfo))
|
if (! elf_link_flush_output_syms (&finfo))
|
||||||
@ -4744,13 +4743,13 @@ elf_bfd_final_link (abfd, info)
|
|||||||
if ((o->flags & SEC_RELOC) == 0)
|
if ((o->flags & SEC_RELOC) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
|
elf_link_adjust_relocs (abfd, &elf_section_data (o)->rel_hdr,
|
||||||
elf_section_data (o)->rel_count,
|
elf_section_data (o)->rel_count,
|
||||||
elf_section_data (o)->rel_hashes);
|
elf_section_data (o)->rel_hashes);
|
||||||
if (elf_section_data (o)->rel_hdr2 != NULL)
|
if (elf_section_data (o)->rel_hdr2 != NULL)
|
||||||
elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
|
elf_link_adjust_relocs (abfd, elf_section_data (o)->rel_hdr2,
|
||||||
elf_section_data (o)->rel_count2,
|
elf_section_data (o)->rel_count2,
|
||||||
(elf_section_data (o)->rel_hashes
|
(elf_section_data (o)->rel_hashes
|
||||||
+ elf_section_data (o)->rel_count));
|
+ elf_section_data (o)->rel_count));
|
||||||
|
|
||||||
/* Set the reloc_count field to 0 to prevent write_relocs from
|
/* Set the reloc_count field to 0 to prevent write_relocs from
|
||||||
@ -5268,7 +5267,7 @@ elf_link_output_extsym (h, data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If a symbol is not defined locally, we clear the visibility
|
/* If a symbol is not defined locally, we clear the visibility
|
||||||
field. */
|
field. */
|
||||||
if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
|
if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
|
||||||
sym.st_other ^= ELF_ST_VISIBILITY(sym.st_other);
|
sym.st_other ^= ELF_ST_VISIBILITY(sym.st_other);
|
||||||
|
|
||||||
@ -5293,7 +5292,7 @@ elf_link_output_extsym (h, data)
|
|||||||
|
|
||||||
bucketcount = elf_hash_table (finfo->info)->bucketcount;
|
bucketcount = elf_hash_table (finfo->info)->bucketcount;
|
||||||
bucket = h->elf_hash_value % bucketcount;
|
bucket = h->elf_hash_value % bucketcount;
|
||||||
hash_entry_size
|
hash_entry_size
|
||||||
= elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
|
= elf_section_data (finfo->hash_sec)->this_hdr.sh_entsize;
|
||||||
bucketpos = ((bfd_byte *) finfo->hash_sec->contents
|
bucketpos = ((bfd_byte *) finfo->hash_sec->contents
|
||||||
+ (bucket + 2) * hash_entry_size);
|
+ (bucket + 2) * hash_entry_size);
|
||||||
@ -5353,7 +5352,7 @@ elf_link_output_extsym (h, data)
|
|||||||
OUTPUT_BFD. */
|
OUTPUT_BFD. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
elf_link_output_relocs (output_bfd, input_section, input_rel_hdr,
|
elf_link_output_relocs (output_bfd, input_section, input_rel_hdr,
|
||||||
internal_relocs)
|
internal_relocs)
|
||||||
bfd *output_bfd;
|
bfd *output_bfd;
|
||||||
asection *input_section;
|
asection *input_section;
|
||||||
@ -5370,7 +5369,7 @@ elf_link_output_relocs (output_bfd, input_section, input_rel_hdr,
|
|||||||
output_section = input_section->output_section;
|
output_section = input_section->output_section;
|
||||||
output_rel_hdr = NULL;
|
output_rel_hdr = NULL;
|
||||||
|
|
||||||
if (elf_section_data (output_section)->rel_hdr.sh_entsize
|
if (elf_section_data (output_section)->rel_hdr.sh_entsize
|
||||||
== input_rel_hdr->sh_entsize)
|
== input_rel_hdr->sh_entsize)
|
||||||
{
|
{
|
||||||
output_rel_hdr = &elf_section_data (output_section)->rel_hdr;
|
output_rel_hdr = &elf_section_data (output_section)->rel_hdr;
|
||||||
@ -5719,7 +5718,7 @@ elf_link_input_bfd (finfo, input_bfd)
|
|||||||
/* Adjust the reloc addresses and symbol indices. */
|
/* Adjust the reloc addresses and symbol indices. */
|
||||||
|
|
||||||
irela = internal_relocs;
|
irela = internal_relocs;
|
||||||
irelaend =
|
irelaend =
|
||||||
irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
|
irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
|
||||||
rel_hash = (elf_section_data (o->output_section)->rel_hashes
|
rel_hash = (elf_section_data (o->output_section)->rel_hashes
|
||||||
+ elf_section_data (o->output_section)->rel_count
|
+ elf_section_data (o->output_section)->rel_count
|
||||||
@ -5772,7 +5771,7 @@ elf_link_input_bfd (finfo, input_bfd)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is a reloc against a local symbol. */
|
/* This is a reloc against a local symbol. */
|
||||||
|
|
||||||
*rel_hash = NULL;
|
*rel_hash = NULL;
|
||||||
isym = finfo->internal_syms + r_symndx;
|
isym = finfo->internal_syms + r_symndx;
|
||||||
@ -5851,14 +5850,14 @@ elf_link_input_bfd (finfo, input_bfd)
|
|||||||
|
|
||||||
/* Swap out the relocs. */
|
/* Swap out the relocs. */
|
||||||
input_rel_hdr = &elf_section_data (o)->rel_hdr;
|
input_rel_hdr = &elf_section_data (o)->rel_hdr;
|
||||||
elf_link_output_relocs (output_bfd, o,
|
elf_link_output_relocs (output_bfd, o,
|
||||||
input_rel_hdr,
|
input_rel_hdr,
|
||||||
internal_relocs);
|
internal_relocs);
|
||||||
internal_relocs
|
internal_relocs
|
||||||
+= input_rel_hdr->sh_size / input_rel_hdr->sh_entsize;
|
+= input_rel_hdr->sh_size / input_rel_hdr->sh_entsize;
|
||||||
input_rel_hdr = elf_section_data (o)->rel_hdr2;
|
input_rel_hdr = elf_section_data (o)->rel_hdr2;
|
||||||
if (input_rel_hdr)
|
if (input_rel_hdr)
|
||||||
elf_link_output_relocs (output_bfd, o,
|
elf_link_output_relocs (output_bfd, o,
|
||||||
input_rel_hdr,
|
input_rel_hdr,
|
||||||
internal_relocs);
|
internal_relocs);
|
||||||
}
|
}
|
||||||
@ -6404,22 +6403,22 @@ elf_gc_mark (info, sec, gc_mark_hook)
|
|||||||
{
|
{
|
||||||
elf_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
|
elf_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
|
||||||
if (ELF_ST_BIND (s.st_info) == STB_LOCAL)
|
if (ELF_ST_BIND (s.st_info) == STB_LOCAL)
|
||||||
rsec = (*gc_mark_hook)(sec->owner, info, rel, NULL, &s);
|
rsec = (*gc_mark_hook) (sec->owner, info, rel, NULL, &s);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
h = sym_hashes[r_symndx - extsymoff];
|
h = sym_hashes[r_symndx - extsymoff];
|
||||||
rsec = (*gc_mark_hook)(sec->owner, info, rel, h, NULL);
|
rsec = (*gc_mark_hook) (sec->owner, info, rel, h, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (r_symndx >= nlocsyms)
|
else if (r_symndx >= nlocsyms)
|
||||||
{
|
{
|
||||||
h = sym_hashes[r_symndx - extsymoff];
|
h = sym_hashes[r_symndx - extsymoff];
|
||||||
rsec = (*gc_mark_hook)(sec->owner, info, rel, h, NULL);
|
rsec = (*gc_mark_hook) (sec->owner, info, rel, h, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
elf_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
|
elf_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
|
||||||
rsec = (*gc_mark_hook)(sec->owner, info, rel, NULL, &s);
|
rsec = (*gc_mark_hook) (sec->owner, info, rel, NULL, &s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rsec && !rsec->gc_mark)
|
if (rsec && !rsec->gc_mark)
|
||||||
@ -6490,7 +6489,7 @@ elf_gc_sweep (info, gc_sweep_hook)
|
|||||||
if (internal_relocs == NULL)
|
if (internal_relocs == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
r = (*gc_sweep_hook)(o->owner, info, o, internal_relocs);
|
r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);
|
||||||
|
|
||||||
if (!info->keep_memory)
|
if (!info->keep_memory)
|
||||||
free (internal_relocs);
|
free (internal_relocs);
|
||||||
@ -6543,7 +6542,7 @@ elf_gc_propagate_vtable_entries_used (h, okp)
|
|||||||
struct elf_link_hash_entry *h;
|
struct elf_link_hash_entry *h;
|
||||||
PTR okp;
|
PTR okp;
|
||||||
{
|
{
|
||||||
/* Those that are not vtables. */
|
/* Those that are not vtables. */
|
||||||
if (h->vtable_parent == NULL)
|
if (h->vtable_parent == NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -6785,7 +6784,7 @@ elf_gc_record_vtentry (abfd, sec, h, addend)
|
|||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
ptr = bfd_realloc (ptr - 1, bytes);
|
ptr = bfd_realloc (ptr - 1, bytes);
|
||||||
|
|
||||||
if (ptr != NULL)
|
if (ptr != NULL)
|
||||||
{
|
{
|
||||||
size_t oldbytes;
|
size_t oldbytes;
|
||||||
@ -6799,12 +6798,12 @@ elf_gc_record_vtentry (abfd, sec, h, addend)
|
|||||||
|
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* And arrange for that done flag to be at index -1. */
|
/* And arrange for that done flag to be at index -1. */
|
||||||
h->vtable_entries_used = ptr + 1;
|
h->vtable_entries_used = ptr + 1;
|
||||||
h->vtable_entries_size = size;
|
h->vtable_entries_size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
h->vtable_entries_used[addend / FILE_ALIGN] = true;
|
h->vtable_entries_used[addend / FILE_ALIGN] = true;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
#include "opcode/ia64.h"
|
#include "opcode/ia64.h"
|
||||||
#include "elf/ia64.h"
|
#include "elf/ia64.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* THE RULES for all the stuff the linker creates --
|
* THE RULES for all the stuff the linker creates --
|
||||||
*
|
*
|
||||||
@ -83,7 +82,7 @@ struct elfNN_ia64_dyn_sym_info
|
|||||||
|
|
||||||
/* The symbol table entry, if any, that this was derrived from. */
|
/* The symbol table entry, if any, that this was derrived from. */
|
||||||
struct elf_link_hash_entry *h;
|
struct elf_link_hash_entry *h;
|
||||||
|
|
||||||
/* Used to count non-got, non-plt relocations for delayed sizing
|
/* Used to count non-got, non-plt relocations for delayed sizing
|
||||||
of relocation sections. */
|
of relocation sections. */
|
||||||
struct elfNN_ia64_dyn_reloc_entry
|
struct elfNN_ia64_dyn_reloc_entry
|
||||||
@ -188,7 +187,7 @@ static struct elfNN_ia64_local_hash_entry *elfNN_ia64_local_hash_lookup
|
|||||||
boolean create, boolean copy));
|
boolean create, boolean copy));
|
||||||
static void elfNN_ia64_dyn_sym_traverse
|
static void elfNN_ia64_dyn_sym_traverse
|
||||||
PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info,
|
PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info,
|
||||||
boolean (*func)(struct elfNN_ia64_dyn_sym_info *, PTR),
|
boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR),
|
||||||
PTR info));
|
PTR info));
|
||||||
static boolean elfNN_ia64_create_dynamic_sections
|
static boolean elfNN_ia64_create_dynamic_sections
|
||||||
PARAMS ((bfd *abfd, struct bfd_link_info *info));
|
PARAMS ((bfd *abfd, struct bfd_link_info *info));
|
||||||
@ -710,8 +709,8 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
|
|||||||
tsec = bfd_com_section_ptr;
|
tsec = bfd_com_section_ptr;
|
||||||
else if (isym.st_shndx > 0 && isym.st_shndx < SHN_LORESERVE)
|
else if (isym.st_shndx > 0 && isym.st_shndx < SHN_LORESERVE)
|
||||||
tsec = bfd_section_from_elf_index (abfd, isym.st_shndx);
|
tsec = bfd_section_from_elf_index (abfd, isym.st_shndx);
|
||||||
else
|
else
|
||||||
continue; /* who knows. */
|
continue; /* who knows. */
|
||||||
|
|
||||||
toff = isym.st_value;
|
toff = isym.st_value;
|
||||||
}
|
}
|
||||||
@ -1156,7 +1155,6 @@ elfNN_ia64_modify_segment_map (abfd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* According to the Tahoe assembler spec, all labels starting with a
|
/* According to the Tahoe assembler spec, all labels starting with a
|
||||||
'.' are local. */
|
'.' are local. */
|
||||||
|
|
||||||
@ -1204,7 +1202,7 @@ elfNN_ia64_local_hash_table_init (ht, abfd, new)
|
|||||||
bfd *abfd ATTRIBUTE_UNUSED;
|
bfd *abfd ATTRIBUTE_UNUSED;
|
||||||
new_hash_entry_func new;
|
new_hash_entry_func new;
|
||||||
{
|
{
|
||||||
memset (ht, 0, sizeof(*ht));
|
memset (ht, 0, sizeof (*ht));
|
||||||
return bfd_hash_table_init (&ht->root, new);
|
return bfd_hash_table_init (&ht->root, new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1227,7 +1225,7 @@ elfNN_ia64_new_loc_hash_entry (entry, table, string)
|
|||||||
|
|
||||||
/* Initialize our local data. All zeros, and definitely easier
|
/* Initialize our local data. All zeros, and definitely easier
|
||||||
than setting a handful of bit fields. */
|
than setting a handful of bit fields. */
|
||||||
memset (ret, 0, sizeof(*ret));
|
memset (ret, 0, sizeof (*ret));
|
||||||
|
|
||||||
/* Call the allocation method of the superclass. */
|
/* Call the allocation method of the superclass. */
|
||||||
ret = ((struct elfNN_ia64_local_hash_entry *)
|
ret = ((struct elfNN_ia64_local_hash_entry *)
|
||||||
@ -1255,7 +1253,7 @@ elfNN_ia64_new_elf_hash_entry (entry, table, string)
|
|||||||
|
|
||||||
/* Initialize our local data. All zeros, and definitely easier
|
/* Initialize our local data. All zeros, and definitely easier
|
||||||
than setting a handful of bit fields. */
|
than setting a handful of bit fields. */
|
||||||
memset (ret, 0, sizeof(*ret));
|
memset (ret, 0, sizeof (*ret));
|
||||||
|
|
||||||
/* Call the allocation method of the superclass. */
|
/* Call the allocation method of the superclass. */
|
||||||
ret = ((struct elfNN_ia64_link_hash_entry *)
|
ret = ((struct elfNN_ia64_link_hash_entry *)
|
||||||
@ -1274,7 +1272,7 @@ elfNN_ia64_hash_copy_indirect (xdir, xind)
|
|||||||
dir = (struct elfNN_ia64_link_hash_entry *)xdir;
|
dir = (struct elfNN_ia64_link_hash_entry *)xdir;
|
||||||
ind = (struct elfNN_ia64_link_hash_entry *)xind;
|
ind = (struct elfNN_ia64_link_hash_entry *)xind;
|
||||||
|
|
||||||
/* Copy down any references that we may have already seen to the
|
/* Copy down any references that we may have already seen to the
|
||||||
symbol which just became indirect. */
|
symbol which just became indirect. */
|
||||||
|
|
||||||
dir->root.elf_link_hash_flags |=
|
dir->root.elf_link_hash_flags |=
|
||||||
@ -1488,7 +1486,7 @@ get_dyn_sym_info (ia64_info, h, abfd, rel, create)
|
|||||||
struct elfNN_ia64_dyn_sym_info **pp;
|
struct elfNN_ia64_dyn_sym_info **pp;
|
||||||
struct elfNN_ia64_dyn_sym_info *dyn_i;
|
struct elfNN_ia64_dyn_sym_info *dyn_i;
|
||||||
bfd_vma addend = rel ? rel->r_addend : 0;
|
bfd_vma addend = rel ? rel->r_addend : 0;
|
||||||
|
|
||||||
if (h)
|
if (h)
|
||||||
pp = &((struct elfNN_ia64_link_hash_entry *)h)->info;
|
pp = &((struct elfNN_ia64_link_hash_entry *)h)->info;
|
||||||
else
|
else
|
||||||
@ -1500,7 +1498,7 @@ get_dyn_sym_info (ia64_info, h, abfd, rel, create)
|
|||||||
/* Construct a string for use in the elfNN_ia64_local_hash_table.
|
/* Construct a string for use in the elfNN_ia64_local_hash_table.
|
||||||
The name describes what was once anonymous memory. */
|
The name describes what was once anonymous memory. */
|
||||||
|
|
||||||
len = sizeof(void*)*2 + 1 + sizeof(bfd_vma)*4 + 1 + 1;
|
len = sizeof (void*)*2 + 1 + sizeof (bfd_vma)*4 + 1 + 1;
|
||||||
len += 10; /* %p slop */
|
len += 10; /* %p slop */
|
||||||
|
|
||||||
addr_name = alloca (len);
|
addr_name = alloca (len);
|
||||||
@ -1512,7 +1510,7 @@ get_dyn_sym_info (ia64_info, h, abfd, rel, create)
|
|||||||
BFD_ASSERT (loc_h);
|
BFD_ASSERT (loc_h);
|
||||||
|
|
||||||
pp = &loc_h->info;
|
pp = &loc_h->info;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (dyn_i = *pp; dyn_i && dyn_i->addend != addend; dyn_i = *pp)
|
for (dyn_i = *pp; dyn_i && dyn_i->addend != addend; dyn_i = *pp)
|
||||||
pp = &dyn_i->next;
|
pp = &dyn_i->next;
|
||||||
@ -2047,7 +2045,7 @@ allocate_fptr (dyn_i, data)
|
|||||||
if (dyn_i->want_fptr)
|
if (dyn_i->want_fptr)
|
||||||
{
|
{
|
||||||
struct elf_link_hash_entry *h = dyn_i->h;
|
struct elf_link_hash_entry *h = dyn_i->h;
|
||||||
|
|
||||||
if (h)
|
if (h)
|
||||||
while (h->root.type == bfd_link_hash_indirect
|
while (h->root.type == bfd_link_hash_indirect
|
||||||
|| h->root.type == bfd_link_hash_warning)
|
|| h->root.type == bfd_link_hash_warning)
|
||||||
@ -2504,7 +2502,7 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info)
|
|||||||
if (! bfd_elfNN_add_dynamic_entry (info, DT_RELA, 0)
|
if (! bfd_elfNN_add_dynamic_entry (info, DT_RELA, 0)
|
||||||
|| ! bfd_elfNN_add_dynamic_entry (info, DT_RELASZ, 0)
|
|| ! bfd_elfNN_add_dynamic_entry (info, DT_RELASZ, 0)
|
||||||
|| ! bfd_elfNN_add_dynamic_entry (info, DT_RELAENT,
|
|| ! bfd_elfNN_add_dynamic_entry (info, DT_RELAENT,
|
||||||
sizeof(ElfNN_External_Rela)))
|
sizeof (ElfNN_External_Rela)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (reltext)
|
if (reltext)
|
||||||
@ -2541,7 +2539,7 @@ elfNN_ia64_install_value (abfd, hit_addr, val, r_type)
|
|||||||
case R_IA64_LDXMOV:
|
case R_IA64_LDXMOV:
|
||||||
return bfd_reloc_ok;
|
return bfd_reloc_ok;
|
||||||
|
|
||||||
/* Instruction relocations. */
|
/* Instruction relocations. */
|
||||||
|
|
||||||
case R_IA64_IMM14: opnd = IA64_OPND_IMM14; break;
|
case R_IA64_IMM14: opnd = IA64_OPND_IMM14; break;
|
||||||
|
|
||||||
@ -2686,7 +2684,7 @@ elfNN_ia64_install_value (abfd, hit_addr, val, r_type)
|
|||||||
case 0: shift = 5; break;
|
case 0: shift = 5; break;
|
||||||
case 1: shift = 14; hit_addr += 3; break;
|
case 1: shift = 14; hit_addr += 3; break;
|
||||||
case 2: shift = 23; hit_addr += 6; break;
|
case 2: shift = 23; hit_addr += 6; break;
|
||||||
case 3: return bfd_reloc_notsupported; /* shouldn't happen... */
|
case 3: return bfd_reloc_notsupported; /* shouldn't happen... */
|
||||||
}
|
}
|
||||||
dword = bfd_get_64 (abfd, hit_addr);
|
dword = bfd_get_64 (abfd, hit_addr);
|
||||||
insn = (dword >> shift) & 0x1ffffffffffLL;
|
insn = (dword >> shift) & 0x1ffffffffffLL;
|
||||||
@ -2765,7 +2763,7 @@ elfNN_ia64_install_dyn_reloc (abfd, info, sec, srel, offset, type,
|
|||||||
bfd_elfNN_swap_reloca_out (abfd, &outrel,
|
bfd_elfNN_swap_reloca_out (abfd, &outrel,
|
||||||
((ElfNN_External_Rela *) srel->contents
|
((ElfNN_External_Rela *) srel->contents
|
||||||
+ srel->reloc_count++));
|
+ srel->reloc_count++));
|
||||||
BFD_ASSERT (sizeof(ElfNN_External_Rela) * srel->reloc_count
|
BFD_ASSERT (sizeof (ElfNN_External_Rela) * srel->reloc_count
|
||||||
<= srel->_cooked_size);
|
<= srel->_cooked_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3057,7 +3055,7 @@ elfNN_ia64_final_link (abfd, info)
|
|||||||
(*_bfd_error_handler)
|
(*_bfd_error_handler)
|
||||||
(_("%s: short data segment overflowed (0x%lx >= 0x400000)"),
|
(_("%s: short data segment overflowed (0x%lx >= 0x400000)"),
|
||||||
bfd_get_filename (abfd),
|
bfd_get_filename (abfd),
|
||||||
(unsigned long)(max_short_vma - min_short_vma));
|
(unsigned long) (max_short_vma - min_short_vma));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if ((gp_val > min_short_vma
|
else if ((gp_val > min_short_vma
|
||||||
@ -3618,7 +3616,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section,
|
|||||||
if (! dynamic_symbol_p)
|
if (! dynamic_symbol_p)
|
||||||
{
|
{
|
||||||
unsigned int dyn_r_type;
|
unsigned int dyn_r_type;
|
||||||
|
|
||||||
if (r_type == R_IA64_IPLTMSB)
|
if (r_type == R_IA64_IPLTMSB)
|
||||||
dyn_r_type = R_IA64_REL64MSB;
|
dyn_r_type = R_IA64_REL64MSB;
|
||||||
else
|
else
|
||||||
@ -3873,7 +3871,7 @@ elfNN_ia64_finish_dynamic_sections (abfd, info)
|
|||||||
|
|
||||||
case DT_RELASZ:
|
case DT_RELASZ:
|
||||||
/* Do not have RELASZ include JMPREL. This makes things
|
/* Do not have RELASZ include JMPREL. This makes things
|
||||||
easier on ld.so. This is not what the rest of BFD set up. */
|
easier on ld.so. This is not what the rest of BFD set up. */
|
||||||
dyn.d_un.d_val -= (ia64_info->minplt_entries
|
dyn.d_un.d_val -= (ia64_info->minplt_entries
|
||||||
* sizeof (ElfNN_External_Rela));
|
* sizeof (ElfNN_External_Rela));
|
||||||
break;
|
break;
|
||||||
@ -3903,7 +3901,7 @@ elfNN_ia64_finish_dynamic_sections (abfd, info)
|
|||||||
|
|
||||||
/* ELF file flag handling: */
|
/* ELF file flag handling: */
|
||||||
|
|
||||||
/* Function to keep IA-64 specific file flags. */
|
/* Function to keep IA-64 specific file flags. */
|
||||||
static boolean
|
static boolean
|
||||||
elfNN_ia64_set_private_flags (abfd, flags)
|
elfNN_ia64_set_private_flags (abfd, flags)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
@ -4045,7 +4043,7 @@ elfNN_ia64_print_private_bfd_data (abfd, ptr)
|
|||||||
(flags & EF_IA_64_NOFUNCDESC_CONS_GP) ? "NOFUNCDESC_CONS_GP, " : "",
|
(flags & EF_IA_64_NOFUNCDESC_CONS_GP) ? "NOFUNCDESC_CONS_GP, " : "",
|
||||||
(flags & EF_IA_64_ABSOLUTE) ? "ABSOLUTE, " : "",
|
(flags & EF_IA_64_ABSOLUTE) ? "ABSOLUTE, " : "",
|
||||||
(flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32");
|
(flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32");
|
||||||
|
|
||||||
_bfd_elf_print_private_bfd_data (abfd, ptr);
|
_bfd_elf_print_private_bfd_data (abfd, ptr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -325,16 +325,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||||||
#else
|
#else
|
||||||
#undef USE_REL
|
#undef USE_REL
|
||||||
#define USE_REL 1
|
#define USE_REL 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Use these in new code. */
|
/* Use these in new code. */
|
||||||
#ifndef elf_backend_may_use_rel_p
|
#ifndef elf_backend_may_use_rel_p
|
||||||
#define elf_backend_may_use_rel_p USE_REL
|
#define elf_backend_may_use_rel_p USE_REL
|
||||||
#endif
|
#endif
|
||||||
#ifndef elf_backend_may_use_rela_p
|
#ifndef elf_backend_may_use_rela_p
|
||||||
#define elf_backend_may_use_rela_p !USE_REL
|
#define elf_backend_may_use_rela_p !USE_REL
|
||||||
#endif
|
#endif
|
||||||
#ifndef elf_backend_default_use_rela_p
|
#ifndef elf_backend_default_use_rela_p
|
||||||
#define elf_backend_default_use_rela_p !USE_REL
|
#define elf_backend_default_use_rela_p !USE_REL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -608,7 +608,7 @@ const bfd_target TARGET_LITTLE_SYM =
|
|||||||
#else
|
#else
|
||||||
NULL,
|
NULL,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* backend_data: */
|
/* backend_data: */
|
||||||
(PTR) &elfNN_bed
|
(PTR) &elfNN_bed
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user