yann@1: Sender: libc-alpha-owner@sources.redhat.com yann@1: Date: Tue, 29 Jul 2003 17:49:47 -0400 yann@1: From: Daniel Jacobowitz yann@1: To: GNU C Library yann@1: Subject: Re: __sim_exceptions undefined when linking glibc-2.3.2's libm.so with --without-fp yann@1: Message-ID: <20030729214947.GA29932@nevyn.them.org> yann@1: yann@1: On Tue, Jul 29, 2003 at 02:53:33PM -0700, Dan Kegel wrote: yann@1: > On ppc405, I'm getting the following when linking glibc's libm: yann@1: > /gcc-3.3-glibc-2.3.2/build-glibc/math/libm_pic.a(fclrexcpt.os)(.text+0x1a): yann@1: > In function `feclearexcept@GLIBC_2.1': yann@1: > : undefined reference to `__sim_exceptions' yann@1: > yann@1: > That symbol seems to be present in libc.so. nm shows yann@1: yann@1: --without-fp doesn't work. Try this. Make up a changelog entry if it yann@1: works. yann@1: yann@1: Date: Tue, 29 Jul 2003 14:56:50 -0700 yann@1: Message-Id: <200307292156.h6TLuol24356@magilla.sf.frob.com> yann@1: From: Roland McGrath yann@1: To: Daniel Jacobowitz yann@1: Cc: GNU C Library yann@1: Subject: Re: __sim_exceptions undefined when linking glibc-2.3.2's libm.so with --without-fp yann@1: In-Reply-To: Daniel Jacobowitz's message of Tuesday, 29 July 2003 17:49:47 -0400 <20030729214947.GA29932@nevyn.them.org> yann@1: yann@1: > +int __sim_exceptions __attribute__ ((section(".bss"))); yann@1: yann@1: Use __attribute__ ((nocommon)) instead (and please watch the standard yann@1: whitespace conventions, i.e. ``section (''). yann@1: yann@1: diff -purN glibc-2.3.2.orig/sysdeps/powerpc/nofpu/sim-full.c glibc-2.3.2/sysdeps/powerpc/nofpu/sim-full.c yann@1: --- glibc-2.3.2.orig/sysdeps/powerpc/nofpu/sim-full.c 2002-10-19 16:06:29.000000000 -0400 yann@1: +++ glibc-2.3.2/sysdeps/powerpc/nofpu/sim-full.c 2003-05-14 15:10:42.000000000 -0400 yann@1: @@ -24,11 +24,14 @@ yann@1: yann@1: /* Global to store sticky exceptions. */ yann@1: -int __sim_exceptions; yann@1: +int __sim_exceptions __attribute__ ((nocommon)); yann@1: +libc_hidden_data_def (__sim_exceptions); yann@1: yann@1: /* By default, no exceptions should trap. */ yann@1: int __sim_disabled_exceptions = 0xffffffff; yann@1: +libc_hidden_data_def (__sim_disabled_exceptions); yann@1: yann@1: -int __sim_round_mode; yann@1: +int __sim_round_mode __attribute__ ((nocommon)); yann@1: +libc_hidden_data_def (__sim_round_mode); yann@1: yann@1: void yann@1: __simulate_exceptions (int x) yann@1: diff -purN glibc-2.3.2.orig/sysdeps/powerpc/nofpu/soft-supp.h glibc-2.3.2/sysdeps/powerpc/nofpu/soft-supp.h yann@1: --- glibc-2.3.2.orig/sysdeps/powerpc/nofpu/soft-supp.h 2002-10-19 16:06:29.000000000 -0400 yann@1: +++ glibc-2.3.2/sysdeps/powerpc/nofpu/soft-supp.h 2003-05-14 15:09:53.000000000 -0400 yann@1: @@ -27,7 +27,11 @@ typedef union yann@1: } fenv_union_t; yann@1: yann@1: yann@1: -extern int __sim_exceptions attribute_hidden; yann@1: -extern int __sim_disabled_exceptions attribute_hidden; yann@1: -extern int __sim_round_mode attribute_hidden; yann@1: +extern int __sim_exceptions; yann@1: +libc_hidden_proto (__sim_exceptions); yann@1: +extern int __sim_disabled_exceptions; yann@1: +libc_hidden_proto (__sim_disabled_exceptions); yann@1: +extern int __sim_round_mode; yann@1: +libc_hidden_proto (__sim_round_mode); yann@1: + yann@1: extern void __simulate_exceptions (int x) attribute_hidden; yann@1: diff -urp glibc-2.3.2.orig/sysdeps/powerpc/soft-fp/sfp-machine.h glibc-2.3.2/sysdeps/powerpc/soft-fp/sfp-machine.h yann@1: --- glibc-2.3.2.orig/sysdeps/powerpc/soft-fp/sfp-machine.h 2002-10-17 18:36:14.000000000 -0400 yann@1: +++ glibc-2.3.2/sysdeps/powerpc/soft-fp/sfp-machine.h 2003-05-14 16:48:13.000000000 -0400 yann@1: @@ -52,7 +52,11 @@ yann@1: #define FP_HANDLE_EXCEPTIONS __simulate_exceptions (_fex) yann@1: #define FP_ROUNDMODE __sim_round_mode yann@1: yann@1: -extern int __sim_exceptions attribute_hidden; yann@1: -extern int __sim_disabled_exceptions attribute_hidden; yann@1: -extern int __sim_round_mode attribute_hidden; yann@1: +extern int __sim_exceptions; yann@1: +libc_hidden_proto (__sim_exceptions); yann@1: +extern int __sim_disabled_exceptions; yann@1: +libc_hidden_proto (__sim_disabled_exceptions); yann@1: +extern int __sim_round_mode; yann@1: +libc_hidden_proto (__sim_round_mode); yann@1: + yann@1: extern void __simulate_exceptions (int x) attribute_hidden; yann@1: yann@1: