Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 67632
Collapse All | Expand All

(-)/var/tmp/portage/libsigsegv-2.1/work/libsigsegv-2.1/configure (-5 / +6 lines)
Lines 10986-10994 Link Here
10986
10986
10987
#include <signal.h>
10987
#include <signal.h>
10988
#include "$srcdir/src/fault-macos-powerpc.c"
10988
#include "$srcdir/src/fault-macos-powerpc.c"
10989
void sigsegv_handler (int sig, int code, struct sigcontext *scp)
10989
void sigsegv_handler (int sig, siginfo_t *sip, struct sigcontext *scp)
10990
{
10990
{
10991
  void *fault_address = (void *) (get_fault_addr (scp));
10991
  void *fault_address = (void *) (get_fault_addr (scp, sip->si_addr));
10992
}
10992
}
10993
10993
10994
int
10994
int
Lines 11037-11042 Link Here
11037
#if HAVE_SYS_SIGNAL_H
11037
#if HAVE_SYS_SIGNAL_H
11038
# include <sys/signal.h>
11038
# include <sys/signal.h>
11039
#endif
11039
#endif
11040
#include <sys/ucontext.h>
11040
#include "$srcdir/src/fault-macos-powerpc.c"
11041
#include "$srcdir/src/fault-macos-powerpc.c"
11041
#include <sys/types.h>
11042
#include <sys/types.h>
11042
#include <sys/mman.h>
11043
#include <sys/mman.h>
Lines 11061-11069 Link Here
11061
#endif
11062
#endif
11062
unsigned long page;
11063
unsigned long page;
11063
int handler_called = 0;
11064
int handler_called = 0;
11064
void sigsegv_handler (int sig, int code, struct sigcontext *scp)
11065
void sigsegv_handler (int sig, siginfo_t *sip, struct sigcontext *scp)
11065
{
11066
{
11066
  void *fault_address = (void *) (get_fault_addr (scp));
11067
  void *fault_address = (void *) (get_fault_addr (scp, sip->si_addr));
11067
  handler_called++;
11068
  handler_called++;
11068
  if (handler_called == 10)
11069
  if (handler_called == 10)
11069
    exit (4);
11070
    exit (4);
Lines 11102-11108 Link Here
11102
  sigemptyset(&action.sa_mask);
11103
  sigemptyset(&action.sa_mask);
11103
11104
11104
  action.sa_handler = (void (*) (int)) &sigsegv_handler;
11105
  action.sa_handler = (void (*) (int)) &sigsegv_handler;
11105
  action.sa_flags = 0;
11106
  action.sa_flags = SA_SIGINFO;
11106
11107
11107
  sigaction (SIGSEGV, &action, (struct sigaction *) NULL);
11108
  sigaction (SIGSEGV, &action, (struct sigaction *) NULL);
11108
  sigaction (SIGBUS, &action, (struct sigaction *) NULL);
11109
  sigaction (SIGBUS, &action, (struct sigaction *) NULL);
(-)/var/tmp/portage/libsigsegv-2.1/work/libsigsegv-2.1/src/fault-macos-powerpc.c (-4 / +9 lines)
Lines 31-40 Link Here
31
#define EXTRACT_DISP(iw)    ((short *) &(iw))[1]
31
#define EXTRACT_DISP(iw)    ((short *) &(iw))[1]
32
32
33
static void *
33
static void *
34
get_fault_addr (struct sigcontext *scp)
34
get_fault_addr (struct sigcontext *scp,unsigned int *ir)
35
{
35
{
36
  unsigned int instr = *((unsigned int *) scp->sc_ir);
36
  unsigned int instr = *ir;
37
  unsigned int *regs = &((unsigned int *) scp->sc_regs)[2];
37
  unsigned int *regs = & ((struct ucontext *)scp)->uc_mcontext->ss.r0	;
38
     	
38
  int disp = 0;
39
  int disp = 0;
39
  int tmp;
40
  int tmp;
40
  unsigned int baseA = 0;
41
  unsigned int baseA = 0;
Lines 42-47 Link Here
42
  unsigned int addr;
43
  unsigned int addr;
43
  unsigned int alignmask = 0xFFFFFFFF;
44
  unsigned int alignmask = 0xFFFFFFFF;
44
45
46
45
  switch (EXTRACT_OP1 (instr))
47
  switch (EXTRACT_OP1 (instr))
46
    {
48
    {
47
    case 38:   /* stb */
49
    case 38:   /* stb */
Lines 56-63 Link Here
56
    case 36:   /* stw */
58
    case 36:   /* stw */
57
    case 37:   /* stwu */
59
    case 37:   /* stwu */
58
      tmp = EXTRACT_REGA (instr);
60
      tmp = EXTRACT_REGA (instr);
61
62
59
      if (tmp > 0)
63
      if (tmp > 0)
60
	baseA = regs[tmp];
64
		baseA = regs[tmp];
61
      disp = EXTRACT_DISP (instr);
65
      disp = EXTRACT_DISP (instr);
62
      break;
66
      break;
63
    case 31:
67
    case 31:
Lines 120-124 Link Here
120
124
121
  addr = (baseA + baseB) + disp;
125
  addr = (baseA + baseB) + disp;
122
  addr &= alignmask;
126
  addr &= alignmask;
127
123
  return (void *) addr;
128
  return (void *) addr;
124
}
129
}
(-)/var/tmp/portage/libsigsegv-2.1/work/libsigsegv-2.1/src/fault-macos-powerpc.h (-2 / +4 lines)
Lines 15-26 Link Here
15
   along with this program; if not, write to the Free Software Foundation,
15
   along with this program; if not, write to the Free Software Foundation,
16
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
16
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
17
17
18
#include <sys/ucontext.h>
18
#include "fault-macos-powerpc.c"
19
#include "fault-macos-powerpc.c"
19
20
20
#define SIGSEGV_FAULT_HANDLER_ARGLIST  int sig, int code, struct sigcontext *scp
21
#define SIGSEGV_FAULT_HANDLER_ARGLIST  int sig, siginfo_t *sip, struct sigcontext *scp
21
#define SIGSEGV_FAULT_ADDRESS  (unsigned long) get_fault_addr (scp)
22
#define SIGSEGV_FAULT_ADDRESS  (unsigned long) get_fault_addr (scp, sip->si_addr)
22
#define SIGSEGV_FAULT_CONTEXT  scp
23
#define SIGSEGV_FAULT_CONTEXT  scp
23
#if 0
24
#if 0
24
#define SIGSEGV_FAULT_STACKPOINTER  (&((unsigned int *) scp->sc_regs)[2])[1]
25
#define SIGSEGV_FAULT_STACKPOINTER  (&((unsigned int *) scp->sc_regs)[2])[1]
25
#endif
26
#endif
26
#define SIGSEGV_FAULT_STACKPOINTER  (scp->sc_regs ? ((unsigned int *) scp->sc_regs)[3] : scp->sc_sp)
27
#define SIGSEGV_FAULT_STACKPOINTER  (scp->sc_regs ? ((unsigned int *) scp->sc_regs)[3] : scp->sc_sp)
28
#define SIGSEGV_FAULT_ADDRESS_FROM_SIGINFO

Return to bug 67632