diff options
author | Jeremy Compostella <jeremy.compostella@intel.com> | 2014-08-14 13:17:40 +0200 |
---|---|---|
committer | Patrick Tjin <pattjin@google.com> | 2014-08-18 21:46:19 -0700 |
commit | 36612706911843b4b900f8760003a8cc728d39d3 (patch) | |
tree | a931998cf2b0e2d80cc2da5ef1f5454dd77bedda | |
parent | b3e251696962a9d1581c6975914eb6c33a61f641 (diff) | |
download | bootstub-36612706911843b4b900f8760003a8cc728d39d3.tar.gz |
fix cpuid asm instruction call
This patch cfixes some compilation warning and clean the Android.mk a
little bit.
Bug: 16928801
Change-Id: Icc277c0871cce83e183a109cfe24daf6e5ad8fab
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
-rw-r--r-- | Android.mk | 35 | ||||
-rw-r--r-- | Makefile | 47 | ||||
-rw-r--r-- | bootstub.c | 34 |
3 files changed, 26 insertions, 90 deletions
@@ -1,16 +1,18 @@ LOCAL_PATH := $(call my-dir) - -ifeq ($(TARGET_BOARD_PLATFORM),moorefield) - -include $(CLEAR_VARS) -# First compile bootstub.bin +ifeq ($(TARGET_BOARD_PLATFORM),moorefield) CMDLINE_SIZE ?= 0x400 BOOTSTUB_SIZE ?= 8192 -LOCAL_CC := gcc -LOCAL_SRC_FILES := bootstub.c head.S e820_bios.S sfi.c ssp-uart.c imr_toc.c spi-uart.c +BOOTSTUB_SRC_FILES := bootstub.c sfi.c ssp-uart.c imr_toc.c spi-uart.c +BOOTSTUB_SRC_FILES_x86 := head.S e820_bios.S + +include $(CLEAR_VARS) + +# bootstub.bin +LOCAL_SRC_FILES := $(BOOTSTUB_SRC_FILES) +LOCAL_SRC_FILES_x86 := $(BOOTSTUB_SRC_FILES_x86) ANDROID_TOOLCHAIN_FLAGS := -m32 -ffreestanding LOCAL_CFLAGS := $(ANDROID_TOOLCHAIN_FLAGS) -Wall -O1 -DCMDLINE_SIZE=${CMDLINE_SIZE} LOCAL_MODULE := bootstub.bin @@ -20,15 +22,13 @@ LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_FORCE_STATIC_EXECUTABLE := true -head.o : PRIVATE_CFLAGS := -D__ASSEMBLY__ - include $(BUILD_SYSTEM)/binary.mk $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(LOCAL_CFLAGS) $(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf $(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT := $(LOCAL_PATH)/bootstub.lds $(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.c, %.o , $(LOCAL_SRC_FILES)) -$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.S, %.o , $(BOOTSTUB_OBJS)) +$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS += $(patsubst %.S, %.o , $(LOCAL_SRC_FILES_x86)) $(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(addprefix $(intermediates)/, $(BOOTSTUB_OBJS)) $(LOCAL_BUILT_MODULE): $(all_objects) @@ -42,7 +42,6 @@ $(LOCAL_BUILT_MODULE): $(all_objects) $(hide) $(TARGET_OBJCOPY) -O binary -R .note -R .comment -S $(PRIVATE_ELF_FILE) $@ # Then assemble the final bootstub file - bootstub_bin := $(PRODUCT_OUT)/bootstub.bin bootstub_full := $(PRODUCT_OUT)/bootstub @@ -60,10 +59,9 @@ $(bootstub_full) : CHECK_BOOTSTUB_SIZE # build specific bootstub for GPT/AOSP image support include $(CLEAR_VARS) -# First compile 2ndbootloader.bin - -LOCAL_CC := gcc -LOCAL_SRC_FILES := bootstub.c head.S e820_bios.S sfi.c ssp-uart.c imr_toc.c spi-uart.c +# 2ndbootloader.bin +LOCAL_SRC_FILES := $(BOOTSTUB_SRC_FILES) +LOCAL_SRC_FILES_x86 := $(BOOTSTUB_SRC_FILES_x86) ANDROID_TOOLCHAIN_FLAGS := -m32 -ffreestanding LOCAL_CFLAGS := $(ANDROID_TOOLCHAIN_FLAGS) -Wall -O1 -DCMDLINE_SIZE=${CMDLINE_SIZE} -DBUILD_RAMDUMP LOCAL_MODULE := 2ndbootloader.bin @@ -72,15 +70,13 @@ LOCAL_MODULE_PATH := $(PRODUCT_OUT) LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_FORCE_STATIC_EXECUTABLE := true -head.o : PRIVATE_CFLAGS := -D__ASSEMBLY__ - include $(BUILD_SYSTEM)/binary.mk $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_GLOBAL_CFLAGS := $(LOCAL_CFLAGS) $(LOCAL_BUILT_MODULE) : PRIVATE_ELF_FILE := $(intermediates)/$(PRIVATE_MODULE).elf $(LOCAL_BUILT_MODULE) : PRIVATE_LINK_SCRIPT := $(LOCAL_PATH)/2ndbootloader.lds $(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.c, %.o , $(LOCAL_SRC_FILES)) -$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(patsubst %.S, %.o , $(BOOTSTUB_OBJS)) +$(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS += $(patsubst %.S, %.o , $(LOCAL_SRC_FILES_x86)) $(LOCAL_BUILT_MODULE) : BOOTSTUB_OBJS := $(addprefix $(intermediates)/, $(BOOTSTUB_OBJS)) $(LOCAL_BUILT_MODULE): $(all_objects) @@ -93,8 +89,7 @@ $(LOCAL_BUILT_MODULE): $(all_objects) -o $(PRIVATE_ELF_FILE) $(hide) $(TARGET_OBJCOPY) -O binary -R .note -R .comment -S $(PRIVATE_ELF_FILE) $@ -# Then assemble the final bootstub file - +# Then assemble the final 2ndbootloader file bootstub_aosp_bin := $(PRODUCT_OUT)/2ndbootloader.bin bootstub_aosp_full := $(PRODUCT_OUT)/2ndbootloader diff --git a/Makefile b/Makefile deleted file mode 100644 index 72bb817..0000000 --- a/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -OBJ=bootstub.o spi-uart.o head.o sfi.o e820_bios.o ssp-uart.o -CMDLINE_SIZE ?= 0x400 -CFLAGS=-m32 -ffreestanding -Wall -DCMDLINE_SIZE=${CMDLINE_SIZE} -CC ?= gcc - -all: bootstub - -bootstub:bootstub.bin - cat bootstub.bin /dev/zero | dd bs=4096 count=1 > $@ - -bootstub.bin:bootstub.elf - objcopy -O binary -R .note -R .comment -S $< $@ - -bootstub.elf:bootstub.lds $(OBJ) - ld -m elf_i386 -T bootstub.lds $(OBJ) -o $@ - -bootstub.o:bootstub.c bootstub.h - ${CC} $(CFLAGS) -c bootstub.c - -spi-uart.o:spi-uart.c spi-uart.h - ${CC} $(CFLAGS) -c spi-uart.c - -ssp-uart.o:ssp-uart.c ssp-uart.h - ${CC} $(CFLAGS) -c ssp-uart.c - -sfi.o:sfi.c - ${CC} $(CFLAGS) -c sfi.c - -head.o:head.S bootstub.h - ${CC} $(CFLAGS) -D__ASSEMBLY__ -c head.S - -e820_bios.o:e820_bios.S bootstub.h - ${CC} $(CFLAGS) -D__ASSEMBLY__ -c e820_bios.S - -clean: - rm -rf *.o *.bin *.elf *.bz2 *.rpm - -rm bootstub - -source:bootstub.c head.S VERSION - git archive --prefix=bootstub-`head -n 1 VERSION | awk '{print $$1}'`/ --format=tar HEAD | bzip2 -c > bootstub-`head -n 1 VERSION | awk '{print $$1}'`.tar.bz2 - -rpm:source - cp bootstub.spec /usr/src/redhat/SPECS/ - cp *.tar.bz2 /usr/src/redhat/SOURCES/ - rpmbuild -ba /usr/src/redhat/SPECS/bootstub.spec - cp /usr/src/redhat/RPMS/i386/bootstub*.rpm ./ -.PHONY: all clean source rpm @@ -202,27 +202,15 @@ static u32 bzImage_setup(struct boot_params *bp, struct setup_header *sh) return (((unsigned int)ptr+511)/512)*512; } -static int get_32bit_entry(unsigned char *ptr) +static inline void cpuid(u32 op, u32 regs[4]) { - while (1){ - if (*(u32 *)ptr == SETUP_SIGNATURE && *(u32 *)(ptr+4) == 0) - break; - ptr++; - } - ptr+=4; - return (((unsigned int)ptr+511)/512)*512; -} - -static inline void cpuid(u32 op, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx) -{ - *eax = op; - *ecx = 0; - asm volatile("cpuid" - : "=a" (*eax), - "=b" (*ebx), - "=c" (*ecx), - "=d" (*edx) - : "0" (*eax), "2" (*ecx)); + __asm__ volatile ( + "mov %%ebx, %%edi\n" + "cpuid\n" + "xchg %%edi, %%ebx\n" + : "=a"(regs[0]), "=D"(regs[1]), "=c"(regs[2]), "=d"(regs[3]) + : "a"(op) + ); } enum cpuid_regs { @@ -236,7 +224,7 @@ int mid_identify_cpu(void) { u32 regs[4]; - cpuid(1, ®s[CR_EAX], ®s[CR_EBX], ®s[CR_ECX], ®s[CR_EDX]); + cpuid(1, regs); switch ( regs[CR_EAX] & CPUID_MASK ) { @@ -386,10 +374,10 @@ static u32 xen_multiboot_setup(void) } mb.cmdline = (u32)strnchr((char *)CMDLINE_OFFSET, '$', CMDLINE_SIZE) + 1; - dst = mb.cmdline + strnlen(mb.cmdline, CMDLINE_SIZE) - 1; + dst = (char *)mb.cmdline + strnlen((const char *)mb.cmdline, CMDLINE_SIZE) - 1; *dst = ' '; dst++; - src = (const char *)CMDLINE_OFFSET; + src = (char *)CMDLINE_OFFSET; for (i = 0 ;i < strnlen((const char *)CMDLINE_OFFSET, CMDLINE_SIZE);i++) { if (!strncmp(src, "capfreq=", 8)) { while (*src != ' ' && *src != 0) { |