From 0bd956720c457ff054325b48f26ac7c91cb060e8 Mon Sep 17 00:00:00 2001 From: Matthew Fortune Date: Sun, 1 Jun 2014 00:16:25 +0100 Subject: Add support for MIPS O32 FPXX and .MIPS.abiflags * elf/elf.h (PT_MIPS_ABIFLAGS): Define. (Elf_MIPS_ABIFlags_v0): New structure. (EF_MIPS_FP64): Define. (MIPS_AFL_REG_NONE, MIPS_AFL_REG_32, MIPS_AFL_REG_64): Likewise. (MIPS_AFL_REG_128, MIPS_AFL_ASE_DSP, MIPS_AFL_ASE_DSP64): Likewise. (MIPS_AFL_ASE_DSPR2, MIPS_AFL_ASE_EVA, MIPS_AFL_ASE_MCU): Likewise. (MIPS_AFL_ASE_MDMX, MIPS_AFL_ASE_MIPS3D, MIPS_AFL_ASE_MT): Likewise. (MIPS_AFL_ASE_SMARTMIPS, MIPS_AFL_ASE_VIRT): Likewise. (MIPS_AFL_ASE_VIRT64, MIPS_AFL_ASE_MSA, MIPS_AFL_ASE_MSA64): Likewise. (MIPS_AFL_ASE_MIPS16, MIPS_AFL_ASE_MICROMIPS): Likewise. (MIPS_AFL_ASE_XPA, MIPS_AFL_EXT_XLR, MIPS_AFL_EXT_OCTEON2): Likewise. (MIPS_AFL_EXT_OCTEONP, MIPS_AFL_EXT_LOONGSON_3A): Likewise. (MIPS_AFL_EXT_OCTEON, MIPS_AFL_EXT_5900, MIPS_AFL_EXT_4010): Likewise. (MIPS_AFL_EXT_4100, MIPS_AFL_EXT_3900, MIPS_AFL_EXT_10000): Likewise. (MIPS_AFL_EXT_SB1, MIPS_AFL_EXT_4111, MIPS_AFL_EXT_4120): Likewise. (MIPS_AFL_EXT_5400, MIPS_AFL_EXT_5500): Likewise. (MIPS_AFL_EXT_LOONGSON_2E, MIPS_AFL_EXT_LOONGSON_2F): Likewise. (Val_GNU_MIPS_ABI_FP_ANY, Val_GNU_MIPS_ABI_FP_DOUBLE): New enum values. (Val_GNU_MIPS_ABI_FP_SINGLE, Val_GNU_MIPS_ABI_FP_SOFT): Likewise. (Val_GNU_MIPS_ABI_FP_OLD_64, Val_GNU_MIPS_ABI_FP_XX): Likewise. (Val_GNU_MIPS_ABI_FP_64, Val_GNU_MIPS_ABI_FP_64A): Likewise. (Val_GNU_MIPS_ABI_FP_MAX): Likewise. * sysdeps/mips/Makefile [subdir=elf]: Add tst-abi-interlink, tst-mode-switch-1, tst-mode-switch-2, tst-mode-switch-3 tests. * sysdeps/mips/bits/linkmap.h (struct link_map_machine): Add fpmode field. * sysdeps/mips/dl-machine.h (elf_machine_matches_host): Reject EF_MIPS_FP64. * sysdeps/mips/dl-machine-reject-phdr.h: New file. * sysdeps/mips/tst-abi-fp32mod.c: Likewise. * sysdeps/mips/tst-abi-fpxxmod.c: Likewise. * sysdeps/mips/tst-abi-fpxxomod.c: Likewise. * sysdeps/mips/tst-abi-fp64mod.c: Likewise. * sysdeps/mips/tst-abi-fp64amod.c: Likewise. * sysdeps/mips/tst-abi-interlink.c: Likewise. * sysdeps/mips/tst-mode-switch-1.c: Likewise. * sysdeps/mips/tst-mode-switch-2.c: Likewise. * sysdeps/mips/tst-mode-switch-3.c: Likewise. * sysdeps/unix/sysv/linux/mips/configure.ac (o32-fpabi): Define to record the current FP ABI extension. (mips-mode-switch): Define to show if kernel headers support mode switching. * sysdeps/unix/sysv/linux/mips/configure: Regenerate. * sysdeps/unix/sysv/linux/mips/ldsodefs.h: Increase maximum supported SYSV ABI version to 3. * sysdeps/unix/sysv/linux/mips/libc-abis: Add new MIPS_O32_FP64 feature. --- sysdeps/mips/Makefile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'sysdeps/mips/Makefile') diff --git a/sysdeps/mips/Makefile b/sysdeps/mips/Makefile index a152699..463b121 100644 --- a/sysdeps/mips/Makefile +++ b/sysdeps/mips/Makefile @@ -26,3 +26,53 @@ CPPFLAGS-crtn.S += $(pic-ccflag) endif ASFLAGS-.os += $(pic-ccflag) + +ifeq ($(subdir),elf) +ifneq ($(o32-fpabi),) +tests += tst-abi-interlink + +fpabi-modules-names = +fpabi_list = +ifneq (,$(filter $(o32-fpabi),32 xx xxo)) +fpabi-modules-names += tst-abi-fp32mod +CFLAGS-tst-abi-fp32mod.c += -mfp32 +endif +ifneq (,$(filter $(o32-fpabi),xx)) +fpabi-modules-names += tst-abi-fpxxmod +CFLAGS-tst-abi-fpxxmod.c += -mfpxx -mno-odd-spreg +endif +ifneq (,$(filter $(o32-fpabi),xx xxo)) +fpabi-modules-names += tst-abi-fpxxomod +CFLAGS-tst-abi-fpxxomod.c += -mfpxx -modd-spreg +endif +ifneq (,$(filter $(o32-fpabi),xx 64a)) +fpabi-modules-names += tst-abi-fp64amod +CFLAGS-tst-abi-fp64amod.c += -mfp64 -mno-odd-spreg +endif +ifneq (,$(filter $(o32-fpabi),xx xxo 64a 64)) +fpabi-modules-names += tst-abi-fp64mod +CFLAGS-tst-abi-fp64mod.c += -mfp64 -modd-spreg +endif +modules-names += $(fpabi-modules-names) + +comma:=, +empty:= +space:=$(empty) $(empty) +fpabi_list=$(subst $(space),$(comma),$(patsubst tst-abi-%mod,o_%,\ + $(fpabi-modules-names))) +CPPFLAGS-tst-abi-interlink.c += -DFPABI_LIST=$(fpabi_list) +CPPFLAGS-tst-abi-interlink.c += -DFPABI_COUNT=$(words $(fpabi-modules-names)) +CPPFLAGS-tst-abi-interlink.c += -DFPABI_NATIVE=o_fp$(o32-fpabi) +$(objpfx)tst-abi-interlink: $(libdl) +$(objpfx)tst-abi-interlink.out: $(patsubst %,$(objpfx)%.so,\ + $(fpabi-modules-names)) +endif + +ifeq ($(mips-mode-switch),yes) +ifeq ($(o32-fpabi),xx) +tests += tst-mode-switch-1 tst-mode-switch-2 tst-mode-switch-3 +$(objpfx)tst-mode-switch-1: $(shared-thread-library) +$(objpfx)tst-mode-switch-2: $(shared-thread-library) +endif +endif +endif -- cgit v1.1