wanted: relocation for each field of instruction

John Reiser jreiser@BitWagon.com
Fri Mar 6 17:26:00 GMT 2009


Hi,

I'm looking for the ability to relocate each field of an instruction,
particularly any field which holds an immediate value.  My compiler
generates machine-code schemas where the opcodes are fixed, but the
immediate values (shift amounts, offsets, etc.) are variable.
I seek the ability to re-assign these "absolute" quantities
at module binding time (/bin/ld).

For instance in Thumb mode on ARM:
	.code 16
	lsr r0,r1,#foo    /* 5-bit immediate shift count */
	add r3,r2,#bar    /* 3-bit immediate increment */
	ldr r3,[r4,#baz]  /* 8-bit base offset */
Current assembler complains:
   reloc.S:2: Error: cannot represent THUMB_SHIFT relocation in this object file format
   reloc.S:3: Error: cannot represent THUMB_ADD relocation in this object file format
   reloc.S:4: Error: cannot represent THUMB_OFFSET relocation in this object file format

In the future my schemas might expand to allow register numbers to be
re-assigned too.  This would enable cross-procedure optimization by
re-writing calling sequences to use a different register assignment.

It seems to me that making THUMB_SHIFT, THUMB_ADD, and THUMB_OFFSET
visible and known to the linker would be one way to get what I want.
Comments?

-- 



More information about the Binutils mailing list