Merge "FORTIFY_SOURCE: optimize"

This commit is contained in:
Nick Kralevich
2013-01-18 00:49:35 +00:00
committed by Gerrit Code Review
2 changed files with 39 additions and 9 deletions

View File

@@ -201,8 +201,6 @@ size_t strlcat(char *dest, const char *src, size_t size) {
return __strlcat_chk(dest, src, size, bos);
}
__purefunc extern size_t __strlen_real(const char *)
__asm__(__USER_LABEL_PREFIX__ "strlen");
extern size_t __strlen_chk(const char *, size_t);
__BIONIC_FORTIFY_INLINE
@@ -211,14 +209,17 @@ size_t strlen(const char *s) {
// Compiler doesn't know destination size. Don't call __strlen_chk
if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
return __strlen_real(s);
return __builtin_strlen(s);
}
size_t slen = __builtin_strlen(s);
if (__builtin_constant_p(slen)) {
return slen;
}
return __strlen_chk(s, bos);
}
__purefunc extern char* __strchr_real(const char *, int)
__asm__(__USER_LABEL_PREFIX__ "strchr");
extern char* __strchr_chk(const char *, int, size_t);
__BIONIC_FORTIFY_INLINE
@@ -227,14 +228,17 @@ char* strchr(const char *s, int c) {
// Compiler doesn't know destination size. Don't call __strchr_chk
if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
return __strchr_real(s, c);
return __builtin_strchr(s, c);
}
size_t slen = __builtin_strlen(s);
if (__builtin_constant_p(slen) && (slen < bos)) {
return __builtin_strchr(s, c);
}
return __strchr_chk(s, c, bos);
}
__purefunc extern char* __strrchr_real(const char *, int)
__asm__(__USER_LABEL_PREFIX__ "strrchr");
extern char* __strrchr_chk(const char *, int, size_t);
__BIONIC_FORTIFY_INLINE
@@ -243,7 +247,12 @@ char* strrchr(const char *s, int c) {
// Compiler doesn't know destination size. Don't call __strrchr_chk
if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) {
return __strrchr_real(s, c);
return __builtin_strrchr(s, c);
}
size_t slen = __builtin_strlen(s);
if (__builtin_constant_p(slen) && (slen < bos)) {
return __builtin_strrchr(s, c);
}
return __strrchr_chk(s, c, bos);