mirror of
https://github.com/brain-hackers/lab
synced 2024-12-22 20:20:04 +09:00
Add linkerscript (experimental)
This commit is contained in:
parent
82afb1d9cc
commit
2323505be7
31
x1/linkerscript/Makefile
Normal file
31
x1/linkerscript/Makefile
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
CROSS_COMPILE := arm-linux-gnueabihf-
|
||||||
|
AS := $(CROSS_COMPILE)as
|
||||||
|
CC := $(CROSS_COMPILE)gcc
|
||||||
|
LD := $(CROSS_COMPILE)ld
|
||||||
|
OBJCOPY := $(CROSS_COMPILE)objcopy
|
||||||
|
|
||||||
|
TARGET := AppMain
|
||||||
|
OBJS := crt0.o main.o
|
||||||
|
|
||||||
|
ASFLAGS := -W
|
||||||
|
CFLAGS := -Wall -ffreestanding -fomit-frame-pointer -Os
|
||||||
|
LDFLAGS := -T x1.ld
|
||||||
|
|
||||||
|
.PHONY:
|
||||||
|
all: $(TARGET).bin
|
||||||
|
|
||||||
|
.PHONY:
|
||||||
|
clean:
|
||||||
|
-rm -f $(TARGET).bin $(TARGET).elf $(OBJS)
|
||||||
|
|
||||||
|
%.o: %.s
|
||||||
|
$(AS) $(ASFLAGS) $< -o $@
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) -c $(CFLAGS) $<
|
||||||
|
|
||||||
|
$(TARGET).elf: $(OBJS)
|
||||||
|
$(LD) $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(TARGET).bin: $(TARGET).elf
|
||||||
|
$(OBJCOPY) -O binary $< $@
|
41
x1/linkerscript/crt0.s
Normal file
41
x1/linkerscript/crt0.s
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
.text
|
||||||
|
.arm
|
||||||
|
.align 4
|
||||||
|
|
||||||
|
.global _start
|
||||||
|
_start:
|
||||||
|
stmdb sp!, {r4, lr}
|
||||||
|
/* store context */
|
||||||
|
movs r4, r0
|
||||||
|
|
||||||
|
/* Clear the .bss section */
|
||||||
|
bl .L_clean_bss
|
||||||
|
|
||||||
|
/* restore context */
|
||||||
|
adr r0, [.L_context]
|
||||||
|
str r4, [r0]
|
||||||
|
ldr r0, [r0]
|
||||||
|
|
||||||
|
/* call user's main */
|
||||||
|
bl main
|
||||||
|
|
||||||
|
ldmia sp!, {r4, pc}
|
||||||
|
|
||||||
|
.L_context:
|
||||||
|
.long 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
r0 = start address
|
||||||
|
r1 = end address
|
||||||
|
tmp: r2
|
||||||
|
*/
|
||||||
|
.L_clean_bss:
|
||||||
|
ldr r0, =__bss_start
|
||||||
|
ldr r1, =__bss_end
|
||||||
|
sub r1, r1, #4
|
||||||
|
mov r2, #0
|
||||||
|
.L_clean_bss_loop:
|
||||||
|
cmp r0, r1
|
||||||
|
strlt r2, [r0], #4
|
||||||
|
blt .L_clean_bss_loop
|
||||||
|
bx lr
|
4
x1/linkerscript/main.c
Normal file
4
x1/linkerscript/main.c
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
int main(void *arg)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
51
x1/linkerscript/x1.ld
Normal file
51
x1/linkerscript/x1.ld
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
||||||
|
OUTPUT_ARCH(arm)
|
||||||
|
ENTRY(_start)
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
RAM (xrw): ORIGIN = 0x90000000, LENGTH = 15M
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS {
|
||||||
|
.text : {
|
||||||
|
*(.text)
|
||||||
|
*(.text*)
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
|
||||||
|
KEEP (*(.init))
|
||||||
|
KEEP (*(.fini))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
} > RAM
|
||||||
|
|
||||||
|
.data : {
|
||||||
|
*(.data)
|
||||||
|
*(.data*)
|
||||||
|
. = ALIGN(4);
|
||||||
|
} > RAM
|
||||||
|
|
||||||
|
.bss : {
|
||||||
|
__bss_start = .;
|
||||||
|
*(.bss)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(4);
|
||||||
|
__bss_end = .;
|
||||||
|
} > RAM
|
||||||
|
|
||||||
|
/DISCARD/ : {
|
||||||
|
*(.discard)
|
||||||
|
*(.discard.*)
|
||||||
|
*(.comment)
|
||||||
|
}
|
||||||
|
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user