From c43c2cc5fab9b4e50144fd1a7dce611a7ccc1c6a Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Mon, 14 Aug 2000 20:13:39 +0000 Subject: [PATCH] Add support for IA-64 specific elf header flags. bfd/ 2000-08-14 Jim Wilson * elf64-ia64.c (elf64_ia64_merge_private_bfd_data): Handle EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, and EF_IA_64_NOFUNCDESC_CONS_GP. (elf64_ia64_print_private_bfd_data): Likewise. Also handle EF_IA_64_ABSOLUTE. gas/ 2000-08-14 Jim Wilson * config/tc-ia64.c (md_longopts): Add -mconstant-gp and -mauto-pic. (md_parse_option): Add OPTION_MCONSTANT_GP and OPTION_MAUTO_PIC. (md_begin): Change assignment to md.flag to OR in the new bit. include/elf/ 2000-08-14 Jim Wilson * elf/ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define. --- bfd/ChangeLog | 7 +++++++ bfd/elf64-ia64.c | 30 +++++++++++++++++++++++++++++- gas/ChangeLog | 6 ++++++ gas/config/tc-ia64.c | 19 ++++++++++++++++--- include/elf/ChangeLog | 5 +++++ include/elf/ia64.h | 9 ++++++++- 6 files changed, 71 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5f3534cc2ed..f58853d55fd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2000-08-14 Jim Wilson + + * elf64-ia64.c (elf64_ia64_merge_private_bfd_data): Handle + EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, and EF_IA_64_NOFUNCDESC_CONS_GP. + (elf64_ia64_print_private_bfd_data): Likewise. Also handle + EF_IA_64_ABSOLUTE. + 2000-08-11 Alexandre Oliva * elf32-sh.c (sh_elf_set_mach_from_flags): Make it static. diff --git a/bfd/elf64-ia64.c b/bfd/elf64-ia64.c index 11704e58b8d..f1ea331b6c0 100644 --- a/bfd/elf64-ia64.c +++ b/bfd/elf64-ia64.c @@ -3974,6 +3974,10 @@ elf64_ia64_merge_private_bfd_data (ibfd, obfd) if (in_flags == out_flags) return true; + /* Output has EF_IA_64_REDUCEDFP set only if all inputs have it set. */ + if (!(in_flags & EF_IA_64_REDUCEDFP) && (out_flags & EF_IA_64_REDUCEDFP)) + elf_elfheader (obfd)->e_flags &= ~EF_IA_64_REDUCEDFP; + if ((in_flags & EF_IA_64_TRAPNIL) != (out_flags & EF_IA_64_TRAPNIL)) { (*_bfd_error_handler) @@ -4001,6 +4005,25 @@ elf64_ia64_merge_private_bfd_data (ibfd, obfd) bfd_set_error (bfd_error_bad_value); ok = false; } + if ((in_flags & EF_IA_64_CONS_GP) != (out_flags & EF_IA_64_CONS_GP)) + { + (*_bfd_error_handler) + (_("%s: linking constant-gp files with non-constant-gp files"), + bfd_get_filename (ibfd)); + + bfd_set_error (bfd_error_bad_value); + ok = false; + } + if ((in_flags & EF_IA_64_NOFUNCDESC_CONS_GP) + != (out_flags & EF_IA_64_NOFUNCDESC_CONS_GP)) + { + (*_bfd_error_handler) + (_("%s: linking auto-pic files with non-auto-pic files"), + bfd_get_filename (ibfd)); + + bfd_set_error (bfd_error_bad_value); + ok = false; + } return ok; } @@ -4015,11 +4038,16 @@ elf64_ia64_print_private_bfd_data (abfd, ptr) BFD_ASSERT (abfd != NULL && ptr != NULL); - fprintf (file, "private flags = %s%s%s%s\n", + fprintf (file, "private flags = %s%s%s%s%s%s%s%s\n", (flags & EF_IA_64_TRAPNIL) ? "TRAPNIL, " : "", (flags & EF_IA_64_EXT) ? "EXT, " : "", (flags & EF_IA_64_BE) ? "BE, " : "LE, ", + (flags & EF_IA_64_REDUCEDFP) ? "REDUCEDFP, " : "", + (flags & EF_IA_64_CONS_GP) ? "CONS_GP, " : "", + (flags & EF_IA_64_NOFUNCDESC_CONS_GP) ? "NOFUNCDESC_CONS_GP, " : "", + (flags & EF_IA_64_ABSOLUTE) ? "ABSOLUTE, " : "", (flags & EF_IA_64_ABI64) ? "ABI64" : "ABI32"); + _bfd_elf_print_private_bfd_data (abfd, ptr); return true; } diff --git a/gas/ChangeLog b/gas/ChangeLog index e3871b78dd2..1deb66c8e1a 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2000-08-14 Jim Wilson + + * config/tc-ia64.c (md_longopts): Add -mconstant-gp and -mauto-pic. + (md_parse_option): Add OPTION_MCONSTANT_GP and OPTION_MAUTO_PIC. + (md_begin): Change assignment to md.flag to OR in the new bit. + 2000-08-14 Mark Elbrecht * config/obj-coff.c (obj_coff_endef) [BFD_ASSEMBLER]: Set the debug diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c index d941fdb6a28..297b0dadc79 100644 --- a/gas/config/tc-ia64.c +++ b/gas/config/tc-ia64.c @@ -160,7 +160,10 @@ const char *md_shortopts = "M:N:x::"; struct option md_longopts[] = { - { NULL, no_argument, NULL, 0} +#define OPTION_MCONSTANT_GP (OPTION_MD_BASE + 1) + {"mconstant-gp", no_argument, NULL, OPTION_MCONSTANT_GP}, +#define OPTION_MAUTO_PIC (OPTION_MD_BASE + 2) + {"mauto-pic", no_argument, NULL, OPTION_MAUTO_PIC} }; size_t md_longopts_size = sizeof (md_longopts); @@ -5534,9 +5537,9 @@ md_parse_option (c, arg) int c; char *arg; { - /* Switches from the Intel assembler. */ switch (c) { + /* Switches from the Intel assembler. */ case 'M': if (strcmp (arg, "ilp64") == 0 || strcmp (arg, "lp64") == 0 @@ -5629,6 +5632,15 @@ md_parse_option (c, arg) /* nops Print nops statistics. */ break; + /* GNU specific switches for gcc. */ + case OPTION_MCONSTANT_GP: + md.flags |= EF_IA_64_CONS_GP; + break; + + case OPTION_MAUTO_PIC: + md.flags |= EF_IA_64_NOFUNCDESC_CONS_GP; + break; + default: return 0; } @@ -5880,7 +5892,8 @@ md_begin () } /* Default to 64-bit mode. */ - md.flags = EF_IA_64_ABI64; + /* ??? This overrides the -M options, but they aren't working anyways. */ + md.flags |= EF_IA_64_ABI64; md.mem_offset.hint = 0; md.path = 0; diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog index 84ac1b12ef7..b1f69f6e4d8 100644 --- a/include/elf/ChangeLog +++ b/include/elf/ChangeLog @@ -1,3 +1,8 @@ +2000-08-14 Jim Wilson + + * elf/ia64.h (EF_IA_64_REDUCEDFP, EF_IA_64_CONS_GP, + EF_IA_64_NOFUNCDESC_CONS_GP, EF_IA_64_ABSOLUTE): Define. + 2000-08-07 Nick Clifton * ppc.h: Remove spurious CYGNUS LOCAL comments. diff --git a/include/elf/ia64.h b/include/elf/ia64.h index 15847c80f84..bd7dae50c60 100644 --- a/include/elf/ia64.h +++ b/include/elf/ia64.h @@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Bits in the e_flags field of the Elf64_Ehdr: */ #define EF_IA_64_MASKOS 0x0000000f /* os-specific flags */ -#define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI */ #define EF_IA_64_ARCH 0xff000000 /* arch. version mask */ /* ??? These four definitions are not part of the SVR4 ABI. @@ -36,6 +35,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define EF_IA_64_BE (1 << 3) /* PSR BE bit set (big-endian) */ #define EFA_IA_64_EAS2_3 0x23000000 /* ia64 EAS 2.3 */ +#define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI */ +/* Not used yet. */ +#define EF_IA_64_REDUCEDFP (1 << 5) /* Only FP6-FP11 used. */ +#define EF_IA_64_CONS_GP (1 << 6) /* gp as program wide constant. */ +#define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */ +/* Not used yet. */ +#define EF_IA_64_ABSOLUTE (1 << 8) /* Load at absolute addresses. */ + #define ELF_STRING_ia64_archext ".IA_64.archext" #define ELF_STRING_ia64_pltoff ".IA_64.pltoff" #define ELF_STRING_ia64_unwind ".IA_64.unwind"