David,

After making your suggested changes and then doing a "make s_lock_test"
I get the following error messages.


[postgres@sparclinux buffer]$ make s_lock_test
gcc -g -I../../../include -I../../../backend   -O2  -I../.. -DS_LOCK_TEST=1 
s_lock.c -o s_lock_test
/tmp/cca10794.s: Assembler messages:
/tmp/cca10794.s:290: Error: Bad expression
/tmp/cca10794.s:290: Error: Missing ')' assumed
/tmp/cca10794.s:290: Error: Bad expression
/tmp/cca10794.s:290: Error: Missing ')' assumed
/tmp/cca10794.s:290: Error: Illegal operands
/tmp/cca10794.s:440: Error: Bad expression
/tmp/cca10794.s:440: Error: Missing ')' assumed
/tmp/cca10794.s:440: Error: Bad expression
/tmp/cca10794.s:440: Error: Missing ')' assumed
/tmp/cca10794.s:440: Error: Illegal operands
make: *** [s_lock_test] Error 1     

If I compile with -save-temps and look at the s_lock.s file I see, on
line 290:-

.stabn 68,0,131,.LM9-s_lock
.LM9:
.LL45:
        ldstub [[%i0]], %o0 <-------
.stabn 68,0,134,.LM10-s_lock
.LM10:
        and %o0,0xff,%o0          
        

The double square braces look strange to me so I removed the single
braces in s_lock.h.

The modified file compiles OK and in s_lock.s I can see:-

.stabn 68,0,131,.LM9-s_lock
.LM9:
.LL45:
        ldstub [%i0], %o0
.stabn 68,0,134,.LM10-s_lock
.LM10:
        and %o0,0xff,%o0   
        
Now I know absoloutely nothing whatsoever about SPARC (or gnu)
assembler so the code changes could result in nothing like a
test and set function but...

[postgres@sparclinux buffer]$ make s_lock_test
gcc -g -I../../../include -I../../../backend   -O2  -I../.. -DS_LOCK_TEST=1 
s_lock.c -o s_lock_test
./s_lock_test
S_LOCK_TEST: this will hang for a few minutes and then abort
             with a 'stuck spinlock' message if S_LOCK()
             and TAS() are working.

FATAL: s_lock(00020be8) at s_lock.c:215, stuck spinlock. Aborting.

FATAL: s_lock(00020be8) at s_lock.c:215, stuck spinlock. Aborting.
make: *** [s_lock_test] IOT trap/Abort (core dumped)
make: *** Deleting file `s_lock_test'    

Running s_lock_test does result in a hang for a few minutes
and then a "stuck spinlock" message so perhaps it's not all
that bad. (Not sure about the core dump though :-( )

Keith.




dg@illustra.com (David Gould)
> 
> > 
> > Hi hackers.
> > 
> > I am having problems with the new spinlock code on the SPARC linux
> > platform. (Latest CVSup)
> > 
> > The compiler doesn't seem to like the "asm" part of s_lock.h for (sparc)
> > 
> > Here's one of the compiles that fails.
> 
> Thank you for testing and reporting this. It is my fault of course, but as
> I don't have access to a sparc for testing I just did what I could. I am
> guessing here, but please apply the following to your pgsql and let me know
> what happens. Also, cd to src/storage/buffer and do 'make s_lock_test' as
> well.



Sun, 21 Jun 1998 16:59:04 +0100 (BST)
Keith Parks <emkxp01@mtcc.demon.co.uk>
Re: [HACKERS] s_lock.h problem on S/Linux
> 
> David,
> 
> After making your suggested changes and then doing a "make s_lock_test"
> I get the following error messages.
> 
> 
> [postgres@sparclinux buffer]$ make s_lock_test
> gcc -g -I../../../include -I../../../backend   -O2  -I../.. -DS_LOCK_TEST=1 
> s_lock.c -o s_lock_test
> /tmp/cca10794.s: Assembler messages:
> /tmp/cca10794.s:290: Error: Bad expression
> /tmp/cca10794.s:290: Error: Missing ')' assumed
> /tmp/cca10794.s:290: Error: Bad expression
> /tmp/cca10794.s:290: Error: Missing ')' assumed
> /tmp/cca10794.s:290: Error: Illegal operands
> /tmp/cca10794.s:440: Error: Bad expression
> /tmp/cca10794.s:440: Error: Missing ')' assumed
> /tmp/cca10794.s:440: Error: Bad expression
> /tmp/cca10794.s:440: Error: Missing ')' assumed
> /tmp/cca10794.s:440: Error: Illegal operands
> make: *** [s_lock_test] Error 1     
> 
> If I compile with -save-temps and look at the s_lock.s file I see, on
> line 290:-
> 
> .stabn 68,0,131,.LM9-s_lock
> .LM9:
> .LL45:
>         ldstub [[%i0]], %o0 <-------
> .stabn 68,0,134,.LM10-s_lock
> .LM10:
>         and %o0,0xff,%o0          
>         
> 
> The double square braces look strange to me so I removed the single
> braces in s_lock.h.
> 
> The modified file compiles OK and in s_lock.s I can see:-
> 
> .stabn 68,0,131,.LM9-s_lock
> .LM9:
> .LL45:
>         ldstub [%i0], %o0
> .stabn 68,0,134,.LM10-s_lock
> .LM10:
>         and %o0,0xff,%o0   
>         
> Now I know absoloutely nothing whatsoever about SPARC (or gnu)
> assembler so the code changes could result in nothing like a
> test and set function but...
> 
> [postgres@sparclinux buffer]$ make s_lock_test
> gcc -g -I../../../include -I../../../backend   -O2  -I../.. -DS_LOCK_TEST=1 
> s_lock.c -o s_lock_test
> ./s_lock_test
> S_LOCK_TEST: this will hang for a few minutes and then abort
>              with a 'stuck spinlock' message if S_LOCK()
>              and TAS() are working.
> 
> FATAL: s_lock(00020be8) at s_lock.c:215, stuck spinlock. Aborting.
> 
> FATAL: s_lock(00020be8) at s_lock.c:215, stuck spinlock. Aborting.
> make: *** [s_lock_test] IOT trap/Abort (core dumped)
> make: *** Deleting file `s_lock_test'    
> 
> Running s_lock_test does result in a hang for a few minutes
> and then a "stuck spinlock" message so perhaps it's not all
> that bad. (Not sure about the core dump though :-( )
> 
> Keith.

The core dump is expected. When a stuck spinlock is detected abort() is called
which makes the core dump. So it looks like it is working.

If you would, please send me the s_lock.s file and a diff for you changes
I will look at the generated code and if it looks ok will submit the patch.

Thanks,

-dg

David Gould            dg@illustra.com           510.628.3783 or 510.305.9468 
Informix Software  (No, really)         300 Lakeside Drive  Oakland, CA 94612
"Don't worry about people stealing your ideas.  If your ideas are any
 good, you'll have to ram them down people's throats." -- Howard Aiken

Sun, 21 Jun 1998 13:50:45 -0700 (PDT)
dg@illustra.com (David Gould)
Re: [HACKERS] s_lock.h problem on S/Linux