Messages in this thread | | | From | "dada1" <> | Subject | Re: Intel P6 vs P7 system call performance | Date | Tue, 17 Dec 2002 12:17:42 +0100 |
| |
> For the libc DSO I had to play some dirty tricks. The x86 CPU has no > absolute call. The variant with an immediate parameter is a relative > jump. Only when jumping through a register or memory location is it > possible to jump to an absolute address. To be clear, if I have > > call 0xfffff000 > > in a DSO which is loaded at address 0x80000000 the jumps ends at > 0x7fffffff. The problem is that the static linker doesn't know the load > address. We could of course have the dynamic linker fix up the > addresses but this is plain stupid. It would mean fixing up a lot of > places and making of those pages covered non-sharable. >
You could have only one routine that would need a relocation / patch at dynamic linking stage :
absolute_syscall: jmp 0xfffff000
Then all syscalls routine could use :
getpid: ... call absolute_syscall ... instead of "call 0xfffff000"
If the kernel doesnt support the 0xfffff000 page, you could patch absolute_syscall (if it resides in .data section) with : absolute_syscall: int 0x80 ret (3 bytes instead of 5 bytes)
See you
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |