diff options
author | Bruce Beare <bruce.j.beare@intel.com> | 2011-05-03 21:04:40 -0700 |
---|---|---|
committer | David 'Digit' Turner <digit@google.com> | 2011-07-07 22:51:37 +0200 |
commit | a0aec0bd3083280dcba0c3aaba39602425228e2a (patch) | |
tree | 8199c08d85ef8ac76ce4fb38b2d4131431eb43e1 | |
parent | 3eb26578550127c5f1cd8443f74d18054a180a24 (diff) | |
download | bionic-a0aec0bd3083280dcba0c3aaba39602425228e2a.zip bionic-a0aec0bd3083280dcba0c3aaba39602425228e2a.tar.gz bionic-a0aec0bd3083280dcba0c3aaba39602425228e2a.tar.bz2 |
x86: Enable -fstack-protector
Change-Id: Iff9e3a3ba0e2d0faa7c6d98154aa5be0cc8a6c50
Orig-Change-Id: Ib69514c3afcb4c1f5e5f3f8cd91acfd145a0866c
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
-rw-r--r-- | libc/Android.mk | 12 | ||||
-rw-r--r-- | libc/arch-x86/bionic/__stack_chk_fail_local.S | 48 | ||||
-rw-r--r-- | libc/arch-x86/bionic/crtbegin_dynamic.S | 3 | ||||
-rw-r--r-- | libc/arch-x86/bionic/crtbegin_so.S | 1 | ||||
-rw-r--r-- | libc/arch-x86/bionic/crtbegin_static.S | 2 | ||||
-rw-r--r-- | linker/Android.mk | 1 | ||||
-rw-r--r-- | linker/arch/x86/begin.S | 2 |
7 files changed, 66 insertions, 3 deletions
diff --git a/libc/Android.mk b/libc/Android.mk index 1425673..cea874f 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -540,18 +540,24 @@ ifneq ($(filter arm x86,$(TARGET_ARCH)),) # that will call __cxa_finalize(&__dso_handle) in order to ensure that # static C++ destructors are properly called on dlclose(). # + +libc_crt_target_so_cflags := $(libc_crt_target_cflags) +ifeq ($(TARGET_ARCH),x86) + # This flag must be added for x86 targets, but not for ARM + libc_crt_target_so_cflags += -fPIC +endif GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_so.o $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.S @mkdir -p $(dir $@) - $(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $< + $(TARGET_CC) $(libc_crt_target_so_cflags) -o $@ -c $< ALL_GENERATED_SOURCES += $(GEN) GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtend_so.o $(GEN): $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtend_so.S @mkdir -p $(dir $@) - $(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $< + $(TARGET_CC) $(libc_crt_target_so_cflags) -o $@ -c $< ALL_GENERATED_SOURCES += $(GEN) -endif # TARGET_ARCH == x86 +endif # TARGET_ARCH == x86 || TARGET_ARCH == arm GEN := $(TARGET_OUT_STATIC_LIBRARIES)/crtbegin_static.o diff --git a/libc/arch-x86/bionic/__stack_chk_fail_local.S b/libc/arch-x86/bionic/__stack_chk_fail_local.S new file mode 100644 index 0000000..59fe86e --- /dev/null +++ b/libc/arch-x86/bionic/__stack_chk_fail_local.S @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +/* + * Contributed by: Intel Corporation + */ + + .text + .p2align 4,,15 + .globl __stack_chk_fail_local + .hidden __stack_chk_fail_local + .type __stack_chk_fail_local, @function + +__stack_chk_fail_local: +#ifdef __PIC__ + pushl %ebx + call __x86.get_pc_thunk.bx + addl $_GLOBAL_OFFSET_TABLE_, %ebx + call __stack_chk_fail@PLT +#else /* PIC */ + jmp __stack_chk_fail +#endif /* not PIC */ + + .size __stack_chk_fail_local, .-__stack_chk_fail_local diff --git a/libc/arch-x86/bionic/crtbegin_dynamic.S b/libc/arch-x86/bionic/crtbegin_dynamic.S index 279269b..540556b 100644 --- a/libc/arch-x86/bionic/crtbegin_dynamic.S +++ b/libc/arch-x86/bionic/crtbegin_dynamic.S @@ -131,4 +131,7 @@ frame_dummy: .comm object.4466,24,4 .weak __register_frame_info_bases .weak __deregister_frame_info_bases + #include "__dso_handle.S" +#include "__stack_chk_fail_local.S" + diff --git a/libc/arch-x86/bionic/crtbegin_so.S b/libc/arch-x86/bionic/crtbegin_so.S index a789ba0..2741742 100644 --- a/libc/arch-x86/bionic/crtbegin_so.S +++ b/libc/arch-x86/bionic/crtbegin_so.S @@ -95,3 +95,4 @@ __x86.get_pc_thunk.bx: ret #include "__dso_handle.S" +#include "__stack_chk_fail_local.S" diff --git a/libc/arch-x86/bionic/crtbegin_static.S b/libc/arch-x86/bionic/crtbegin_static.S index 6006d8f..a8d62d6 100644 --- a/libc/arch-x86/bionic/crtbegin_static.S +++ b/libc/arch-x86/bionic/crtbegin_static.S @@ -130,4 +130,6 @@ frame_dummy: .comm object.4466,24,4 .weak __register_frame_info_bases .weak __deregister_frame_info_bases + #include "__dso_handle.S" +#include "__stack_chk_fail_local.S" diff --git a/linker/Android.mk b/linker/Android.mk index 27a6677..52f7ce3 100644 --- a/linker/Android.mk +++ b/linker/Android.mk @@ -49,6 +49,7 @@ LOCAL_CFLAGS += -DANDROID_ARM_LINKER else ifeq ($(TARGET_ARCH),x86) LOCAL_CFLAGS += -DANDROID_X86_LINKER + LOCAL_CFLAGS += -I$(LOCAL_PATH)/../libc/arch-x86/bionic else ifeq ($(TARGET_ARCH),sh) LOCAL_CFLAGS += -DANDROID_SH_LINKER diff --git a/linker/arch/x86/begin.S b/linker/arch/x86/begin.S index b4427e0..5be59cb 100644 --- a/linker/arch/x86/begin.S +++ b/linker/arch/x86/begin.S @@ -44,3 +44,5 @@ _start: popl %esp jmp *%eax + +#include "__stack_chk_fail_local.S" |