buserror on osx.4
Franklin Kingma
franklin at fourdigits.nl
Thu Dec 21 12:01:54 MSK 2006
On Dec 21, 2006, at 9:59 AM, Igor Sysoev wrote:
> On Thu, 21 Dec 2006, Igor Sysoev wrote:
>
>>> (gdb) disassemble ___compare_and_swap32
>>> Dump of assembler code for function ___compare_and_swap32:
>>> 0xffff8080 <___compare_and_swap32+0>: lwarx r7,0,r5
>>> 0xffff8084 <___compare_and_swap32+4>: cmplw r7,r3
>>> 0xffff8088 <___compare_and_swap32+8>: bne- 0xffff809c
>>> <___compare_and_swap32+28>
>>> 0xffff808c <___compare_and_swap32+12>: stwcx. r4,0,r5
>>> 0xffff8090 <___compare_and_swap32+16>: bne- 0xffff8080
>>> <___compare_and_swap32>
>>> 0xffff8094 <___compare_and_swap32+20>: li r3,1
>>> 0xffff8098 <___compare_and_swap32+24>: blr
>>> 0xffff809c <___compare_and_swap32+28>: li r3,0
>>> 0xffff80a0 <___compare_and_swap32+32>: blr
>>> 0xffff80a4 <___compare_and_swap32+36>: .long 0x0
>>> 0xffff80a8 <___compare_and_swap32+40>: .long 0x0
>>> 0xffff80ac <___compare_and_swap32+44>: .long 0x0
>>> 0xffff80b0 <___compare_and_swap32+48>: .long 0x0
>>> 0xffff80b4 <___compare_and_swap32+52>: .long 0x0
>>> 0xffff80b8 <___compare_and_swap32+56>: .long 0x0
>>> 0xffff80bc <___compare_and_swap32+60>: .long 0x0
>>> End of assembler dump.
>>
>> OK, then I will do atomic operation using MacOSX builtin
>> OSAtomicCompareAndSwap32Barrier()
>
> Just to be sure that OSAtomicCompareAndSwap32() does not cycle forever
> (as it may if lwarx/stwcx pair does not work) on your Mac compile
> this program:
>
> -----------
> #include <libkern/OSAtomic.h>
>
> static int32_t test;
>
> int main()
> {
> int rc;
>
> rc = OSAtomicCompareAndSwap32(0, 1, &test);
>
> printf("rc: %d, test: %d\n", rc, test);
> }
> -----------
>
> using
>
> cc -o q q.c
>
> and run, it should show:
>
> rc: 1, test: 1
pluks:~ franklin$ cc -o q q.c
q.c: In function 'main':
q.c:11: warning: incompatible implicit declaration of built-in
function 'printf'
pluks:~ franklin$ ./q
rc: 1, test: 1
More information about the nginx
mailing list