am d0a7bc2f
: am affd1b42
: am 9f3a8aaf
: am 7e248be7
: Merge "Add a .note.android.ident section to Android ELF binaries."
* commit 'd0a7bc2fd61c052801226a7b92f544ebed6eb59a': Add a .note.android.ident section to Android ELF binaries.
This commit is contained in:
commit
6dd6634bf6
@ -532,7 +532,12 @@ endif
|
|||||||
# Needed to access private/__dso_handle.h from
|
# Needed to access private/__dso_handle.h from
|
||||||
# crtbegin_xxx.c and crtend_xxx.c
|
# crtbegin_xxx.c and crtend_xxx.c
|
||||||
#
|
#
|
||||||
libc_crt_target_cflags += -I$(LOCAL_PATH)/private
|
libc_crt_target_cflags += -I$(LOCAL_PATH)/private \
|
||||||
|
-I$(LOCAL_PATH)/include \
|
||||||
|
-I$(LOCAL_PATH)/kernel/common \
|
||||||
|
-I$(LOCAL_PATH)/kernel/arch-$(TARGET_ARCH) \
|
||||||
|
-I$(LOCAL_PATH)/arch-$(TARGET_ARCH)/include \
|
||||||
|
-DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
|
||||||
|
|
||||||
ifeq ($(TARGET_ARCH),arm)
|
ifeq ($(TARGET_ARCH),arm)
|
||||||
libc_crt_target_cflags += -DCRT_LEGACY_WORKAROUND
|
libc_crt_target_cflags += -DCRT_LEGACY_WORKAROUND
|
||||||
@ -577,6 +582,22 @@ ifeq ($(TARGET_ARCH),x86)
|
|||||||
libc_crt_target_crtstart_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.S
|
libc_crt_target_crtstart_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin.S
|
||||||
libc_crt_target_crtstart_so_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.S
|
libc_crt_target_crtstart_so_file := $(LOCAL_PATH)/arch-$(TARGET_ARCH)/bionic/crtbegin_so.S
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# See the comment in crtbrand.c for the reason why we need to generate
|
||||||
|
# crtbrand.s before generating crtbrand.o.
|
||||||
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.s
|
||||||
|
$(GEN): $(LOCAL_PATH)/bionic/crtbrand.c
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
|
$(TARGET_CC) $(libc_crt_target_so_cflags) -S -o $@ $<
|
||||||
|
sed -i -e '/\.note\.ABI-tag/s/progbits/note/' $@
|
||||||
|
ALL_GENERATED_SOURCES += $(GEN)
|
||||||
|
|
||||||
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
|
||||||
|
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.s
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
|
$(TARGET_CC) $(libc_crt_target_so_cflags) -o $@ -c $<
|
||||||
|
ALL_GENERATED_SOURCES += $(GEN)
|
||||||
|
|
||||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o
|
||||||
$(GEN): $(libc_crt_target_crtstart_so_file)
|
$(GEN): $(libc_crt_target_crtstart_so_file)
|
||||||
@mkdir -p $(dir $@)
|
@mkdir -p $(dir $@)
|
||||||
@ -603,19 +624,30 @@ ALL_GENERATED_SOURCES += $(GEN)
|
|||||||
endif # TARGET_ARCH == x86 || TARGET_ARCH == arm
|
endif # TARGET_ARCH == x86 || TARGET_ARCH == arm
|
||||||
|
|
||||||
|
|
||||||
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o
|
||||||
|
$(GEN): $(libc_crt_target_crtstart_file)
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
|
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||||
|
ALL_GENERATED_SOURCES += $(GEN)
|
||||||
|
|
||||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static.o
|
||||||
|
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_static1.o $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
|
$(TARGET_LD) -r -o $@ $^
|
||||||
|
ALL_GENERATED_SOURCES += $(GEN)
|
||||||
|
|
||||||
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o
|
||||||
$(GEN): $(libc_crt_target_crtstart_file)
|
$(GEN): $(libc_crt_target_crtstart_file)
|
||||||
@mkdir -p $(dir $@)
|
@mkdir -p $(dir $@)
|
||||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
||||||
ALL_GENERATED_SOURCES += $(GEN)
|
ALL_GENERATED_SOURCES += $(GEN)
|
||||||
|
|
||||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic.o
|
||||||
$(GEN): $(libc_crt_target_crtstart_file)
|
$(GEN): $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_dynamic1.o $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbrand.o
|
||||||
@mkdir -p $(dir $@)
|
@mkdir -p $(dir $@)
|
||||||
$(TARGET_CC) $(libc_crt_target_cflags) -o $@ -c $<
|
$(TARGET_LD) -r -o $@ $^
|
||||||
ALL_GENERATED_SOURCES += $(GEN)
|
ALL_GENERATED_SOURCES += $(GEN)
|
||||||
|
|
||||||
|
|
||||||
# We rename crtend.o to crtend_android.o to avoid a
|
# We rename crtend.o to crtend_android.o to avoid a
|
||||||
# name clash between gcc and bionic.
|
# name clash between gcc and bionic.
|
||||||
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
|
GEN := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o
|
||||||
|
24
libc/NOTICE
24
libc/NOTICE
@ -380,3 +380,27 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|||||||
SUCH DAMAGE.
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 2000 David E. O'Brien, John D. Polstra.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. 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 AUTHOR ``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 AUTHOR 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.
|
||||||
|
|
||||||
|
|
||||||
|
63
libc/bionic/crtbrand.c
Normal file
63
libc/bionic/crtbrand.c
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright 2000 David E. O'Brien, John D. Polstra.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. 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 AUTHOR ``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 AUTHOR 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define ABI_VENDOR "Android"
|
||||||
|
#define ABI_SECTION ".note.android.ident"
|
||||||
|
#define ABI_NOTETYPE 1
|
||||||
|
#define ABI_ANDROID_API PLATFORM_SDK_VERSION
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Special ".note" entry to tag an Android binary and specify the ABI version.
|
||||||
|
*
|
||||||
|
* For all arches except sparc, gcc emits the section directive for the
|
||||||
|
* following struct with a PROGBITS type. However, the section should be
|
||||||
|
* of NOTE type, according to the Generic SysV ABI spec.
|
||||||
|
*
|
||||||
|
* Unfortunately, there is no clean way to tell gcc to use another section type,
|
||||||
|
* so this C file (or the C file that includes it) must be compiled in multiple
|
||||||
|
* steps:
|
||||||
|
*
|
||||||
|
* - Compile the .c file to a .s file.
|
||||||
|
* - Edit the .s file to change the 'progbits' type to 'note', for the section
|
||||||
|
* directive that defines the .note.ABI-tag section.
|
||||||
|
* - Compile the .s file to an object file.
|
||||||
|
*
|
||||||
|
* These steps are done in the invididual Makefiles for each applicable arch.
|
||||||
|
*/
|
||||||
|
static const struct {
|
||||||
|
int32_t namesz;
|
||||||
|
int32_t descsz;
|
||||||
|
int32_t type;
|
||||||
|
char name[sizeof ABI_VENDOR];
|
||||||
|
int32_t android_api;
|
||||||
|
} abitag __attribute__ ((section (ABI_SECTION), aligned(4), used)) = {
|
||||||
|
sizeof ABI_VENDOR,
|
||||||
|
sizeof(int32_t),
|
||||||
|
ABI_NOTETYPE,
|
||||||
|
ABI_VENDOR,
|
||||||
|
ABI_ANDROID_API,
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user