mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-25 21:22:47 +00:00
Split up the ARM9 code and data sections (#883)
* Split up the ARM9 code (.text, .vectors) and data (.rodata, .data, .bss) sections into their own ELFs. This allows us to use more ARM9 WRAM while leaving the 128k BootROM mirror intact. * use the makefile definition * Also dump section headers on .dis file
This commit is contained in:
parent
61c79e3e3f
commit
50270a820c
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,6 +5,7 @@
|
||||
*.obj
|
||||
*.elf
|
||||
*.map
|
||||
*.dis
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
|
14
Makefile
14
Makefile
@ -52,7 +52,7 @@ export CFLAGS := -DDBUILTS="\"$(DBUILTS)\"" -DDBUILTL="\"$(DBUILTL)\"" -DVERSIO
|
||||
-fomit-frame-pointer -ffast-math -std=gnu11 -MMD -MP \
|
||||
-Wno-unused-function -Wno-format-truncation -Wno-format-nonliteral $(INCLUDE) -ffunction-sections -fdata-sections
|
||||
export LDFLAGS := -Tlink.ld -nostartfiles -Wl,--gc-sections,-z,max-page-size=4096
|
||||
ELF := arm9/arm9.elf arm11/arm11.elf
|
||||
ELF := arm9/arm9_code.elf arm9/arm9_data.elf arm11/arm11.elf
|
||||
|
||||
.PHONY: all firm $(VRAM_TAR) elf release clean
|
||||
all: firm
|
||||
@ -104,9 +104,13 @@ $(TRF_FOLDER)/%.trf: $(JSON_FOLDER)/%.json
|
||||
|
||||
%.elf: .FORCE
|
||||
@echo "Building $@"
|
||||
@$(MAKE) --no-print-directory -C $(@D)
|
||||
@$(MAKE) --no-print-directory -C $(@D) $(@F)
|
||||
|
||||
arm9/arm9.elf: $(VRAM_TAR) $(LANGUAGE_INL)
|
||||
# Indicate a few explicit dependencies:
|
||||
# The ARM9 data section depends on the VRAM drive
|
||||
arm9/arm9_data.elf: $(VRAM_TAR) $(LANGUAGE_INL)
|
||||
# And the code section depends on the data section being built already
|
||||
arm9/arm9_code.elf: arm9/arm9_data.elf
|
||||
|
||||
firm: $(ELF) $(TRF_FILES)
|
||||
@mkdir -p $(call dirname,"$(FIRM)") $(call dirname,"$(FIRMD)")
|
||||
@ -114,9 +118,9 @@ firm: $(ELF) $(TRF_FILES)
|
||||
@echo "[VERSION] $(VERSION)"
|
||||
@echo "[BUILD] $(DBUILTL)"
|
||||
@echo "[FIRM] $(FIRM)"
|
||||
@$(PY3) -m firmtool build $(FIRM) $(FTFLAGS) -g -D $(ELF) -C NDMA XDMA
|
||||
@$(PY3) -m firmtool build $(FIRM) $(FTFLAGS) -g -D $(ELF) -C NDMA NDMA XDMA
|
||||
@echo "[FIRM] $(FIRMD)"
|
||||
@$(PY3) -m firmtool build $(FIRMD) $(FTDFLAGS) -g -D $(ELF) -C NDMA XDMA
|
||||
@$(PY3) -m firmtool build $(FIRMD) $(FTDFLAGS) -g -D $(ELF) -C NDMA NDMA XDMA
|
||||
|
||||
vram0: $(VRAM_TAR) .FORCE # legacy target name
|
||||
|
||||
|
@ -11,11 +11,12 @@ all: $(TARGET).elf
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@rm -rf $(BUILD) $(TARGET).elf $(TARGET).map
|
||||
@rm -rf $(BUILD) $(TARGET).elf $(TARGET).dis $(TARGET).map
|
||||
|
||||
$(TARGET).elf: $(OBJECTS) $(OBJECTS_COMMON)
|
||||
@mkdir -p "$(@D)"
|
||||
@$(CC) $(LDFLAGS) $^ -o $@
|
||||
@$(OBJDUMP) -S -h $@ > $@.dis
|
||||
|
||||
$(BUILD)/%.cmn.o: $(COMMON_DIR)/%.c
|
||||
@mkdir -p "$(@D)"
|
||||
|
@ -1,3 +1,4 @@
|
||||
export OBJDUMP := arm-none-eabi-objdump
|
||||
|
||||
dirname = $(shell dirname $(1))
|
||||
|
||||
|
@ -15,3 +15,9 @@ LDFLAGS += $(SUBARCH) -Wl,--use-blx,-Map,$(TARGET).map -flto
|
||||
|
||||
include ../Makefile.common
|
||||
include ../Makefile.build
|
||||
|
||||
arm9_data.elf: arm9.elf
|
||||
$(OBJCOPY) -O elf32-littlearm -j .rodata* -j .data* -j .bss* $< $@
|
||||
|
||||
arm9_code.elf: arm9.elf
|
||||
$(OBJCOPY) -O elf32-littlearm -j .text* -j .vectors* $< $@
|
||||
|
20
arm9/link.ld
20
arm9/link.ld
@ -5,7 +5,9 @@ ENTRY(_start)
|
||||
MEMORY
|
||||
{
|
||||
VECTORS (RX) : ORIGIN = 0x08000000, LENGTH = 64
|
||||
AHBWRAM (RWX) : ORIGIN = 0x08000040, LENGTH = 512K - 64
|
||||
CODEMEM (RX) : ORIGIN = 0x08000040, LENGTH = 512K - 64
|
||||
BOOTROM (R) : ORIGIN = 0x08080000, LENGTH = 128K /* BootROM mirrors, don't touch! */
|
||||
DATAMEM (RW) : ORIGIN = 0x080A0000, LENGTH = 384K
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
@ -16,7 +18,7 @@ SECTIONS
|
||||
KEEP(*(.vectors));
|
||||
. = ALIGN(4);
|
||||
__vectors_len = ABSOLUTE(.) - __vectors_vma;
|
||||
} >VECTORS AT>AHBWRAM
|
||||
} >VECTORS AT>CODEMEM
|
||||
|
||||
.text : ALIGN(4) {
|
||||
__text_s = ABSOLUTE(.);
|
||||
@ -24,24 +26,28 @@ SECTIONS
|
||||
*(.text*);
|
||||
. = ALIGN(4);
|
||||
__text_e = ABSOLUTE(.);
|
||||
} >AHBWRAM
|
||||
} >CODEMEM
|
||||
|
||||
.rodata : ALIGN(4) {
|
||||
*(.rodata*);
|
||||
. = ALIGN(4);
|
||||
} >AHBWRAM
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
__exidx_end = .;
|
||||
. = ALIGN(4);
|
||||
} >DATAMEM
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data*);
|
||||
. = ALIGN(4);
|
||||
} >AHBWRAM
|
||||
} >DATAMEM
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
.bss (NOLOAD) : ALIGN(4) {
|
||||
__bss_start = .;
|
||||
*(.bss*);
|
||||
. = ALIGN(4);
|
||||
__bss_end = .;
|
||||
} >AHBWRAM
|
||||
} >DATAMEM
|
||||
|
||||
__end__ = ABSOLUTE(.);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user