NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-powerpc/43009: lib/libc/arch/powerpc64/gen/__sigsetjmp14.S uses lmd/stmd macros



>Number:         43009
>Category:       port-powerpc
>Synopsis:       lib/libc/arch/powerpc64/gen/__sigsetjmp14.S uses lmd/stmd 
>macros
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    port-powerpc-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Mar 19 11:30:00 +0000 2010
>Originator:     Dennis Ferguson
>Release:        very recent 5.99.24
>Organization:
>Environment:
NetBSD acer.hk.akit-ferguson.com 5.99.24 NetBSD 5.99.24 (GENERIC) #0: Sun Mar 
14 17:25:30 HKT 2010  
dennis%acer.hk.akit-ferguson.com@localhost:/usr/obj/sys/arch/amd64/compile/GENERIC
 amd64
>Description:
I've been working through problems building with the
current powerpc64 support by doing macppc64 builds and
attempting to repair what I find.  When it attempts to
assemble lib/libc/arch/powerpc64/gen/__sigsetjmp14.S it
gets this:

#   compile  libc/__sigsetjmp14.o
/usr/src/obj/tooldir.Darwin-10.2.0-i386/bin/powerpc64--netbsd-gcc  
-I/usr/src/lib/libc/arch/powerpc64 -nostdinc -idirafter 
/usr/src/obj/destdir.macppc/usr/include  -fstack-protector -Wstack-protector 
--param ssp-buffer-size=1  -D_LIBC -DLIBC_SCCS -DSYSLIBC_SCCS -D_REENTRANT 
-DHESIOD -DINET6 -DNLS -DYP -I/usr/src/lib/libc/include -I/usr/src/lib/libc 
-I/usr/src/sys -I/usr/src/lib/libc/compat/stdlib 
-I/usr/src/lib/libc/compat/../stdlib 
-I/usr/src/lib/libc/../../common/lib/libc/quad 
-I/usr/src/lib/libc/../../common/lib/libc/string 
-I/usr/src/lib/libc/../../common/lib/libc/arch/powerpc64/string 
-D__DBINTERFACE_PRIVATE -I/usr/src/libexec/ld.elf_so -I/usr/src/lib/libc/dlfcn 
-I/usr/src/lib/libc/gdtoa -DNO_FENV_H -I/usr/src/lib/libc/arch/powerpc64/gdtoa 
-DWITH_RUNE -I/usr/src/lib/libc -DPOSIX_MISTAKE -DCOMPAT__RES -DUSE_POLL 
-DPORTMAP -DWIDE_DOUBLE -DALL_STATE -DUSG_COMPAT  -D_FORTIFY_SOURCE=2 -nostdinc 
-isystem /usr/src/obj/destdir.macppc/usr/include -c -traditional-cpp    
/usr/src/l
 ib/libc/arch/powerpc64/gen/__sigsetjmp14.S -o __sigsetjmp14.o
/usr/src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S: Assembler messages:
/usr/src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S:25: Error: Unrecognized 
opcode: `stmd'
/usr/src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S:30: Error: Unrecognized 
opcode: `lmd'

*** Failed target:  __sigsetjmp14.o

stmd and lmd are macros which are defined in the kernel environment
(i.e. #ifdef _KERNEL) only.
>How-To-Repeat:
Do a:

    MACHINE=macppc64 ./build.sh distribution
>Fix:
Replace them with equivalent code.  Both __setjmp14.S and
_setjmp.S had the same problem at some point, and were fixed
by different people at different times in different ways.  This
patch attempts to fix __sigsetjmp14.S in a manner equivalent
to _setjmp.S:

Index: __sigsetjmp14.S
===================================================================
RCS file: /cvsroot/src/lib/libc/arch/powerpc64/gen/__sigsetjmp14.S,v
retrieving revision 1.1
diff -u -r1.1 __sigsetjmp14.S
--- __sigsetjmp14.S     7 Jul 2006 21:07:35 -0000       1.1
+++ __sigsetjmp14.S     19 Mar 2010 09:10:01 -0000
@@ -22,12 +22,20 @@
        mfcr    %r12
        mr      %r10,%r1
        mr      %r9,%r2
-       stmd    7, 0(%r6)               # save r7-r31
+       i = 0
+       .rept   32-7
+       std     7+i,i*8(%r6)            # save r7-r31
+       i = i + 1
+       .endr
        li      %r3,0
        blr
 
 ENTRY(__siglongjmp14)
-       lmd     7,0(%r3)                # load r7-r31
+       i = 0
+       .rept   32-7
+       ld      7+i,i*8(%r3)            # load r7-r31
+       i = i + 1
+       .endr
        mr      %r6,%r4
        mtlr    %r11
        mtcr    %r12



Home | Main Index | Thread Index | Old Index