mips multi-got error

David Daney ddaney@avtrex.com
Wed Jun 28 17:09:00 GMT 2006


ligang@sunnorth.com.cn wrote:
> 
> 
> 
> Hi all,
> 
> I am using mips ld to generate multi-got, but, it seems that ld can not
> generate multi-got for ld
> print a serial of "truncate..." error message. Is it a bug? or, is my usage
> not correct?
> 
> as command line is : ./mips-linux-elf-as multi-got.s -KPIC -o multi-got.o
> ld command line is : ./mips-linux-elf-ld multi-got.o
> 
> The test case is as follows:
> ===================================
> .macro  one_sym count
>         .globl  sym_1_\count
> sym_1_\count:
>         la      $2, sym_1_\count
>         .endm
> 
>         .text
>         .globl  func1
>         .ent    func1
> func1:
>         .frame  $sp,0,$31
>         .set noreorder
>         .cpload $25
>         .set reorder
>         .cprestore 8
>         .set noreorder
> 
>         .irp    milo,0,1
>         .irp    thou,0,1,2,3,4,5,6,7,8
>         .irp    hund,0,1,2,3,4,5,6,7,8,9
>         .irp    tens,0,1,2,3,4,5,6,7,8,9
>         .irp    ones,0,1,2,3,4,5,6,7,8,9
>         one_sym \milo\thou\hund\tens\ones
>         .endr
>         .endr
>         .endr
>         .endr
>         .endr
>         .end    func1
> =================================
> 
> 
> Best regards
>                      Ligang
> 

That is not supposed to work.  Multi-got linking only works if there are 
fewer than 8192 symbols per compilation unit (input .o to the linker). 
See the multi-got-1 testcase in ld/testsuite/ld-mips-elf.

If you need more than 8192 symbols per compilation unit you must use 
-xgot for the assembler.  Recent GCC versions have a -mxgot option that 
does the same thing for GCC.

David Daney.



More information about the Binutils mailing list