diff options
48 files changed, 426 insertions, 62 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7899936..c486f58 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,27 @@ +2010-12-31 Robert Millan <rmh@gnu.org> + + * config.bfd: Recognize mips-freebsd and mips-kfreebsd-gnu. + * configure.host: Likewise. + * configure.in: Support for `bfd_elf32_ntradbigmips_freebsd_vec', + `bfd_elf32_ntradlittlemips_freebsd_vec', + `bfd_elf32_tradbigmips_freebsd_vec', + `bfd_elf32_tradlittlemips_freebsd_vec', + `bfd_elf64_tradbigmips_freebsd_vec' and + `bfd_elf64_tradlittlemips_freebsd_vec'. + * configure: Regenerate. + * elf32-mips.c: New target for FreeBSD support + (same as traditional MIPS but overrides ELF_OSABI + with ELFOSABI_FREEBSD). + * elf64-mips.c: Likewise. + * elfn32-mips.c: Likewise. + * targets.c (_bfd_target_vector): Add + `bfd_elf32_ntradbigmips_freebsd_vec', + `bfd_elf32_ntradlittlemips_freebsd_vec', + `bfd_elf32_tradbigmips_freebsd_vec', + `bfd_elf32_tradlittlemips_freebsd_vec', + `bfd_elf64_tradbigmips_freebsd_vec' and + `bfd_elf64_tradlittlemips_freebsd_vec'. + 2010-12-30 H.J. Lu <hongjiu.lu@intel.com> * elfcode.h (NAME(elf,r_info)): New. diff --git a/bfd/config.bfd b/bfd/config.bfd index 2161919..01fa09a 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -1016,6 +1016,40 @@ case "${targ}" in want64=true ;; #ifdef BFD64 + mips64*el-*-freebsd* | mips64*el-*-kfreebsd*-gnu) + # FreeBSD vectors + targ_defvec=bfd_elf32_ntradlittlemips_freebsd_vec + targ_selvecs="bfd_elf32_ntradbigmips_freebsd_vec bfd_elf32_tradlittlemips_freebsd_vec bfd_elf32_tradbigmips_freebsd_vec bfd_elf64_tradlittlemips_freebsd_vec bfd_elf64_tradbigmips_freebsd_vec" + # Generic vectors + targ_selvecs="${targ_selvecs} bfd_elf32_ntradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf64_tradbigmips_vec" + want64=true + ;; + mips64*-*-freebsd* | mips64*-*-kfreebsd*-gnu) + # FreeBSD vectors + targ_defvec=bfd_elf32_ntradbigmips_freebsd_vec + targ_selvecs="bfd_elf32_ntradlittlemips_freebsd_vec bfd_elf32_tradbigmips_freebsd_vec bfd_elf32_tradlittlemips_freebsd_vec bfd_elf64_tradbigmips_freebsd_vec bfd_elf64_tradlittlemips_freebsd_vec" + # Generic vectors + targ_selvecs="${targ_selvecs} bfd_elf32_ntradbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf32_tradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec" + want64=true + ;; +#endif + mips*el-*-freebsd* | mips*el-*-kfreebsd*-gnu) + # FreeBSD vectors + targ_defvec=bfd_elf32_tradlittlemips_freebsd_vec + targ_selvecs="bfd_elf32_tradbigmips_freebsd_vec bfd_elf32_ntradlittlemips_freebsd_vec bfd_elf64_tradlittlemips_freebsd_vec bfd_elf32_ntradbigmips_freebsd_vec bfd_elf64_tradbigmips_freebsd_vec" + # Generic vectors + targ_selvecs="${targ_selvecs} bfd_elf32_tradlittlemips_vec bfd_elf32_tradbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf64_tradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf64_tradbigmips_vec" + want64=true + ;; + mips*-*-freebsd* | mips*-*-kfreebsd*-gnu) + # FreeBSD vectors + targ_defvec=bfd_elf32_tradbigmips_freebsd_vec + targ_selvecs="bfd_elf32_tradlittlemips_freebsd_vec bfd_elf32_ntradbigmips_freebsd_vec bfd_elf64_tradbigmips_freebsd_vec bfd_elf32_ntradlittlemips_freebsd_vec bfd_elf64_tradlittlemips_freebsd_vec" + # Generic vectors + targ_selvecs="${targ_selvecs} bfd_elf32_tradbigmips_vec bfd_elf32_tradlittlemips_vec bfd_elf32_ntradbigmips_vec bfd_elf64_tradbigmips_vec bfd_elf32_ntradlittlemips_vec bfd_elf64_tradlittlemips_vec" + want64=true + ;; +#ifdef BFD64 mmix-*-*) targ_defvec=bfd_elf64_mmix_vec targ_selvecs=bfd_mmo_vec diff --git a/bfd/configure b/bfd/configure index 2263aa8..5085580 100755 --- a/bfd/configure +++ b/bfd/configure @@ -15113,8 +15113,10 @@ do bfd_elf32_msp430_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;; bfd_elf32_nbigmips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf32_nlittlemips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; - bfd_elf32_ntradbigmips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; - bfd_elf32_ntradlittlemips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf32_ntradbigmips_vec | bfd_elf32_ntradbigmips_freebsd_vec) + tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf32_ntradlittlemips_vec | bfd_elf32_ntradlittlemips_freebsd_vec) + tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf32_openrisc_vec) tb="$tb elf32-openrisc.lo elf32.lo $elf" ;; bfd_elf32_or32_big_vec) tb="$tb elf32-or32.lo elf32.lo $elf" ;; bfd_elf32_pj_vec) tb="$tb elf32-pj.lo elf32.lo $elf";; @@ -15153,8 +15155,10 @@ do bfd_elf32_spu_vec) tb="$tb elf32-spu.lo elf32.lo $elf" ;; bfd_elf32_tic6x_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; bfd_elf32_tic6x_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; - bfd_elf32_tradbigmips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; - bfd_elf32_tradlittlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; + bfd_elf32_tradbigmips_vec | bfd_elf32_tradbigmips_freebsd_vec) + tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; + bfd_elf32_tradlittlemips_vec | bfd_elf32_tradlittlemips_freebsd_vec) + tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; bfd_elf32_us_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;; bfd_elf32_v850_vec) tb="$tb elf32-v850.lo elf32.lo $elf" ;; bfd_elf32_vax_vec) tb="$tb elf32-vax.lo elf32.lo $elf" ;; @@ -15187,8 +15191,10 @@ do bfd_elf64_sparc_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_sparc_sol2_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; - bfd_elf64_tradbigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; - bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf64_tradbigmips_vec | bfd_elf64_tradbigmips_freebsd_vec) + tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf64_tradlittlemips_vec | bfd_elf64_tradlittlemips_freebsd_vec) + tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_x86_64_sol2_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_x86_64_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; diff --git a/bfd/configure.host b/bfd/configure.host index eb7bfe9..7c63de5 100644 --- a/bfd/configure.host +++ b/bfd/configure.host @@ -50,6 +50,7 @@ mips*-sgi-irix3*) HDEFINES="-G 4" ;; mips*-sgi-irix4*) HDEFINES="-G 4" ;; mips*-sgi-irix6*) host64=true;; mips64*-*-linux*) host64=true;; +mips64*-*-freebsd* | mips64*-*-kfreebsd*-gnu) host64=true;; mips*-*-sysv4*) ;; mips*-*-sysv*) HDEFINES="-G 4" ;; mips*-*-riscos*) HDEFINES="-G 4" ;; diff --git a/bfd/configure.in b/bfd/configure.in index 42b6017..5908a57 100644 --- a/bfd/configure.in +++ b/bfd/configure.in @@ -748,8 +748,10 @@ do bfd_elf32_msp430_vec) tb="$tb elf32-msp430.lo elf32.lo $elf" ;; bfd_elf32_nbigmips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf32_nlittlemips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; - bfd_elf32_ntradbigmips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; - bfd_elf32_ntradlittlemips_vec) tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf32_ntradbigmips_vec | bfd_elf32_ntradbigmips_freebsd_vec) + tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf32_ntradlittlemips_vec | bfd_elf32_ntradlittlemips_freebsd_vec) + tb="$tb elfn32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf32_openrisc_vec) tb="$tb elf32-openrisc.lo elf32.lo $elf" ;; bfd_elf32_or32_big_vec) tb="$tb elf32-or32.lo elf32.lo $elf" ;; bfd_elf32_pj_vec) tb="$tb elf32-pj.lo elf32.lo $elf";; @@ -788,8 +790,10 @@ do bfd_elf32_spu_vec) tb="$tb elf32-spu.lo elf32.lo $elf" ;; bfd_elf32_tic6x_be_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; bfd_elf32_tic6x_le_vec) tb="$tb elf32-tic6x.lo elf32.lo $elf" ;; - bfd_elf32_tradbigmips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; - bfd_elf32_tradlittlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; + bfd_elf32_tradbigmips_vec | bfd_elf32_tradbigmips_freebsd_vec) + tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; + bfd_elf32_tradlittlemips_vec | bfd_elf32_tradlittlemips_freebsd_vec) + tb="$tb elf32-mips.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo" ;; bfd_elf32_us_cris_vec) tb="$tb elf32-cris.lo elf32.lo $elf" ;; bfd_elf32_v850_vec) tb="$tb elf32-v850.lo elf32.lo $elf" ;; bfd_elf32_vax_vec) tb="$tb elf32-vax.lo elf32.lo $elf" ;; @@ -822,8 +826,10 @@ do bfd_elf64_sparc_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_sparc_freebsd_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_sparc_sol2_vec) tb="$tb elf64-sparc.lo elfxx-sparc.lo elf-vxworks.lo elf64.lo $elf"; target_size=64 ;; - bfd_elf64_tradbigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; - bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf64_tradbigmips_vec | bfd_elf64_tradbigmips_freebsd_vec) + tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; + bfd_elf64_tradlittlemips_vec | bfd_elf64_tradlittlemips_freebsd_vec) + tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_x86_64_sol2_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_x86_64_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index aed0b4c..3392207 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -1725,6 +1725,37 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { /* Include the target file again for this target. */ #include "elf32-target.h" +/* FreeBSD support. */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +#define TARGET_LITTLE_SYM bfd_elf32_tradlittlemips_freebsd_vec +#define TARGET_LITTLE_NAME "elf32-tradlittlemips-freebsd" +#define TARGET_BIG_SYM bfd_elf32_tradbigmips_freebsd_vec +#define TARGET_BIG_NAME "elf32-tradbigmips-freebsd" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_FREEBSD + +/* The kernel recognizes executables as valid only if they carry a + "FreeBSD" label in the ELF header. So we put this label on all + executables and (for simplicity) also all other object files. */ + +static void +elf_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) +{ + _bfd_elf_set_osabi (abfd, info); +} + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers elf_fbsd_post_process_headers +#undef elf32_bed +#define elf32_bed elf32_fbsd_tradbed + +#include "elf32-target.h" /* Implement elf_backend_final_write_processing for VxWorks. */ static void diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index 7ed54fa..3eeb341 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -3354,3 +3354,36 @@ extern bfd_boolean bfd_elf64_archive_write_armap /* Include the target file again for this target. */ #include "elf64-target.h" + + +/* FreeBSD support. */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +#define TARGET_LITTLE_SYM bfd_elf64_tradlittlemips_freebsd_vec +#define TARGET_LITTLE_NAME "elf64-tradlittlemips-freebsd" +#define TARGET_BIG_SYM bfd_elf64_tradbigmips_freebsd_vec +#define TARGET_BIG_NAME "elf64-tradbigmips-freebsd" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_FREEBSD + +/* The kernel recognizes executables as valid only if they carry a + "FreeBSD" label in the ELF header. So we put this label on all + executables and (for simplicity) also all other object files. */ + +static void +elf_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) +{ + _bfd_elf_set_osabi (abfd, info); +} + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers elf_fbsd_post_process_headers +#undef elf64_bed +#define elf64_bed elf64_fbsd_tradbed + +#include "elf64-target.h" diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index 8338bbb..da18621 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -2547,3 +2547,36 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { /* Include the target file again for this target. */ #include "elf32-target.h" + + +/* FreeBSD support. */ + +#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_NAME +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +#define TARGET_LITTLE_SYM bfd_elf32_ntradlittlemips_freebsd_vec +#define TARGET_LITTLE_NAME "elf32-ntradlittlemips-freebsd" +#define TARGET_BIG_SYM bfd_elf32_ntradbigmips_freebsd_vec +#define TARGET_BIG_NAME "elf32-ntradbigmips-freebsd" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_FREEBSD + +/* The kernel recognizes executables as valid only if they carry a + "FreeBSD" label in the ELF header. So we put this label on all + executables and (for simplicity) also all other object files. */ + +static void +elf_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) +{ + _bfd_elf_set_osabi (abfd, info); +} + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers elf_fbsd_post_process_headers +#undef elf32_bed +#define elf32_bed elf32_fbsd_tradbed + +#include "elf32-target.h" diff --git a/bfd/targets.c b/bfd/targets.c index 13bfe9e..e491c93 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -646,6 +646,8 @@ extern const bfd_target bfd_elf32_nbigmips_vec; extern const bfd_target bfd_elf32_nlittlemips_vec; extern const bfd_target bfd_elf32_ntradbigmips_vec; extern const bfd_target bfd_elf32_ntradlittlemips_vec; +extern const bfd_target bfd_elf32_ntradbigmips_freebsd_vec; +extern const bfd_target bfd_elf32_ntradlittlemips_freebsd_vec; extern const bfd_target bfd_elf32_openrisc_vec; extern const bfd_target bfd_elf32_or32_big_vec; extern const bfd_target bfd_elf32_pj_vec; @@ -683,6 +685,8 @@ extern const bfd_target bfd_elf32_tic6x_be_vec; extern const bfd_target bfd_elf32_tic6x_le_vec; extern const bfd_target bfd_elf32_tradbigmips_vec; extern const bfd_target bfd_elf32_tradlittlemips_vec; +extern const bfd_target bfd_elf32_tradbigmips_freebsd_vec; +extern const bfd_target bfd_elf32_tradlittlemips_freebsd_vec; extern const bfd_target bfd_elf32_us_cris_vec; extern const bfd_target bfd_elf32_v850_vec; extern const bfd_target bfd_elf32_vax_vec; @@ -717,6 +721,8 @@ extern const bfd_target bfd_elf64_sparc_freebsd_vec; extern const bfd_target bfd_elf64_sparc_sol2_vec; extern const bfd_target bfd_elf64_tradbigmips_vec; extern const bfd_target bfd_elf64_tradlittlemips_vec; +extern const bfd_target bfd_elf64_tradbigmips_freebsd_vec; +extern const bfd_target bfd_elf64_tradlittlemips_freebsd_vec; extern const bfd_target bfd_elf64_x86_64_freebsd_vec; extern const bfd_target bfd_elf64_x86_64_sol2_vec; extern const bfd_target bfd_elf64_x86_64_vec; @@ -993,6 +999,8 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf32_nlittlemips_vec, &bfd_elf32_ntradbigmips_vec, &bfd_elf32_ntradlittlemips_vec, + &bfd_elf32_ntradbigmips_freebsd_vec, + &bfd_elf32_ntradlittlemips_freebsd_vec, #endif &bfd_elf32_openrisc_vec, &bfd_elf32_or32_big_vec, @@ -1035,6 +1043,8 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf32_tic6x_le_vec, &bfd_elf32_tradbigmips_vec, &bfd_elf32_tradlittlemips_vec, + &bfd_elf32_tradbigmips_freebsd_vec, + &bfd_elf32_tradlittlemips_freebsd_vec, &bfd_elf32_us_cris_vec, &bfd_elf32_v850_vec, &bfd_elf32_vax_vec, @@ -1070,6 +1080,8 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf64_sparc_sol2_vec, &bfd_elf64_tradbigmips_vec, &bfd_elf64_tradlittlemips_vec, + &bfd_elf64_tradbigmips_freebsd_vec, + &bfd_elf64_tradlittlemips_freebsd_vec, &bfd_elf64_x86_64_freebsd_vec, &bfd_elf64_x86_64_sol2_vec, &bfd_elf64_x86_64_vec, diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index 1e5801b..ca7f826 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-12-31 Richard Sandiford <rdsandiford@googlemail.com> + + * binutils-all/readelf.exp: Handle MIPS FreeBSD targets. + 2010-12-09 Maciej W. Rozycki <macro@codesourcery.com> * lib/binutils-common.exp (regexp_diff): Implement inverse diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp index 66aab79..8b68aec 100644 --- a/binutils/testsuite/binutils-all/readelf.exp +++ b/binutils/testsuite/binutils-all/readelf.exp @@ -101,7 +101,9 @@ proc readelf_test { options binary_file regexp_file xfails } { set target_machine "" if [istarget "mips*-*-*"] then { - if { [istarget "mips*-*-*linux*"] || [istarget "mips*-sde-elf*"] } then { + if { [istarget "mips*-*-*linux*"] + || [istarget "mips*-sde-elf*"] + || [istarget "mips*-*freebsd*"] } then { set target_machine tmips } else { set target_machine mips diff --git a/gas/ChangeLog b/gas/ChangeLog index 2864c79..19d0477 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,16 @@ +2010-12-31 Robert Millan <rmh@gnu.org> + Richard Sandiford <rdsandiford@googlemail.com> + + * config/tc-mips.c (ELF_TARGET): New macro. Generates target + names accordingly to whether TE_FreeBSD and whether TE_TMIPS + are defined. + (mips_target_format): Refactor code using ELF_TARGET(). + (support_64bit_objects): Likewise. + + * configure.in: Recognize mips-freebsd and mips-kfreebsd-gnu. + * configure.tgt: Likewise. + * configure: Regenerate. + 2010-12-30 H.J. Lu <hongjiu.lu@intel.com> * config/tc-i386.c (x86_elf_abi): New. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 20bf431..ee9b276 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -1313,6 +1313,14 @@ static segT pdr_seg; /* The default target format to use. */ +#if defined (TE_FreeBSD) +#define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips-freebsd" +#elif defined (TE_TMIPS) +#define ELF_TARGET(PREFIX, ENDIAN) PREFIX "trad" ENDIAN "mips" +#else +#define ELF_TARGET(PREFIX, ENDIAN) PREFIX ENDIAN "mips" +#endif + const char * mips_target_format (void) { @@ -1329,28 +1337,17 @@ mips_target_format (void) ? "elf32-bigmips-vxworks" : "elf32-littlemips-vxworks"); #endif -#ifdef TE_TMIPS - /* This is traditional mips. */ - return (target_big_endian - ? (HAVE_64BIT_OBJECTS - ? "elf64-tradbigmips" - : (HAVE_NEWABI - ? "elf32-ntradbigmips" : "elf32-tradbigmips")) - : (HAVE_64BIT_OBJECTS - ? "elf64-tradlittlemips" - : (HAVE_NEWABI - ? "elf32-ntradlittlemips" : "elf32-tradlittlemips"))); -#else return (target_big_endian ? (HAVE_64BIT_OBJECTS - ? "elf64-bigmips" + ? ELF_TARGET ("elf64-", "big") : (HAVE_NEWABI - ? "elf32-nbigmips" : "elf32-bigmips")) + ? ELF_TARGET ("elf32-n", "big") + : ELF_TARGET ("elf32-", "big"))) : (HAVE_64BIT_OBJECTS - ? "elf64-littlemips" + ? ELF_TARGET ("elf64-", "little") : (HAVE_NEWABI - ? "elf32-nlittlemips" : "elf32-littlemips"))); -#endif + ? ELF_TARGET ("elf32-n", "little") + : ELF_TARGET ("elf32-", "little")))); default: abort (); return NULL; @@ -11264,14 +11261,8 @@ static int support_64bit_objects(void) list = bfd_target_list (); for (l = list; *l != NULL; l++) -#ifdef TE_TMIPS - /* This is traditional mips */ - if (strcmp (*l, "elf64-tradbigmips") == 0 - || strcmp (*l, "elf64-tradlittlemips") == 0) -#else - if (strcmp (*l, "elf64-bigmips") == 0 - || strcmp (*l, "elf64-littlemips") == 0) -#endif + if (strcmp (*l, ELF_TARGET ("elf64-", "big")) == 0 + || strcmp (*l, ELF_TARGET ("elf64-", "little")) == 0) break; yes = (*l != NULL); free (list); diff --git a/gas/configure b/gas/configure index d5431f2..0c0071f 100755 --- a/gas/configure +++ b/gas/configure @@ -12084,10 +12084,10 @@ _ACEOF esac # Decide which ABI to target by default. case ${target} in - mips64*-linux* | mips-sgi-irix6*) + mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* | mips64*-kfreebsd*-gnu) mips_default_abi=N32_ABI ;; - mips*-linux*) + mips*-linux* | mips*-freebsd* | mips*-kfreebsd*-gnu) mips_default_abi=O32_ABI ;; mips64*-openbsd*) @@ -12251,7 +12251,8 @@ _ACEOF case ${generic_target}-${fmt} in mips-*-irix5*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;; - mips*-*-linux*-*) case "$endian" in + mips*-*-linux*-* | mips*-*-freebsd* | mips*-*-kfreebsd*-gnu) + case "$endian" in big) emulation="mipsbelf mipslelf mipself" ;; *) emulation="mipslelf mipsbelf mipself" ;; esac ;; diff --git a/gas/configure.in b/gas/configure.in index c11d1df..69f5fcb 100644 --- a/gas/configure.in +++ b/gas/configure.in @@ -250,10 +250,10 @@ changequote([,])dnl esac # Decide which ABI to target by default. case ${target} in - mips64*-linux* | mips-sgi-irix6*) + mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* | mips64*-kfreebsd*-gnu) mips_default_abi=N32_ABI ;; - mips*-linux*) + mips*-linux* | mips*-freebsd* | mips*-kfreebsd*-gnu) mips_default_abi=O32_ABI ;; mips64*-openbsd*) @@ -401,7 +401,8 @@ changequote([,])dnl case ${generic_target}-${fmt} in mips-*-irix5*-*) emulation="mipsbelf mipslelf mipself mipsbecoff mipslecoff mipsecoff" ;; - mips*-*-linux*-*) case "$endian" in + mips*-*-linux*-* | mips*-*-freebsd* | mips*-*-kfreebsd*-gnu) + case "$endian" in big) emulation="mipsbelf mipslelf mipself" ;; *) emulation="mipslelf mipsbelf mipself" ;; esac ;; diff --git a/gas/configure.tgt b/gas/configure.tgt index c05a64a..8ce9003 100644 --- a/gas/configure.tgt +++ b/gas/configure.tgt @@ -290,6 +290,8 @@ case ${generic_target} in mips-*-lnews*) fmt=ecoff em=lnews ;; mips-*-riscos*) fmt=ecoff ;; mips*-*-linux*) fmt=elf em=tmips ;; + mips*-*-freebsd* | mips*-*-kfreebsd*-gnu) + fmt=elf em=freebsd ;; mips-*-sysv4*MP* | mips-*-gnu*) fmt=elf em=tmips ;; mips*-sde-elf*) fmt=elf em=tmips ;; mips-*-sysv*) fmt=ecoff ;; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index ee3f7bc..cb83065 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,22 @@ +2010-12-31 Richard Sandiford <rdsandiford@googlemail.com> + + * gas/mips/e32el-rel2.d: Accept any file format. + * gas/mips/elf-rel.d: Likewise. + * gas/mips/elf-rel2.d: Likewise. + * gas/mips/elf-rel3.d: Likewise. + * gas/mips/elfel-rel.d: Likewise. + * gas/mips/elfel-rel2.d: Likewise. + * gas/mips/elfel-rel3.d: Likewise. + * gas/mips/ldstla-32-mips3-shared.d: Likewise. + * gas/mips/ldstla-32-mips3.d: Likewise. + * gas/mips/ldstla-32-shared.d: Likewise. + * gas/mips/ldstla-32.d: Likewise. + * gas/mips/ldstla-n64-shared.d: Likewise. + * gas/mips/ldstla-n64.d: Likewise. + * gas/mips/noat-1.d: Likewise. + * gas/mips/set-arch.d: Likewise. + * gas/mips/tls-o32.d: Likewise. + 2010-12-30 H.J. Lu <hongjiu.lu@intel.com> * gas/i386/ilp32/lns/ilp32.exp: New. diff --git a/gas/testsuite/gas/mips/e32el-rel2.d b/gas/testsuite/gas/mips/e32el-rel2.d index 4d5e980..abfcc57 100644 --- a/gas/testsuite/gas/mips/e32el-rel2.d +++ b/gas/testsuite/gas/mips/e32el-rel2.d @@ -7,7 +7,7 @@ # FIXME: really this should check that the contents of .sdata, .lit4, # and .lit8 are correct too. -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.text\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/elf-rel.d b/gas/testsuite/gas/mips/elf-rel.d index d6cee3c..6208fac 100644 --- a/gas/testsuite/gas/mips/elf-rel.d +++ b/gas/testsuite/gas/mips/elf-rel.d @@ -4,7 +4,7 @@ # Test the HI16/LO16 generation. -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.text\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/elf-rel2.d b/gas/testsuite/gas/mips/elf-rel2.d index 4bd9cee..8ca682f 100644 --- a/gas/testsuite/gas/mips/elf-rel2.d +++ b/gas/testsuite/gas/mips/elf-rel2.d @@ -6,7 +6,7 @@ # FIXME: really this should check that the contents of .sdata, .lit4, # and .lit8 are correct too. -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.text\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/elf-rel3.d b/gas/testsuite/gas/mips/elf-rel3.d index 51dc0af..bfa9c40 100644 --- a/gas/testsuite/gas/mips/elf-rel3.d +++ b/gas/testsuite/gas/mips/elf-rel3.d @@ -2,7 +2,7 @@ #name: MIPS ELF reloc 3 #as: -32 -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.data\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/elfel-rel.d b/gas/testsuite/gas/mips/elfel-rel.d index a597212..bac44ed 100644 --- a/gas/testsuite/gas/mips/elfel-rel.d +++ b/gas/testsuite/gas/mips/elfel-rel.d @@ -5,7 +5,7 @@ # Test the HI16/LO16 generation. -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.text\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/elfel-rel2.d b/gas/testsuite/gas/mips/elfel-rel2.d index 354a578..5f90a0d 100644 --- a/gas/testsuite/gas/mips/elfel-rel2.d +++ b/gas/testsuite/gas/mips/elfel-rel2.d @@ -7,7 +7,7 @@ # FIXME: really this should check that the contents of .sdata, .lit4, # and .lit8 are correct too. -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.text\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/elfel-rel3.d b/gas/testsuite/gas/mips/elfel-rel3.d index 4c4d679..d6cda0a 100644 --- a/gas/testsuite/gas/mips/elfel-rel3.d +++ b/gas/testsuite/gas/mips/elfel-rel3.d @@ -3,7 +3,7 @@ #source: elf-rel3.s #as: -32 -.*: file format elf.*mips +.*: file format .* RELOCATION RECORDS FOR \[\.data\]: OFFSET [ ]+ TYPE VALUE diff --git a/gas/testsuite/gas/mips/ldstla-32-mips3-shared.d b/gas/testsuite/gas/mips/ldstla-32-mips3-shared.d index 305781f..88f73c0 100644 --- a/gas/testsuite/gas/mips/ldstla-32-mips3-shared.d +++ b/gas/testsuite/gas/mips/ldstla-32-mips3-shared.d @@ -3,7 +3,7 @@ #name: MIPS ld-st-la constants (ABI o32, mips3, shared) #source: ldstla-32-mips3.s -.*: +file format elf32-.*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/ldstla-32-mips3.d b/gas/testsuite/gas/mips/ldstla-32-mips3.d index 2d9b00b..b9df3b8 100644 --- a/gas/testsuite/gas/mips/ldstla-32-mips3.d +++ b/gas/testsuite/gas/mips/ldstla-32-mips3.d @@ -3,7 +3,7 @@ #name: MIPS ld-st-la constants (ABI o32, mips3) #source: ldstla-32-mips3.s -.*: +file format elf32-.*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/ldstla-32-shared.d b/gas/testsuite/gas/mips/ldstla-32-shared.d index d4787f9..45f4772 100644 --- a/gas/testsuite/gas/mips/ldstla-32-shared.d +++ b/gas/testsuite/gas/mips/ldstla-32-shared.d @@ -3,7 +3,7 @@ #name: MIPS ld-st-la constants (ABI o32, shared) #source: ldstla-32.s -.*: +file format elf32-.*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/ldstla-32.d b/gas/testsuite/gas/mips/ldstla-32.d index 985246c..42ed481 100644 --- a/gas/testsuite/gas/mips/ldstla-32.d +++ b/gas/testsuite/gas/mips/ldstla-32.d @@ -3,7 +3,7 @@ #name: MIPS ld-st-la constants (ABI o32) #source: ldstla-32.s -.*: +file format elf32-.*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/ldstla-n64-shared.d b/gas/testsuite/gas/mips/ldstla-n64-shared.d index acbbb43..ede34a5 100644 --- a/gas/testsuite/gas/mips/ldstla-n64-shared.d +++ b/gas/testsuite/gas/mips/ldstla-n64-shared.d @@ -3,7 +3,7 @@ #name: MIPS ld-st-la constants (ABI n64, shared) #source: ldstla-n64.s -.*: +file format elf64-.*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/ldstla-n64.d b/gas/testsuite/gas/mips/ldstla-n64.d index 4425e9c..dd028fc 100644 --- a/gas/testsuite/gas/mips/ldstla-n64.d +++ b/gas/testsuite/gas/mips/ldstla-n64.d @@ -3,7 +3,7 @@ #name: MIPS ld-st-la constants (ABI n64) #source: ldstla-n64.s -.*: +file format elf64-.*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/noat-1.d b/gas/testsuite/gas/mips/noat-1.d index 560fb30..b46c959 100644 --- a/gas/testsuite/gas/mips/noat-1.d +++ b/gas/testsuite/gas/mips/noat-1.d @@ -1,7 +1,7 @@ #as: -32 -mips1 #objdump: -dr -.*: +file format .*mips +.*: +file format .* Disassembly of section \.text: diff --git a/gas/testsuite/gas/mips/set-arch.d b/gas/testsuite/gas/mips/set-arch.d index 8ef72cc..a53ab7a 100644 --- a/gas/testsuite/gas/mips/set-arch.d +++ b/gas/testsuite/gas/mips/set-arch.d @@ -2,7 +2,7 @@ #name: .set arch=FOO #stderr: set-arch.l -dump\.o: file format .*mips +dump\.o: file format .* Disassembly of section \.text: 00000000 <[^>]*> bc010000 cache 0x1,0\(zero\) diff --git a/gas/testsuite/gas/mips/tls-o32.d b/gas/testsuite/gas/mips/tls-o32.d index feb58ae..d81ba4e 100644 --- a/gas/testsuite/gas/mips/tls-o32.d +++ b/gas/testsuite/gas/mips/tls-o32.d @@ -2,7 +2,7 @@ #objdump: -dr #name: MIPS ELF TLS o32 -dump.o: file format elf32-.*bigmips +dump.o: file format .* Disassembly of section .text: diff --git a/ld/ChangeLog b/ld/ChangeLog index 8bac5f0..fa623ef 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,20 @@ +2010-12-31 Robert Millan <rmh@gnu.org> + + * configure.tgt: Recognize mips-freebsd and mips-kfreebsd-gnu. + + * emulparams/elf32btsmip_fbsd.sh: New file. + * emulparams/elf32btsmipn32_fbsd.sh: Likewise. + * emulparams/elf32ltsmip_fbsd.sh: Likewise. + * emulparams/elf32ltsmipn32_fbsd.sh: Likewise. + * emulparams/elf64btsmip_fbsd.sh: Likewise. + * emulparams/elf64ltsmip_fbsd.sh: Likewise. + + * Makefile.am: Add build rules for `eelf32btsmip_fbsd.c', + `eelf32btsmipn32_fbsd.c', `eelf32ltsmip_fbsd.c', + `eelf32ltsmipn32_fbsd.c', `eelf64btsmip_fbsd.c' and + `eelf64ltsmip_fbsd.c'. + * Makefile.in: Regenerate. + 2010-12-30 H.J. Lu <hongjiu.lu@intel.com> * emulparams/elf32_x86_64.sh: New. diff --git a/ld/Makefile.am b/ld/Makefile.am index aa6d7c5..bd368ca 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -189,10 +189,14 @@ ALL_EMULATION_SOURCES = \ eelf32bmip.c \ eelf32bmipn32.c \ eelf32btsmip.c \ + eelf32btsmip_fbsd.c \ eelf32crx.c \ eelf32btsmipn32.c \ + eelf32btsmipn32_fbsd.c \ eelf32ltsmip.c \ + eelf32ltsmip_fbsd.c \ eelf32ltsmipn32.c \ + eelf32ltsmipn32_fbsd.c \ eelf32ebmip.c \ eelf32ebmipvxworks.c \ eelf32elmip.c \ @@ -456,7 +460,9 @@ ALL_64_EMULATION_SOURCES = \ eelf64alpha_nbsd.c \ eelf64bmip.c \ eelf64btsmip.c \ + eelf64btsmip_fbsd.c \ eelf64ltsmip.c \ + eelf64ltsmip_fbsd.c \ eelf64hppa.c \ eelf64mmix.c \ emmo.c \ @@ -932,6 +938,10 @@ eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)" +eelf32btsmip_fbsd.c: $(srcdir)/emulparams/elf32btsmip_fbsd.sh \ + $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32btsmip_fbsd "$(tdir_elf32btsmip_fbsd)" eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \ $(ELF_DEPS) $(srcdir)/emultempl/crxelf.em \ $(srcdir)/scripttempl/elf32crx.sc ${GEN_DEPENDS} @@ -940,16 +950,30 @@ eelf32btsmipn32.c: $(srcdir)/emulparams/elf32btsmipn32.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32btsmipn32 "$(tdir_elf32btsmipn32)" +eelf32btsmipn32_fbsd.c: $(srcdir)/emulparams/elf32btsmipn32_fbsd.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32btsmipn32_fbsd "$(tdir_elf32btsmipn32_fbsd)" eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \ $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ ${GEN_DEPENDS} ${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)" +eelf32ltsmip_fbsd.c: $(srcdir)/emulparams/elf32ltsmip_fbsd.sh \ + $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} elf32ltsmip_fbsd "$(tdir_elf32ltsmip_fbsd)" eelf32ltsmipn32.c: $(srcdir)/emulparams/elf32ltsmipn32.sh \ $(srcdir)/emulparams/elf32btsmipn32.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)" +eelf32ltsmipn32_fbsd.c: $(srcdir)/emulparams/elf32ltsmipn32_fbsd.sh \ + $(srcdir)/emulparams/elf32btsmipn32.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32ltsmipn32_fbsd "$(tdir_elf32ltsmipn32_fbsd)" eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} @@ -1157,11 +1181,21 @@ eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)" +eelf64btsmip_fbsd.c: $(srcdir)/emulparams/elf64btsmip_fbsd.sh \ + $(srcdir)/emulparams/elf64bmip-defs.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf64btsmip_fbsd "$(tdir_elf64btsmip_fbsd)" eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)" +eelf64ltsmip_fbsd.c: $(srcdir)/emulparams/elf64ltsmip_fbsd.sh \ + $(srcdir)/emulparams/elf64btsmip_fbsd.sh $(srcdir)/emulparams/elf64bmip-defs.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf64ltsmip_fbsd "$(tdir_elf64ltsmip_fbsd)" eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)" diff --git a/ld/Makefile.in b/ld/Makefile.in index dd5bd2d..9227ca1 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -490,10 +490,14 @@ ALL_EMULATION_SOURCES = \ eelf32bmip.c \ eelf32bmipn32.c \ eelf32btsmip.c \ + eelf32btsmip_fbsd.c \ eelf32crx.c \ eelf32btsmipn32.c \ + eelf32btsmipn32_fbsd.c \ eelf32ltsmip.c \ + eelf32ltsmip_fbsd.c \ eelf32ltsmipn32.c \ + eelf32ltsmipn32_fbsd.c \ eelf32ebmip.c \ eelf32ebmipvxworks.c \ eelf32elmip.c \ @@ -756,7 +760,9 @@ ALL_64_EMULATION_SOURCES = \ eelf64alpha_nbsd.c \ eelf64bmip.c \ eelf64btsmip.c \ + eelf64btsmip_fbsd.c \ eelf64ltsmip.c \ + eelf64ltsmip_fbsd.c \ eelf64hppa.c \ eelf64mmix.c \ emmo.c \ @@ -1065,7 +1071,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bmip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32bmipn32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32btsmip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32btsmip_fbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32btsmipn32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32btsmipn32_fbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32cr16.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32cr16c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32crx.Po@am__quote@ @@ -1088,7 +1096,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppcnto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32lppcsim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ltsmip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ltsmip_fbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ltsmipn32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32ltsmipn32_fbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32m32c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mb_linux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf32mcore.Po@am__quote@ @@ -1124,9 +1134,11 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64alpha_nbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64bmip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64btsmip_fbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64hppa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64lppc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ltsmip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ltsmip_fbsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64mmix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ppc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386.Po@am__quote@ @@ -2357,6 +2369,10 @@ eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)" +eelf32btsmip_fbsd.c: $(srcdir)/emulparams/elf32btsmip_fbsd.sh \ + $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32btsmip_fbsd "$(tdir_elf32btsmip_fbsd)" eelf32crx.c: $(srcdir)/emulparams/elf32crx.sh \ $(ELF_DEPS) $(srcdir)/emultempl/crxelf.em \ $(srcdir)/scripttempl/elf32crx.sc ${GEN_DEPENDS} @@ -2365,16 +2381,30 @@ eelf32btsmipn32.c: $(srcdir)/emulparams/elf32btsmipn32.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32btsmipn32 "$(tdir_elf32btsmipn32)" +eelf32btsmipn32_fbsd.c: $(srcdir)/emulparams/elf32btsmipn32_fbsd.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32btsmipn32_fbsd "$(tdir_elf32btsmipn32_fbsd)" eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \ $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \ $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ ${GEN_DEPENDS} ${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)" +eelf32ltsmip_fbsd.c: $(srcdir)/emulparams/elf32ltsmip_fbsd.sh \ + $(srcdir)/emulparams/elf32btsmip.sh $(srcdir)/emulparams/elf32bmip.sh \ + $(ELF_DEPS) $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc \ + ${GEN_DEPENDS} + ${GENSCRIPTS} elf32ltsmip_fbsd "$(tdir_elf32ltsmip_fbsd)" eelf32ltsmipn32.c: $(srcdir)/emulparams/elf32ltsmipn32.sh \ $(srcdir)/emulparams/elf32btsmipn32.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf32ltsmipn32 "$(tdir_elf32ltsmipn32)" +eelf32ltsmipn32_fbsd.c: $(srcdir)/emulparams/elf32ltsmipn32_fbsd.sh \ + $(srcdir)/emulparams/elf32btsmipn32.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf32ltsmipn32_fbsd "$(tdir_elf32ltsmipn32_fbsd)" eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \ $(srcdir)/emulparams/elf32bmip.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} @@ -2582,11 +2612,21 @@ eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)" +eelf64btsmip_fbsd.c: $(srcdir)/emulparams/elf64btsmip_fbsd.sh \ + $(srcdir)/emulparams/elf64bmip-defs.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf64btsmip_fbsd "$(tdir_elf64btsmip_fbsd)" eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \ $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)" +eelf64ltsmip_fbsd.c: $(srcdir)/emulparams/elf64ltsmip_fbsd.sh \ + $(srcdir)/emulparams/elf64btsmip_fbsd.sh $(srcdir)/emulparams/elf64bmip-defs.sh \ + $(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \ + $(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf64ltsmip_fbsd "$(tdir_elf64ltsmip_fbsd)" eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)" diff --git a/ld/configure.tgt b/ld/configure.tgt index 44fae09..4025837 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -413,6 +413,22 @@ mips*el-*-linux-*) targ_emul=elf32ltsmip mips*-*-linux-*) targ_emul=elf32btsmip targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip" targ_extra_libpath=$targ_extra_emuls ;; +mips64*el-*-freebsd-* | mips64*el-*-kfreebsd*-gnu) + targ_emul=elf32ltsmipn32_fbsd + targ_extra_emuls="elf32ltsmip elf32btsmip elf32ltsmipn32 elf32btsmipn32 elf64ltsmip elf64btsmip elf32ltsmip_fbsd elf32btsmip_fbsd elf32btsmipn32_fbsd elf64ltsmip_fbsd elf64btsmip_fbsd" + targ_extra_libpath=$targ_extra_emuls ;; +mips64*-*-freebsd-* | mips64*-*-kfreebsd*-gnu) + targ_emul=elf32btsmipn32_fbsd + targ_extra_emuls="elf32ltsmip elf32btsmip elf32ltsmipn32 elf32btsmipn32 elf64ltsmip elf64btsmip elf32ltsmip_fbsd elf32btsmip_fbsd elf32ltsmipn32_fbsd elf64ltsmip_fbsd elf64btsmip_fbsd" + targ_extra_libpath=$targ_extra_emuls ;; +mips*el-*-freebsd-* | mips*el-*-kfreebsd*-gnu) + targ_emul=elf32ltsmip_fbsd + targ_extra_emuls="elf32ltsmip elf32btsmip elf32ltsmipn32 elf32btsmipn32 elf64ltsmip elf64btsmip elf32ltsmipn32_fbsd elf32btsmip_fbsd elf32btsmipn32_fbsd elf64ltsmip_fbsd elf64btsmip_fbsd" + targ_extra_libpath=$targ_extra_emuls ;; +mips*-*-freebsd-* | mips*-*-kfreebsd*-gnu) + targ_emul=elf32btsmip_fbsd + targ_extra_emuls="elf32ltsmip elf32btsmip elf32ltsmipn32 elf32btsmipn32 elf64ltsmip elf64btsmip elf32ltsmip_fbsd elf32btsmipn32_fbsd elf32ltsmipn32_fbsd elf64ltsmip_fbsd elf64btsmip_fbsd" + targ_extra_libpath=$targ_extra_emuls ;; mips*-*-lnews*) targ_emul=mipslnews ;; mips*-*-sysv4*) targ_emul=elf32btsmip ;; diff --git a/ld/emulparams/elf32btsmip_fbsd.sh b/ld/emulparams/elf32btsmip_fbsd.sh new file mode 100644 index 0000000..e2a9011 --- /dev/null +++ b/ld/emulparams/elf32btsmip_fbsd.sh @@ -0,0 +1,5 @@ +. ${srcdir}/emulparams/elf32btsmip.sh +. ${srcdir}/emulparams/elf_fbsd.sh +OUTPUT_FORMAT="elf32-tradbigmips-freebsd" +BIG_OUTPUT_FORMAT="elf32-tradbigmips-freebsd" +LITTLE_OUTPUT_FORMAT="elf32-tradlittlemips-freebsd" diff --git a/ld/emulparams/elf32btsmipn32_fbsd.sh b/ld/emulparams/elf32btsmipn32_fbsd.sh new file mode 100644 index 0000000..83e2e44 --- /dev/null +++ b/ld/emulparams/elf32btsmipn32_fbsd.sh @@ -0,0 +1,5 @@ +. ${srcdir}/emulparams/elf32ltsmipn32.sh +. ${srcdir}/emulparams/elf_fbsd.sh +OUTPUT_FORMAT="elf32-ntradbigmips-freebsd" +BIG_OUTPUT_FORMAT="elf32-ntradbigmips-freebsd" +LITTLE_OUTPUT_FORMAT="elf32-ntradlittlemips-freebsd" diff --git a/ld/emulparams/elf32ltsmip_fbsd.sh b/ld/emulparams/elf32ltsmip_fbsd.sh new file mode 100644 index 0000000..98cb987 --- /dev/null +++ b/ld/emulparams/elf32ltsmip_fbsd.sh @@ -0,0 +1,5 @@ +. ${srcdir}/emulparams/elf32ltsmip.sh +. ${srcdir}/emulparams/elf_fbsd.sh +OUTPUT_FORMAT="elf32-tradlittlemips-freebsd" +BIG_OUTPUT_FORMAT="elf32-tradbigmips-freebsd" +LITTLE_OUTPUT_FORMAT="elf32-tradlittlemips-freebsd" diff --git a/ld/emulparams/elf32ltsmipn32_fbsd.sh b/ld/emulparams/elf32ltsmipn32_fbsd.sh new file mode 100644 index 0000000..1d39f69 --- /dev/null +++ b/ld/emulparams/elf32ltsmipn32_fbsd.sh @@ -0,0 +1,5 @@ +. ${srcdir}/emulparams/elf32ltsmipn32.sh +. ${srcdir}/emulparams/elf_fbsd.sh +OUTPUT_FORMAT="elf32-ntradlittlemips-freebsd" +BIG_OUTPUT_FORMAT="elf32-ntradbigmips-freebsd" +LITTLE_OUTPUT_FORMAT="elf32-ntradlittlemips-freebsd" diff --git a/ld/emulparams/elf64btsmip_fbsd.sh b/ld/emulparams/elf64btsmip_fbsd.sh new file mode 100644 index 0000000..32889b4 --- /dev/null +++ b/ld/emulparams/elf64btsmip_fbsd.sh @@ -0,0 +1,5 @@ +. ${srcdir}/emulparams/elf64btsmip.sh +. ${srcdir}/emulparams/elf_fbsd.sh +OUTPUT_FORMAT="elf64-tradbigmips-freebsd" +BIG_OUTPUT_FORMAT="elf64-tradbigmips-freebsd" +LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips-freebsd" diff --git a/ld/emulparams/elf64ltsmip_fbsd.sh b/ld/emulparams/elf64ltsmip_fbsd.sh new file mode 100644 index 0000000..0cd0616 --- /dev/null +++ b/ld/emulparams/elf64ltsmip_fbsd.sh @@ -0,0 +1,5 @@ +. ${srcdir}/emulparams/elf64ltsmip.sh +. ${srcdir}/emulparams/elf_fbsd.sh +OUTPUT_FORMAT="elf64-tradlittlemips-freebsd" +BIG_OUTPUT_FORMAT="elf64-tradbigmips-freebsd" +LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips-freebsd" diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 33e6c91..681c326 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-12-31 Richard Sandiford <rdsandiford@googlemail.com> + + * ld-mips-elf/mips-elf-flags.exp: Handle FreeBSD targets. + * ld-mips-elf/mips-elf.exp: Likewise. + * ld-mips-elf/mips16-call-global.d: Accept any file format. + * ld-mips-elf/mips16-intermix.d: Likewise. + 2010-12-28 H.J. Lu <hongjiu.lu@intel.com> PR ld/12327 diff --git a/ld/testsuite/ld-mips-elf/mips-elf-flags.exp b/ld/testsuite/ld-mips-elf/mips-elf-flags.exp index 512cf51..a7e4453 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf-flags.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf-flags.exp @@ -28,6 +28,10 @@ if {[istarget mips*-*-irix6*]} { set ldemul "-melf32ltsmip" } elseif {[istarget mips*-*-linux*]} { set ldemul "-melf32btsmip" +} elseif {[istarget mips*el-*-*freebsd*]} { + set ldemul "-melf32ltsmip_fbsd" +} elseif {[istarget mips*-*-*freebsd*]} { + set ldemul "-melf32btsmip_fbsd" } else { set ldemul "" } diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 6c283e2..71c8bcc 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -109,6 +109,9 @@ if { $linux_gnu } { if { [istarget mips64*-linux-gnu] } { set o32_as_flags "-32 -EB" set o32_ld_flags "-melf32btsmip" +} elseif { [istarget mips64*-*freebsd*] } { + set o32_as_flags "-32 -EB" + set o32_ld_flags "-melf32btsmip_fbsd" } else { set o32_as_flags "" set o32_ld_flags "" diff --git a/ld/testsuite/ld-mips-elf/mips16-call-global.d b/ld/testsuite/ld-mips-elf/mips16-call-global.d index 051ebcd..390d84c 100644 --- a/ld/testsuite/ld-mips-elf/mips16-call-global.d +++ b/ld/testsuite/ld-mips-elf/mips16-call-global.d @@ -1,5 +1,5 @@ -.*: file format elf.*mips +.*: file format .* Disassembly of section .text: diff --git a/ld/testsuite/ld-mips-elf/mips16-intermix.d b/ld/testsuite/ld-mips-elf/mips16-intermix.d index cc8c1fe..10c7270 100644 --- a/ld/testsuite/ld-mips-elf/mips16-intermix.d +++ b/ld/testsuite/ld-mips-elf/mips16-intermix.d @@ -1,5 +1,5 @@ -.*: +file format elf.*mips +.*: +file format .* SYMBOL TABLE: #... |