This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH 10/20] MIPS/GAS: Fail on 64-bit addresses used with LI
"Maciej W. Rozycki" <macro@codesourcery.com> writes:
> On Tue, 7 Dec 2010, Richard Sandiford wrote:
>> Not OK. This trivially triggers for:
>>
>> li.d $f2,1.1
>>
>> assembled with -mabi=64 -G0.
>
> And rightfully so, broken code is produced:
>
> $ cat li_d.s
> li.d $f2, 1.1
> $ mips-sde-elf-as -mabi=64 -G0 -o li_d.o li_d.s
> $ mips-sde-elf-ld -m elf64btsmip -e0 -o li_d li_d.o
> $ mips-sde-elf-objdump -dt li_d
>
> li_d: file format elf64-tradbigmips
>
> SYMBOL TABLE:
> 0000000120000078 l d .MIPS.options 0000000000000000 .MIPS.options
> 0000000120000078 l d .text 0000000000000000 .text
> 0000000120000080 l d .rodata 0000000000000000 .rodata
> 0000000120010088 g .rodata 0000000000000000 _fdata
> 0000000120018080 g *ABS* 0000000000000000 _gp
> 0000000120000078 g .text 0000000000000000 _ftext
> 0000000120010088 g *ABS* 0000000000000000 __bss_start
> 0000000120010088 g *ABS* 0000000000000000 _edata
> 0000000120010088 g *ABS* 0000000000000000 _end
> 0000000120010088 g *ABS* 0000000000000000 _fbss
>
>
>
> Disassembly of section .text:
>
> 0000000120000078 <_ftext>:
> 120000078: 3c012000 lui at,0x2000
> 12000007c: d4220080 ldc1 $f2,128(at)
> $
>
> I don't think the code above gets at .rodata, do you?
You're just repeating what the FIXME already says: that the code doesn't
work correctly with addresses whose values exceed the 32-bit range.
I wasn't disputing that.
> With some tweaking we should be able to reuse code from M_L_DAB to handle
> this case (i.e. jump to there with some prearrangements), but I may not
> have the time to implement this stuff properly now. Why do you think
> silently making broken code is better than signalling an internal error
> (which it is) here?
An assertion failure is also a bug. Assertion failures are for
conditions that we think should never occur, so we shouldn't add
an assertion failure for a condition that is known to trigger.
We should either fix the FIXME or issue a proper diagnostic.
Richard