Hi Rich,

I have ported musl libraries for MIPS n64 ABI architecture and I have setup $gp as

Crt1.s:  

lui           $3,%hi(%neg(%gp_rel(_start)))

            daddu   $3,$3,$25                                                /* same in dlsym.s and pipe.s */

            daddiu  $gp,$3,%lo(%neg(%gp_rel(_start)))

            ld      $4, %got_disp(main)($gp)   # Get main() ..

 

I didn’t setup $gp as in MIPS o32 ABI as we shouldn’t use _gp_disp for setting up $gp

The special symbol name _gp_disp, used for relocating the calculation of gp on entry to a DSO in 32-bit files, is

not supported in ELF-64 or in the new 32-bit ABI. Instead, these relocations should be composed with

R_MIPS_GPREL applied to an explicit symbol for the entry point of the subprogram

 

involves loading the difference between the entry

address of a subprogram s and the runtime gp for establishing gp:

A: lui rx, %hi(%neg(%gp_rel(s)))# load high part of diff

B: daddiu rx, rx, %lo(%neg(%gp_rel(s)))# add low part

C: dadd gp, t9, rx # add to entry address 

 

Now I am able to build dynamic n64 musl libraries and n64 dynamic application but it’s not showing any relocation with it

and execution of application is giving errors like “unsupported relocation type errors”

$ objdump -R main

 

a.out:     file format elf64-tradbigmips

 

DYNAMIC RELOCATION RECORDS (none)

 

$ ./main

Error relocating libc.so: unsupported relocation type 482431

Error relocating libc.so: unsupported relocation type 482687

Error relocating libc.so: unsupported relocation type 482943

Error relocating libc.so: unsupported relocation type 483199

;

;

;

Segmentation fault

 

So Can you suggest how can I resolve these errors? I am thinking like either doing changes in do_mips_reloc(),do_relocs() functions in musl sources or in usage of relocations.

 

 

Thank You In Advance.

 

Thanks,

Mahesh