diff options
Diffstat (limited to 'ports')
-rw-r--r-- | ports/ChangeLog.mips | 14 | ||||
-rw-r--r-- | ports/sysdeps/mips/jmpbuf-unwind.h | 8 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c | 4 | ||||
-rw-r--r-- | ports/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h | 14 |
4 files changed, 28 insertions, 12 deletions
diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index 2a77f26978..23f772e1bc 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,5 +1,19 @@ 2012-11-20 Joseph Myers <joseph@codesourcery.com> + * sysdeps/mips/jmpbuf-unwind.h (_JMPBUF_CFA_UNWINDS_ADJ): Cast + _Unwind_GetCFA return to _Unwind_Ptr before casting to a pointer + type. + * sysdeps/unix/sysv/linux/mips/____longjmp_chk.c (CHECK_SP): Cast + ss_sp to long before casting to sp_type. + * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h [_MIPS_SIM == + _ABIO32] (GET_PC): Cast to unsigned long before casting to a + pointer type. + [_MIPS_SIM == _ABIO32] (GET_FRAME): Likewise. + [_MIPS_SIM == _ABIO32] (GET_STACK): Likewise. + [_MIPS_SIM != _ABIO32] (GET_PC): Likewise. + [_MIPS_SIM != _ABIO32] (GET_FRAME): Likewise. + [_MIPS_SIM != _ABIO32] (GET_STACK): Likewise. + * sysdeps/mips/bits/atomic.h [!__GNUC_PREREQ (4, 8)] (__arch_compare_and_exchange_xxx_8_int): Separate assignments to __prev and __cmp. Cast __cmp to void. diff --git a/ports/sysdeps/mips/jmpbuf-unwind.h b/ports/sysdeps/mips/jmpbuf-unwind.h index 31c9c8de7d..ba174d6079 100644 --- a/ports/sysdeps/mips/jmpbuf-unwind.h +++ b/ports/sysdeps/mips/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003-2012 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 @@ -25,8 +25,10 @@ #define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp)) -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) +#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ + _JMPBUF_UNWINDS_ADJ (_jmpbuf, \ + (void *) (_Unwind_Ptr) _Unwind_GetCFA (_context), \ + _adj) static inline uintptr_t __attribute__ ((unused)) _jmpbuf_sp (__jmp_buf regs) diff --git a/ports/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c b/ports/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c index d8da27024b..943b404140 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c +++ b/ports/sysdeps/unix/sysv/linux/mips/____longjmp_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2009 Free Software Foundation, Inc. +/* Copyright (C) 2009-2012 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 @@ -29,7 +29,7 @@ int ret = __sigaltstack (NULL, &ss); \ if (ret == 0 \ && (!(ss.ss_flags & SS_ONSTACK) \ - || ((unsigned sp_type) ((sp_type) ss.ss_sp \ + || ((unsigned sp_type) ((sp_type) (long) ss.ss_sp \ + (sp_type) ss.ss_size \ - sp_saved) \ < ss.ss_size))) \ diff --git a/ports/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h b/ports/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h index 9edde21683..7793e21478 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h +++ b/ports/sysdeps/unix/sysv/linux/mips/sigcontextinfo.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@suse.de>, 2000. @@ -23,9 +23,9 @@ #define SIGCONTEXT unsigned long _code, struct sigcontext * #define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) ctx->sc_pc) -#define GET_FRAME(ctx) ((void *) ctx->sc_regs[30]) -#define GET_STACK(ctx) ((void *) ctx->sc_regs[29]) +#define GET_PC(ctx) ((void *) (unsigned long) ctx->sc_pc) +#define GET_FRAME(ctx) ((void *) (unsigned long) ctx->sc_regs[30]) +#define GET_STACK(ctx) ((void *) (unsigned long) ctx->sc_regs[29]) #define CALL_SIGHANDLER(handler, signo, ctx) \ (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) @@ -33,9 +33,9 @@ #define SIGCONTEXT unsigned long _code, ucontext_t * #define SIGCONTEXT_EXTRA_ARGS _code, -#define GET_PC(ctx) ((void *) ctx->uc_mcontext.pc) -#define GET_FRAME(ctx) ((void *) ctx->uc_mcontext.gregs[30]) -#define GET_STACK(ctx) ((void *) ctx->uc_mcontext.gregs[29]) +#define GET_PC(ctx) ((void *) (unsigned long) ctx->uc_mcontext.pc) +#define GET_FRAME(ctx) ((void *) (unsigned long) ctx->uc_mcontext.gregs[30]) +#define GET_STACK(ctx) ((void *) (unsigned long) ctx->uc_mcontext.gregs[29]) #define CALL_SIGHANDLER(handler, signo, ctx) \ (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) |