From owner-p4-projects@FreeBSD.ORG Fri May 23 20:50:13 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5151337B404; Fri, 23 May 2003 20:50:13 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 00C0C37B401 for ; Fri, 23 May 2003 20:50:13 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 897FE43F75 for ; Fri, 23 May 2003 20:50:12 -0700 (PDT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h4O3oC0U021430 for ; Fri, 23 May 2003 20:50:12 -0700 (PDT) (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h4O3oC2D021426 for perforce@freebsd.org; Fri, 23 May 2003 20:50:12 -0700 (PDT) Date: Fri, 23 May 2003 20:50:12 -0700 (PDT) Message-Id: <200305240350.h4O3oC2D021426@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Subject: PERFORCE change 31759 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 24 May 2003 03:50:14 -0000 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 #include -#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