4688279db5
Also make the errors more readable, since none of us seemed to know what they actually meant. The new style is still as verbose as the old, but that's probably necessary in the absence of chained exceptions in C. Here's what you'd see if you try to boot after removing libsurfaceflinger.so: 32267 32267 E AndroidRuntime: java.lang.UnsatisfiedLinkError: Cannot load library: (linker.c:1629, pid 32259) soinfo_link_image: could not load library "libsystem_server.so" needed by "libandroid_servers.so"; caused by (linker.c:1629, pid 32259) soinfo_link_image: could not load library "libsurfaceflinger.so" needed by "libsystem_server.so"; caused by (linker.c:709, pid 32259) load_library: library "libsurfaceflinger.so" not found This patch also fixes almost all of the compiler warnings. Change-Id: I64bb59aed6d4e039c15ea45be2367f319ef879f8
77 lines
1.9 KiB
Makefile
77 lines
1.9 KiB
Makefile
LOCAL_PATH:= $(call my-dir)
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_SRC_FILES:= \
|
|
arch/$(TARGET_ARCH)/begin.S \
|
|
debugger.c \
|
|
dlfcn.c \
|
|
linker.cpp \
|
|
linker_environ.c \
|
|
linker_format.c \
|
|
linker_phdr.c \
|
|
rt.c
|
|
|
|
LOCAL_LDFLAGS := -shared
|
|
|
|
LOCAL_CFLAGS += -fno-stack-protector \
|
|
-Wstrict-overflow=5 \
|
|
-fvisibility=hidden \
|
|
-std=gnu99 \
|
|
-Wall -Wextra
|
|
|
|
# Set LINKER_DEBUG to either 1 or 0
|
|
#
|
|
LOCAL_CFLAGS += -DLINKER_DEBUG=0
|
|
|
|
# We need to access Bionic private headers in the linker...
|
|
LOCAL_CFLAGS += -I$(LOCAL_PATH)/../libc/
|
|
|
|
# ...one of which is <private/bionic_tls.h>, for which we
|
|
# need HAVE_ARM_TLS_REGISTER.
|
|
ifeq ($(TARGET_ARCH)-$(ARCH_ARM_HAVE_TLS_REGISTER),arm-true)
|
|
LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER
|
|
endif
|
|
|
|
ifeq ($(TARGET_ARCH),arm)
|
|
LOCAL_CFLAGS += -DANDROID_ARM_LINKER
|
|
endif
|
|
|
|
ifeq ($(TARGET_ARCH),x86)
|
|
LOCAL_CFLAGS += -DANDROID_X86_LINKER
|
|
endif
|
|
|
|
ifeq ($(TARGET_ARCH),mips)
|
|
LOCAL_CFLAGS += -DANDROID_MIPS_LINKER
|
|
endif
|
|
|
|
LOCAL_MODULE:= linker
|
|
|
|
LOCAL_STATIC_LIBRARIES := libc_nomalloc
|
|
|
|
#LOCAL_FORCE_STATIC_EXECUTABLE := true # not necessary when not including BUILD_EXECUTABLE
|
|
|
|
#
|
|
# include $(BUILD_EXECUTABLE)
|
|
#
|
|
# Instead of including $(BUILD_EXECUTABLE), we execute the steps to create an executable by
|
|
# hand, as we want to insert an extra step that is not supported by the build system, and
|
|
# is probably specific the linker only, so there's no need to modify the build system for
|
|
# the purpose.
|
|
|
|
LOCAL_MODULE_CLASS := EXECUTABLES
|
|
LOCAL_MODULE_SUFFIX := $(TARGET_EXECUTABLE_SUFFIX)
|
|
|
|
# we don't want crtbegin.o (because we have begin.o), so unset it
|
|
# just for this module
|
|
LOCAL_NO_CRT := true
|
|
|
|
include $(BUILD_SYSTEM)/dynamic_binary.mk
|
|
|
|
$(linked_module): $(TARGET_CRTBEGIN_STATIC_O) $(all_objects) $(all_libraries) $(TARGET_CRTEND_O)
|
|
$(transform-o-to-static-executable)
|
|
@echo "target PrefixSymbols: $(PRIVATE_MODULE) ($@)"
|
|
$(hide) $(TARGET_OBJCOPY) --prefix-symbols=__dl_ $@
|
|
|
|
#
|
|
# end of BUILD_EXECUTABLE hack
|
|
#
|