Обсуждение: 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__ */