am aa267685: Merge "Allow GCC-built fortified code to run on a clang-built bionic."

* commit 'aa267685c9da11502c4ec50f86f78a7075b6809c':
  Allow GCC-built fortified code to run on a clang-built bionic.
This commit is contained in:
Elliott Hughes 2013-12-19 21:23:09 -08:00 committed by Android Git Automerger
commit ddeca5832e
2 changed files with 18 additions and 17 deletions

View File

@ -46,15 +46,19 @@ extern int unlinkat(int dirfd, const char *pathname, int flags);
extern int fcntl(int fd, int command, ...); extern int fcntl(int fd, int command, ...);
extern int creat(const char* path, mode_t mode); extern int creat(const char* path, mode_t mode);
#if defined(__BIONIC_FORTIFY) && !defined(__clang__) #if defined(__BIONIC_FORTIFY)
extern int __open_2(const char*, int);
extern int __open_real(const char*, int, ...) __asm__(__USER_LABEL_PREFIX__ "open");
extern int __openat_2(int, const char*, int);
extern int __openat_real(int, const char*, int, ...) __asm__(__USER_LABEL_PREFIX__ "openat");
__errordecl(__creat_missing_mode, "called with O_CREAT, but missing mode"); __errordecl(__creat_missing_mode, "called with O_CREAT, but missing mode");
__errordecl(__creat_too_many_args, "too many arguments"); __errordecl(__creat_too_many_args, "too many arguments");
extern int __open_real(const char *pathname, int flags, ...)
__asm__(__USER_LABEL_PREFIX__ "open"); #if !defined(__clang__)
extern int __open_2(const char *, int);
__BIONIC_FORTIFY_INLINE __BIONIC_FORTIFY_INLINE
int open(const char *pathname, int flags, ...) { int open(const char* pathname, int flags, ...) {
if (__builtin_constant_p(flags)) { if (__builtin_constant_p(flags)) {
if ((flags & O_CREAT) && __builtin_va_arg_pack_len() == 0) { if ((flags & O_CREAT) && __builtin_va_arg_pack_len() == 0) {
__creat_missing_mode(); // compile time error __creat_missing_mode(); // compile time error
@ -72,12 +76,8 @@ int open(const char *pathname, int flags, ...) {
return __open_real(pathname, flags, __builtin_va_arg_pack()); return __open_real(pathname, flags, __builtin_va_arg_pack());
} }
extern int __openat_2(int, const char *, int);
extern int __openat_real(int dirfd, const char *pathname, int flags, ...)
__asm__(__USER_LABEL_PREFIX__ "openat");
__BIONIC_FORTIFY_INLINE __BIONIC_FORTIFY_INLINE
int openat(int dirfd, const char *pathname, int flags, ...) { int openat(int dirfd, const char* pathname, int flags, ...) {
if (__builtin_constant_p(flags)) { if (__builtin_constant_p(flags)) {
if ((flags & O_CREAT) && __builtin_va_arg_pack_len() == 0) { if ((flags & O_CREAT) && __builtin_va_arg_pack_len() == 0) {
__creat_missing_mode(); // compile time error __creat_missing_mode(); // compile time error
@ -95,7 +95,9 @@ int openat(int dirfd, const char *pathname, int flags, ...) {
return __openat_real(dirfd, pathname, flags, __builtin_va_arg_pack()); return __openat_real(dirfd, pathname, flags, __builtin_va_arg_pack());
} }
#endif /* defined(__BIONIC_FORTIFY) && !defined(__clang__) */ #endif /* !defined(__clang__) */
#endif /* defined(__BIONIC_FORTIFY) */
__END_DECLS __END_DECLS

View File

@ -495,16 +495,15 @@ int sprintf(char *dest, const char *format, ...)
} }
#endif #endif
#if !defined(__clang__) extern char* __fgets_chk(char*, int, FILE*, size_t);
extern char *__fgets_real(char *, int, FILE *) extern char* __fgets_real(char*, int, FILE*) __asm__(__USER_LABEL_PREFIX__ "fgets");
__asm__(__USER_LABEL_PREFIX__ "fgets");
__errordecl(__fgets_too_big_error, "fgets called with size bigger than buffer"); __errordecl(__fgets_too_big_error, "fgets called with size bigger than buffer");
__errordecl(__fgets_too_small_error, "fgets called with size less than zero"); __errordecl(__fgets_too_small_error, "fgets called with size less than zero");
extern char *__fgets_chk(char *, int, FILE *, size_t);
#if !defined(__clang__)
__BIONIC_FORTIFY_INLINE __BIONIC_FORTIFY_INLINE
char *fgets(char *dest, int size, FILE *stream) char *fgets(char* dest, int size, FILE* stream) {
{
size_t bos = __bos(dest); size_t bos = __bos(dest);
// Compiler can prove, at compile time, that the passed in size // Compiler can prove, at compile time, that the passed in size