-
Notifications
You must be signed in to change notification settings - Fork 134
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes to use unpatched binutils for linking IRX #253
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# _____ ___ ____ ___ ____ | ||
# ____| | ____| | | |____| | ||
# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. | ||
#----------------------------------------------------------------------- | ||
# Copyright 2001-2004, ps2dev - http://www.ps2dev.org | ||
# Licenced under Academic Free License version 2.0 | ||
# Review ps2sdk README & LICENSE files for further details. | ||
|
||
all: | ||
|
||
include $(PS2SDKSRC)/Defs.make | ||
include $(PS2SDKSRC)/iop/Rules.make | ||
include $(PS2SDKSRC)/iop/Rules.release | ||
|
||
clean: | ||
|
||
release: | ||
$(ECHO) Installing $(IOP_SRC_DIR)linkfile into $(PS2SDK)/iop/startup | ||
cp -f $(IOP_SRC_DIR)linkfile $(PS2SDK)/iop/startup | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
/* | ||
# _____ ___ ____ ___ ____ | ||
# ____| | ____| | | |____| | ||
# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. | ||
#----------------------------------------------------------------------- | ||
# Copyright 2001-2022, ps2dev - http://www.ps2dev.org | ||
# Licenced under Academic Free License version 2.0 | ||
# Review ps2sdk README & LICENSE files for further details. | ||
# | ||
# Linkfile script for iop-ld | ||
*/ | ||
|
||
OUTPUT_FORMAT("elf32-littlemips") | ||
SEARCH_DIR(""); | ||
ENTRY(_start) | ||
PHDRS | ||
{ | ||
irxhdr 0x70000080 FLAGS (PF_R); /* 0x70000080 -> PT_SCE_IOPMOD */ | ||
defhdr PT_LOAD FLAGS (PF_X | PF_W | PF_R); | ||
} | ||
SECTIONS | ||
{ | ||
. = SIZEOF_HEADERS; | ||
/* | ||
* This is the .iopmod section for the IRX, it contains information that | ||
* the IOP uses when loading the IRX. | ||
* This section is placed in its own segment. | ||
*/ | ||
.iopmod 0 (COPY) : ALIGN(4) { | ||
/* | ||
* The linker will replace this first LONG with a pointer to _irx_id | ||
* if the symbol has been defined. | ||
*/ | ||
LONG (DEFINED(_irx_id) ? ABSOLUTE(_irx_id) : 0xffffffff) ; | ||
LONG (ABSOLUTE(_start)) ; | ||
LONG (_gp) ; | ||
LONG (SIZEOF(.text)) ; | ||
LONG (SIZEOF(.data)) ; | ||
LONG (SIZEOF(.bss)) ; | ||
/* | ||
* The linker will put a SHORT here with the version of the IRX | ||
* (or zero if there is no version). | ||
*/ | ||
/* | ||
* The linker will put a null terminated string here containing the | ||
* name of the IRX (or an empty string if the name is not known). | ||
*/ | ||
KEEP (* ( .iopmod )) ; | ||
FILL(0x00000000); | ||
} :irxhdr = 0 | ||
|
||
.text 0 : ALIGN(16) { | ||
CREATE_OBJECT_SYMBOLS | ||
PROVIDE (_ftext = .) ; | ||
KEEP (* ( .module.imports )) ; | ||
* ( .text ) | ||
* ( .text.* ) | ||
* ( .init ) | ||
* ( .fini ) | ||
KEEP (* ( .module.exports )) ; | ||
PROVIDE (_etext = .) ; | ||
} :defhdr = 0 | ||
|
||
.rodata : ALIGN(16) { | ||
* ( .rdata ) | ||
* ( .rodata ) | ||
* ( .rodata1 ) | ||
* ( .rodata.* ) | ||
} :defhdr = 0 | ||
|
||
.data : ALIGN(16) { | ||
* ( .data ) | ||
* ( .data1 ) | ||
* ( .data.* ) | ||
CONSTRUCTORS | ||
} :defhdr = 0 | ||
|
||
.bss : ALIGN(16) { | ||
* ( .bss ) | ||
* ( .bss.* ) | ||
* ( COMMON ) | ||
. = ALIGN(4) ; | ||
} :defhdr | ||
_gp = ALIGN(16) ; | ||
|
||
/* | ||
* These are the stuff that we don't want to be put in an IRX. | ||
*/ | ||
/DISCARD/ : { | ||
* ( .MIPS.abiflags ) | ||
* ( .comment ) | ||
* ( .debug_* ) | ||
* ( .gnu.attributes ) | ||
* ( .mdebug.* ) | ||
* ( .reginfo ) | ||
* ( .symtab ) | ||
* ( .strtab ) | ||
* ( .shstrtab ) | ||
/* | ||
* This must go because it confuses the IOP kernel (treated as a reloc section). | ||
*/ | ||
* ( .pdr ) | ||
/* | ||
* Until I can figure out if there's a better way to rid ourselves of | ||
* .rel.dyn this will have to do. - MRB | ||
*/ | ||
* ( .rel.dyn ) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# _____ ___ ____ ___ ____ | ||
# ____| | ____| | | |____| | ||
# | ___| |____ ___| ____| | \ PS2DEV Open Source Project. | ||
#----------------------------------------------------------------------- | ||
# Copyright 2001-2022, ps2dev - http://www.ps2dev.org | ||
# Licenced under Academic Free License version 2.0 | ||
# Review ps2sdk README & LICENSE files for further details. | ||
|
||
TOOLS_OBJS = ps2-irxgen.o | ||
|
||
include $(PS2SDKSRC)/Defs.make | ||
include $(PS2SDKSRC)/tools/Rules.bin.make | ||
include $(PS2SDKSRC)/tools/Rules.make | ||
include $(PS2SDKSRC)/tools/Rules.release |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you explain all these flags and why the are needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
--gpsize=0
Set the maximum size of objects to be optimized using the GP register to size. This is only meaningful for object file formats such as MIPS ELF that support putting large and small objects into different sections. This is ignored for other object file formats.
-G0
Set the maximum size of objects to be optimized using the GP register to size. This is only meaningful for object file formats such as MIPS ELF that support putting large and small objects into different sections. This is ignored for other object file formats.
--nmagic
Turn off page alignment of sections, and disable linking against shared libraries. If the output format supports Unix style magic numbers, mark the output as "NMAGIC".
--orphan-handling=error
Control how orphan sections are handled. An orphan section is one not specifically mentioned in a linker script.
The linker will exit with an error if any orphan section is found.
--discard-all
Delete all local symbols.
--gc-sections
Enable garbage collection of unused input sections. It is ignored on targets that do not support this option. The default behaviour (of not performing this garbage collection) can be restored by specifying --no-gc-sections on the command line. Note that garbage collection for COFF and PE format targets is supported, but the implementation is currently considered to be experimental.
--gc-sections decides which input sections are used by examining symbols and relocations. The section containing the entry symbol and all sections containing symbols undefined on the command-line will be kept, as will sections containing symbols referenced by dynamic objects. Note that when building shared libraries, the linker must assume that any visible symbol is referenced. Once this initial set of sections has been determined, the linker recursively marks as used any section referenced by their relocations. See --entry, --undefined, and --gc-keep-exported.
This option can be set when doing a partial link (enabled with option -r). In this case the root of symbols kept must be explicitly specified either by one of the options --entry, --undefined, or --gc-keep-exported or by a "ENTRY" command in the linker script.
As a GNU extension, ELF input sections marked with the "SHF_GNU_RETAIN" flag will not be garbage collected.
--emit-relocs
Leave relocation sections and contents in fully linked executables. Post link analysis and optimization tools may need this information in order to perform correct modifications of executables. This results in larger executables.
This option is currently only supported on ELF platforms.
-z,max-page-size=128
The recognized keywords are:
Set the maximum memory page size supported to 128.
--no-relax
An option with machine dependent effects. This option is only supported on a few targets.
On some platforms the --relax option performs target specific, global optimizations that become possible when the linker resolves addressing in the program, such as relaxing address modes, synthesizing new instructions, selecting shorter version of current instructions, and combining constant values.
On some platforms these link time global optimizations may make symbolic debugging of the resulting executable impossible. This is known to be the case for the Matsushita MN10200 and MN10300 family of processors.
On platforms where the feature is supported, the option --no-relax will disable it.
On platforms where the feature is not supported, both --relax and --no-relax are accepted, but ignored.