~ubuntu-branches/ubuntu/precise/eglibc/precise-201308281639

« back to all changes in this revision

Viewing changes to ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2012-02-08 01:58:09 UTC
  • mfrom: (1.5.3) (288.1.12 precise)
  • Revision ID: package-import@ubuntu.com-20120208015809-ulscst7uteq3e22z
Tags: 2.15~pre6-0ubuntu10
Merge from Debian (r5151, 2.13-26).

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    .cfi_sections .debug_frame;                                         \
40
40
    cfi_startproc;                                                      \
41
41
    DO_CALL (syscall_name, args);                                       \
 
42
    cmn r0, $4096;                                                      \
42
43
    PSEUDO_RET;                                                         \
43
44
    cfi_endproc;                                                        \
44
45
  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;      \
47
48
    DOARGS_##args;                                                      \
48
49
    bne .Lpseudo_cancel;                                                \
49
50
    cfi_remember_state;                                                 \
50
 
    DO_CALL (syscall_name, 0);                                          \
 
51
    ldr r7, =SYS_ify (syscall_name);                                    \
 
52
    swi 0x0;                                                            \
51
53
    UNDOARGS_##args;                                                    \
52
54
    cmn r0, $4096;                                                      \
53
55
    PSEUDO_RET;                                                         \
54
56
    cfi_restore_state;                                                  \
55
57
  .Lpseudo_cancel:                                                      \
56
 
    .fnstart;                                                           \
 
58
    .fnstart;           /* matched by the .fnend in UNDOARGS below.  */ \
57
59
    DOCARGS_##args;     /* save syscall args etc. around CENABLE.  */   \
58
60
    CENABLE;                                                            \
59
61
    mov ip, r0;         /* put mask in safe place.  */                  \
60
62
    UNDOCARGS_##args;   /* restore syscall args.  */                    \
61
63
    ldr r7, =SYS_ify (syscall_name);                                    \
62
64
    swi 0x0;            /* do the call.  */                             \
63
 
    .fnend;             /* Past here we can't easily unwind.  */        \
64
65
    mov r7, r0;         /* save syscall return value.  */               \
65
66
    mov r0, ip;         /* get mask back.  */                           \
66
67
    CDISABLE;                                                           \
69
70
    UNDOARGS_##args;                                                    \
70
71
    cmn r0, $4096
71
72
 
72
 
/* DOARGS pushes four bytes on the stack for five arguments, eight bytes for
73
 
   six arguments, and nothing for fewer.  In order to preserve doubleword
 
73
/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for
 
74
   six arguments, and four bytes for fewer.  In order to preserve doubleword
74
75
   alignment, sometimes we must save an extra register.  */
75
76
 
76
77
# define RESTART_UNWIND \
77
78
  .fnend; \
78
79
  .fnstart; \
79
 
  .save {r7, lr}
 
80
  .save {r7}; \
 
81
  .save {lr}
80
82
 
81
83
# define DOCARGS_0 \
82
 
  stmfd sp!, {r7, lr}; \
83
 
  cfi_adjust_cfa_offset (8); \
84
 
  cfi_rel_offset (r7, 0); \
85
 
  cfi_rel_offset (lr, 4); \
86
 
  .save {r7, lr}
 
84
  .save {r7}; \
 
