[erlang-bugs] Building R13B01 on IRIX problems
Patrick Baggett
baggett.patrick@REDACTED
Fri Jun 26 21:52:54 CEST 2009
Thanks for the quick response! I'll check that out tonight. Can anyone who
is proficient with configure scripts modify it so that iovec/uio isn't
allowed on IRIX?
Patrick
On Fri, Jun 26, 2009 at 4:33 AM, Mikael Pettersson <mikpe@REDACTED> wrote:
> Patrick Baggett writes:
> > > Correct, using GCC should be optional.
> > >
> > > Prior to the linkage error there ought to be some compile-time
> warnings
> > > about calling undeclared functions (those __builtin_*()s).
> > > Can you see if these warnings are present and if so where they occur
> and
> > > if the compiler identifies their origin? (typically .h files)
> > >
> >
> > I did not see any warning about it, surprisingly. The only thing that I
> > found was in erts/emulator/sys/erl_sys_unix.h about __builtin_expect,
> but
> > nothing about __builtin_return_address. Anyone help here?
>
> I found two cases where these builtins could be called without
> prior checks that GCC was being used. Try the patch below.
>
> /Mikael
>
> --- otp-0622/erts/emulator/sys/unix/sys_float.c.~1~ 2009-02-26
> 11:45:48.000000000 +0100
> +++ otp-0622/erts/emulator/sys/unix/sys_float.c 2009-06-26
> 11:14:15.000000000 +0200
> @@ -792,6 +792,8 @@ sys_chars_to_double(char* buf, double* f
> int
> matherr(struct exception *exc)
> {
> +#if !defined(NO_FPE_SIGNALS)
> set_current_fp_exception((unsigned long)__builtin_return_address(0));
> +#endif
> return 1;
> }
> --- otp-0622/erts/include/internal/ethread.h.~1~ 2009-02-26
> 11:45:54.000000000 +0100
> +++ otp-0622/erts/include/internal/ethread.h 2009-06-26
> 11:24:24.000000000 +0200
> @@ -681,11 +681,13 @@ ETHR_INLINE_FUNC_NAME_(ethr_write_lock)(
>
> #endif
>
> +/* __builtin_expect() is needed by both native atomics code and the
> fallback code */
> +#if !defined(__GNUC__) || (__GNUC__ < 2) || (__GNUC__ == 2 &&
> __GNUC_MINOR__ < 96)
> +#define __builtin_expect(X, Y) (X)
> +#endif
> +
> /* For CPU-optimised atomics, spinlocks, and rwlocks. */
> #if !defined(ETHR_DISABLE_NATIVE_IMPLS) && defined(__GNUC__)
> -# if __GNUC__ < 3 && (__GNUC__ != 2 || __GNUC_MINOR__ < 96)
> -# define __builtin_expect(X, Y) (X)
> -# endif
> # if ETHR_SIZEOF_PTR == 4
> # if defined(__i386__)
> # include "i386/ethread.h"
>
More information about the erlang-bugs
mailing list