diff --git a/elf/syscallas.S b/elf/syscallas.S new file mode 120000 index 0000000..107bd13 --- /dev/null +++ b/elf/syscallas.S @@ -0,0 +1 @@ +../syscallas.S \ No newline at end of file diff --git a/elf/syscalldb.c b/elf/syscalldb.c new file mode 120000 index 0000000..61dca52 --- /dev/null +++ b/elf/syscalldb.c @@ -0,0 +1 @@ +../syscalldb.c \ No newline at end of file diff --git a/syscallas.S b/syscallas.S new file mode 100644 index 0000000..07c6ffc --- /dev/null +++ b/syscallas.S @@ -0,0 +1,11 @@ +#include + +.weak syscalldb +.type syscalldb,@function + +syscalldb: + .cfi_startproc + syscall + retq + .cfi_endproc + .size syscalldb,.-syscalldb diff --git a/syscalldb.c b/syscalldb.c new file mode 100644 index 0000000..7a56162 --- /dev/null +++ b/syscalldb.c @@ -0,0 +1,16 @@ +#include "syscalldb.h" +#include +#include + +int register_library (const char * name, unsigned long load_address) + __attribute__((weak)); + +int register_library (const char * name, unsigned long load_address) +{ + return 0; +} + +long int glibc_option (const char * opt) +{ + return -EINVAL; +} diff --git a/syscalldb.h b/syscalldb.h new file mode 100644 index 0000000..2833def --- /dev/null +++ b/syscalldb.h @@ -0,0 +1,39 @@ +#ifndef _SYSCALLDB_H_ +#define _SYSCALLDB_H_ + +#ifdef __ASSEMBLER__ +.weak syscalldb +.type syscalldb, @function + +# if defined(PSEUDO) && defined(SYSCALL_NAME) && defined(SYSCALL_SYMBOL) +# define SYSCALLDB \ + subq $128, %rsp; \ + callq *syscalldb@GOTPCREL(%rip); \ + addq $128, %rsp +# else +# define SYSCALLDB \ + callq *syscalldb@GOTPCREL(%rip) +# endif + +#else /* !__ASSEMBLER__ */ +asm ( +".weak syscalldb\r\n" +".type syscalldb, @function\r\n"); + +#define SYSCALLDB \ + "subq $128, %%rsp\n\t" \ + "callq *syscalldb@GOTPCREL(%%rip)\n\t" \ + "addq $128, %%rsp\n\t" + +#define SYSCALLDB_ASM \ + "callq *syscalldb@GOTPCREL(%rip)\n\t" + +long int glibc_option (const char * opt); + +asm ( +".weak glibc_option\r\n" +".type glibc_option, @function\r\n"); + +#endif /* Assembler */ + +#endif /* _SYSCALLDB_H */ diff --git a/sysdeps/unix/sysv/linux/x86_64/syscalldb.h b/sysdeps/unix/sysv/linux/x86_64/syscalldb.h new file mode 120000 index 0000000..55ab305 --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86_64/syscalldb.h @@ -0,0 +1 @@ +../../../../../syscalldb.h \ No newline at end of file