bfd/
2006-05-30 H.J. Lu <hongjiu.lu@intel.com> * bfd.c (bfd_emul_get_maxpagesize): New. (bfd_elf_set_pagesize): Likewise. (bfd_emul_set_maxpagesize): Likewise. (bfd_emul_get_commonpagesize): Likewise. (bfd_emul_set_commonpagesize): Likewise. * bfd-in2.h: Regenerated. * elf-bfd.h (elf_backend_data): Add commonpagesize. (xvec_get_elf_backend_data): New. (get_elf_backend_data): Use xvec_get_elf_backend_data. * elf32-arm.c (elf32_arm_vxworks_bed): Remove const. * elfxx-target.h (elfNN_bed): Likewise. * elf32-arm.c (ELF_COMMONPAGESIZE): Defined. * elf32-mips.c (ELF_COMMONPAGESIZE): Likewise. * elf32-ppc.c (ELF_COMMONPAGESIZE): Likewise. * elf32-sh.c (ELF_COMMONPAGESIZE): Likewise. * elf32-sh64.c (ELF_COMMONPAGESIZE): Likewise. * elf32-sparc.c (ELF_COMMONPAGESIZE): Likewise. * elf64-alpha.c (ELF_COMMONPAGESIZE): Likewise. * elf64-ppc.c (ELF_COMMONPAGESIZE): Likewise. * elf64-sparc.c (ELF_COMMONPAGESIZE): Likewise. * elf64-x86-64.c (ELF_COMMONPAGESIZE): Likewise. * elfn32-mips.c (ELF_COMMONPAGESIZE): Likewise. * elfxx-ia64.c (ELF_COMMONPAGESIZE): Likewise. * elfxx-target.h (ELF_COMMONPAGESIZE): Define if not defined. (elfNN_bed): Initialize commonpagesize with ELF_COMMONPAGESIZE. * targets.c (bfd_find_target): Support NULL abfd. ld/ 2006-05-30 H.J. Lu <hongjiu.lu@intel.com> * emulparams/arcelf.sh (MAXPAGESIZE): Changed to "CONSTANT (MAXPAGESIZE)". * emulparams/armelf_nbsd.sh: Likewise. * emulparams/armelf_vxworks.sh: Likewise. * emulparams/armnto.sh: Likewise. * emulparams/armsymbian.sh: Likewise. * emulparams/crislinux.sh: Likewise. * emulparams/elf32_i860.sh: Likewise. * emulparams/elf32_i960.sh: Likewise. * emulparams/elf32am33lin.sh: Likewise. * emulparams/elf32bfinfd.sh: Likewise. * emulparams/elf32bmipn32-defs.sh: Likewise. * emulparams/elf32frvfd.sh: Likewise. * emulparams/elf32i370.sh: Likewise. * emulparams/elf32lppcnto.sh: Likewise. * emulparams/elf32mcore.sh: Likewise. * emulparams/elf32openrisc.sh: Likewise. * emulparams/elf32ppcnto.sh: Likewise. * emulparams/elf32ppcwindiss.sh: Likewise. * emulparams/elf32vax.sh: Likewise. * emulparams/elf32xc16x.sh: Likewise. * emulparams/elf32xc16xl.sh: Likewise. * emulparams/elf32xc16xs.sh: Likewise. * emulparams/elf64_aix.sh: Likewise. * emulparams/elf64hppa.sh: Likewise. * emulparams/elf64mmix.sh: Likewise. * emulparams/elf_i386_be.sh: Likewise. * emulparams/elf_i386_chaos.sh: Likewise. * emulparams/elf_i386_ldso.sh: Likewise. * emulparams/hppa64linux.sh: Likewise. * emulparams/hppalinux.sh: Likewise. * emulparams/hppaobsd.sh: Likewise. * emulparams/i386lynx.sh: Likewise. * emulparams/i386moss.sh: Likewise. * emulparams/i386nto.sh: Likewise. * emulparams/i386nw.sh: Likewise. * emulparams/m32relf_linux.sh: Likewise. * emulparams/m68kpsos.sh: Likewise. * emulparams/or32elf.sh: Likewise. * emulparams/pjelf.sh: Likewise. * emulparams/pjlelf.sh: Likewise. * emulparams/ppclynx.sh: Likewise. * emulparams/ppcnw.sh: Likewise. * emulparams/shelf32_nbsd.sh : Likewise. * emulparams/shelf_nbsd.sh: Likewise. * emulparams/shelf_nto.sh: Likewise. * emulparams/shlelf_nto.sh: Likewise. * emulparams/xtensa-config.sh: Likewise. * emulparams/armelf_linux.sh (MAXPAGESIZE): Changed to "CONSTANT (MAXPAGESIZE)". (COMMONPAGESIZE): Changed to "CONSTANT (COMMONPAGESIZE)". * emulparams/elf32_sparc.sh: Likewise. * emulparams/elf32bmip.sh: Likewise. * emulparams/elf32ppccommon.sh: Likewise. * emulparams/elf64_ia64.sh: Likewise. * emulparams/elf64_s390.sh: Likewise. * emulparams/elf64_sparc.sh: Likewise. * emulparams/elf64alpha.sh: Likewise. * emulparams/elf64ppc.sh: Likewise. * emulparams/elf_i386.sh: Likewise. * emulparams/elf_i386_vxworks.sh: Likewise. * emulparams/elf_s390.sh: Likewise. * emulparams/elf_x86_64.sh: Likewise. * emulparams/shlelf32_linux.sh: Likewise. * emulparams/shlelf_linux.sh: Likewise. * emulparams/elf32bmipn32.sh (COMMONPAGESIZE): Changed to "CONSTANT (COMMONPAGESIZE)". * emulparams/elf32btsmipn32.sh: Likewise. * emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Add "-z max-page-size=" and "-z common-page-size=". (gld${EMULATION_NAME}_list_options): Likewise. * ld.h (ld_config_type): Add maxpagesize and commonpagesize. * ld.texinfo: Document "-z max-page-size=" and "-z common-page-size=". * ldexp.c (exp_print_token): Handle CONSTANT. (fold_name): Likewise. * ldgram.y: Likewise. * ldlex.l: Likewise. * ldmain.c (main): Initiliaze config.maxpagesize and config.commonpagesize. Call bfd_emul_set_maxpagesize if config.maxpagesize isn't 0. Call bfd_emul_set_commonpagesize if config.commonpagesize config.maxpagesize isn't 0. ld/testsuite/ 2006-05-30 H.J. Lu <hongjiu.lu@intel.com> * ld-elf/binutils.exp: New file. * ld-elf/commonpage1.d: Likewise. * ld-elf/maxpage1.d: Likewise. * ld-elf/maxpage1.s: Likewise.
This commit is contained in:
parent
66f338c7b9
commit
24718e3ba5
|
@ -1,3 +1,37 @@
|
|||
2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* bfd.c (bfd_emul_get_maxpagesize): New.
|
||||
(bfd_elf_set_pagesize): Likewise.
|
||||
(bfd_emul_set_maxpagesize): Likewise.
|
||||
(bfd_emul_get_commonpagesize): Likewise.
|
||||
(bfd_emul_set_commonpagesize): Likewise.
|
||||
* bfd-in2.h: Regenerated.
|
||||
|
||||
* elf-bfd.h (elf_backend_data): Add commonpagesize.
|
||||
(xvec_get_elf_backend_data): New.
|
||||
(get_elf_backend_data): Use xvec_get_elf_backend_data.
|
||||
|
||||
* elf32-arm.c (elf32_arm_vxworks_bed): Remove const.
|
||||
* elfxx-target.h (elfNN_bed): Likewise.
|
||||
|
||||
* elf32-arm.c (ELF_COMMONPAGESIZE): Defined.
|
||||
* elf32-mips.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf32-ppc.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf32-sh.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf32-sh64.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf32-sparc.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf64-alpha.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf64-ppc.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf64-sparc.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elf64-x86-64.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elfn32-mips.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
* elfxx-ia64.c (ELF_COMMONPAGESIZE): Likewise.
|
||||
|
||||
* elfxx-target.h (ELF_COMMONPAGESIZE): Define if not defined.
|
||||
(elfNN_bed): Initialize commonpagesize with ELF_COMMONPAGESIZE.
|
||||
|
||||
* targets.c (bfd_find_target): Support NULL abfd.
|
||||
|
||||
2006-05-30 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/es.po: Updated Spanish translation.
|
||||
|
|
|
@ -4709,6 +4709,14 @@ void bfd_preserve_restore (bfd *, struct bfd_preserve *);
|
|||
|
||||
void bfd_preserve_finish (bfd *, struct bfd_preserve *);
|
||||
|
||||
bfd_vma bfd_emul_get_maxpagesize (const char *);
|
||||
|
||||
void bfd_emul_set_maxpagesize (const char *, bfd_vma);
|
||||
|
||||
bfd_vma bfd_emul_get_commonpagesize (const char *);
|
||||
|
||||
void bfd_emul_set_commonpagesize (const char *, bfd_vma);
|
||||
|
||||
/* Extracted from archive.c. */
|
||||
symindex bfd_get_next_mapent
|
||||
(bfd *abfd, symindex previous, carsym **sym);
|
||||
|
|
127
bfd/bfd.c
127
bfd/bfd.c
|
@ -1513,3 +1513,130 @@ bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve)
|
|||
objalloc. */
|
||||
bfd_hash_table_free (&preserve->section_htab);
|
||||
}
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
bfd_emul_get_maxpagesize
|
||||
|
||||
SYNOPSIS
|
||||
bfd_vma bfd_emul_get_maxpagesize (const char *);
|
||||
|
||||
DESCRIPTION
|
||||
Returns the maximum page size, in bytes, as determined by
|
||||
emulation.
|
||||
|
||||
RETURNS
|
||||
Returns the maximum page size in bytes for ELF, abort
|
||||
otherwise.
|
||||
*/
|
||||
|
||||
bfd_vma
|
||||
bfd_emul_get_maxpagesize (const char *emul)
|
||||
{
|
||||
const bfd_target *target;
|
||||
|
||||
target = bfd_find_target (emul, NULL);
|
||||
if (target != NULL
|
||||
&& target->flavour == bfd_target_elf_flavour)
|
||||
return xvec_get_elf_backend_data (target)->maxpagesize;
|
||||
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
|
||||
int offset, const bfd_target *orig_target)
|
||||
{
|
||||
if (target->flavour == bfd_target_elf_flavour)
|
||||
{
|
||||
const struct elf_backend_data *bed;
|
||||
|
||||
bed = xvec_get_elf_backend_data (target);
|
||||
*((bfd_vma *) ((char *) bed + offset)) = size;
|
||||
}
|
||||
|
||||
if (target->alternative_target
|
||||
&& target->alternative_target != orig_target)
|
||||
bfd_elf_set_pagesize (target->alternative_target, size, offset,
|
||||
orig_target);
|
||||
}
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
bfd_emul_set_maxpagesize
|
||||
|
||||
SYNOPSIS
|
||||
void bfd_emul_set_maxpagesize (const char *, bfd_vma);
|
||||
|
||||
DESCRIPTION
|
||||
For ELF, set the maximum page size for the emulation. It is
|
||||
a no-op for other formats.
|
||||
|
||||
*/
|
||||
|
||||
void
|
||||
bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
|
||||
{
|
||||
const bfd_target *target;
|
||||
|
||||
target = bfd_find_target (emul, NULL);
|
||||
if (target)
|
||||
bfd_elf_set_pagesize (target, size,
|
||||
offsetof (struct elf_backend_data,
|
||||
maxpagesize), target);
|
||||
}
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
bfd_emul_get_commonpagesize
|
||||
|
||||
SYNOPSIS
|
||||
bfd_vma bfd_emul_get_commonpagesize (const char *);
|
||||
|
||||
DESCRIPTION
|
||||
Returns the common page size, in bytes, as determined by
|
||||
emulation.
|
||||
|
||||
RETURNS
|
||||
Returns the common page size in bytes for ELF, abort otherwise.
|
||||
*/
|
||||
|
||||
bfd_vma
|
||||
bfd_emul_get_commonpagesize (const char *emul)
|
||||
{
|
||||
const bfd_target *target;
|
||||
|
||||
target = bfd_find_target (emul, NULL);
|
||||
if (target != NULL
|
||||
&& target->flavour == bfd_target_elf_flavour)
|
||||
return xvec_get_elf_backend_data (target)->commonpagesize;
|
||||
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
bfd_emul_set_commonpagesize
|
||||
|
||||
SYNOPSIS
|
||||
void bfd_emul_set_commonpagesize (const char *, bfd_vma);
|
||||
|
||||
DESCRIPTION
|
||||
For ELF, set the common page size for the emulation. It is
|
||||
a no-op for other formats.
|
||||
|
||||
*/
|
||||
|
||||
void
|
||||
bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
|
||||
{
|
||||
const bfd_target *target;
|
||||
|
||||
target = bfd_find_target (emul, NULL);
|
||||
if (target)
|
||||
bfd_elf_set_pagesize (target, size,
|
||||
offsetof (struct elf_backend_data,
|
||||
commonpagesize), target);
|
||||
}
|
||||
|
|
|
@ -571,6 +571,9 @@ struct elf_backend_data
|
|||
pages at least this large. May be smaller than maxpagesize. */
|
||||
bfd_vma minpagesize;
|
||||
|
||||
/* The common page size for this backend. */
|
||||
bfd_vma commonpagesize;
|
||||
|
||||
/* The BFD flags applied to sections created for dynamic linking. */
|
||||
flagword dynamic_sec_flags;
|
||||
|
||||
|
@ -1196,8 +1199,11 @@ struct bfd_elf_section_data
|
|||
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
||||
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
||||
|
||||
#define xvec_get_elf_backend_data(xvec) \
|
||||
((struct elf_backend_data *) (xvec)->backend_data)
|
||||
|
||||
#define get_elf_backend_data(abfd) \
|
||||
((const struct elf_backend_data *) (abfd)->xvec->backend_data)
|
||||
xvec_get_elf_backend_data ((abfd)->xvec)
|
||||
|
||||
/* This struct is used to pass information to routines called via
|
||||
elf_link_hash_traverse which must return failure. */
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
#define ARM_ELF_ABI_VERSION 0
|
||||
#define ARM_ELF_OS_ABI_VERSION ELFOSABI_ARM
|
||||
|
||||
static const struct elf_backend_data elf32_arm_vxworks_bed;
|
||||
static struct elf_backend_data elf32_arm_vxworks_bed;
|
||||
|
||||
/* 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
|
||||
|
@ -8406,6 +8406,7 @@ const struct elf_size_info elf32_arm_size_info = {
|
|||
#define ELF_MAXPAGESIZE 0x8000
|
||||
#endif
|
||||
#define ELF_MINPAGESIZE 0x1000
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
|
||||
#define bfd_elf32_mkobject elf32_arm_mkobject
|
||||
|
||||
|
|
|
@ -1599,6 +1599,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
|||
/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
|
||||
a value of 0x1000, and we are compatible. */
|
||||
#define ELF_MAXPAGESIZE 0x1000
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
|
||||
#include "elf32-target.h"
|
||||
|
||||
|
|
|
@ -7436,6 +7436,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||
#define ELF_MAXPAGESIZE 0x10000
|
||||
#endif
|
||||
#define ELF_MINPAGESIZE 0x1000
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
#define elf_info_to_howto ppc_elf_info_to_howto
|
||||
|
||||
#ifdef EM_CYGNUS_POWERPC
|
||||
|
|
|
@ -7371,6 +7371,7 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
|
|||
#define TARGET_LITTLE_NAME "elf32-shl-nbsd"
|
||||
#undef ELF_MAXPAGESIZE
|
||||
#define ELF_MAXPAGESIZE 0x10000
|
||||
#undef ELF_COMMONPAGESIZE
|
||||
#undef elf_symbol_leading_char
|
||||
#define elf_symbol_leading_char 0
|
||||
#undef elf32_bed
|
||||
|
@ -7388,6 +7389,8 @@ sh_elf_plt_sym_val (bfd_vma i, const asection *plt,
|
|||
#define TARGET_LITTLE_SYM bfd_elf32_shlin_vec
|
||||
#undef TARGET_LITTLE_NAME
|
||||
#define TARGET_LITTLE_NAME "elf32-sh-linux"
|
||||
#undef ELF_COMMONPAGESIZE
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
|
||||
#undef elf_backend_grok_prstatus
|
||||
#define elf_backend_grok_prstatus elf32_shlin_grok_prstatus
|
||||
|
|
|
@ -785,6 +785,7 @@ static const struct bfd_elf_special_section sh64_elf_special_sections[] =
|
|||
#define TARGET_LITTLE_NAME "elf32-sh64l-nbsd"
|
||||
#undef ELF_MAXPAGESIZE
|
||||
#define ELF_MAXPAGESIZE 0x10000
|
||||
#undef ELF_COMMONPAGESIZE
|
||||
#undef elf_symbol_leading_char
|
||||
#define elf_symbol_leading_char 0
|
||||
#undef elf32_bed
|
||||
|
@ -803,6 +804,8 @@ static const struct bfd_elf_special_section sh64_elf_special_sections[] =
|
|||
#define TARGET_LITTLE_NAME "elf32-sh64-linux"
|
||||
#undef elf32_bed
|
||||
#define elf32_bed elf32_sh64_lin_bed
|
||||
#undef ELF_COMMONPAGESIZE
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
|
||||
#include "elf32-target.h"
|
||||
|
||||
|
|
|
@ -172,6 +172,7 @@ elf32_sparc_reloc_type_class (const Elf_Internal_Rela *rela)
|
|||
#define ELF_MACHINE_CODE EM_SPARC
|
||||
#define ELF_MACHINE_ALT1 EM_SPARC32PLUS
|
||||
#define ELF_MAXPAGESIZE 0x10000
|
||||
#define ELF_COMMONPAGESIZE 0x2000
|
||||
|
||||
#define bfd_elf32_bfd_merge_private_bfd_data \
|
||||
elf32_sparc_merge_private_bfd_data
|
||||
|
|
|
@ -5231,6 +5231,7 @@ static const struct elf_size_info alpha_elf_size_info =
|
|||
#define ELF_ARCH bfd_arch_alpha
|
||||
#define ELF_MACHINE_CODE EM_ALPHA
|
||||
#define ELF_MAXPAGESIZE 0x10000
|
||||
#define ELF_COMMONPAGESIZE 0x2000
|
||||
|
||||
#define bfd_elf64_bfd_link_hash_table_create \
|
||||
elf64_alpha_bfd_link_hash_table_create
|
||||
|
|
|
@ -61,6 +61,7 @@ static bfd_vma opd_entry_value
|
|||
#define ELF_ARCH bfd_arch_powerpc
|
||||
#define ELF_MACHINE_CODE EM_PPC64
|
||||
#define ELF_MAXPAGESIZE 0x10000
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
#define elf_info_to_howto ppc64_elf_info_to_howto
|
||||
|
||||
#define elf_backend_want_got_sym 0
|
||||
|
|
|
@ -814,6 +814,7 @@ const struct elf_size_info elf64_sparc_size_info =
|
|||
#define TARGET_BIG_NAME "elf64-sparc"
|
||||
#define ELF_ARCH bfd_arch_sparc
|
||||
#define ELF_MAXPAGESIZE 0x100000
|
||||
#define ELF_COMMONPAGESIZE 0x2000
|
||||
|
||||
/* This is the official ABI value. */
|
||||
#define ELF_MACHINE_CODE EM_SPARCV9
|
||||
|
|
|
@ -3632,6 +3632,7 @@ static const struct bfd_elf_special_section
|
|||
#define ELF_MACHINE_CODE EM_X86_64
|
||||
#define ELF_MAXPAGESIZE 0x200000
|
||||
#define ELF_MINPAGESIZE 0x1000
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
|
||||
#define elf_backend_can_gc_sections 1
|
||||
#define elf_backend_can_refcount 1
|
||||
|
|
|
@ -2384,6 +2384,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
|||
a value of 0x1000, and we are compatible.
|
||||
FIXME: How does this affect NewABI? */
|
||||
#define ELF_MAXPAGESIZE 0x1000
|
||||
#define ELF_COMMONPAGESIZE 0x1000
|
||||
|
||||
#include "elf32-target.h"
|
||||
|
||||
|
|
|
@ -5717,6 +5717,7 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
|
|||
#define ELF_MACHINE_ALT1 1999 /* EAS2.3 */
|
||||
#define ELF_MACHINE_ALT2 1998 /* EAS2.2 */
|
||||
#define ELF_MAXPAGESIZE 0x10000 /* 64KB */
|
||||
#define ELF_COMMONPAGESIZE 0x4000 /* 16KB */
|
||||
|
||||
#define elf_backend_section_from_shdr \
|
||||
elfNN_ia64_section_from_shdr
|
||||
|
@ -5824,6 +5825,7 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED,
|
|||
|
||||
#undef ELF_MAXPAGESIZE
|
||||
#define ELF_MAXPAGESIZE 0x1000 /* 4K */
|
||||
#undef ELF_COMMONPAGESIZE
|
||||
|
||||
#undef elfNN_bed
|
||||
#define elfNN_bed elfNN_ia64_hpux_bed
|
||||
|
|
|
@ -294,6 +294,10 @@
|
|||
#define ELF_MINPAGESIZE ELF_MAXPAGESIZE
|
||||
#endif
|
||||
|
||||
#ifndef ELF_COMMONPAGESIZE
|
||||
#define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
|
||||
#endif
|
||||
|
||||
#ifndef ELF_DYNAMIC_SEC_FLAGS
|
||||
/* Note that we set the SEC_IN_MEMORY flag for these sections. */
|
||||
#define ELF_DYNAMIC_SEC_FLAGS \
|
||||
|
@ -559,12 +563,13 @@
|
|||
extern const struct elf_size_info _bfd_elfNN_size_info;
|
||||
|
||||
#ifndef INCLUDED_TARGET_FILE
|
||||
static const struct elf_backend_data elfNN_bed =
|
||||
static struct elf_backend_data elfNN_bed =
|
||||
{
|
||||
ELF_ARCH, /* arch */
|
||||
ELF_MACHINE_CODE, /* elf_machine_code */
|
||||
ELF_MAXPAGESIZE, /* maxpagesize */
|
||||
ELF_MINPAGESIZE, /* minpagesize */
|
||||
ELF_COMMONPAGESIZE, /* commonpagesize */
|
||||
ELF_DYNAMIC_SEC_FLAGS, /* dynamic_sec_flags */
|
||||
elf_info_to_howto,
|
||||
elf_info_to_howto_rel,
|
||||
|
|
|
@ -1307,14 +1307,15 @@ SYNOPSIS
|
|||
|
||||
DESCRIPTION
|
||||
Return a pointer to the transfer vector for the object target
|
||||
named @var{target_name}. If @var{target_name} is <<NULL>>, choose the
|
||||
one in the environment variable <<GNUTARGET>>; if that is null or not
|
||||
defined, then choose the first entry in the target list.
|
||||
Passing in the string "default" or setting the environment
|
||||
variable to "default" will cause the first entry in the target
|
||||
list to be returned, and "target_defaulted" will be set in the
|
||||
BFD. This causes <<bfd_check_format>> to loop over all the
|
||||
targets to find the one that matches the file being read.
|
||||
named @var{target_name}. If @var{target_name} is <<NULL>>,
|
||||
choose the one in the environment variable <<GNUTARGET>>; if
|
||||
that is null or not defined, then choose the first entry in the
|
||||
target list. Passing in the string "default" or setting the
|
||||
environment variable to "default" will cause the first entry in
|
||||
the target list to be returned, and "target_defaulted" will be
|
||||
set in the BFD if @var{abfd} isn't <<NULL>>. This causes
|
||||
<<bfd_check_format>> to loop over all the targets to find the
|
||||
one that matches the file being read.
|
||||
*/
|
||||
|
||||
const bfd_target *
|
||||
|
@ -1331,21 +1332,27 @@ bfd_find_target (const char *target_name, bfd *abfd)
|
|||
/* This is safe; the vector cannot be null. */
|
||||
if (targname == NULL || strcmp (targname, "default") == 0)
|
||||
{
|
||||
abfd->target_defaulted = TRUE;
|
||||
if (bfd_default_vector[0] != NULL)
|
||||
abfd->xvec = bfd_default_vector[0];
|
||||
target = bfd_default_vector[0];
|
||||
else
|
||||
abfd->xvec = bfd_target_vector[0];
|
||||
return abfd->xvec;
|
||||
target = bfd_target_vector[0];
|
||||
if (abfd)
|
||||
{
|
||||
abfd->xvec = target;
|
||||
abfd->target_defaulted = TRUE;
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
abfd->target_defaulted = FALSE;
|
||||
if (abfd)
|
||||
abfd->target_defaulted = FALSE;
|
||||
|
||||
target = find_target (targname);
|
||||
if (target == NULL)
|
||||
return NULL;
|
||||
|
||||
abfd->xvec = target;
|
||||
if (abfd)
|
||||
abfd->xvec = target;
|
||||
return target;
|
||||
}
|
||||
|
||||
|
|
92
ld/ChangeLog
92
ld/ChangeLog
|
@ -1,3 +1,95 @@
|
|||
2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* emulparams/arcelf.sh (MAXPAGESIZE): Changed to
|
||||
"CONSTANT (MAXPAGESIZE)".
|
||||
* emulparams/armelf_nbsd.sh: Likewise.
|
||||
* emulparams/armelf_vxworks.sh: Likewise.
|
||||
* emulparams/armnto.sh: Likewise.
|
||||
* emulparams/armsymbian.sh: Likewise.
|
||||
* emulparams/crislinux.sh: Likewise.
|
||||
* emulparams/elf32_i860.sh: Likewise.
|
||||
* emulparams/elf32_i960.sh: Likewise.
|
||||
* emulparams/elf32am33lin.sh: Likewise.
|
||||
* emulparams/elf32bfinfd.sh: Likewise.
|
||||
* emulparams/elf32bmipn32-defs.sh: Likewise.
|
||||
* emulparams/elf32frvfd.sh: Likewise.
|
||||
* emulparams/elf32i370.sh: Likewise.
|
||||
* emulparams/elf32lppcnto.sh: Likewise.
|
||||
* emulparams/elf32mcore.sh: Likewise.
|
||||
* emulparams/elf32openrisc.sh: Likewise.
|
||||
* emulparams/elf32ppcnto.sh: Likewise.
|
||||
* emulparams/elf32ppcwindiss.sh: Likewise.
|
||||
* emulparams/elf32vax.sh: Likewise.
|
||||
* emulparams/elf32xc16x.sh: Likewise.
|
||||
* emulparams/elf32xc16xl.sh: Likewise.
|
||||
* emulparams/elf32xc16xs.sh: Likewise.
|
||||
* emulparams/elf64_aix.sh: Likewise.
|
||||
* emulparams/elf64hppa.sh: Likewise.
|
||||
* emulparams/elf64mmix.sh: Likewise.
|
||||
* emulparams/elf_i386_be.sh: Likewise.
|
||||
* emulparams/elf_i386_chaos.sh: Likewise.
|
||||
* emulparams/elf_i386_ldso.sh: Likewise.
|
||||
* emulparams/hppa64linux.sh: Likewise.
|
||||
* emulparams/hppalinux.sh: Likewise.
|
||||
* emulparams/hppaobsd.sh: Likewise.
|
||||
* emulparams/i386lynx.sh: Likewise.
|
||||
* emulparams/i386moss.sh: Likewise.
|
||||
* emulparams/i386nto.sh: Likewise.
|
||||
* emulparams/i386nw.sh: Likewise.
|
||||
* emulparams/m32relf_linux.sh: Likewise.
|
||||
* emulparams/m68kpsos.sh: Likewise.
|
||||
* emulparams/or32elf.sh: Likewise.
|
||||
* emulparams/pjelf.sh: Likewise.
|
||||
* emulparams/pjlelf.sh: Likewise.
|
||||
* emulparams/ppclynx.sh: Likewise.
|
||||
* emulparams/ppcnw.sh: Likewise.
|
||||
* emulparams/shelf32_nbsd.sh : Likewise.
|
||||
* emulparams/shelf_nbsd.sh: Likewise.
|
||||
* emulparams/shelf_nto.sh: Likewise.
|
||||
* emulparams/shlelf_nto.sh: Likewise.
|
||||
* emulparams/xtensa-config.sh: Likewise.
|
||||
|
||||
* emulparams/armelf_linux.sh (MAXPAGESIZE): Changed to
|
||||
"CONSTANT (MAXPAGESIZE)".
|
||||
(COMMONPAGESIZE): Changed to "CONSTANT (COMMONPAGESIZE)".
|
||||
* emulparams/elf32_sparc.sh: Likewise.
|
||||
* emulparams/elf32bmip.sh: Likewise.
|
||||
* emulparams/elf32ppccommon.sh: Likewise.
|
||||
* emulparams/elf64_ia64.sh: Likewise.
|
||||
* emulparams/elf64_s390.sh: Likewise.
|
||||
* emulparams/elf64_sparc.sh: Likewise.
|
||||
* emulparams/elf64alpha.sh: Likewise.
|
||||
* emulparams/elf64ppc.sh: Likewise.
|
||||
* emulparams/elf_i386.sh: Likewise.
|
||||
* emulparams/elf_i386_vxworks.sh: Likewise.
|
||||
* emulparams/elf_s390.sh: Likewise.
|
||||
* emulparams/elf_x86_64.sh: Likewise.
|
||||
* emulparams/shlelf32_linux.sh: Likewise.
|
||||
* emulparams/shlelf_linux.sh: Likewise.
|
||||
|
||||
* emulparams/elf32bmipn32.sh (COMMONPAGESIZE): Changed to
|
||||
"CONSTANT (COMMONPAGESIZE)".
|
||||
* emulparams/elf32btsmipn32.sh: Likewise.
|
||||
|
||||
* emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Add
|
||||
"-z max-page-size=" and "-z common-page-size=".
|
||||
(gld${EMULATION_NAME}_list_options): Likewise.
|
||||
|
||||
* ld.h (ld_config_type): Add maxpagesize and commonpagesize.
|
||||
|
||||
* ld.texinfo: Document "-z max-page-size=" and
|
||||
"-z common-page-size=".
|
||||
|
||||
* ldexp.c (exp_print_token): Handle CONSTANT.
|
||||
(fold_name): Likewise.
|
||||
* ldgram.y: Likewise.
|
||||
* ldlex.l: Likewise.
|
||||
|
||||
* ldmain.c (main): Initiliaze config.maxpagesize and
|
||||
config.commonpagesize. Call bfd_emul_set_maxpagesize if
|
||||
config.maxpagesize isn't 0. Call bfd_emul_set_commonpagesize if
|
||||
config.commonpagesize config.maxpagesize isn't 0.
|
||||
|
||||
2006-05-30 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/es.po: Updated Spanish translation.
|
||||
|
|
|
@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-littlearc"
|
|||
LITTLE_OUTPUT_FORMAT="elf32-littlearc"
|
||||
BIG_OUTPUT_FORMAT="elf32-bigarc"
|
||||
TEXT_START_ADDR=0x0
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x0
|
||||
ARCH=arc
|
||||
MACHINE=
|
||||
|
|
|
@ -3,8 +3,8 @@ SCRIPT_NAME=elf
|
|||
OUTPUT_FORMAT="elf32-littlearm"
|
||||
BIG_OUTPUT_FORMAT="elf32-bigarm"
|
||||
LITTLE_OUTPUT_FORMAT="elf32-littlearm"
|
||||
MAXPAGESIZE=0x8000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
TEMPLATE_NAME=elf32
|
||||
EXTRA_EM_FILE=armelf
|
||||
GENERATE_SHLIB_SCRIPT=yes
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
. ${srcdir}/emulparams/armelf.sh
|
||||
MAXPAGESIZE=0x8000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEXT_START_ADDR=0x00008000
|
||||
TARGET2_TYPE=got-rel
|
||||
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
OUTPUT_FORMAT="elf32-littlearm-vxworks"
|
||||
BIG_OUTPUT_FORMAT="elf32-bigarm-vxworks"
|
||||
LITTLE_OUTPUT_FORMAT="$OUTPUT_FORMAT"
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
. ${srcdir}/emulparams/vxworks.sh
|
||||
|
|
|
@ -17,7 +17,7 @@ GENERATE_SHLIB_SCRIPT=yes
|
|||
|
||||
ARCH=arm
|
||||
MACHINE=
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
ENTRY=_start
|
||||
|
||||
|
|
|
@ -19,7 +19,4 @@ OTHER_READONLY_SECTIONS="
|
|||
${RELOCATING+ __exidx_end = .; }
|
||||
${RELOCATING+ .ARM.exidx\$\$Limit = . ; }"
|
||||
|
||||
# This value should match ELF_MAXPAGESIZE in BFD. Otherwise, elf.c
|
||||
# will not place read-write sections in a separate ELF segment from
|
||||
# the read-only sections.
|
||||
MAXPAGESIZE=0x8000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-bfin"
|
||||
TEXT_START_ADDR=0x0
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TARGET_PAGE_SIZE=0x1000
|
||||
NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR}
|
||||
ARCH=bfin
|
||||
|
|
|
@ -14,7 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes
|
|||
# Is this high enough and low enough?
|
||||
TEXT_START_ADDR=0x80000
|
||||
|
||||
MAXPAGESIZE=8192
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
# We don't do the hoops through DEFINED to provide [_]*start, as it
|
||||
# doesn't work with --gc-sections, and the start-name is pretty fixed
|
||||
|
|
|
@ -5,5 +5,5 @@ BIG_OUTPUT_FORMAT="elf32-i860"
|
|||
LITTLE_OUTPUT_FORMAT="elf32-i860-little"
|
||||
TEXT_START_ADDR=0
|
||||
PAGE_SIZE=0x1000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=i860
|
||||
|
|
|
@ -5,4 +5,4 @@ ARCH=i960
|
|||
MACHINE=
|
||||
TEXT_START_ADDR=0
|
||||
EMBEDDED=yes
|
||||
MAXPAGESIZE=0x2000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-sparc"
|
||||
TEXT_START_ADDR=0x10000
|
||||
MAXPAGESIZE=0x10000
|
||||
COMMONPAGESIZE=0x2000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x10000
|
||||
ALIGNMENT=8
|
||||
ARCH=sparc
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-am33lin"
|
||||
TEXT_START_ADDR=0x8000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x8000000
|
||||
ARCH=mn10300
|
||||
MACHINE=
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
. ${srcdir}/emulparams/bfin.sh
|
||||
unset STACK_ADDR
|
||||
OUTPUT_FORMAT="elf32-bfinfdpic"
|
||||
MAXPAGESIZE=0x4000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEMPLATE_NAME=elf32
|
||||
GENERATE_SHLIB_SCRIPT=yes
|
||||
GENERATE_PIE_SCRIPT=yes
|
||||
|
|
|
@ -7,8 +7,8 @@ BIG_OUTPUT_FORMAT="elf32-bigmips"
|
|||
LITTLE_OUTPUT_FORMAT="elf32-littlemips"
|
||||
TEXT_START_ADDR=0x0400000
|
||||
test -n "${EMBEDDED}" || DATA_ADDR=0x10000000
|
||||
MAXPAGESIZE=0x40000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x0400000
|
||||
SHLIB_TEXT_START_ADDR=0x5ffe0000
|
||||
TEXT_DYNAMIC=
|
||||
|
|
|
@ -33,7 +33,7 @@ GENERATE_SHLIB_SCRIPT=yes
|
|||
GENERATE_PIE_SCRIPT=yes
|
||||
|
||||
TEXT_START_ADDR=0x10000000
|
||||
MAXPAGESIZE=0x100000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ENTRY=__start
|
||||
|
||||
# GOT-related settings.
|
||||
|
|
|
@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-nbigmips"
|
|||
BIG_OUTPUT_FORMAT="elf32-nbigmips"
|
||||
LITTLE_OUTPUT_FORMAT="elf32-nlittlemips"
|
||||
SHLIB_TEXT_START_ADDR=0x5ffe0000
|
||||
COMMONPAGESIZE=0x1000
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
|
||||
# IRIX6 defines these symbols. 0x34 is the size of the ELF header.
|
||||
EXECUTABLE_SYMBOLS="
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
OUTPUT_FORMAT="elf32-ntradbigmips"
|
||||
BIG_OUTPUT_FORMAT="elf32-ntradbigmips"
|
||||
LITTLE_OUTPUT_FORMAT="elf32-ntradlittlemips"
|
||||
COMMONPAGESIZE=0x1000
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
|
||||
# Magic sections.
|
||||
OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
. ${srcdir}/emulparams/elf32frv.sh
|
||||
unset STACK_ADDR
|
||||
OUTPUT_FORMAT="elf32-frvfdpic"
|
||||
MAXPAGESIZE=0x4000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEMPLATE_NAME=elf32
|
||||
GENERATE_SHLIB_SCRIPT=yes
|
||||
GENERATE_PIE_SCRIPT=yes
|
||||
|
|
|
@ -3,6 +3,6 @@ GENERATE_SHLIB_SCRIPT=yes
|
|||
SCRIPT_NAME=elfi370
|
||||
OUTPUT_FORMAT="elf32-i370"
|
||||
TEXT_START_ADDR=0x01800000
|
||||
MAXPAGESIZE=0x40000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=i370
|
||||
MACHINE=
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
. ${srcdir}/emulparams/elf32ppc.sh
|
||||
OUTPUT_FORMAT="elf32-powerpcle"
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEXT_START_ADDR=0x48040000
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ BIG_OUTPUT_FORMAT="elf32-mcore-big"
|
|||
LITTLE_OUTPUT_FORMAT="elf32-mcore-little"
|
||||
PAGE_SIZE=0x1000
|
||||
TARGET_PAGE_SIZE=0x400
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEXT_START_ADDR=0
|
||||
NONPAGED_TEXT_START_ADDR=0
|
||||
ARCH=mcore
|
||||
|
|
|
@ -3,7 +3,7 @@ SCRIPT_NAME=elf
|
|||
OUTPUT_FORMAT="elf32-openrisc"
|
||||
TEXT_START_ADDR=0x10000
|
||||
ARCH=openrisc
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ENTRY=_start
|
||||
EMBEDDED=yes
|
||||
NOP=0x15000000
|
||||
|
|
|
@ -6,8 +6,8 @@ GENERATE_PIE_SCRIPT=yes
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-powerpc"
|
||||
TEXT_START_ADDR=0x01800000
|
||||
MAXPAGESIZE=0x10000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
ARCH=powerpc:common
|
||||
MACHINE=
|
||||
EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);'
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
. ${srcdir}/emulparams/elf32ppc.sh
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEXT_START_ADDR=0x48040000
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ OUTPUT_FORMAT="elf32-powerpc"
|
|||
ARCH=powerpc
|
||||
MACHINE=
|
||||
EMBEDDED=yes
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
# The data below is taken from the windiss.dld linker script that comes with
|
||||
# the Diab linker.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-vax"
|
||||
TEXT_START_ADDR=0x10000
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x1000
|
||||
ARCH=vax
|
||||
MACHINE=
|
||||
|
|
|
@ -3,6 +3,6 @@ TEMPLATE_NAME=elf32
|
|||
OUTPUT_FORMAT="elf32-xc16x"
|
||||
TEXT_START_ADDR=0x00400
|
||||
ARCH=xc16x
|
||||
MAXPAGESIZE=256
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ENTRY=_start
|
||||
EMBEDDED=yes
|
||||
|
|
|
@ -3,6 +3,6 @@ TEMPLATE_NAME=elf32
|
|||
OUTPUT_FORMAT="elf32-xc16x"
|
||||
TEXT_START_ADDR=0xc00300
|
||||
ARCH=xc16x:xc16xl
|
||||
MAXPAGESIZE=256
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ENTRY=_start
|
||||
EMBEDDED=yes
|
||||
|
|
|
@ -3,6 +3,6 @@ TEMPLATE_NAME=elf32
|
|||
OUTPUT_FORMAT="elf32-xc16x"
|
||||
TEXT_START_ADDR=0xc00300
|
||||
ARCH=xc16x:xc16xs
|
||||
MAXPAGESIZE=256
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ENTRY=_start
|
||||
EMBEDDED=yes
|
||||
|
|
|
@ -5,7 +5,7 @@ TEMPLATE_NAME=elf32
|
|||
OUTPUT_FORMAT="elf64-ia64-aix-little"
|
||||
ARCH=ia64
|
||||
MACHINE=
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
TEXT_START_ADDR="0x10000000"
|
||||
DATA_ADDR="ALIGN (0x10000000) + (. & (${MAXPAGESIZE} - 1))"
|
||||
GENERATE_SHLIB_SCRIPT=yes
|
||||
|
|
|
@ -6,12 +6,12 @@ EXTRA_EM_FILE=ia64elf
|
|||
OUTPUT_FORMAT="elf64-ia64-little"
|
||||
ARCH=ia64
|
||||
MACHINE=
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
# FIXME: It interferes with linker relaxation. Disable it until it is
|
||||
# fixed.
|
||||
if test "0" = "1" -a -n "$CREATE_SHLIB"; then
|
||||
# Optimize shared libraries for 16K page size
|
||||
COMMONPAGESIZE=0x4000
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
fi
|
||||
TEXT_START_ADDR="0x4000000000000000"
|
||||
DATA_ADDR="0x6000000000000000 + (. & (${MAXPAGESIZE} - 1))"
|
||||
|
|
|
@ -2,8 +2,8 @@ SCRIPT_NAME=elf
|
|||
ELFSIZE=64
|
||||
OUTPUT_FORMAT="elf64-s390"
|
||||
TEXT_START_ADDR=0x80000000
|
||||
MAXPAGESIZE=0x1000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x80000000
|
||||
ARCH="s390:64-bit"
|
||||
MACHINE=
|
||||
|
|
|
@ -2,8 +2,8 @@ SCRIPT_NAME=elf
|
|||
ELFSIZE=64
|
||||
TEMPLATE_NAME=elf32
|
||||
OUTPUT_FORMAT="elf64-sparc"
|
||||
MAXPAGESIZE=0x100000
|
||||
COMMONPAGESIZE=0x2000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
ARCH="sparc:v9"
|
||||
MACHINE=
|
||||
DATA_PLT=
|
||||
|
|
|
@ -5,8 +5,8 @@ TEMPLATE_NAME=elf32
|
|||
EXTRA_EM_FILE=alphaelf
|
||||
OUTPUT_FORMAT="elf64-alpha"
|
||||
TEXT_START_ADDR="0x120000000"
|
||||
MAXPAGESIZE=0x10000
|
||||
COMMONPAGESIZE=0x2000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR="0x120000000"
|
||||
ARCH=alpha
|
||||
MACHINE=
|
||||
|
|
|
@ -4,7 +4,7 @@ LIB_PATH="=/usr/lib/pa20_64:=/opt/langtools/lib/pa20_64"
|
|||
TEXT_START_ADDR=0x4000000000001000
|
||||
DATA_ADDR=0x8000000000001000
|
||||
TARGET_PAGE_SIZE=4096
|
||||
MAXPAGESIZE=4096
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
# The HP dynamic linker actually requires you set the start of text and
|
||||
# data to some reasonable value. Of course nobody knows what reasoanble
|
||||
|
|
|
@ -12,11 +12,7 @@ TEXT_START_ADDR='DEFINED (__.MMIX.start..text) ? __.MMIX.start..text : 0'
|
|||
TEXT_BASE_ADDRESS=$TEXT_START_ADDR
|
||||
DATA_ADDR='DEFINED (__.MMIX.start..data) ? __.MMIX.start..data : 0x2000000000000000'
|
||||
|
||||
# Setting this anywhere near the quite reasonable value of 0x10000
|
||||
# causes the binary to bloat to reach page alignment between segments.
|
||||
# Let's just have a 256-byte default page alignment. Having some
|
||||
# alignment at all gives a warm feeling but not much more.
|
||||
MAXPAGESIZE=256
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=mmix
|
||||
MACHINE=
|
||||
COMPILE_IN=yes
|
||||
|
|
|
@ -7,8 +7,8 @@ SCRIPT_NAME=elf
|
|||
OUTPUT_FORMAT="elf64-powerpc"
|
||||
TEXT_START_ADDR=0x10000000
|
||||
#SEGMENT_SIZE=0x10000000
|
||||
MAXPAGESIZE=0x10000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
ARCH=powerpc:common64
|
||||
MACHINE=
|
||||
NOP=0x60000000
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-i386"
|
||||
TEXT_START_ADDR=0x08048000
|
||||
MAXPAGESIZE=0x1000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x08048000
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
|
|
|
@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-i386"
|
|||
TEXT_START_ADDR=0x80000000
|
||||
#SHLIB_TEXT_START_ADDR=0x80000000
|
||||
NONPAGED_TEXT_START_ADDR=0x80000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
NOP=0x90909090
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf_chaos
|
||||
OUTPUT_FORMAT="elf32-i386"
|
||||
TEXT_START_ADDR=0x40000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x40000000
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-i386"
|
||||
TEXT_START_ADDR=0x08048000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x08048000
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-i386-vxworks"
|
||||
TEXT_START_ADDR=0x08048000
|
||||
MAXPAGESIZE=0x1000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x08048000
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-s390"
|
||||
TEXT_START_ADDR=0x00400000
|
||||
MAXPAGESIZE=0x1000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x00400000
|
||||
ARCH="s390:31-bit"
|
||||
MACHINE=
|
||||
|
|
|
@ -2,8 +2,8 @@ SCRIPT_NAME=elf
|
|||
ELFSIZE=64
|
||||
OUTPUT_FORMAT="elf64-x86-64"
|
||||
TEXT_START_ADDR=0x400000
|
||||
MAXPAGESIZE=0x200000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x400000
|
||||
ARCH="i386:x86-64"
|
||||
MACHINE=
|
||||
|
|
|
@ -7,7 +7,7 @@ ELFSIZE=64
|
|||
OUTPUT_FORMAT="elf64-hppa-linux"
|
||||
TEXT_START_ADDR=0x10000
|
||||
TARGET_PAGE_SIZE=0x10000
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=hppa
|
||||
MACHINE=hppa2.0w
|
||||
ENTRY="main"
|
||||
|
|
|
@ -6,7 +6,7 @@ ELFSIZE=32
|
|||
OUTPUT_FORMAT="elf32-hppa-linux"
|
||||
TEXT_START_ADDR=0x10000
|
||||
TARGET_PAGE_SIZE=0x10000
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=hppa
|
||||
MACHINE=hppa1.1 # We use 1.1 specific features.
|
||||
NOP=0x08000240
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
OUTPUT_FORMAT="elf32-hppa"
|
||||
TEXT_START_ADDR=0x1000
|
||||
TARGET_PAGE_SIZE=0x1000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
|
|
@ -4,7 +4,7 @@ ENTRY=_main
|
|||
TEXT_BASE=0x0
|
||||
DYN_TEXT_BASE=0x00400000
|
||||
TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x1000
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-i386"
|
||||
TEXT_START_ADDR=0x00002000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x00002000
|
||||
ARCH=i386
|
||||
MACHINE=
|
||||
|
|
|
@ -2,7 +2,7 @@ SCRIPT_NAME=elf
|
|||
OUTPUT_FORMAT="elf32-i386"
|
||||
TEXT_START_ADDR=0x08048000
|
||||
TEXT_START_SYMBOLS='_btext = .;'
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x08048000
|
||||
#SHLIB_TEXT_START_ADDR=0xb0300000
|
||||
ARCH=i386
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=nw
|
||||
OUTPUT_FORMAT="elf32-i386"
|
||||
TEXT_START_ADDR=0x08000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x08000000
|
||||
ARCH=i386
|
||||
NOP=0x90909090
|
||||
|
|
|
@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf32-m32r-linux"
|
|||
TEXT_START_ADDR=0x1000
|
||||
ARCH=m32r
|
||||
MACHINE=
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
# Hmmm, there's got to be a better way. This sets the stack to the
|
||||
# top of simulator memory (32MB).
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-m68k"
|
||||
TEXT_START_ADDR=0x80000000
|
||||
MAXPAGESIZE=0x2000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=${TEXT_START_ADDR}
|
||||
ARCH=m68k
|
||||
MACHINE=
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
SCRIPT_NAME=psos
|
||||
OUTPUT_FORMAT="elf32-m68k"
|
||||
TEXT_START_ADDR=0x20000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=m68k
|
||||
TEMPLATE_NAME=elf32
|
||||
|
|
|
@ -2,5 +2,5 @@ SCRIPT_NAME=elf
|
|||
OUTPUT_FORMAT="elf32-or32"
|
||||
TEXT_START_ADDR=0x1000000
|
||||
TARGET_PAGE_SIZE=0x1000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=or32
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-pj"
|
||||
TEXT_START_ADDR=0x1000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=pj
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-pjl"
|
||||
TEXT_START_ADDR=0x1000000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=pj
|
||||
|
|
|
@ -3,7 +3,7 @@ OUTPUT_FORMAT="elf32-powerpc"
|
|||
TEXT_BASE=0x00002000
|
||||
DYN_TEXT_BASE=0x00400000
|
||||
TEXT_START_ADDR="(DEFINED(_DYNAMIC) ? ${DYN_TEXT_BASE} : ${TEXT_BASE})"
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x1000
|
||||
ARCH=powerpc
|
||||
MACHINE=
|
||||
|
|
|
@ -2,6 +2,6 @@ SCRIPT_NAME=nw
|
|||
OUTPUT_FORMAT="elf32-powerpc"
|
||||
TEXT_START_ADDR=0x0400000
|
||||
DATA_ADDR=0x10000000
|
||||
MAXPAGESIZE=0x40000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
NONPAGED_TEXT_START_ADDR=0x0400000
|
||||
ARCH=powerpc
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
OUTPUT_FORMAT="elf32-sh64-nbsd"
|
||||
TEXT_START_ADDR=0x400000
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
ENTRY=__start
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
OUTPUT_FORMAT="elf32-sh-nbsd"
|
||||
TEXT_START_ADDR=0x400000
|
||||
MAXPAGESIZE=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
||||
DATA_START_SYMBOLS='__data_start = . ;';
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-sh"
|
||||
TEXT_START_ADDR=0x08040000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=sh
|
||||
MACHINE=
|
||||
TEMPLATE_NAME=elf32
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-sh64-linux"
|
||||
TEXT_START_ADDR=0x400000
|
||||
MAXPAGESIZE=0x10000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
ARCH=sh
|
||||
MACHINE=sh5
|
||||
ALIGNMENT=8
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-sh-linux"
|
||||
TEXT_START_ADDR=0x400000
|
||||
MAXPAGESIZE=0x10000
|
||||
COMMONPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
ARCH=sh
|
||||
MACHINE=
|
||||
TEMPLATE_NAME=elf32
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SCRIPT_NAME=elf
|
||||
OUTPUT_FORMAT="elf32-shl"
|
||||
TEXT_START_ADDR=0x08040000
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
ARCH=sh
|
||||
MACHINE=
|
||||
TEMPLATE_NAME=elf32
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# Xtensa configuration settings.
|
||||
|
||||
MAXPAGESIZE=0x1000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
|
|
|
@ -1846,6 +1846,22 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
|||
link_info.relro = TRUE;
|
||||
else if (strcmp (optarg, "norelro") == 0)
|
||||
link_info.relro = FALSE;
|
||||
else if (strncmp (optarg, "max-page-size=", 14) == 0)
|
||||
{
|
||||
char *end;
|
||||
config.maxpagesize = strtoul (optarg + 14, &end, 0);
|
||||
if (*end)
|
||||
einfo (_("%P%F: invalid maxium page size \`%s'\n"),
|
||||
optarg + 14);
|
||||
}
|
||||
else if (strncmp (optarg, "common-page-size=", 17) == 0)
|
||||
{
|
||||
char *end;
|
||||
config.commonpagesize = strtoul (optarg + 17, &end, 0);
|
||||
if (*end)
|
||||
einfo (_("%P%F: invalid common page size \`%s'\n"),
|
||||
optarg + 17);
|
||||
}
|
||||
/* What about the other Solaris -z options? FIXME. */
|
||||
break;
|
||||
EOF
|
||||
|
@ -1897,6 +1913,8 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
|||
fprintf (file, _(" -z now\t\tMark object non-lazy runtime binding\n"));
|
||||
fprintf (file, _(" -z origin\t\tMark object requiring immediate \$ORIGIN processing\n\t\t\t at runtime\n"));
|
||||
fprintf (file, _(" -z relro\t\tCreate RELRO program header\n"));
|
||||
fprintf (file, _(" -z max-page-size=SIZE\tSet maximum page size to SIZE\n"));
|
||||
fprintf (file, _(" -z common-page-size=SIZE\n\t\t\tSet common page size to SIZE\n"));
|
||||
fprintf (file, _(" -z KEYWORD\t\tIgnored for Solaris compatibility\n"));
|
||||
EOF
|
||||
fi
|
||||
|
|
6
ld/ld.h
6
ld/ld.h
|
@ -270,6 +270,12 @@ typedef struct {
|
|||
|
||||
/* The size of the hash table to use. */
|
||||
bfd_size_type hash_table_size;
|
||||
|
||||
/* The maximum page size for ELF. */
|
||||
bfd_vma maxpagesize;
|
||||
|
||||
/* The common page size for ELF. */
|
||||
bfd_vma commonpagesize;
|
||||
} ld_config_type;
|
||||
|
||||
extern ld_config_type config;
|
||||
|
|
|
@ -1007,6 +1007,12 @@ Marks the object may contain $ORIGIN.
|
|||
@item relro
|
||||
Create an ELF @code{PT_GNU_RELRO} segment header in the object.
|
||||
|
||||
@item max-page-size=@var{value}
|
||||
Set the emulation maximum page size to @var{value}.
|
||||
|
||||
@item common-page-size=@var{value}
|
||||
Set the emulation common page size to @var{value}.
|
||||
|
||||
@end table
|
||||
|
||||
Other keywords are ignored for Solaris compatibility.
|
||||
|
|
11
ld/ldexp.c
11
ld/ldexp.c
|
@ -99,6 +99,7 @@ exp_print_token (token_code_type code, int infix_p)
|
|||
{ SIZEOF, "SIZEOF" },
|
||||
{ ADDR, "ADDR" },
|
||||
{ LOADADDR, "LOADADDR" },
|
||||
{ CONSTANT, "CONSTANT" },
|
||||
{ MAX_K, "MAX_K" },
|
||||
{ REL, "relocatable" },
|
||||
{ DATA_SEGMENT_ALIGN, "DATA_SEGMENT_ALIGN" },
|
||||
|
@ -623,6 +624,16 @@ fold_name (etree_type *tree)
|
|||
}
|
||||
break;
|
||||
|
||||
case CONSTANT:
|
||||
if (strcmp (tree->name.name, "MAXPAGESIZE") == 0)
|
||||
new_abs (bfd_emul_get_maxpagesize (default_target));
|
||||
else if (strcmp (tree->name.name, "COMMONPAGESIZE") == 0)
|
||||
new_abs (bfd_emul_get_commonpagesize (default_target));
|
||||
else
|
||||
einfo (_("%F%S: unknown constant `%s' referenced in expression\n"),
|
||||
tree->name.name);
|
||||
break;
|
||||
|
||||
default:
|
||||
FAIL ();
|
||||
break;
|
||||
|
|
|
@ -152,6 +152,7 @@ static int error_index;
|
|||
%token GLOBAL LOCAL VERSIONK INPUT_VERSION_SCRIPT
|
||||
%token KEEP ONLY_IF_RO ONLY_IF_RW SPECIAL
|
||||
%token EXCLUDE_FILE
|
||||
%token CONSTANT
|
||||
%type <versyms> vers_defns
|
||||
%type <versnode> vers_tag
|
||||
%type <deflist> verdep
|
||||
|
@ -841,6 +842,8 @@ exp :
|
|||
{ $$ = exp_nameop (ADDR,$3); }
|
||||
| LOADADDR '(' NAME ')'
|
||||
{ $$ = exp_nameop (LOADADDR,$3); }
|
||||
| CONSTANT '(' NAME ')'
|
||||
{ $$ = exp_nameop (CONSTANT,$3); }
|
||||
| ABSOLUTE '(' exp ')'
|
||||
{ $$ = exp_unop (ABSOLUTE, $3); }
|
||||
| ALIGN_K '(' exp ')'
|
||||
|
|
|
@ -316,6 +316,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
|
|||
<EXPRESSION,BOTH,SCRIPT>"PROVIDE_HIDDEN" { RTOKEN(PROVIDE_HIDDEN); }
|
||||
<EXPRESSION,BOTH,SCRIPT>"KEEP" { RTOKEN(KEEP); }
|
||||
<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); }
|
||||
<EXPRESSION,BOTH,SCRIPT>"CONSTANT" { RTOKEN(CONSTANT);}
|
||||
<MRI>"#".*\n? { ++ lineno; }
|
||||
<MRI>"\n" { ++ lineno; RTOKEN(NEWLINE); }
|
||||
<MRI>"*".* { /* Mri comment line */ }
|
||||
|
|
10
ld/ldmain.c
10
ld/ldmain.c
|
@ -317,6 +317,9 @@ main (int argc, char **argv)
|
|||
link_info.warn_shared_textrel = FALSE;
|
||||
link_info.gc_sections = FALSE;
|
||||
|
||||
config.maxpagesize = 0;
|
||||
config.commonpagesize = 0;
|
||||
|
||||
ldfile_add_arch ("");
|
||||
|
||||
config.make_executable = TRUE;
|
||||
|
@ -335,6 +338,13 @@ main (int argc, char **argv)
|
|||
if (config.hash_table_size != 0)
|
||||
bfd_hash_set_default_size (config.hash_table_size);
|
||||
|
||||
if (config.maxpagesize != 0)
|
||||
bfd_emul_set_maxpagesize (default_target, config.maxpagesize);
|
||||
|
||||
if (config.commonpagesize != 0)
|
||||
bfd_emul_set_commonpagesize (default_target,
|
||||
config.commonpagesize);
|
||||
|
||||
ldemul_set_symbols ();
|
||||
|
||||
if (link_info.relocatable)
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2006-05-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-elf/binutils.exp: New file.
|
||||
* ld-elf/commonpage1.d: Likewise.
|
||||
* ld-elf/maxpage1.d: Likewise.
|
||||
* ld-elf/maxpage1.s: Likewise.
|
||||
|
||||
2006-05-25 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-x86-64/tlsbin.dd: Updated for 2MB maximum page size.
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
# Expect script for binutils tests
|
||||
# Copyright 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# Written by H.J. Lu (hongjiu.lu@intel.com)
|
||||
#
|
||||
|
||||
# Make sure that binutils can correctly handle ld output in ELF.
|
||||
|
||||
# This test can only be run on ELF platforms.
|
||||
if ![is_elf_format] {
|
||||
return
|
||||
}
|
||||
|
||||
proc strip_test { ld_options test } {
|
||||
global as
|
||||
global ld
|
||||
global READELF
|
||||
global strip
|
||||
global srcdir
|
||||
global subdir
|
||||
|
||||
if { ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o ] } {
|
||||
unresolved "$ld_options"
|
||||
return
|
||||
}
|
||||
|
||||
if { ![ld_simple_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
|
||||
unresolved "$ld_options"
|
||||
return
|
||||
}
|
||||
|
||||
send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.exp\n"
|
||||
catch "exec $READELF -l --wide tmpdir/$test > tmpdir/$test.exp" got
|
||||
if ![string match "" $got] then {
|
||||
send_log "$got\n"
|
||||
unresolved "$ld_options"
|
||||
return
|
||||
}
|
||||
|
||||
send_log "$strip tmpdir/$test\n"
|
||||
catch "exec $strip tmpdir/$test" got
|
||||
if ![string match "" $got] then {
|
||||
send_log "$got\n"
|
||||
unresolved "$ld_options"
|
||||
return
|
||||
}
|
||||
|
||||
send_log "$READELF -l --wide tmpdir/$test > tmpdir/$test.out\n"
|
||||
catch "exec $READELF -l --wide tmpdir/$test > tmpdir/$test.out" got
|
||||
if ![string match "" $got] then {
|
||||
send_log "$got\n"
|
||||
unresolved "$ld_options"
|
||||
return
|
||||
}
|
||||
|
||||
if { [catch {exec cmp tmpdir/$test.exp tmpdir/$test.out}] } then {
|
||||
send_log "tmpdir/$test.exp tmpdir/$test.out differ.\n"
|
||||
fail "$ld_options"
|
||||
return
|
||||
}
|
||||
|
||||
pass "$ld_options"
|
||||
}
|
||||
|
||||
strip_test "-z max-page-size=0x200000" maxpage1
|
||||
strip_test "-z max-page-size=0x200000 -z common-page-size=0x100000" maxpage1
|
|
@ -0,0 +1,8 @@
|
|||
#source: maxpage1.s
|
||||
#ld: -z max-page-size=0x200000 -z common-page-size=0x100000
|
||||
#readelf: -l --wide
|
||||
|
||||
#...
|
||||
LOAD+.*0x200000
|
||||
LOAD+.*0x200000
|
||||
#pass
|
|
@ -0,0 +1,8 @@
|
|||
#source: maxpage1.s
|
||||
#ld: -z max-page-size=0x200000
|
||||
#readelf: -l --wide
|
||||
|
||||
#...
|
||||
LOAD+.*0x200000
|
||||
LOAD+.*0x200000
|
||||
#pass
|
|
@ -0,0 +1,7 @@
|
|||
.text
|
||||
.global _start
|
||||
_start:
|
||||
.long 0
|
||||
|
||||
.data
|
||||
.long 0
|
Loading…
Reference in New Issue