Browse Source

deduplicate TP_ADJ logic out of each arch, replace with TP_OFFSET

the only part of TP_ADJ that was not uniquely determined by
TLS_ABOVE_TP was the 0x7000 adjustment used mainly on mips and powerpc
variants.
master
Rich Felker 6 years ago
parent
commit
ea71a9004e
  1. 1
      arch/aarch64/pthread_arch.h
  2. 1
      arch/arm/pthread_arch.h
  3. 2
      arch/i386/pthread_arch.h
  4. 2
      arch/m68k/pthread_arch.h
  5. 2
      arch/microblaze/pthread_arch.h
  6. 2
      arch/mips/pthread_arch.h
  7. 2
      arch/mips64/pthread_arch.h
  8. 2
      arch/mipsn32/pthread_arch.h
  9. 1
      arch/or1k/pthread_arch.h
  10. 2
      arch/powerpc/pthread_arch.h
  11. 2
      arch/powerpc64/pthread_arch.h
  12. 1
      arch/riscv64/pthread_arch.h
  13. 2
      arch/s390x/pthread_arch.h
  14. 1
      arch/sh/pthread_arch.h
  15. 2
      arch/x32/pthread_arch.h
  16. 2
      arch/x86_64/pthread_arch.h
  17. 10
      src/internal/pthread_impl.h

1
arch/aarch64/pthread_arch.h

@ -7,6 +7,5 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 16
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC pc

1
arch/arm/pthread_arch.h

@ -28,6 +28,5 @@ static inline pthread_t __pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 8
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC arm_pc

2
arch/i386/pthread_arch.h

@ -5,6 +5,4 @@ static inline struct pthread *__pthread_self()
return self;
}
#define TP_ADJ(p) (p)
#define MC_PC gregs[REG_EIP]

2
arch/m68k/pthread_arch.h

@ -6,8 +6,8 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000
#define MC_PC gregs[R_PC]

2
arch/microblaze/pthread_arch.h

@ -5,6 +5,4 @@ static inline struct pthread *__pthread_self()
return self;
}
#define TP_ADJ(p) (p)
#define MC_PC regs.pc

2
arch/mips/pthread_arch.h

@ -12,8 +12,8 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000
#define MC_PC pc

2
arch/mips64/pthread_arch.h

@ -12,8 +12,8 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000
#define MC_PC pc

2
arch/mipsn32/pthread_arch.h

@ -12,8 +12,8 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000
#define MC_PC pc

1
arch/or1k/pthread_arch.h

@ -13,6 +13,5 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC regs.pc

2
arch/powerpc/pthread_arch.h

@ -7,8 +7,8 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000
// the kernel calls the ip "nip", it's the first saved value after the 32

2
arch/powerpc64/pthread_arch.h

@ -7,8 +7,8 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000
// the kernel calls the ip "nip", it's the first saved value after the 32

1
arch/riscv64/pthread_arch.h

@ -7,7 +7,6 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)p + sizeof(struct pthread))
#define DTP_OFFSET 0x800

2
arch/s390x/pthread_arch.h

@ -9,6 +9,4 @@ static inline struct pthread *__pthread_self()
return self;
}
#define TP_ADJ(p) (p)
#define MC_PC psw.addr

1
arch/sh/pthread_arch.h

@ -7,7 +7,6 @@ static inline struct pthread *__pthread_self()
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 8
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC sc_pc

2
arch/x32/pthread_arch.h

@ -5,8 +5,6 @@ static inline struct pthread *__pthread_self()
return self;
}
#define TP_ADJ(p) (p)
#define MC_PC gregs[REG_RIP]
#define CANARY canary2

2
arch/x86_64/pthread_arch.h

@ -5,6 +5,4 @@ static inline struct pthread *__pthread_self()
return self;
}
#define TP_ADJ(p) (p)
#define MC_PC gregs[REG_RIP]

10
src/internal/pthread_impl.h

@ -105,10 +105,20 @@ struct __timer {
#define CANARY canary
#endif
#ifndef TP_OFFSET
#define TP_OFFSET 0
#endif
#ifndef DTP_OFFSET
#define DTP_OFFSET 0
#endif
#ifdef TLS_ABOVE_TP
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + TP_OFFSET)
#else
#define TP_ADJ(p) (p)
#endif
#ifndef tls_mod_off_t
#define tls_mod_off_t size_t
#endif

Loading…
Cancel
Save