|
From: quzar <qu...@us...> - 2025-05-05 04:00:44
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "A pseudo Operating System for the Dreamcast.".
The branch, master has been updated
via 0d7f67c472aa4b8eef910aba339f247fde3b2134 (commit)
via 3ab157c5d80b0500039d4d6ecbfcb54b19469e40 (commit)
via a5d88d7b0a816302b0a9f1f6ed52ae36dfd38f23 (commit)
via fb4de26ba11483edcaf7c41cdc1decfe9e36b1f5 (commit)
via 351d498a39ca41b66e7c1f8aaf280076e2d1d151 (commit)
from 2762ceff10c06ff491290630faeee1584b7c96a3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 0d7f67c472aa4b8eef910aba339f247fde3b2134
Author: QuzarDC <qu...@co...>
Date: Sun May 4 13:26:01 2025 -0400
Update gitignore to ignore intermediate bin2c file.
With #977 the ARM firmware is now using bin2c so
an intermediary .c file is created that should
be ignored by git.
commit 3ab157c5d80b0500039d4d6ecbfcb54b19469e40
Author: Paul Cercueil <pa...@cr...>
Date: Mon May 5 00:10:44 2025 +0200
ldscript: Drop SEARCH_DIR
It has been pointing to the wrong path for years, without causing any
issues; which means we don't really need it and it can safely be
dropped.
Signed-off-by: Paul Cercueil <pa...@cr...>
commit a5d88d7b0a816302b0a9f1f6ed52ae36dfd38f23
Author: Paul Cercueil <pa...@cr...>
Date: Fri Apr 25 16:00:35 2025 +0200
ldscript: Add icache-aligned subsections
These subsections can be used to enforce specific functions to be
sitting close together in the binary, to make sure that they won't flush
one another outside the icache.
These can be used like this, for instance:
__attribute__((section(".sub0")))
int my_function(void) {
...
}
These subsections only take the space of the functions they contain. If
they are not used, they don't take any space.
Signed-off-by: Paul Cercueil <pa...@cr...>
commit fb4de26ba11483edcaf7c41cdc1decfe9e36b1f5
Author: Paul Cercueil <pa...@cr...>
Date: Fri Apr 25 15:59:46 2025 +0200
ldscripts: Drop old Naomi linker script
It is not used anymore.
Signed-off-by: Paul Cercueil <pa...@cr...>
commit 351d498a39ca41b66e7c1f8aaf280076e2d1d151
Author: Paul Cercueil <pa...@cr...>
Date: Fri Apr 25 15:57:13 2025 +0200
ldscripts: Use one linker script for all subarchs
Using one linker script per subarch is the best way to involuntarily
introduce bugs. For instance, the shlelf-naomi.xc was missing the
.monitors section.
Since the only difference between the two (apart from the missing
.monitors section) was the load address, set the default at 0x8c010000
and allow the environment to override the load address.
Signed-off-by: Paul Cercueil <pa...@cr...>
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 1 +
environ_dreamcast.sh | 7 +-
utils/ldscripts/shlelf-naomi.xc | 254 ----------------------------------------
utils/ldscripts/shlelf.xc | 38 +++++-
4 files changed, 40 insertions(+), 260 deletions(-)
delete mode 100644 utils/ldscripts/shlelf-naomi.xc
diff --git a/.gitignore b/.gitignore
index 7552e5e2..cb2657a4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ kernel/stubs/*.c
kernel/exports/kernel_exports.c
kernel/arch/dreamcast/kernel/arch_exports.c
kernel/arch/dreamcast/kernel/banner.h
+kernel/arch/dreamcast/sound/snd_stream_drv.c
kernel/arch/dreamcast/sound/arm/stream.drv
utils/bincnv/bincnv
utils/genromfs/genromfs
diff --git a/environ_dreamcast.sh b/environ_dreamcast.sh
index f5adfe5a..ced09d2f 100644
--- a/environ_dreamcast.sh
+++ b/environ_dreamcast.sh
@@ -24,15 +24,14 @@ fi
export KOS_CFLAGS="${KOS_CFLAGS} ${KOS_SH4_PRECISION} -ml -mfsrra -mfsca -ffunction-sections -fdata-sections -matomic-model=soft-imask -ftls-model=local-exec"
export KOS_AFLAGS="${KOS_AFLAGS} -little"
+export KOS_LDFLAGS="${KOS_LDFLAGS} ${KOS_SH4_PRECISION} -ml -Wl,--gc-sections"
+export KOS_LD_SCRIPT="-T${KOS_BASE}/utils/ldscripts/shlelf.xc"
if [ x${KOS_SUBARCH} = xnaomi ]; then
export KOS_CFLAGS="${KOS_CFLAGS} -D__NAOMI__"
- export KOS_LDFLAGS="${KOS_LDFLAGS} ${KOS_SH4_PRECISION} -ml -Wl,-Ttext=0x8c020000 -Wl,--gc-sections"
- export KOS_LD_SCRIPT="-T${KOS_BASE}/utils/ldscripts/shlelf-naomi.xc"
+ export KOS_LDFLAGS="${KOS_LDFLAGS} -Wl,--defsym=LOAD_OFFSET=0x8c020000"
else
export KOS_CFLAGS="${KOS_CFLAGS} -D__DREAMCAST__"
- export KOS_LDFLAGS="${KOS_LDFLAGS} ${KOS_SH4_PRECISION} -ml -Wl,-Ttext=0x8c010000 -Wl,--gc-sections"
- export KOS_LD_SCRIPT="-T${KOS_BASE}/utils/ldscripts/shlelf.xc"
fi
# If we're building for DC, we need the ARM compiler paths as well.
diff --git a/utils/ldscripts/shlelf-naomi.xc b/utils/ldscripts/shlelf-naomi.xc
deleted file mode 100644
index bc63d035..00000000
--- a/utils/ldscripts/shlelf-naomi.xc
+++ /dev/null
@@ -1,254 +0,0 @@
-/* Script for -z combreloc: combine and sort reloc sections */
-OUTPUT_FORMAT("elf32-shl", "elf32-shl",
- "elf32-shl")
-OUTPUT_ARCH(sh)
-ENTRY(start)
-SEARCH_DIR("/opt/toolchains/dc/sh-elf/sh-elf/lib");
-SECTIONS
-{
- /* Read-only sections, merged into text segment: */
- PROVIDE (__executable_start = 0x8c020000); . = 0x8c020000;
- .text :
- {
- *(.text .stub .text.* .gnu.linkonce.t.*)
- /* .gnu.warning sections are handled specially by elf32.em. */
- *(.gnu.warning)
- } =0
- .init :
- {
- KEEP (*(.init))
- } =0
- .fini :
- {
- KEEP (*(.fini))
- } =0
- .interp : { *(.interp) }
- .note.gnu.build-id : { *(.note.gnu.build-id) }
- .hash : { *(.hash) }
- .gnu.hash : { *(.gnu.hash) }
- .dynsym : { *(.dynsym) }
- .dynstr : { *(.dynstr) }
- .gnu.version : { *(.gnu.version) }
- .gnu.version_d : { *(.gnu.version_d) }
- .gnu.version_r : { *(.gnu.version_r) }
- .rel.dyn :
- {
- *(.rel.init)
- *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
- *(.rel.fini)
- *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
- *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
- *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
- *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
- *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
- *(.rel.ctors)
- *(.rel.dtors)
- *(.rel.got)
- *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
- *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
- *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
- *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
- *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
- }
- .rela.dyn :
- {
- *(.rela.init)
- *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
- *(.rela.fini)
- *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
- *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
- *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
- *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
- *(.rela.ctors)
- *(.rela.dtors)
- *(.rela.got)
- *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
- *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
- *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
- *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
- *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
- }
- .rel.plt : { *(.rel.plt) }
- .rela.plt : { *(.rela.plt) }
- .plt : { *(.plt) }
- PROVIDE (__etext = .);
- PROVIDE (_etext = .);
- PROVIDE (etext = .);
- .rodata :
- {
- *(.rodata .rodata.* .gnu.linkonce.r.*)
- . = ALIGN(4);
- __tdata_align = .;
- LONG (ALIGNOF(.tdata));
- . = ALIGN(4);
- __tbss_align = .;
- LONG (ALIGNOF(.tbss));
- . = ALIGN(4);
- }
- .rodata1 : { *(.rodata1) }
- .sdata2 :
- {
- *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
- }
- .sbss2 : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
- .eh_frame_hdr : { *(.eh_frame_hdr) }
- .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
- .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
- /* Adjust the address for the data segment. We want to adjust up to
- the same address within the page on the next page up. */
- . = ALIGN(128) + (. & (128 - 1));
- /* Exception handling */
- .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
- .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
- /* Thread Local Storage sections */
- .tdata :
- {
- __tdata_start = .;
- *(.tdata .tdata.* .gnu.linkonce.td.*)
- }
- __tdata_size = SIZEOF(.tdata);
- .tbss (NOLOAD) :
- {
- *(.tbss .tbss.* .gnu.linkonce.tb.*)
- *(.tcommon)
- }
- __tbss_size = SIZEOF(.tbss);
- .preinit_array :
- {
- PROVIDE_HIDDEN (__preinit_array_start = .);
- KEEP (*(.preinit_array))
- PROVIDE_HIDDEN (__preinit_array_end = .);
- }
- .init_array :
- {
- PROVIDE_HIDDEN (__init_array_start = .);
- KEEP (*(SORT(.init_array.*)))
- KEEP (*(.init_array))
- PROVIDE_HIDDEN (__init_array_end = .);
- }
- .fini_array :
- {
- PROVIDE_HIDDEN (__fini_array_start = .);
- KEEP (*(.fini_array))
- KEEP (*(SORT(.fini_array.*)))
- PROVIDE_HIDDEN (__fini_array_end = .);
- }
- .ctors :
- {
- ___ctors = .;
- /* gcc uses crtbegin.o to find the start of
- the constructors, so we make sure it is
- first. Because this is a wildcard, it
- doesn't matter if the user does not
- actually link against crtbegin.o; the
- linker won't look for a file to match a
- wildcard. The wildcard also means that it
- doesn't matter which directory crtbegin.o
- is in. */
- KEEP (*crtbegin.o(.ctors))
- KEEP (*crtbegin?.o(.ctors))
- /* We don't want to include the .ctor section from
- the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- ___ctors_end = .;
- }
- .dtors :
- {
- ___dtors = .;
- KEEP (*crtbegin.o(.dtors))
- KEEP (*crtbegin?.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- ___dtors_end = .;
- }
- .jcr : { KEEP (*(.jcr)) }
- .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
- .dynamic : { *(.dynamic) }
- .data :
- {
- *(.data .data.* .gnu.linkonce.d.*)
- SORT(CONSTRUCTORS)
- }
- .data1 : { *(.data1) }
- .got : { *(.got.plt) *(.got) }
- /* We want the small data sections together, so single-instruction offsets
- can access them all, and initialized data all before uninitialized, so
- we can shorten the on-disk segment size. */
- .sdata :
- {
- *(.sdata .sdata.* .gnu.linkonce.s.*)
- }
- _edata = .; PROVIDE (edata = .);
- __bss_start = .;
- .sbss :
- {
- *(.dynsbss)
- *(.sbss .sbss.* .gnu.linkonce.sb.*)
- *(.scommon)
- }
- .bss :
- {
- *(.dynbss)
- *(.bss .bss.* .gnu.linkonce.b.*)
- *(COMMON)
- /* Align here to ensure that the .bss section occupies space up to
- _end. Align after .bss to ensure correct alignment even if the
- .bss section disappears because there are no input sections.
- FIXME: Why do we need it? When there is no .bss section, we don't
- pad the .data section. */
- . = ALIGN(. != 0 ? 32 / 8 : 1);
- }
- . = ALIGN(32 / 8);
- . = ALIGN(32 / 8);
- _end = .; PROVIDE (end = .);
- .ocram 0x7c001000 (NOLOAD) :
- {
- *(.ocram)
- /* We have 8kb of operand cache RAM. The next line lets ld throw
- an error if we exceed that size. */
- . = . > 0x2000 ? 0x2000 : .;
- }
- /* Stabs debugging sections. */
- .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) }
- .comment 0 : { *(.comment) }
- /* DWARF debug sections.
- Symbols in the DWARF debugging sections are relative to the beginning
- of the section so we begin them at 0. */
- /* DWARF 1 */
- .debug 0 : { *(.debug) }
- .line 0 : { *(.line) }
- /* GNU DWARF 1 extensions */
- .debug_srcinfo 0 : { *(.debug_srcinfo) }
- .debug_sfnames 0 : { *(.debug_sfnames) }
- /* DWARF 1.1 and DWARF 2 */
- .debug_aranges 0 : { *(.debug_aranges) }
- .debug_pubnames 0 : { *(.debug_pubnames) }
- /* DWARF 2 */
- .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
- .debug_abbrev 0 : { *(.debug_abbrev) }
- .debug_line 0 : { *(.debug_line) }
- .debug_frame 0 : { *(.debug_frame) }
- .debug_str 0 : { *(.debug_str) }
- .debug_loc 0 : { *(.debug_loc) }
- .debug_macinfo 0 : { *(.debug_macinfo) }
- /* SGI/MIPS DWARF 2 extensions */
- .debug_weaknames 0 : { *(.debug_weaknames) }
- .debug_funcnames 0 : { *(.debug_funcnames) }
- .debug_typenames 0 : { *(.debug_typenames) }
- .debug_varnames 0 : { *(.debug_varnames) }
- /* DWARF 3 */
- .debug_pubtypes 0 : { *(.debug_pubtypes) }
- .debug_ranges 0 : { *(.debug_ranges) }
- .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
- /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }
-}
diff --git a/utils/ldscripts/shlelf.xc b/utils/ldscripts/shlelf.xc
index 10358882..9da8df75 100644
--- a/utils/ldscripts/shlelf.xc
+++ b/utils/ldscripts/shlelf.xc
@@ -3,17 +3,51 @@ OUTPUT_FORMAT("elf32-shl", "elf32-shl",
"elf32-shl")
OUTPUT_ARCH(sh)
ENTRY(start)
-SEARCH_DIR("/usr/local/dc-new/sh-elf/sh-elf/lib");
+LOAD_OFFSET = DEFINED(LOAD_OFFSET) ? LOAD_OFFSET : 0x8c010000 ;
+
SECTIONS
{
/* Read-only sections, merged into text segment: */
- PROVIDE (__executable_start = 0x8c010000); . = 0x8c010000;
+ PROVIDE (__executable_start = LOAD_OFFSET); . = LOAD_OFFSET;
.text :
{
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
} =0
+
+ /* Custom sections, aligned to the icache size */
+ .sub0 : ALIGN(8192) {
+ *(.sub0*)
+ }
+ .sub1 : ALIGN(8192) {
+ *(.sub1*)
+ }
+ .sub2 : ALIGN(8192) {
+ *(.sub2*)
+ }
+ .sub3 : ALIGN(8192) {
+ *(.sub3*)
+ }
+ .sub4 : ALIGN(8192) {
+ *(.sub4*)
+ }
+ .sub5 : ALIGN(8192) {
+ *(.sub5*)
+ }
+ .sub6 : ALIGN(8192) {
+ *(.sub6*)
+ }
+ .sub7 : ALIGN(8192) {
+ *(.sub7*)
+ }
+ .sub8 : ALIGN(8192) {
+ *(.sub8*)
+ }
+ .sub9 : ALIGN(8192) {
+ *(.sub9*)
+ }
+
.init :
{
KEEP (*(.init))
hooks/post-receive
--
A pseudo Operating System for the Dreamcast.
|