This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Correctly emit lo16 relocs for elf-dlx target, fixing bogus range checking bug.



  Hi everyone.  I came across this while fixing a gcc testsuite regression
on this same target.  Basically, lo/hi16 relocs were being bogusly checked
to see if the entire addend would fit into 16 bits, when after all it can be
a full 32 bits.  Lines of code like this:

    lhi     r1,%hi(.L1 + 200000)
    ori     r1,r0,%lo(.L1 + 200000)

produced incorrect error messages like this:

/gnu/src/gas/testsuite/gas/dlx/lohi.s:5: Error: value of 200004 too large
for field of 2 bytes at 6
/gnu/src/gas/testsuite/gas/dlx/lohi.s:6: Error: value of 200004 too large
for field of 2 bytes at 10

  Looking at it slightly closer, it turns out that the DLX assembler wasn't
ever generating lo16 relocs, but was emitting standard 16-bit relocs
instead.

  The attached patch fixes this problem.  With this patch, range checking is
turned off for hi/lo16 relocs; and a %lo operator generates a lo16 reloc,
while referring to a label directly as an operand generates an ordinary
16bit reloc as before.  There's also a testcase for the bug and necessary
updates to the other testcases that use %lo.  Passes make check with no
regressions.  It should be a small enough fix for assignment not to be an
issue.



2004-03-06  Dave Korn  <dk@artimi.com>

gas/config/

	* tc-dlx.c (md_assemble): set fx_no_overflow flag for
	hi16 and lo16 fixS structs.
	(md_assemble): generate bit_fixS for RELOC_DLX_LO16 in
	exactly the same way as for RELOC_DLX_REL16.
	(machine_ip): properly respect LO flag in the_insn and
	output RELOC_DLX_LO16 rather than RELOC_DLX_16.
	(md_apply_fix3): apply RELOC_DLX_LO16.

gas/testsuite/gas/

	* alltests.exp: execute new lohi test.
	* lohi.d, lohi.s: new test for spurious lo16/hi16
	reloc overflow checking.
	* itype.d, lhi.d: updated to properly expect lo16
	relocations where asked for.
	* lhi.d: corrected cut+paste error in test name.



    cheers, 
      DaveK
-- 
Can't think of a witty .sigline today....

Attachment: gas-diff.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]