Date: Fri, 23 May 2003 20:50:12 -0700 (PDT) From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 31759 for review Message-ID: <200305240350.h4O3oC2D021426@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=31759 Change 31759 by peter@peter_hammer on 2003/05/23 20:49:49 Oh, I was feeling so smug when I removed the PIC ifdefs. The only problem was that it was illegal and gas/ld didn't complain about it. GRRR. Affected files ... .. //depot/projects/hammer/lib/libc/amd64/SYS.h#4 edit .. //depot/projects/hammer/lib/libc/amd64/sys/brk.S#5 edit .. //depot/projects/hammer/lib/libc/amd64/sys/exect.S#6 edit .. //depot/projects/hammer/lib/libc/amd64/sys/ptrace.S#5 edit .. //depot/projects/hammer/lib/libc/amd64/sys/sbrk.S#5 edit .. //depot/projects/hammer/lib/libc/amd64/sys/setlogin.S#5 edit .. //depot/projects/hammer/lib/libc/amd64/sys/vfork.S#4 edit Differences ... ==== //depot/projects/hammer/lib/libc/amd64/SYS.h#4 (text+ko) ==== @@ -40,13 +40,24 @@ #include <sys/syscall.h> #include <machine/asm.h> -#define SYSCALL(x) 2: jmp PIC_PLT(HIDENAME(cerror)); \ +#ifdef PIC +#define SYSCALL(x) 2: movq PIC_GOT(HIDENAME(cerror)),%rcx; \ + jmp *%rcx; \ + ENTRY(__CONCAT(__sys_,x)); \ + .weak CNAME(x); \ + .set CNAME(x),CNAME(__CONCAT(__sys_,x)); \ + .weak CNAME(__CONCAT(_,x)); \ + .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ + mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2b +#else +#define SYSCALL(x) 2: jmp HIDENAME(cerror); \ ENTRY(__CONCAT(__sys_,x)); \ .weak CNAME(x); \ .set CNAME(x),CNAME(__CONCAT(__sys_,x)); \ .weak CNAME(__CONCAT(_,x)); \ .set CNAME(__CONCAT(_,x)),CNAME(__CONCAT(__sys_,x)); \ mov __CONCAT($SYS_,x),%rax; KERNCALL; jb 2b +#endif #define RSYSCALL(x) SYSCALL(x); ret ==== //depot/projects/hammer/lib/libc/amd64/sys/brk.S#5 (text+ko) ==== @@ -51,17 +51,36 @@ ENTRY(brk) pushq %rdi movq %rdi,%rax - cmpq %rax,PIC_GOT(HIDENAME(minbrk)) +#ifdef PIC + movq PIC_GOT(HIDENAME(minbrk)),%rdx + cmpq %rax,(%rdx) +#else + cmpq %rax,HIDENAME(minbrk)(%rip) +#endif jbe ok - movq PIC_GOT(HIDENAME(minbrk)),%rdi +#ifdef PIC + movq (%rdx),%rdi +#else + movq HIDENAME(minbrk)(%rip),%rdi +#endif ok: movq $SYS_break,%rax KERNCALL jb err movq 0(%rsp),%rax - movq %rax,PIC_GOT(HIDENAME(curbrk)) +#ifdef PIC + movq PIC_GOT(HIDENAME(curbrk)),%rdx + movq %rax,(%rdx) +#else + movq %rax,HIDENAME(curbrk)(%rip) +#endif movq $0,%rax popq %rdi ret err: - jmp PIC_PLT(HIDENAME(cerror)) +#ifdef PIC + movq PIC_GOT(HIDENAME(cerror)),%rdx + jmp *%rdx +#else + jmp HIDENAME(cerror) +#endif ==== //depot/projects/hammer/lib/libc/amd64/sys/exect.S#6 (text+ko) ==== @@ -51,4 +51,9 @@ pushq %r8 popfq KERNCALL - jmp PIC_PLT(HIDENAME(cerror)) /* exect(file, argv, env); */ +#ifdef PIC + movq PIC_GOT(HIDENAME(cerror)),%rdx + jmp *%rdx +#else + jmp HIDENAME(cerror) +#endif ==== //depot/projects/hammer/lib/libc/amd64/sys/ptrace.S#5 (text+ko) ==== @@ -44,10 +44,20 @@ ENTRY(ptrace) xorl %eax,%eax - movl %eax,PIC_GOT(CNAME(errno)) +#ifdef PIC + movq PIC_GOT(CNAME(errno)),%r8 + movl %eax,(%r8) +#else + movl %eax,CNAME(errno)(%rip) +#endif mov $SYS_ptrace,%eax KERNCALL jb err ret err: - jmp PIC_PLT(HIDENAME(cerror)) +#ifdef PIC + movq PIC_GOT(HIDENAME(cerror)),%rdx + jmp *%rdx +#else + jmp HIDENAME(cerror) +#endif ==== //depot/projects/hammer/lib/libc/amd64/sys/sbrk.S#5 (text+ko) ==== @@ -54,19 +54,38 @@ ENTRY(sbrk) pushq %rdi movq %rdi,%rcx - movq PIC_GOT(HIDENAME(curbrk)),%rax +#ifdef PIC + movq PIC_GOT(HIDENAME(curbrk)),%rdx + movq (%rdx),%rax +#else + movq HIDENAME(curbrk)(%rip),%rax +#endif testq %rcx,%rcx jz back addq %rax,%rdi mov $SYS_break,%eax KERNCALL jb err - movq PIC_GOT(HIDENAME(curbrk)),%rax +#ifdef PIC + movq PIC_GOT(HIDENAME(curbrk)),%rdx + movq (%rdx),%rax +#else + movq HIDENAME(curbrk)(%rip),%rax +#endif movq 0(%rsp), %rcx - addq %rcx,PIC_GOT(HIDENAME(curbrk)) +#ifdef PIC + addq %rcx,(%rdx) +#else + addq %rcx,HIDENAME(curbrk)(%rip) +#endif back: addq $8, %rsp ret err: addq $8, %rsp - jmp PIC_PLT(HIDENAME(cerror)) +#ifdef PIC + movq PIC_GOT(HIDENAME(cerror)),%rdx + jmp *%rdx +#else + jmp HIDENAME(cerror) +#endif ==== //depot/projects/hammer/lib/libc/amd64/sys/setlogin.S#5 (text+ko) ==== @@ -45,5 +45,10 @@ .globl CNAME(_logname_valid) /* in _getlogin() */ SYSCALL(setlogin) - movl $0,PIC_GOT(CNAME(_logname_valid)) +#ifdef PIC + movq PIC_GOT(CNAME(_logname_valid)),%rdx + movl $0,(%rdx) +#else + movl $0,CNAME(_logname_valid)(%rip) +#endif ret /* setlogin(name) */ ==== //depot/projects/hammer/lib/libc/amd64/sys/vfork.S#4 (text+ko) ==== @@ -53,5 +53,10 @@ jb 1f jmp *%rsi 1: - pushq %rcx - jmp PIC_PLT(HIDENAME(cerror)) + pushq %rsi +#ifdef PIC + movq PIC_GOT(HIDENAME(cerror)),%rdx + jmp *%rdx +#else + jmp HIDENAME(cerror) +#endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200305240350.h4O3oC2D021426>