x86_64: Fix get_tls and statvfs
* bionic_tls.h - Add x86_64 version of get_tls macro; * statvfs.h - 64-bit kernels don't have __statfs64/__fstatfs64, applying workaround; Change-Id: I20d7ddad74c7b7243866373d0142da6627c08280 Signed-off-by: Pavel Chupin <pavel.v.chupin@intel.com>
This commit is contained in:
parent
141029327c
commit
1e52a54a47
|
@ -18,8 +18,15 @@
|
|||
|
||||
#include <sys/statfs.h>
|
||||
|
||||
extern "C" int __statfs64(const char*, size_t, struct statfs*);
|
||||
// Paper over the fact that 32-bit kernels use fstatfs64/statfs64 with an extra argument,
|
||||
// but 64-bit kernels don't have the "64" bit suffix or the extra size_t argument.
|
||||
#if __LP64__
|
||||
# define __fstatfs64(fd,size,buf) fstatfs(fd,buf)
|
||||
# define __statfs64(path,size,buf) statfs(path,buf)
|
||||
#else
|
||||
extern "C" int __fstatfs64(int, size_t, struct statfs*);
|
||||
extern "C" int __statfs64(const char*, size_t, struct statfs*);
|
||||
#endif
|
||||
|
||||
#define ST_VALID 0x0020
|
||||
|
||||
|
|
|
@ -106,6 +106,12 @@ extern int __set_tls(void* ptr);
|
|||
({ register void* __val; \
|
||||
asm ("movl %%gs:0, %0" : "=r"(__val)); \
|
||||
(volatile void*) __val; })
|
||||
|
||||
#elif defined(__x86_64__)
|
||||
# define __get_tls() \
|
||||
({ register void* __val; \
|
||||
asm ("mov %%fs:0, %0" : "=r"(__val)); \
|
||||
(volatile void*) __val; })
|
||||
#else
|
||||
#error unsupported architecture
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue