From 34cb304e5a6df706e186d504b69af974bfc15a2f Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Mon, 11 May 2015 22:58:10 +0000 Subject: Fix mips16 __fpu_control static linking (bug 18397). Programs are supposed to be able to define the __fpu_control variable, overriding the library's version to cause the floating-point control word to be set to the chosen value at startup. This is broken for mips16 for static linking because the library's __fpu_control variable is in the same object file as the helper functions used by fpu_control.h for mips16, so test-fpucw-ieee-static fails to link with multiple definitions of __fpu_control. This patch fixes this by putting the helpers in a separate file rather than overriding fpu_control.c. Tested for mips16 that this fixes the link failure and the ABI tests still pass. [BZ #18397] * sysdeps/mips/mips32/fpu/fpu_control.c: Move to .... * sysdeps/mips/mips32/fpu/fpucw-helpers.c: ... here. Include instead of . * sysdeps/mips/mips32/fpu/Makefile: New file. --- ChangeLog | 8 ++++++++ NEWS | 2 +- sysdeps/mips/mips32/fpu/Makefile | 3 +++ sysdeps/mips/mips32/fpu/fpu_control.c | 34 --------------------------------- sysdeps/mips/mips32/fpu/fpucw-helpers.c | 34 +++++++++++++++++++++++++++++++++ 5 files changed, 46 insertions(+), 35 deletions(-) create mode 100644 sysdeps/mips/mips32/fpu/Makefile delete mode 100644 sysdeps/mips/mips32/fpu/fpu_control.c create mode 100644 sysdeps/mips/mips32/fpu/fpucw-helpers.c diff --git a/ChangeLog b/ChangeLog index 05c23e75b1..c998dd59b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2015-05-11 Joseph Myers + + [BZ #18397] + * sysdeps/mips/mips32/fpu/fpu_control.c: Move to .... + * sysdeps/mips/mips32/fpu/fpucw-helpers.c: ... here. Include + instead of . + * sysdeps/mips/mips32/fpu/Makefile: New file. + 2015-05-11 Andreas Schwab [BZ #18007] diff --git a/NEWS b/NEWS index c1054ccbdb..f4fe47fc35 100644 --- a/NEWS +++ b/NEWS @@ -17,7 +17,7 @@ Version 2.22 18007, 18019, 18020, 18029, 18030, 18032, 18036, 18038, 18039, 18042, 18043, 18046, 18047, 18068, 18080, 18093, 18100, 18104, 18110, 18111, 18125, 18128, 18138, 18185, 18197, 18206, 18210, 18211, 18247, 18287, - 18319, 18333, 18346. + 18319, 18333, 18346, 18397. * Cache information can be queried via sysconf() function on s390 e.g. with _SC_LEVEL1_ICACHE_SIZE as argument. diff --git a/sysdeps/mips/mips32/fpu/Makefile b/sysdeps/mips/mips32/fpu/Makefile new file mode 100644 index 0000000000..951c408423 --- /dev/null +++ b/sysdeps/mips/mips32/fpu/Makefile @@ -0,0 +1,3 @@ +ifeq ($(subdir),math) +aux += fpucw-helpers +endif diff --git a/sysdeps/mips/mips32/fpu/fpu_control.c b/sysdeps/mips/mips32/fpu/fpu_control.c deleted file mode 100644 index eeb94c55c7..0000000000 --- a/sysdeps/mips/mips32/fpu/fpu_control.c +++ /dev/null @@ -1,34 +0,0 @@ -/* FPU control word handling, MIPS version, needed by MIPS16 callers. - Copyright (C) 1996-2015 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -fpu_control_t -__mips_fpu_getcw (void) -{ - fpu_control_t cw; - - _FPU_GETCW (cw); - return cw; -} - -void -__mips_fpu_setcw (fpu_control_t cw) -{ - _FPU_SETCW (cw); -} diff --git a/sysdeps/mips/mips32/fpu/fpucw-helpers.c b/sysdeps/mips/mips32/fpu/fpucw-helpers.c new file mode 100644 index 0000000000..40391a3ec5 --- /dev/null +++ b/sysdeps/mips/mips32/fpu/fpucw-helpers.c @@ -0,0 +1,34 @@ +/* FPU control word handling, MIPS version, needed by MIPS16 callers. + Copyright (C) 1996-2015 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +fpu_control_t +__mips_fpu_getcw (void) +{ + fpu_control_t cw; + + _FPU_GETCW (cw); + return cw; +} + +void +__mips_fpu_setcw (fpu_control_t cw) +{ + _FPU_SETCW (cw); +} -- cgit 1.4.1