Hi ROM, When I am trying to use libpayload in my own usbrom, i find that I the function point seems wrong. In my main.c files: int main(int argc, char **argv){
const char *s="foo"; console_init();
puts(s);//the address of s which should passed to puts was wrong //// I check it with HDT find it move address 262c to[esp].
while(1); return 0; } I really do not know why, and my ldscript is
OUTPUT_FORMAT("elf32-i386") OUTPUT_ARCH(i386) ENTRY(_setup) /* 32KB heap and 16KB stack */ HEAP_SIZE = 32768; STACK_SIZE = 16384;
__boot_vect = 0x0000;
SECTIONS {
.text __boot_vect : { *( .text) } = 0x00
.rodata ALIGN(4) : { *( .rodata) } = 0x00
.data ALIGN(4) : { *( .data) } = 0x00
.bss ALIGN(4) : { *( .bss) /* heap and stack */
. = ALIGN(16); _heap = .; . += HEAP_SIZE; . = ALIGN(16); _eheap = .;
_stack = .; . += STACK_SIZE; . = ALIGN(16); _estack = .; } = 0x00
} and Makefile is export obj := $(shell pwd)/build export src := $(shell pwd)/src export build := $(shell pwd)/build
ifeq ($(V),1) Q := @ endif
TARGETS-y := head.o main.o OBJS := $(patsubst %,$(obj)/%,$(TARGETS-y))
ROM_OBJ= $(obj)/usb.rom ROM_BIN= $(obj)/usb.bin ROM_SIZE= 65536
OBJCOPY= objcopy OBJCOPY_FLAGS= -O binary BUILD_ROM= ./build_rom
LIBPAYLOAD_PREFIX= /opt/libpayload LIBPAYLOAD=$(LIBPAYLOAD_PREFIX)/lib/libpayload.a INCPAYLOAD=$(LIBPAYLOAD_PREFIX)/include/
STACKPROTECT += $(call cc-option, -fno-stack-protector,) GCCINCDIR = $(shell $(CC) -print-search-dirs | head -n 1 | cut -d' ' -f2)include/
INCLUDES := -I$(INCPAYLOAD) -Iinclude -Ibuild INCLUDES += -Iinclude -Ibuild INCLUDES += -I$(GCCINCDIR) -I$(INCPAYLOAD)/i386/
CFLAGS += -Wall $(STACKPROTECT) $(INCLUDES) -c -fno-builtin -nostdinc -Werror -Os -fomit-frame-pointer -fno-common -ffreestanding -fno-strict-aliasing CFLAGS= $(STACKPROTECT) $(INCLUDES) -c -fno-builtin -nostdinc -O2 -I. -Wall -Werror
LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
all:$(ROM_BIN)
$(ROM_BIN): $(OBJS) $(Q)printf " LD $(subst $(shell pwd)/,,$(@))\n" $(Q)$(LD) -T $(src)/ldscript -static -o $@ $(OBJS) $(LIBPAYLOAD) $(LIBGCC) $(Q)$(OBJCOPY) $(OBJCOPY_FLAGS) $(ROM_BIN) $(ROM_OBJ) $(Q)$(BUILD_ROM) $(ROM_OBJ) $(ROM_SIZE)
$(obj)/%.o: $(src)/%.c $(Q)printf " CC $(subst $(shell pwd)/,,$(@))\n" $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(obj)/%.o: $(src)/%.S $(Q)printf " AS $(subst $(shell pwd)/,,$(@))\n" $(Q)$(AS) -o $@ $<
prepare: $(Q)printf " SH building/preparing libpayload\n" $(Q)./prepare.sh
clean: $(Q)printf " SH cleaning $(obj)\n" $(Q)rm -f $(obj)/*.o $(obj)/*.rom $(obj)/*.bin
distclean: clean $(Q)printf " SH cleaning $(src)\n" @rm -Rf build @rm -Rf libpayload i also attached all of my source file. Could you please help me to take a look at this? Thanks.