Обсуждение: Port Bug Report: PostgreSQL does not compile on ARM systems
============================================================================
                        POSTGRESQL BUG REPORT TEMPLATE
============================================================================
Your name        : Andrew McMurry
Your email address    : a.mcmurry1@physics.ox.ac.uk
Category        : install: compile
Severity        : critical
Summary: PostgreSQL does not compile on ARM systems
System Configuration
--------------------
  Operating System   : NetBSD/arm32 1.3-current
  PostgreSQL version : 6.4.2
  Compiler used      : ecgs-1.1.1
Hardware:
---------
CATS (StrongARM 110 processor), 128MB RAM
Versions of other tools:
------------------------
--------------------------------------------------------------------------
Problem Description:
--------------------
The PostgreSQL sources fail to compile on NetBSD/arm32
systems due to the lack of a TAS function.
--------------------------------------------------------------------------
Test Case:
----------
--------------------------------------------------------------------------
Solution:
---------
I am sorry that this isn't a proper patch.
Add the following into src/include/storage/s_lock.h:
#if defined(__arm32__)
#define TAS(lock) tas(lock)
static __inline__ int
tas(volatile slock_t *lock)
{
        register slock_t _res = 1;
__asm__("swpb %0, %0, [%3]": "=r"(_res), "=m"(*lock):"0"(_res), "r" (lock));
        return (int) _res;
}
#endif   /* __arm32__ */
--------------------------------------------------------------------------
			
		> Problem Description:
> --------------------
> The PostgreSQL sources fail to compile on NetBSD/arm32
> systems due to the lack of a TAS function.
> Solution:
> ---------
> I am sorry that this isn't a proper patch.
I am too :(
So, if someone were to add this TAS capability, does everything build
properly? Do the regression tests look reasonable? Do we have a fully
supported platform with all the bells and whistles??
I'd like to add your platform to the supported list for the upcoming
release...
                       - Tom
> Add the following into src/include/storage/s_lock.h:
>
> #if defined(__arm32__)
> #define TAS(lock) tas(lock)
>
> static __inline__ int
> tas(volatile slock_t *lock)
> {
>         register slock_t _res = 1;
>
> __asm__("swpb %0, %0, [%3]": "=r"(_res), "=m"(*lock):"0"(_res), "r" (lock));
>         return (int) _res;
> }
>
> #endif   /* __arm32__ */