Thread

  1. ecpg sqlca.h bug

    Rene Hogendoorn <hogend@nlr.nl> — 1999-11-23T15:36:51Z

    ============================================================================
                            POSTGRESQL BUG REPORT
    ============================================================================
    
    
    Your name		:	Rene Hogendoorn
    Your email address	:	hogend@nlr.nl
    
    
    System Configuration
    ---------------------
      Architecture (example: Intel Pentium)  	: Dec alpha
    
      Operating System (example: Linux 2.0.26 ELF) 	: DUNIX 4.0f
    
      PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3 
    
      Compiler used (example:  gcc 2.8.0)		: gcc 2.7.2.2
    
    
    Please enter a FULL description of your problem:
    ------------------------------------------------
    
    Compiling postgresql-6.5.3 on a Dec alpha DUNIX 4.0f with gcc fails
    due to postgresql-6.5.3/src/include/storage/s_lock.h.
    Basically, the '#if defined(__GNUC__)' assumes that glibc is used,
    which is plain wrong on OSF. Patch below.
    
    
    Please describe a way to repeat the problem.   Please try to provide a
    concise reproducible example, if at all possible: 
    ----------------------------------------------------------------------
    
    
    
    
    
    If you know how this problem might be fixed, list the solution below:
    ---------------------------------------------------------------------
    
    diff -c postgresql-6.5.3/src/include/storage/s_lock.h.orig postgresql-6.5.3/src/include/storage/s_lock.h
    *** postgresql-6.5.3/src/include/storage/s_lock.h.orig   Tue Nov 23 16:19:42 1999
    --- postgresql-6.5.3/src/include/storage/s_lock.h        Tue Nov 23 16:15:47 1999
    ***************
    *** 78,113 ****
       * All the gcc inlines
       */
      
    - #if defined(__alpha__)
    - #define TAS(lock) tas(lock)
    - #define S_UNLOCK(lock) { __asm__("mb"); *(lock) = 0; }
    - 
    - static __inline__ int
    - tas(volatile slock_t *lock)
    - {
    -    register slock_t _res;
    - 
    - __asm__("    ldq   $0, %0              \n\
    -                  bne   $0, 3f          \n\
    -                  ldq_l $0, %0            \n\
    -                  bne   $0, 3f          \n\
    -                  or    $31, 1, $0          \n\
    -                  stq_c $0, %0                  \n\
    -                  beq   $0, 2f              \n\
    -                  bis   $31, $31, %1        \n\
    -                  mb                                \n\
    -                  jmp   $31, 4f             \n\
    -               2: or    $31, 1, $0              \n\
    -               3: bis   $0, $0, %1          \n\
    -               4: nop      ": "=m"(*lock), "=r"(_res): :"0");
    - 
    -     return (int) _res;
    - }
    - 
    - #endif  /* __alpha__ */
    - 
    - 
    - 
      #if defined(__i386__)
      #define TAS(lock) tas(lock)
      
    --- 78,83 ----
    ***************
    *** 226,246 ****
       * All non gcc
       */
      
    - #if defined(__alpha__)
    - /*
    -  * OSF/1 (Alpha AXP)
    -  *
    -  * Note that slock_t on the Alpha AXP is msemaphore instead of char
    -  * (see storage/ipc.h).
    -  */
    - #define TAS(lock)    (msem_lock((lock), MSEM_IF_NOWAIT) < 0)
    - #define S_UNLOCK(lock) msem_unlock((lock), 0)
    - #define S_INIT_LOCK(lock)       msem_init((lock), MSEM_UNLOCKED)
    - #define S_LOCK_FREE(lock)     (!(lock)->msem_state)
    - #endif    /* __alpha__ */
    - 
    - 
    - 
      #if defined(NEED_I386_TAS_ASM)
      /* non gcc i386 based things */
      
    --- 196,201 ----
    ***************
    *** 271,276 ****
    --- 226,277 ----
      /*************************************************************************
       * These are the platforms that have common code for gcc and non-gcc
       */
    + 
    + #if defined(__alpha)
    + 
    + #if defined(__osf__)
    + /*
    +  * OSF/1 (Alpha AXP)
    +  *
    +  * Note that slock_t on the Alpha AXP is msemaphore instead of char
    +  * (see storage/ipc.h).
    +  */
    + #define TAS(lock)     (msem_lock((lock), MSEM_IF_NOWAIT) < 0)
    + #define S_UNLOCK(lock) msem_unlock((lock), 0)
    + #define S_INIT_LOCK(lock)       msem_init((lock), MSEM_UNLOCKED)
    + #define S_LOCK_FREE(lock)     (!(lock)->msem_state)
    + 
    + #else /* i.e. not __osf__ */
    + 
    + #define TAS(lock) tas(lock)
    + #define S_UNLOCK(lock) { __asm__("mb"); *(lock) = 0; }
    + 
    + static __inline__ int
    + tas(volatile slock_t *lock)
    + {
    +  register slock_t _res;
    + 
    + __asm__("    ldq   $0, %0              \n\
    +                  bne   $0, 3f          \n\
    +                  ldq_l $0, %0            \n\
    +                  bne   $0, 3f          \n\
    +                  or    $31, 1, $0          \n\
    +                  stq_c $0, %0                  \n\
    +                  beq   $0, 2f              \n\
    +                  bis   $31, $31, %1        \n\
    +                  mb                                \n\
    +                  jmp   $31, 4f             \n\
    +               2: or    $31, 1, $0              \n\
    +               3: bis   $0, $0, %1          \n\
    +               4: nop      ": "=m"(*lock), "=r"(_res): :"0");
    + 
    +     return (int) _res;
    + }
    + #endif /* __osf__ */
    + 
    + #endif /* __alpha */
    + 
    + 
      
      #if defined(__hpux)
      /*
    
    -- 
    
    R. A. Hogendoorn                                       E-mail: hogend@nlr.nl
    Information and Communication Technology Division      Tel. +31-527-24-8367 
    National Aerospace Laboratory, The Netherlands         Fax. +31-527-24-8210 
    
    
  2. Re: [PATCHES] ecpg sqlca.h bug

    Bruce Momjian <pgman@candle.pha.pa.us> — 1999-11-23T19:27:31Z

    Applied to current source tree only.  This will appear in 7.0.
    
    
    > ============================================================================
    >                         POSTGRESQL BUG REPORT
    > ============================================================================
    > 
    > 
    > Your name		:	Rene Hogendoorn
    > Your email address	:	hogend@nlr.nl
    > 
    > 
    > System Configuration
    > ---------------------
    >   Architecture (example: Intel Pentium)  	: Dec alpha
    > 
    >   Operating System (example: Linux 2.0.26 ELF) 	: DUNIX 4.0f
    > 
    >   PostgreSQL version (example: PostgreSQL-6.5.3): PostgreSQL-6.5.3 
    > 
    >   Compiler used (example:  gcc 2.8.0)		: gcc 2.7.2.2
    > 
    > 
    > Please enter a FULL description of your problem:
    > ------------------------------------------------
    > 
    > Compiling postgresql-6.5.3 on a Dec alpha DUNIX 4.0f with gcc fails
    > due to postgresql-6.5.3/src/include/storage/s_lock.h.
    > Basically, the '#if defined(__GNUC__)' assumes that glibc is used,
    > which is plain wrong on OSF. Patch below.
    > 
    > 
    > Please describe a way to repeat the problem.   Please try to provide a
    > concise reproducible example, if at all possible: 
    > ----------------------------------------------------------------------
    > 
    > 
    > 
    > 
    > 
    > If you know how this problem might be fixed, list the solution below:
    > ---------------------------------------------------------------------
    > 
    > diff -c postgresql-6.5.3/src/include/storage/s_lock.h.orig postgresql-6.5.3/src/include/storage/s_lock.h
    > *** postgresql-6.5.3/src/include/storage/s_lock.h.orig   Tue Nov 23 16:19:42 1999
    > --- postgresql-6.5.3/src/include/storage/s_lock.h        Tue Nov 23 16:15:47 1999
    > ***************
    > *** 78,113 ****
    >    * All the gcc inlines
    >    */
    >   
    > - #if defined(__alpha__)
    > - #define TAS(lock) tas(lock)
    > - #define S_UNLOCK(lock) { __asm__("mb"); *(lock) = 0; }
    > - 
    > - static __inline__ int
    > - tas(volatile slock_t *lock)
    > - {
    > -    register slock_t _res;
    > - 
    > - __asm__("    ldq   $0, %0              \n\
    > -                  bne   $0, 3f          \n\
    > -                  ldq_l $0, %0            \n\
    > -                  bne   $0, 3f          \n\
    > -                  or    $31, 1, $0          \n\
    > -                  stq_c $0, %0                  \n\
    > -                  beq   $0, 2f              \n\
    > -                  bis   $31, $31, %1        \n\
    > -                  mb                                \n\
    > -                  jmp   $31, 4f             \n\
    > -               2: or    $31, 1, $0              \n\
    > -               3: bis   $0, $0, %1          \n\
    > -               4: nop      ": "=m"(*lock), "=r"(_res): :"0");
    > - 
    > -     return (int) _res;
    > - }
    > - 
    > - #endif  /* __alpha__ */
    > - 
    > - 
    > - 
    >   #if defined(__i386__)
    >   #define TAS(lock) tas(lock)
    >   
    > --- 78,83 ----
    > ***************
    > *** 226,246 ****
    >    * All non gcc
    >    */
    >   
    > - #if defined(__alpha__)
    > - /*
    > -  * OSF/1 (Alpha AXP)
    > -  *
    > -  * Note that slock_t on the Alpha AXP is msemaphore instead of char
    > -  * (see storage/ipc.h).
    > -  */
    > - #define TAS(lock)    (msem_lock((lock), MSEM_IF_NOWAIT) < 0)
    > - #define S_UNLOCK(lock) msem_unlock((lock), 0)
    > - #define S_INIT_LOCK(lock)       msem_init((lock), MSEM_UNLOCKED)
    > - #define S_LOCK_FREE(lock)     (!(lock)->msem_state)
    > - #endif    /* __alpha__ */
    > - 
    > - 
    > - 
    >   #if defined(NEED_I386_TAS_ASM)
    >   /* non gcc i386 based things */
    >   
    > --- 196,201 ----
    > ***************
    > *** 271,276 ****
    > --- 226,277 ----
    >   /*************************************************************************
    >    * These are the platforms that have common code for gcc and non-gcc
    >    */
    > + 
    > + #if defined(__alpha)
    > + 
    > + #if defined(__osf__)
    > + /*
    > +  * OSF/1 (Alpha AXP)
    > +  *
    > +  * Note that slock_t on the Alpha AXP is msemaphore instead of char
    > +  * (see storage/ipc.h).
    > +  */
    > + #define TAS(lock)     (msem_lock((lock), MSEM_IF_NOWAIT) < 0)
    > + #define S_UNLOCK(lock) msem_unlock((lock), 0)
    > + #define S_INIT_LOCK(lock)       msem_init((lock), MSEM_UNLOCKED)
    > + #define S_LOCK_FREE(lock)     (!(lock)->msem_state)
    > + 
    > + #else /* i.e. not __osf__ */
    > + 
    > + #define TAS(lock) tas(lock)
    > + #define S_UNLOCK(lock) { __asm__("mb"); *(lock) = 0; }
    > + 
    > + static __inline__ int
    > + tas(volatile slock_t *lock)
    > + {
    > +  register slock_t _res;
    > + 
    > + __asm__("    ldq   $0, %0              \n\
    > +                  bne   $0, 3f          \n\
    > +                  ldq_l $0, %0            \n\
    > +                  bne   $0, 3f          \n\
    > +                  or    $31, 1, $0          \n\
    > +                  stq_c $0, %0                  \n\
    > +                  beq   $0, 2f              \n\
    > +                  bis   $31, $31, %1        \n\
    > +                  mb                                \n\
    > +                  jmp   $31, 4f             \n\
    > +               2: or    $31, 1, $0              \n\
    > +               3: bis   $0, $0, %1          \n\
    > +               4: nop      ": "=m"(*lock), "=r"(_res): :"0");
    > + 
    > +     return (int) _res;
    > + }
    > + #endif /* __osf__ */
    > + 
    > + #endif /* __alpha */
    > + 
    > + 
    >   
    >   #if defined(__hpux)
    >   /*
    > 
    > -- 
    > 
    > R. A. Hogendoorn                                       E-mail: hogend@nlr.nl
    > Information and Communication Technology Division      Tel. +31-527-24-8367 
    > National Aerospace Laboratory, The Netherlands         Fax. +31-527-24-8210 
    > 
    > ************
    > 
    > 
    
    
    -- 
      Bruce Momjian                        |  http://www.op.net/~candle
      maillist@candle.pha.pa.us            |  (610) 853-3000
      +  If your life is a hard drive,     |  830 Blythe Avenue
      +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026