diff --git a/Generic/ExampleDriver/Makefile b/Generic/ExampleDriver/Makefile index 3f4b5b63..2d586cce 100644 --- a/Generic/ExampleDriver/Makefile +++ b/Generic/ExampleDriver/Makefile @@ -34,7 +34,7 @@ LDFLAGS := \ -Wl,-static,--no-dynamic-linker,-ztext,--no-warn-rwx-segment \ -nostdlib -nodefaultlibs -nolibc \ -zmax-page-size=0x1000 \ - -Wl,-Map file.map -static -Tlinker.ld + -Wl,-Map file.map -static WARNCFLAG = -Wall -Wextra @@ -45,6 +45,8 @@ CFLAGS := \ ifeq ($(OSARCH), amd64) +LDFLAGS += -Tlinker_amd64.ld + CFLAGS += -fPIC -fPIE -pie -mno-80387 -mno-mmx -mno-3dnow \ -mno-red-zone -mno-sse -mno-sse2 \ -march=x86-64 -pipe -ffunction-sections \ @@ -52,12 +54,16 @@ CFLAGS += -fPIC -fPIE -pie -mno-80387 -mno-mmx -mno-3dnow \ else ifeq ($(OSARCH), i386) +LDFLAGS += -Tlinker_i386.ld + CFLAGS += -fPIC -fPIE -pie -mno-80387 -mno-mmx -mno-3dnow \ -mno-red-zone -mno-sse -mno-sse2 -ffunction-sections \ -march=i386 -pipe -msoft-float -fno-builtin else ifeq ($(OSARCH), aarch64) +LDFLAGS += -Tlinker_aarch64.ld + CFLAGS += -pipe -fno-builtin -fPIC endif @@ -66,9 +72,9 @@ build: $(FILENAME) ifeq ($(OSARCH), amd64) $(OBJDUMP) -b binary -D -m i386:x86-64 -d $(FILENAME) > file_dump.map else ifeq ($(OSARCH), i386) - + $(OBJDUMP) -b binary -D -m i386 -d $(FILENAME) > file_dump.map else ifeq ($(OSARCH), aarch64) - + $(OBJDUMP) -b binary -D -m aarch64 -d $(FILENAME) > file_dump.map endif mv $(FILENAME) ../../out/$(FILENAME) diff --git a/Generic/ExampleDriver/linker.ld b/Generic/ExampleDriver/linker_amd64.ld similarity index 100% rename from Generic/ExampleDriver/linker.ld rename to Generic/ExampleDriver/linker_amd64.ld diff --git a/Generic/ExampleDriver/linker_i386.ld b/Generic/ExampleDriver/linker_i386.ld new file mode 100644 index 00000000..9d725544 --- /dev/null +++ b/Generic/ExampleDriver/linker_i386.ld @@ -0,0 +1,41 @@ +OUTPUT_FORMAT(binary) +OUTPUT_ARCH(i386) + +ENTRY(DriverEntry) + +SECTIONS +{ + .header : + { + *(.header .header.*) + *(.extended .extended.*) + } + + .text : + { + *(.text .text.*) + } + + .data : + { + *(.data .data.*) + PROVIDE(_GLOBAL_OFFSET_TABLE_ = .); + } + + .rodata : + { + *(.rodata .rodata.*) + } + + .bss : + { + *(COMMON) + *(.bss .bss.*) + } + + /DISCARD/ : + { + *(.eh_frame) + *(.note .note.*) + } +}