From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16669 invoked by alias); 23 May 2006 17:47:32 -0000 Received: (qmail 16586 invoked by uid 22791); 23 May 2006 17:47:05 -0000 X-Spam-Check-By: sourceware.org Received: from smtp113.sbc.mail.mud.yahoo.com (HELO smtp113.sbc.mail.mud.yahoo.com) (68.142.198.212) by sourceware.org (qpsmtpd/0.31) with SMTP; Tue, 23 May 2006 17:45:57 +0000 Received: (qmail 57282 invoked from network); 23 May 2006 17:45:54 -0000 Received: from unknown (HELO lucon.org) (hjjean@sbcglobal.net@71.146.87.95 with login) by smtp113.sbc.mail.mud.yahoo.com with SMTP; 23 May 2006 17:45:52 -0000 Received: by lucon.org (Postfix, from userid 1000) id 655A597BED; Tue, 23 May 2006 10:45:51 -0700 (PDT) Date: Wed, 24 May 2006 07:24:00 -0000 From: "H. J. Lu" To: Nick Clifton Cc: binutils@sources.redhat.com Subject: PATCH: Add "-z max-page-size=xxxx"/"-z common-page-size=xxxx" Message-ID: <20060523174551.GA8542@lucon.org> References: <20060516232326.GA18996@lucon.org> <446D8BE1.3030504@redhat.com> <20060522202706.GA25399@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20060522202706.GA25399@lucon.org> User-Agent: Mutt/1.4.2.1i Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2006-05/txt/msg00418.txt.bz2 On Mon, May 22, 2006 at 01:27:06PM -0700, H. J. Lu wrote: > On Fri, May 19, 2006 at 10:12:01AM +0100, Nick Clifton wrote: > > Hi H. J. > > > > >The current x86-64 maximum page size is 1MB. With the future > > >development, 2MB is better for performance. Using 2MB won't break > > >anything, except for up to 2MB gap in virtual address space per file, > > >instead of 1MB. x86-64 has 48 bits in virtual address space. It > > >shouldn't be an issue for most applications. I have a patch: > > > > > >http://sourceware.org/ml/binutils/2005-05/msg00644.html > > > > > >which can be used to implement "-z max-page-size=xxxx" so that people > > >can control maximum page size at the link time if they prefer different > > >maximum page size. > > > > This seems to be perfectly reasonable. > > > Here is the patch to implement "-z max-page-size=xxxx" and > "-z common-page-size=xxxx". > I have a small update. We should adjust p->p_vaddr only if m->p_vaddr isn't valid. H.J. --- bfd/ 2006-05-22 H.J. Lu * 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. * elf-bfd.h (elf_backend_data): Add commonpagesize. (xvec_get_elf_backend_data): New. (get_elf_backend_data): Use xvec_get_elf_backend_data. * elf.c (assign_file_positions_for_load_sections): Set p->p_vaddr with m->p_vaddr if it is valid. Set p->p_align with m->p_align if it is valid. Adjust p->p_vaddr only if m->p_vaddr isn't valid. (copy_elf_program_header): Copy p_vaddr and p_align. Set p_vaddr_valid and p_align_valid to 1. * 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. include/elf/ 2006-05-22 H.J. Lu * internal.h (elf_segment_map): Add p_vaddr, p_align, p_vaddr_valid and p_align_valid. ld/ 2006-05-22 H.J. Lu * 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-22 H.J. Lu * ld-elf/binutils.exp: New file. * ld-elf/maxpage.d: Likewise. * ld-elf/maxpage.s: Likewise. --- binutils/bfd/bfd.c.pagesize 2006-03-16 12:37:42.000000000 -0800 +++ binutils/bfd/bfd.c 2006-05-22 12:36:40.000000000 -0700 @@ -1513,3 +1513,130 @@ bfd_preserve_finish (bfd *abfd ATTRIBUTE 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); +} --- binutils/bfd/elf-bfd.h.pagesize 2006-05-22 12:36:40.000000000 -0700 +++ binutils/bfd/elf-bfd.h 2006-05-22 12:36:40.000000000 -0700 @@ -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; @@ -1193,8 +1196,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. */ --- binutils/bfd/elf.c.pagesize 2006-05-22 12:36:40.000000000 -0700 +++ binutils/bfd/elf.c 2006-05-22 16:24:05.000000000 -0700 @@ -4292,7 +4292,9 @@ assign_file_positions_for_load_sections return FALSE; } - if (m->count == 0) + if (m->p_vaddr_valid) + p->p_vaddr = m->p_vaddr; + else if (m->count == 0) p->p_vaddr = 0; else p->p_vaddr = m->sections[0]->vma; @@ -4304,7 +4306,9 @@ assign_file_positions_for_load_sections else p->p_paddr = m->sections[0]->lma; - if (p->p_type == PT_LOAD + if (m->p_align_valid) + p->p_align = m->p_align; + else if (p->p_type == PT_LOAD && (abfd->flags & D_PAGED) != 0) p->p_align = bed->maxpagesize; else if (m->count == 0) @@ -4327,16 +4331,18 @@ assign_file_positions_for_load_sections { BFD_ASSERT (p->p_type == PT_LOAD); - if (p->p_vaddr < (bfd_vma) off) + if (!m->p_vaddr_valid) { - (*_bfd_error_handler) - (_("%B: Not enough room for program headers, try linking with -N"), - abfd); - bfd_set_error (bfd_error_bad_value); - return FALSE; + if (p->p_vaddr < (bfd_vma) off) + { + (*_bfd_error_handler) + (_("%B: Not enough room for program headers, try linking with -N"), + abfd); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + p->p_vaddr -= off; } - - p->p_vaddr -= off; if (! m->p_paddr_valid) p->p_paddr -= off; } @@ -5805,6 +5811,10 @@ copy_elf_program_header (bfd *ibfd, bfd map->p_flags_valid = 1; map->p_paddr = segment->p_paddr; map->p_paddr_valid = 1; + map->p_vaddr = segment->p_vaddr; + map->p_vaddr_valid = 1; + map->p_align = segment->p_align; + map->p_align_valid = 1; /* Determine if this segment contains the ELF file header and if it contains the program headers themselves. */ --- binutils/bfd/elf32-arm.c.pagesize 2006-05-19 06:31:20.000000000 -0700 +++ binutils/bfd/elf32-arm.c 2006-05-22 12:36:40.000000000 -0700 @@ -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 @@ -8196,6 +8196,7 @@ const struct elf_size_info elf32_arm_siz #define ELF_MAXPAGESIZE 0x8000 #endif #define ELF_MINPAGESIZE 0x1000 +#define ELF_COMMONPAGESIZE 0x1000 #define bfd_elf32_mkobject elf32_arm_mkobject --- binutils/bfd/elf32-mips.c.pagesize 2006-03-27 09:05:27.000000000 -0800 +++ binutils/bfd/elf32-mips.c 2006-05-22 12:36:40.000000000 -0700 @@ -1599,6 +1599,7 @@ static const struct ecoff_debug_swap mip /* 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" --- binutils/bfd/elf32-ppc.c.pagesize 2006-05-19 06:31:20.000000000 -0700 +++ binutils/bfd/elf32-ppc.c 2006-05-22 12:36:40.000000000 -0700 @@ -7436,6 +7436,7 @@ ppc_elf_finish_dynamic_sections (bfd *ou #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 --- binutils/bfd/elf32-sh.c.pagesize 2006-03-16 12:37:42.000000000 -0800 +++ binutils/bfd/elf32-sh.c 2006-05-22 12:36:40.000000000 -0700 @@ -7371,6 +7371,7 @@ sh_elf_plt_sym_val (bfd_vma i, const ase #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 ase #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 --- binutils/bfd/elf32-sh64.c.pagesize 2006-05-04 10:32:30.000000000 -0700 +++ binutils/bfd/elf32-sh64.c 2006-05-22 12:36:40.000000000 -0700 @@ -785,6 +785,7 @@ static const struct bfd_elf_special_sect #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_sect #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" --- binutils/bfd/elf32-sparc.c.pagesize 2006-04-05 11:10:51.000000000 -0700 +++ binutils/bfd/elf32-sparc.c 2006-05-22 12:36:40.000000000 -0700 @@ -172,6 +172,7 @@ elf32_sparc_reloc_type_class (const Elf_ #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 --- binutils/bfd/elf64-alpha.c.pagesize 2006-03-16 12:37:42.000000000 -0800 +++ binutils/bfd/elf64-alpha.c 2006-05-22 12:36:40.000000000 -0700 @@ -5231,6 +5231,7 @@ static const struct elf_size_info alpha_ #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 --- binutils/bfd/elf64-ppc.c.pagesize 2006-05-11 08:52:56.000000000 -0700 +++ binutils/bfd/elf64-ppc.c 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/bfd/elf64-sparc.c.pagesize 2005-05-04 11:17:48.000000000 -0700 +++ binutils/bfd/elf64-sparc.c 2006-05-22 12:36:40.000000000 -0700 @@ -814,6 +814,7 @@ const struct elf_size_info elf64_sparc_s #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 --- binutils/bfd/elf64-x86-64.c.pagesize 2006-03-27 09:05:29.000000000 -0800 +++ binutils/bfd/elf64-x86-64.c 2006-05-22 12:36:40.000000000 -0700 @@ -3631,6 +3631,7 @@ static const struct bfd_elf_special_sect #define ELF_ARCH bfd_arch_i386 #define ELF_MACHINE_CODE EM_X86_64 #define ELF_MAXPAGESIZE 0x100000 +#define ELF_COMMONPAGESIZE 0x1000 #define elf_backend_can_gc_sections 1 #define elf_backend_can_refcount 1 --- binutils/bfd/elfn32-mips.c.pagesize 2005-12-05 14:28:41.000000000 -0800 +++ binutils/bfd/elfn32-mips.c 2006-05-22 12:36:40.000000000 -0700 @@ -2384,6 +2384,7 @@ static const struct ecoff_debug_swap mip 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" --- binutils/bfd/elfxx-ia64.c.pagesize 2006-05-19 07:08:21.000000000 -0700 +++ binutils/bfd/elfxx-ia64.c 2006-05-22 12:36:40.000000000 -0700 @@ -5717,6 +5717,7 @@ elfNN_hpux_backend_symbol_processing (bf #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 (bf #undef ELF_MAXPAGESIZE #define ELF_MAXPAGESIZE 0x1000 /* 4K */ +#undef ELF_COMMONPAGESIZE #undef elfNN_bed #define elfNN_bed elfNN_ia64_hpux_bed --- binutils/bfd/elfxx-target.h.pagesize 2006-04-25 14:35:45.000000000 -0700 +++ binutils/bfd/elfxx-target.h 2006-05-22 12:36:40.000000000 -0700 @@ -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 \ @@ -556,12 +560,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, --- binutils/bfd/targets.c.pagesize 2006-04-05 11:10:51.000000000 -0700 +++ binutils/bfd/targets.c 2006-05-22 12:36:40.000000000 -0700 @@ -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 <>, choose the - one in the environment variable <>; 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 <> 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 <>, + choose the one in the environment variable <>; 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 <>. This causes + <> 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 /* 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; } --- binutils/include/elf/internal.h.pagesize 2006-02-10 08:59:44.000000000 -0800 +++ binutils/include/elf/internal.h 2006-05-22 12:47:06.000000000 -0700 @@ -235,12 +235,22 @@ struct elf_segment_map unsigned long p_flags; /* Program segment physical address. */ bfd_vma p_paddr; + /* Program segment virtual address. */ + bfd_vma p_vaddr; + /* Program segment alignment. */ + bfd_vma p_align; /* Whether the p_flags field is valid; if not, the flags are based on the section flags. */ unsigned int p_flags_valid : 1; /* Whether the p_paddr field is valid; if not, the physical address is based on the section lma values. */ unsigned int p_paddr_valid : 1; + /* Whether the p_vaddr field is valid; if not, the virtual address + is based on the section vma values. */ + unsigned int p_vaddr_valid : 1; + /* Whether the p_align field is valid; if not, the segment alignment + is based on the default maximum page size. */ + unsigned int p_align_valid : 1; /* Whether this segment includes the file header. */ unsigned int includes_filehdr : 1; /* Whether this segment includes the program headers. */ --- binutils/ld/emulparams/arcelf.sh.pagesize 2006-05-19 09:31:04.000000000 -0700 +++ binutils/ld/emulparams/arcelf.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/armelf_linux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/armelf_linux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/armelf_nbsd.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/armelf_nbsd.sh 2006-05-22 12:36:40.000000000 -0700 @@ -1,5 +1,5 @@ . ${srcdir}/emulparams/armelf.sh -MAXPAGESIZE=0x8000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" TEXT_START_ADDR=0x00008000 TARGET2_TYPE=got-rel --- binutils/ld/emulparams/armelf_vxworks.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/armelf_vxworks.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/armnto.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/armnto.sh 2006-05-22 12:36:40.000000000 -0700 @@ -17,7 +17,7 @@ GENERATE_SHLIB_SCRIPT=yes ARCH=arm MACHINE= -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ENTRY=_start --- binutils/ld/emulparams/armsymbian.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/armsymbian.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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)" --- binutils/ld/emulparams/bfin.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/bfin.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/crislinux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/crislinux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32_i860.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32_i860.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32_i960.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32_i960.sh 2006-05-22 12:36:40.000000000 -0700 @@ -5,4 +5,4 @@ ARCH=i960 MACHINE= TEXT_START_ADDR=0 EMBEDDED=yes -MAXPAGESIZE=0x2000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" --- binutils/ld/emulparams/elf32_sparc.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32_sparc.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32am33lin.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32am33lin.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf32bfinfd.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32bfinfd.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32bmip.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32bmip.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf32bmipn32-defs.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32bmipn32-defs.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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. --- binutils/ld/emulparams/elf32bmipn32.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32bmipn32.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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=" --- binutils/ld/emulparams/elf32btsmipn32.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32btsmipn32.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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.*)' --- binutils/ld/emulparams/elf32frvfd.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32frvfd.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32i370.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32i370.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf32lppcnto.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32lppcnto.sh 2006-05-22 12:36:40.000000000 -0700 @@ -1,5 +1,5 @@ . ${srcdir}/emulparams/elf32ppc.sh OUTPUT_FORMAT="elf32-powerpcle" -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" TEXT_START_ADDR=0x48040000 --- binutils/ld/emulparams/elf32mcore.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32mcore.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32openrisc.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32openrisc.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32ppccommon.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32ppccommon.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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);' --- binutils/ld/emulparams/elf32ppcnto.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32ppcnto.sh 2006-05-22 13:00:47.000000000 -0700 @@ -1,4 +1,4 @@ . ${srcdir}/emulparams/elf32ppc.sh -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" TEXT_START_ADDR=0x48040000 --- binutils/ld/emulparams/elf32ppcwindiss.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32ppcwindiss.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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. --- binutils/ld/emulparams/elf32vax.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32vax.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf32xc16x.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32xc16x.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32xc16xl.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32xc16xl.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf32xc16xs.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf32xc16xs.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf64_aix.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64_aix.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf64_ia64.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64_ia64.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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))" --- binutils/ld/emulparams/elf64_s390.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64_s390.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf64_sparc.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64_sparc.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf64alpha.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64alpha.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf64hppa.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64hppa.sh 2006-05-22 12:36:40.000000000 -0700 @@ -4,7 +4,7 @@ LIB_PATH="=/usr/lib/pa20_64:=/opt/langto 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 --- binutils/ld/emulparams/elf64mmix.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64mmix.sh 2006-05-22 12:36:40.000000000 -0700 @@ -12,11 +12,7 @@ TEXT_START_ADDR='DEFINED (__.MMIX.start. 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 --- binutils/ld/emulparams/elf64ppc.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf64ppc.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf_i386.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_i386.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf_i386_be.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_i386_be.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/elf_i386_chaos.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_i386_chaos.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf_i386_ldso.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_i386_ldso.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf_i386_vxworks.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_i386_vxworks.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf_s390.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_s390.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/elf_x86_64.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/elf_x86_64.sh 2006-05-22 12:36:40.000000000 -0700 @@ -2,8 +2,8 @@ SCRIPT_NAME=elf ELFSIZE=64 OUTPUT_FORMAT="elf64-x86-64" TEXT_START_ADDR=0x400000 -MAXPAGESIZE=0x100000 -COMMONPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" NONPAGED_TEXT_START_ADDR=0x400000 ARCH="i386:x86-64" MACHINE= --- binutils/ld/emulparams/hppa64linux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/hppa64linux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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" --- binutils/ld/emulparams/hppalinux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/hppalinux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/hppaobsd.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/hppaobsd.sh 2006-05-22 12:36:40.000000000 -0700 @@ -3,4 +3,4 @@ OUTPUT_FORMAT="elf32-hppa" TEXT_START_ADDR=0x1000 TARGET_PAGE_SIZE=0x1000 -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" --- binutils/ld/emulparams/i386lynx.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/i386lynx.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/i386moss.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/i386moss.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/i386nto.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/i386nto.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/i386nw.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/i386nw.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/m32relf_linux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/m32relf_linux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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). --- binutils/ld/emulparams/m68kelf.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/m68kelf.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/m68kpsos.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/m68kpsos.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/or32elf.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/or32elf.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/pjelf.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/pjelf.sh 2006-05-22 12:36:40.000000000 -0700 @@ -1,5 +1,5 @@ SCRIPT_NAME=elf OUTPUT_FORMAT="elf32-pj" TEXT_START_ADDR=0x1000000 -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ARCH=pj --- binutils/ld/emulparams/pjlelf.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/pjlelf.sh 2006-05-22 12:36:40.000000000 -0700 @@ -1,5 +1,5 @@ SCRIPT_NAME=elf OUTPUT_FORMAT="elf32-pjl" TEXT_START_ADDR=0x1000000 -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ARCH=pj --- binutils/ld/emulparams/ppclynx.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/ppclynx.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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= --- binutils/ld/emulparams/ppcnw.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/ppcnw.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/shelf32_nbsd.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/shelf32_nbsd.sh 2006-05-22 12:36:40.000000000 -0700 @@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf32-sh64-nbsd" TEXT_START_ADDR=0x400000 -MAXPAGESIZE=0x10000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" ENTRY=__start --- binutils/ld/emulparams/shelf_nbsd.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/shelf_nbsd.sh 2006-05-22 12:36:40.000000000 -0700 @@ -5,7 +5,7 @@ OUTPUT_FORMAT="elf32-sh-nbsd" TEXT_START_ADDR=0x400000 -MAXPAGESIZE=0x10000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" DATA_START_SYMBOLS='__data_start = . ;'; --- binutils/ld/emulparams/shelf_nto.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/shelf_nto.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/shlelf32_linux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/shlelf32_linux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/shlelf_linux.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/shlelf_linux.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/shlelf_nto.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/shlelf_nto.sh 2006-05-22 12:36:40.000000000 -0700 @@ -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 --- binutils/ld/emulparams/xtensa-config.sh.pagesize 2006-05-19 09:31:05.000000000 -0700 +++ binutils/ld/emulparams/xtensa-config.sh 2006-05-22 12:36:40.000000000 -0700 @@ -1,3 +1,3 @@ # Xtensa configuration settings. -MAXPAGESIZE=0x1000 +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" --- binutils/ld/emultempl/elf32.em.pagesize 2006-04-14 14:44:47.000000000 -0700 +++ binutils/ld/emultempl/elf32.em 2006-05-22 12:36:40.000000000 -0700 @@ -1846,6 +1846,22 @@ cat >>e${EMULATION_NAME}.c <>e${EMULATION_NAME}.c <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; --- binutils/ld/ldgram.y.pagesize 2005-10-15 07:58:32.000000000 -0700 +++ binutils/ld/ldgram.y 2006-05-22 12:36:40.000000000 -0700 @@ -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 vers_defns %type vers_tag %type 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 ')' --- binutils/ld/ldlex.l.pagesize 2005-08-05 10:44:03.000000000 -0700 +++ binutils/ld/ldlex.l 2006-05-22 12:36:40.000000000 -0700 @@ -316,6 +316,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([ "PROVIDE_HIDDEN" { RTOKEN(PROVIDE_HIDDEN); } "KEEP" { RTOKEN(KEEP); } "EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); } +"CONSTANT" { RTOKEN(CONSTANT);} "#".*\n? { ++ lineno; } "\n" { ++ lineno; RTOKEN(NEWLINE); } "*".* { /* Mri comment line */ } --- binutils/ld/ldmain.c.pagesize 2006-04-06 11:56:20.000000000 -0700 +++ binutils/ld/ldmain.c 2006-05-22 13:15:26.000000000 -0700 @@ -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) --- binutils/ld/testsuite/ld-elf/binutils.exp.pagesize 2006-05-22 12:36:40.000000000 -0700 +++ binutils/ld/testsuite/ld-elf/binutils.exp 2006-05-22 12:36:40.000000000 -0700 @@ -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" maxpage +strip_test "-z max-page-size=0x200000 -z common-page-size=0x100000" maxpage --- binutils/ld/testsuite/ld-elf/commonpage.d.pagesize 2006-05-22 12:36:40.000000000 -0700 +++ binutils/ld/testsuite/ld-elf/commonpage.d 2006-05-22 12:36:40.000000000 -0700 @@ -0,0 +1,8 @@ +#source: maxpage.s +#ld: -z max-page-size=0x200000 -z common-page-size=0x100000 +#readelf: -l --wide + +#... + LOAD+.*0x200000 + LOAD+.*0x200000 +#pass --- binutils/ld/testsuite/ld-elf/maxpage.d.pagesize 2006-05-22 12:36:40.000000000 -0700 +++ binutils/ld/testsuite/ld-elf/maxpage.d 2006-05-22 12:36:40.000000000 -0700 @@ -0,0 +1,8 @@ +#source: maxpage.s +#ld: -z max-page-size=0x200000 +#readelf: -l --wide + +#... + LOAD+.*0x200000 + LOAD+.*0x200000 +#pass --- binutils/ld/testsuite/ld-elf/maxpage.s.pagesize 2006-05-22 12:36:40.000000000 -0700 +++ binutils/ld/testsuite/ld-elf/maxpage.s 2006-05-22 12:36:40.000000000 -0700 @@ -0,0 +1,7 @@ + .text + .global _start +_start: + .long 0 + + .data + .long 0