Revision b8076a74 linux-user/signal.c

b/linux-user/signal.c
26 26
#include <errno.h>
27 27
#include <sys/ucontext.h>
28 28

  
29
#ifdef __ia64__
30
#undef uc_mcontext
31
#undef uc_sigmask
32
#undef uc_stack
33
#undef uc_link
34
#endif 
35

  
36 29
#include "qemu.h"
37 30

  
38 31
//#define DEBUG_SIGNAL
......
557 550
} target_stack_t;
558 551

  
559 552
struct target_ucontext {
560
        target_ulong	  uc_flags;
561
	target_ulong      uc_link;
562
	target_stack_t	  uc_stack;
563
	struct target_sigcontext uc_mcontext;
564
	target_sigset_t	  uc_sigmask;	/* mask last for extensibility */
553
        target_ulong	  tuc_flags;
554
	target_ulong      tuc_link;
555
	target_stack_t	  tuc_stack;
556
	struct target_sigcontext tuc_mcontext;
557
	target_sigset_t	  tuc_sigmask;	/* mask last for extensibility */
565 558
};
566 559

  
567 560
struct sigframe
......
743 736
		goto give_sigsegv;
744 737

  
745 738
	/* Create the ucontext.  */
746
	err |= __put_user(0, &frame->uc.uc_flags);
747
	err |= __put_user(0, &frame->uc.uc_link);
748
	err |= __put_user(/*current->sas_ss_sp*/ 0, &frame->uc.uc_stack.ss_sp);
739
	err |= __put_user(0, &frame->uc.tuc_flags);
740
	err |= __put_user(0, &frame->uc.tuc_link);
741
	err |= __put_user(/*current->sas_ss_sp*/ 0,
742
			  &frame->uc.tuc_stack.ss_sp);
749 743
	err |= __put_user(/* sas_ss_flags(regs->esp) */ 0,
750
			  &frame->uc.uc_stack.ss_flags);
751
	err |= __put_user(/* current->sas_ss_size */ 0, &frame->uc.uc_stack.ss_size);
752
	err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->fpstate,
744
			  &frame->uc.tuc_stack.ss_flags);
745
	err |= __put_user(/* current->sas_ss_size */ 0,
746
			  &frame->uc.tuc_stack.ss_size);
747
	err |= setup_sigcontext(&frame->uc.tuc_mcontext, &frame->fpstate,
753 748
			        env, set->sig[0]);
754 749
        for(i = 0; i < TARGET_NSIG_WORDS; i++) {
755
            if (__put_user(set->sig[i], &frame->uc.uc_sigmask.sig[i]))
750
            if (__put_user(set->sig[i], &frame->uc.tuc_sigmask.sig[i]))
756 751
                goto give_sigsegv;
757 752
        }
758 753

  
......
880 875
	if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
881 876
		goto badframe;
882 877
#endif
883
        target_to_host_sigset(&set, &frame->uc.uc_sigmask);
878
        target_to_host_sigset(&set, &frame->uc.tuc_sigmask);
884 879
        sigprocmask(SIG_SETMASK, &set, NULL);
885 880
	
886
	if (restore_sigcontext(env, &frame->uc.uc_mcontext, &eax))
881
	if (restore_sigcontext(env, &frame->uc.tuc_mcontext, &eax))
887 882
		goto badframe;
888 883

  
889 884
#if 0
890
	if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
885
	if (__copy_from_user(&st, &frame->uc.tuc_stack, sizeof(st)))
891 886
		goto badframe;
892 887
	/* It is more difficult to avoid calling this function than to
893 888
	   call it and ignore errors.  */
......
933 928
} target_stack_t;
934 929

  
935 930
struct target_ucontext {
936
    target_ulong uc_flags;
937
    target_ulong uc_link;
938
    target_stack_t uc_stack;
939
    struct target_sigcontext uc_mcontext;
940
    target_sigset_t  uc_sigmask;	/* mask last for extensibility */
931
    target_ulong tuc_flags;
932
    target_ulong tuc_link;
933
    target_stack_t tuc_stack;
934
    struct target_sigcontext tuc_mcontext;
935
    target_sigset_t  tuc_sigmask;	/* mask last for extensibility */
941 936
};
942 937

  
943 938
struct sigframe
......
1135 1130
	/* Clear all the bits of the ucontext we don't use.  */
1136 1131
	err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext));
1137 1132

  
1138
	err |= setup_sigcontext(&frame->uc.uc_mcontext, /*&frame->fpstate,*/
1133
	err |= setup_sigcontext(&frame->uc.tuc_mcontext, /*&frame->fpstate,*/
1139 1134
				env, set->sig[0]);
1140 1135
        for(i = 0; i < TARGET_NSIG_WORDS; i++) {
1141
            if (__put_user(set->sig[i], &frame->uc.uc_sigmask.sig[i]))
1136
            if (__put_user(set->sig[i], &frame->uc.tuc_sigmask.sig[i]))
1142 1137
                return;
1143 1138
        }
1144 1139

  
......
1253 1248
	if (verify_area(VERIFY_READ, frame, sizeof (*frame)))
1254 1249
		goto badframe;
1255 1250
#endif
1256
        target_to_host_sigset(&host_set, &frame->uc.uc_sigmask);
1251
        target_to_host_sigset(&host_set, &frame->uc.tuc_sigmask);
1257 1252
        sigprocmask(SIG_SETMASK, &host_set, NULL);
1258 1253

  
1259
	if (restore_sigcontext(env, &frame->uc.uc_mcontext))
1254
	if (restore_sigcontext(env, &frame->uc.tuc_mcontext))
1260 1255
		goto badframe;
1261 1256

  
1262 1257
#if 0

Also available in: Unified diff