summaryrefslogtreecommitdiff
path: root/libc/misc/internals
diff options
context:
space:
mode:
Diffstat (limited to 'libc/misc/internals')
-rw-r--r--libc/misc/internals/__uClibc_main.c32
-rw-r--r--libc/misc/internals/tempname.c5
2 files changed, 16 insertions, 21 deletions
diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c
index 36c0c6c63..71fdbd8a7 100644
--- a/libc/misc/internals/__uClibc_main.c
+++ b/libc/misc/internals/__uClibc_main.c
@@ -45,22 +45,15 @@ void *__libc_stack_end = NULL;
# ifdef __UCLIBC_HAS_SSP__
# include <dl-osinfo.h>
+static uintptr_t stack_chk_guard;
# ifndef THREAD_SET_STACK_GUARD
/* Only exported for architectures that don't store the stack guard canary
* in thread local area. */
-# include <stdint.h>
-uintptr_t stack_chk_guard;
/* for gcc-4.1 non-TLS */
uintptr_t __stack_chk_guard attribute_relro;
+# endif
/* for gcc-3.x + Etoh ssp */
-# ifdef __UCLIBC_HAS_SSP_COMPAT__
-# ifdef __HAVE_SHARED__
-strong_alias(__stack_chk_guard,__guard)
-# else
-uintptr_t __guard attribute_relro;
-# endif
-# endif
-# elif defined __UCLIBC_HAS_SSP_COMPAT__
+# ifdef __UCLIBC_HAS_SSP_COMPAT__
uintptr_t __guard attribute_relro;
# endif
# endif
@@ -255,18 +248,14 @@ void __uClibc_init(void)
#ifndef SHARED
# ifdef __UCLIBC_HAS_SSP__
/* Set up the stack checker's canary. */
+ stack_chk_guard = _dl_setup_stack_chk_guard();
# ifdef THREAD_SET_STACK_GUARD
- uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard();
THREAD_SET_STACK_GUARD (stack_chk_guard);
-# ifdef __UCLIBC_HAS_SSP_COMPAT__
- stack_chk_guard = _dl_setup_stack_chk_guard();
- __guard = stack_chk_guard;
-# endif
# else
__stack_chk_guard = stack_chk_guard;
-# if !defined __HAVE_SHARED__ && defined __UCLIBC_HAS_SSP_COMPAT__
- __guard = stack_chk_guard;
-# endif
+# endif
+# ifdef __UCLIBC_HAS_SSP_COMPAT__
+ __guard = stack_chk_guard;
# endif
# endif
#endif
@@ -317,6 +306,11 @@ void __uClibc_fini(void)
}
libc_hidden_def(__uClibc_fini)
+#ifndef SHARED
+extern void __nptl_deallocate_tsd (void) __attribute ((weak));
+extern unsigned int __nptl_nthreads __attribute ((weak));
+#endif
+
/* __uClibc_main is the new main stub for uClibc. This function is
* called from crt1 (version 0.9.28 or newer), after ALL shared libraries
* are initialized, just before we call the application's main function.
@@ -497,7 +491,6 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,
# ifdef SHARED
__libc_pthread_functions.ptr__nptl_deallocate_tsd ();
# else
- extern void __nptl_deallocate_tsd (void) __attribute ((weak));
__nptl_deallocate_tsd ();
# endif
@@ -507,7 +500,6 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,
# ifdef SHARED
unsigned int *const ptr = __libc_pthread_functions.ptr_nthreads;
# else
- extern unsigned int __nptl_nthreads __attribute ((weak));
unsigned int *const ptr = &__nptl_nthreads;
# endif
diff --git a/libc/misc/internals/tempname.c b/libc/misc/internals/tempname.c
index 4145c9478..0db28455b 100644
--- a/libc/misc/internals/tempname.c
+++ b/libc/misc/internals/tempname.c
@@ -62,7 +62,10 @@ int attribute_hidden ___path_search (char *tmpl, size_t tmpl_len, const char *di
const char *pfx /*, int try_tmpdir*/)
{
/*const char *d; */
- size_t dlen, plen;
+ /* dir and pfx lengths should always fit into an int,
+ so don't bother using size_t here. Especially since
+ the printf func requires an int for precision (%*s). */
+ int dlen, plen;
if (!pfx || !pfx[0])
{