85
  str lr, [sp, #-4]!; \
 
86
  cfi_adjust_cfa_offset (4); \
 
87
  cfi_rel_offset (lr, 0); \
 
88
  .save {lr}
87
89
# define UNDOCARGS_0
88
90
# define RESTORE_LR_0 \
89
 
  ldmfd sp!, {r7, lr}; \
90
 
  cfi_adjust_cfa_offset (-8); \
91
 
  cfi_restore (r7); \
 
91
  ldr lr, [sp], #4; \
 
92
  cfi_adjust_cfa_offset (-4); \
92
93
  cfi_restore (lr)
93
94
 
94
95
# define DOCARGS_1 \
95
 
  stmfd sp!, {r0, r1, r7, lr}; \
96
 
  cfi_adjust_cfa_offset (16); \
97
 
  cfi_rel_offset (r7, 8); \
98
 
  cfi_rel_offset (lr, 12); \
99
 
  .save {r7, lr}; \
 
96
  .save {r7}; \
 
97
  stmfd sp!, {r0, r1, lr}; \
 
98
  cfi_adjust_cfa_offset (12); \
 
99
  cfi_rel_offset (lr, 8); \
 
100
  .save {lr}; \
100
101
  .pad #8
101
102
# define UNDOCARGS_1 \
102
103
  ldr r0, [sp], #8; \
106
107
  RESTORE_LR_0
107
108
 
108
109
# define DOCARGS_2 \
109
 
  stmfd sp!, {r0, r1, r7, lr}; \
110
 
  cfi_adjust_cfa_offset (16); \
111
 
  cfi_rel_offset (r7, 8); \
112
 
  cfi_rel_offset (lr, 12); \
113
 
  .save {r7, lr}; \
 
110
  .save {r7}; \
 
111
  stmfd sp!, {r0, r1, lr}; \
 
112
  cfi_adjust_cfa_offset (12); \
 
113
  cfi_rel_offset (lr, 8); \
 
114
  .save {lr}; \
114
115
  .pad #8
115
116
# define UNDOCARGS_2 \
116
117
  ldmfd sp!, {r0, r1}; \
120
121
  RESTORE_LR_0
121
122
 
122
123
# define DOCARGS_3 \
123
 
  stmfd sp!, {r0, r1, r2, r3, r7, lr}; \
124
 
  cfi_adjust_cfa_offset (24); \
125
 
  cfi_rel_offset (r7, 16); \
126
 
  cfi_rel_offset (lr, 20); \
127
 
  .save {r7, lr}; \
 
124
  .save {r7}; \
 
125
  stmfd sp!, {r0, r1, r2, r3, lr}; \
 
126
  cfi_adjust_cfa_offset (20); \
 
127
  cfi_rel_offset (lr, 16); \
 
128
  .save {lr}; \
128
129
  .pad #16
129
130
# define UNDOCARGS_3 \
130
131
  ldmfd sp!, {r0, r1, r2, r3}; \
134
135
  RESTORE_LR_0
135
136
 
136
137
# define DOCARGS_4 \
137
 
  stmfd sp!, {r0, r1, r2, r3, r7, lr}; \
138
 
  cfi_adjust_cfa_offset (24); \
139
 
  cfi_rel_offset (r7, 16); \
140
 
  cfi_rel_offset (lr, 20); \
141
 
  .save {r7, lr}; \
 
138
  .save {r7}; \
 
139
  stmfd sp!, {r0, r1, r2, r3, lr}; \
 
140
  cfi_adjust_cfa_offset (20); \
 
141
  cfi_rel_offset (lr, 16); \
 
142
  .save {lr}; \
142
143
  .pad #16
143
144
# define UNDOCARGS_4 \
144
145
  ldmfd sp!, {r0, r1, r2, r3}; \
149
150
 
150
151
/* r4 is only stmfd'ed for correct stack alignment.  */
151
152
# define DOCARGS_5 \
152
 
  .save {r4}; \
153
 
  stmfd sp!, {r0, r1, r2, r3, r4, r7, lr}; \
154
 
  cfi_adjust_cfa_offset (28); \
155
 
  cfi_rel_offset (r7, 20); \
156
 
  cfi_rel_offset (lr, 24); \
157
 
  .save {r7, lr}; \
 
153
  .save {r4, r7}; \
 
154
  stmfd sp!, {r0, r1, r2, r3, r4, lr}; \
 
155
  cfi_adjust_cfa_offset (24); \
 
156
  cfi_rel_offset (lr, 20); \
 
157
  .save {lr}; \
158
158
  .pad #20
159
159
# define UNDOCARGS_5 \
160
160
  ldmfd sp!, {r0, r1, r2, r3}; \
161
161
  cfi_adjust_cfa_offset (-16); \
162
162
  .fnend; \
163
163
  .fnstart; \
164
 
  .save {r4}; \
165
 
  .save {r7, lr}; \
 
164
  .save {r4, r7}; \
 
165
  .save {lr}; \
166
166
  .pad #4
167
167
# define RESTORE_LR_5 \
168
 
  ldmfd sp!, {r4, r7, lr}; \
169
 
  cfi_adjust_cfa_offset (-12); \
 
168
  ldmfd sp!, {r4, lr}; \
 
169
  cfi_adjust_cfa_offset (-8); \
170
170
  /* r4 will be marked as restored later.  */ \
171
 
  cfi_restore (r7); \
172
171
  cfi_restore (lr)
173
172
 
174
173
# define DOCARGS_6 \
175
 
  .save {r4, r5}; \
176
 
  stmfd sp!, {r0, r1, r2, r3, r7, lr}; \
177
 
  cfi_adjust_cfa_offset (24); \
178
 
  cfi_rel_offset (r7, 16); \
179
 
  cfi_rel_offset (lr, 20); \
180
 
  .save {r7, lr}; \
 
174
  .save {r4, r5, r7}; \
 
175
  stmfd sp!, {r0, r1, r2, r3, lr}; \
 
176
  cfi_adjust_cfa_offset (20); \
 
177
  cfi_rel_offset (lr, 16); \
 
178
  .save {lr}; \
181
179
  .pad #16
182
180
# define UNDOCARGS_6 \
183
181
  ldmfd sp!, {r0, r1, r2, r3}; \
184
182
  cfi_adjust_cfa_offset (-16); \
185
183
  .fnend; \
186
184
  .fnstart; \
187
 
  .save {r4, r5}; \
188
 
  .save {r7, lr}
 
185
  .save {r4, r5, r7}; \
 
186
  .save {lr};
189
187
# define RESTORE_LR_6 \
190
188
  RESTORE_LR_0
191
189