Skip to content

Commit

Permalink
Maybe simplify linker script
Browse files Browse the repository at this point in the history
  • Loading branch information
xzn committed Feb 3, 2024
1 parent 7d598aa commit 76b3fe9
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 69 deletions.
32 changes: 22 additions & 10 deletions 3ds.ld
Original file line number Diff line number Diff line change
@@ -1,39 +1,51 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_Reset)
PHDRS
{
code PT_LOAD FLAGS(5) /* Read | Execute */;
rodata PT_LOAD FLAGS(4) /* Read */;
data PT_LOAD FLAGS(6) /* Read | Write */;
}
SECTIONS
{
. = 0x00100100;
. = ALIGN(4);
.text : {
__text_start = .;
obj/bootloader.o (.text*)
*(.text*)
}
} : code

. = ALIGN(4);
.data : {
*(.data)
}
.rodata : {
*(.rodata)
*(.roda)
*(.rodata.*)
*all.rodata*(*)
} : rodata

. = ALIGN(4);
.rel.dyn : {
*(.__rel_dyn_start)
*(.rel*)
*(.rel.*)
*(.__rel_dyn_end)
}
__code_end = .;
*(.__rel_dyn_end)
} : rodata

. = ALIGN(4);
.data : {
*(.data)
} : data

. = ALIGN(4);
.bss : {
*(.__bss_start)
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b*)
*(COMMON)
*(.__bss_end)
}

__end__ = .;
__end__ = ABSOLUTE(.) ;
}
73 changes: 15 additions & 58 deletions 3dst.ld
Original file line number Diff line number Diff line change
Expand Up @@ -20,113 +20,70 @@ SECTIONS
. = 0x00100100;
. = ALIGN(4);
.text : {
__text_start = .;
obj/bootloader.o (.text*)
*(.text*)
} : code
. = ALIGN(0x1000);

. = ALIGN(4);
.rodata : {
*(.rodata)
*(.roda)
*(.rodata.*)
*all.rodata*(*)
*(.gnu.linkonce.r*)
. = ALIGN(4);
__tdata_align = .;
LONG (ALIGNOF(.tdata));
. = ALIGN(4);
} : rodata
. = ALIGN(0x1000);

. = ALIGN(4);
.rel.dyn : {
*(.__rel_dyn_start)
*(.rel*)
*(.rel.*)
*(.__rel_dyn_end)
} : rodata

. = ALIGN(4);
.data : {
*(.data)
} : data

. = ALIGN(4);
.tdata : {
__tdata_lma = .;
*(.tdata)
*(.tdata.*)
*(.gnu.linkonce.td.*)
. = ALIGN(4);
__tdata_lma_end = .;
} : data

. = ALIGN(4);
.tbss : {
*(.tbss)
*(.tbss.*)
*(.gnu.linkonce.tb.*)
*(.tcommon)
. = ALIGN(4);
} : data

.preinit_array ALIGN(4) :
{
PROVIDE (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE (__preinit_array_end = .);
} : data

.init_array ALIGN(4) :
{
PROVIDE (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
PROVIDE (__init_array_end = .);
} : data

.fini_array ALIGN(4) :
{
PROVIDE (__fini_array_start = .);
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
PROVIDE (__fini_array_end = .);
} : data

.ctors ALIGN(4) :
{
KEEP (*crtbegin.o(.ctors)) /* MUST be first -- GCC requires it */
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} : data

.dtors ALIGN(4) :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} : data

. = ALIGN(4);
.rel.dyn : {
*(.__rel_dyn_start)
*(.rel*)
*(.rel.*)
*(.__rel_dyn_end)
}
__code_end = .;

__bss_start__ = .;
. = ALIGN(4);
.bss : {
*(.__bss_start)
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b*)
*(COMMON)

. = 8 + ABSOLUTE(ALIGN(ABSOLUTE(. - 8), ALIGNOF(.tdata)));
__tls_start = .;
. += SIZEOF(.tdata);

. = ALIGN(ALIGNOF(.tbss));
. += SIZEOF(.tbss);
. += SIZEOF(.tbss);
__tls_end = .;

*(.__bss_end)
} : data
__bss_end__ = .;

__end__ = ABSOLUTE(.) ;
}
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ CTRU_DIR := libctru/libctru

CFLAGS := -Ofast -g -march=armv6k -mtune=mpcore -mfloat-abi=hard -fno-strict-aliasing -ffunction-sections -fdata-sections
CPPFLAGS := -Iinclude -Ilibctru/libctru/include
LDFLAGS = -pie -Wl,--gc-sections -Wl,-Map=$(basename $(notdir $@)).map,--no-warn-rwx-segments
LDFLAGS = -pie -Wl,--gc-sections -Wl,-Map=$(basename $(notdir $@)).map
LDLIBS := -nostartfiles -L. -lctru_ntr

SRC_C := $(wildcard source/*.c)
Expand Down

0 comments on commit 76b3fe9

Please sign in to comment.