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.