Fri Jun 3 15:53:18 2016 UTC ()
Fix compilation on non-x86


(christos)
diff -r1.2 -r1.3 src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cc

cvs diff -r1.2 -r1.3 src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cc (expand / switch to unified diff)

--- src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cc 2016/05/31 20:47:25 1.2
+++ src/external/gpl3/gcc/dist/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cc 2016/06/03 15:53:18 1.3
@@ -226,70 +226,80 @@ uptr ThreadSelfOffset() { @@ -226,70 +226,80 @@ uptr ThreadSelfOffset() {
226uptr ThreadSelf() { 226uptr ThreadSelf() {
227 uptr descr_addr; 227 uptr descr_addr;
228# if defined(__i386__) 228# if defined(__i386__)
229 asm("mov %%gs:%c1,%0" : "=r"(descr_addr) : "i"(kThreadSelfOffset)); 229 asm("mov %%gs:%c1,%0" : "=r"(descr_addr) : "i"(kThreadSelfOffset));
230# elif defined(__x86_64__) 230# elif defined(__x86_64__)
231 asm("mov %%fs:%c1,%0" : "=r"(descr_addr) : "i"(kThreadSelfOffset)); 231 asm("mov %%fs:%c1,%0" : "=r"(descr_addr) : "i"(kThreadSelfOffset));
232# else 232# else
233# error "unsupported CPU arch" 233# error "unsupported CPU arch"
234# endif 234# endif
235 return descr_addr; 235 return descr_addr;
236} 236}
237#endif // (defined(__x86_64__) || defined(__i386__)) && SANITIZER_LINUX 237#endif // (defined(__x86_64__) || defined(__i386__)) && SANITIZER_LINUX
238 238
239#if SANITIZER_FREEBSD || SANITIZER_NETBSD 239#if SANITIZER_FREEBSD
240static void **ThreadSelfSegbase() { 240static void **ThreadSelfSegbase() {
241 void **segbase = 0; 241 void **segbase = 0;
242# if defined(__i386__) 242# if defined(__i386__)
243 // sysarch(I386_GET_GSBASE, segbase); 243 // sysarch(I386_GET_GSBASE, segbase);
244 __asm __volatile("mov %%gs:0, %0" : "=r" (segbase)); 244 __asm __volatile("mov %%gs:0, %0" : "=r" (segbase));
245# elif defined(__x86_64__) 245# elif defined(__x86_64__)
246 // sysarch(AMD64_GET_FSBASE, segbase); 246 // sysarch(AMD64_GET_FSBASE, segbase);
247 __asm __volatile("movq %%fs:0, %0" : "=r" (segbase)); 247 __asm __volatile("movq %%fs:0, %0" : "=r" (segbase));
248# else 248# else
249# error "unsupported CPU arch for FreeBSD platform" 249# error "unsupported CPU arch for FreeBSD platform"
250# endif 250# endif
251 return segbase; 251 return segbase;
252} 252}
253 253
254uptr ThreadSelf() { 254uptr ThreadSelf() {
255 return (uptr)ThreadSelfSegbase()[2]; 255 return (uptr)ThreadSelfSegbase()[2];
256} 256}
257#endif // SANITIZER_FREEBSD || SANITIZER_NETBSD 257#endif // SANITIZER_FREEBSD
 258
 259#if SANITIZER_NETBSD
 260uptr ThreadSelf() {
 261 return (uptr)pthread_self();
 262}
 263#endif // SANITIZER_NETBSD
258 264
259static void GetTls(uptr *addr, uptr *size) { 265static void GetTls(uptr *addr, uptr *size) {
260#if SANITIZER_LINUX 266#if SANITIZER_LINUX
261# if defined(__x86_64__) || defined(__i386__) 267# if defined(__x86_64__) || defined(__i386__)
262 *addr = ThreadSelf(); 268 *addr = ThreadSelf();
263 *size = GetTlsSize(); 269 *size = GetTlsSize();
264 *addr -= *size; 270 *addr -= *size;
265 *addr += ThreadDescriptorSize(); 271 *addr += ThreadDescriptorSize();
266# else 272# else
267 *addr = 0; 273 *addr = 0;
268 *size = 0; 274 *size = 0;
269# endif 275# endif
270#elif SANITIZER_FREEBSD || SANITIZER_NETBSD 276#elif SANITIZER_FREEBSD
271 void** segbase = ThreadSelfSegbase(); 277 void** segbase = ThreadSelfSegbase();
272 *addr = 0; 278 *addr = 0;
273 *size = 0; 279 *size = 0;
274 if (segbase != 0) { 280 if (segbase != 0) {
275 // tcbalign = 16 281 // tcbalign = 16
276 // tls_size = round(tls_static_space, tcbalign); 282 // tls_size = round(tls_static_space, tcbalign);
277 // dtv = segbase[1]; 283 // dtv = segbase[1];
278 // dtv[2] = segbase - tls_static_space; 284 // dtv[2] = segbase - tls_static_space;
279 void **dtv = (void**) segbase[1]; 285 void **dtv = (void**) segbase[1];
280 *addr = (uptr) dtv[2]; 286 *addr = (uptr) dtv[2];
281 *size = (*addr == 0) ? 0 : ((uptr) segbase[0] - (uptr) dtv[2]); 287 *size = (*addr == 0) ? 0 : ((uptr) segbase[0] - (uptr) dtv[2]);
282 } 288 }
 289#elif SANITIZER_NETBSD
 290 // XXX: for now
 291 *addr = 0;
 292 *size = 0;
283#else 293#else
284# error "Unknown OS" 294# error "Unknown OS"
285#endif 295#endif
286} 296}
287 297
288uptr GetTlsSize() { 298uptr GetTlsSize() {
289#if SANITIZER_FREEBSD || SANITIZER_NETBSD 299#if SANITIZER_FREEBSD || SANITIZER_NETBSD
290 uptr addr, size; 300 uptr addr, size;
291 GetTls(&addr, &size); 301 GetTls(&addr, &size);
292 return size; 302 return size;
293#else 303#else
294 return g_tls_size; 304 return g_tls_size;
295#endif 305#endif