Skip to content
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

Initial analysis fails while loading main.dol for game G4IP52 #16

Open
therealjohnpitt opened this issue Mar 4, 2024 · 1 comment
Open
Labels
prodg ProDG (unsupported)

Comments

@therealjohnpitt
Copy link

While trying to setup a project with Shrek Smash n' Crash Racing, the static analysis fails without filling any of the symbols.txt or splits.txt. The game has no ELF/REL, only a DOL file.

WARN module{name=main}: Failed to locate _rom_copy_info    
 WARN module{name=main}: Failed to locate BSS sections    
Failed: While loading object 'main.dol'
 
Caused by:
    0: While processing 1:0x800A36D4: FunctionSlices {
           blocks: {
               1:0x800A36D4: Some(
                   1:0x800A36F8,
               ),
               1:0x800A36F8: None,
               1:0x800A3734: Some(
                   1:0x800A3744,
               ),
               1:0x800A3744: None,
               1:0x800A374C: Some(
                   1:0x800A3754,
               ),
               1:0x800A3754: None,
           },
           branches: {
               1:0x800A36F4: [
                   1:0x800A36F8,
                   1:0x800A3734,
               ],
               1:0x800A3740: [
                   1:0x800A3744,
                   1:0x800A374C,
               ],
               1:0x800A3750: [
                   1:0x800A3754,
               ],
           },
           function_references: {
               1:0x800A3ED4,
           },
           jump_table_references: {},
           prologue: Some(
               1:0x800A36D4,
           ),
           epilogue: None,
           possible_blocks: {},
           has_conditional_blr: false,
           has_rfi: false,
           finalized: false,
           has_r1_load: false,
       } [
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Constant(
                   2151700640,
               ),
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Constant(
                   2151635104,
               ),
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Constant(
                   0,
               ),
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
           Gpr {
               value: Unknown,
               hi_addr: None,
               lo_addr: None,
           },
       ]
    1: Found duplicate prologue: 1:0x800A36D4 and 1:0x800A3754
ninja: error: rebuilding 'build.ninja': subcommand failed
@encounter
Copy link
Owner

It looks like this game is built with ProDG (a GCC toolchain). This is usually indicated by:

WARN module{name=main}: Failed to locate _rom_copy_info    
WARN module{name=main}: Failed to locate BSS sections    

Unfortunately, decomp-toolkit's analyzer is mostly written with Metrowerks in mind, since the vast majority of games are built with the official toolchain. It's not an easy lift to get ProDG games working.

I'll leave this issue open in case that changes in the future.

@encounter encounter added the prodg ProDG (unsupported) label Mar 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
prodg ProDG (unsupported)
Projects
None yet
Development

No branches or pull requests

2 participants