Move the __stack_chk_fail_local@FBSD_1.0 compat symbol definition into

the separate .o for libc_pic.a. This prevents rtld from making the
symbol global.

Putting the stack_protector_compat.c into the public domain acknowledged
by kan.

Reviewed by:	kan
MFC after:	2 weeks
This commit is contained in:
Konstantin Belousov 2010-08-24 12:58:54 +00:00
parent f5a5c5653a
commit da2a0df59c
3 changed files with 22 additions and 4 deletions

View File

@ -18,7 +18,7 @@
.endif
# Sources common to both syscall interfaces:
SRCS+= stack_protector.c __error.c
SRCS+= stack_protector.c stack_protector_compat.c __error.c
.if !defined(WITHOUT_SYSCALL_COMPAT)
SRCS+= fcntl.c ftruncate.c lseek.c mmap.c pread.c pwrite.c truncate.c
PSEUDO+= _fcntl.o

View File

@ -116,8 +116,6 @@ __chk_fail(void)
__fail("buffer overflow detected; terminated");
}
#ifdef PIC
__sym_compat(__stack_chk_fail_local, __stack_chk_fail, FBSD_1.0);
#else
#ifndef PIC
__weak_reference(__stack_chk_fail, __stack_chk_fail_local);
#endif

View File

@ -0,0 +1,20 @@
/*
* Written by Alexander Kabaev <kan@FreeBSD.org>
* The file is in public domain.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
void __stack_chk_fail(void);
#ifdef PIC
void
__stack_chk_fail_local_hidden(void)
{
__stack_chk_fail();
}
__sym_compat(__stack_chk_fail_local, __stack_chk_fail_local_hidden, FBSD_1.0);
#endif