Skip to content

Commit 6d66715

Browse files
committed
Rewrites internal_syscall macros to call the syscall function via PLT
1 parent 758599b commit 6d66715

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

sysdeps/unix/sysv/linux/x86_64/sysdep.h

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,13 @@
210210
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
211211
(long int) resultvar; \
212212
})
213+
#undef internal_syscall0
214+
#define internal_syscall0(number, dummy...) \
215+
({ \
216+
extern long syscall(long n, ...); \
217+
unsigned long int resultvar = syscall(number); \
218+
(long int)resultvar; \
219+
})
213220

214221
#undef internal_syscall1
215222
#define internal_syscall1(number, arg1) \
@@ -224,6 +231,13 @@
224231
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
225232
(long int) resultvar; \
226233
})
234+
#undef internal_syscall1
235+
#define internal_syscall1(number, arg1) \
236+
({ \
237+
extern long syscall(long n, ...); \
238+
unsigned long int resultvar = syscall(number, arg1); \
239+
(long int)resultvar; \
240+
})
227241

228242
#undef internal_syscall2
229243
#define internal_syscall2(number, arg1, arg2) \
@@ -240,6 +254,13 @@
240254
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
241255
(long int) resultvar; \
242256
})
257+
#undef internal_syscall2
258+
#define internal_syscall2(number, arg1, arg2) \
259+
({ \
260+
extern long syscall(long n, ...); \
261+
unsigned long int resultvar = syscall(number, arg1, arg2); \
262+
(long int)resultvar; \
263+
})
243264

244265
#undef internal_syscall3
245266
#define internal_syscall3(number, arg1, arg2, arg3) \
@@ -258,6 +279,13 @@
258279
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
259280
(long int) resultvar; \
260281
})
282+
#undef internal_syscall3
283+
#define internal_syscall3(number, arg1, arg2, arg3) \
284+
({ \
285+
extern long syscall(long n, ...); \
286+
unsigned long int resultvar = syscall(number, arg1, arg2, arg3); \
287+
(long int)resultvar; \
288+
})
261289

262290
#undef internal_syscall4
263291
#define internal_syscall4(number, arg1, arg2, arg3, arg4) \
@@ -278,6 +306,13 @@
278306
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
279307
(long int) resultvar; \
280308
})
309+
#undef internal_syscall4
310+
#define internal_syscall4(number, arg1, arg2, arg3, arg4) \
311+
({ \
312+
extern long syscall(long n, ...); \
313+
unsigned long int resultvar = syscall(number, arg1, arg2, arg3, arg4); \
314+
(long int)resultvar; \
315+
})
281316

282317
#undef internal_syscall5
283318
#define internal_syscall5(number, arg1, arg2, arg3, arg4, arg5) \
@@ -301,6 +336,14 @@
301336
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
302337
(long int) resultvar; \
303338
})
339+
#undef internal_syscall5
340+
#define internal_syscall5(number, arg1, arg2, arg3, arg4, arg5) \
341+
({ \
342+
extern long syscall(long n, ...); \
343+
unsigned long int resultvar = \
344+
syscall(number, arg1, arg2, arg3, arg4, arg5); \
345+
(long int)resultvar; \
346+
})
304347

305348
#undef internal_syscall6
306349
#define internal_syscall6(number, arg1, arg2, arg3, arg4, arg5, arg6) \
@@ -326,7 +369,14 @@
326369
: "memory", REGISTERS_CLOBBERED_BY_SYSCALL); \
327370
(long int) resultvar; \
328371
})
329-
372+
#undef internal_syscall6
373+
#define internal_syscall6(number, arg1, arg2, arg3, arg4, arg5, arg6) \
374+
({ \
375+
extern long syscall(long n, ...); \
376+
unsigned long int resultvar = \
377+
syscall(number, arg1, arg2, arg3, arg4, arg5, arg6); \
378+
(long int)resultvar; \
379+
})
330380

331381
# define VDSO_NAME "LINUX_2.6"
332382
# define VDSO_HASH 61765110

0 commit comments

Comments
 (0)