Xavier Del Campo Romero
89b059cace
GNU ld fragments .bss into .sbss and .common (see man nm(1) for further reference). However, the linker script used by PSXSDK did not determine where to put such sections, causing some statically allocated objects to be placed **after** __bss_end, leading to undefined behaviour.
90 lines
1.8 KiB
Bash
Executable File
90 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# This shell script will generate the playstation.x linker script, and the psx-gcc and psx-elf2x shell scripts.
|
|
|
|
# You have to pass the PREFIX of the toolchain as the first argument of this shell script
|
|
|
|
echo "/*
|
|
* Linker script to generate an ELF file
|
|
* that has to be converted to PS-X EXE.
|
|
*/
|
|
|
|
TARGET(\"elf32-littlemips\")
|
|
OUTPUT_ARCH(\"mips\")
|
|
|
|
ENTRY(\"_start\")
|
|
|
|
SEARCH_DIR(\"$1/lib\")
|
|
STARTUP(start.o)
|
|
INPUT(-lpsx -lgcc)
|
|
|
|
SECTIONS
|
|
{
|
|
. = 0x80010000;
|
|
|
|
.text ALIGN(4) :
|
|
{
|
|
*(.text*)
|
|
}
|
|
|
|
.rodata ALIGN(4) :
|
|
{
|
|
*(.rodata)
|
|
}
|
|
|
|
.data ALIGN(4) :
|
|
{
|
|
*(.data)
|
|
}
|
|
|
|
.ctors ALIGN(4) :
|
|
{
|
|
*(.ctors)
|
|
}
|
|
|
|
.dtors ALIGN(4) :
|
|
{
|
|
*(.dtors)
|
|
}
|
|
|
|
.bss ALIGN(4) :
|
|
{
|
|
*(.bss)
|
|
*(.bss.*)
|
|
*(.gnu.linkonce.b.*)
|
|
*(COMMON)
|
|
*(.sbss)
|
|
*(.sbss.*)
|
|
*(.gnu.linkonce.sb.*)
|
|
*(.scommon)
|
|
}
|
|
|
|
__text_start = ADDR(.text);
|
|
__text_end = ADDR(.text) + SIZEOF(.text);
|
|
|
|
__rodata_start = ADDR(.rodata);
|
|
__rodata_end = ADDR(.rodata) + SIZEOF(.rodata);
|
|
|
|
__data_start = ADDR(.data);
|
|
__data_end = ADDR(.data) + SIZEOF(.data);
|
|
|
|
__ctor_list = ADDR(.ctors);
|
|
__ctor_end = ADDR(.ctors) + SIZEOF(.ctors);
|
|
|
|
__dtor_list = ADDR(.dtors);
|
|
__dtor_end = ADDR(.dtors) + SIZEOF(.dtors);
|
|
|
|
__bss_start = ADDR(.bss);
|
|
__bss_end = ADDR(.bss) + SIZEOF(.bss);
|
|
|
|
__scratchpad = 0x1f800000;
|
|
}
|
|
" > playstation.x
|
|
|
|
echo "#!/bin/sh
|
|
mipsel-unknown-elf-gcc -D__PSXSDK__ -fno-strict-overflow -fsigned-char -msoft-float -mno-gpopt -fno-builtin -g -I$1/include -T $1/mipsel-unknown-elf/lib/ldscripts/playstation.x \$*"> psx-gcc
|
|
chmod +x psx-gcc
|
|
echo "#!/bin/sh
|
|
mipsel-unknown-elf-g++ -D__PSXSDK__ -fno-strict-overflow -fsigned-char -msoft-float -mno-gpopt -fno-builtin -g -I$1/include -T $1/mipsel-unknown-elf/lib/ldscripts/playstation.x -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-use-cxa-atexit \$*" > psx-g++
|
|
chmod +x psx-g++
|