Subject: Re: RFC: Change SWI number base?
To: David Laight <David.Laight@btinternet.com>
From: Richard Earnshaw <rearnsha@arm.com>
List: port-arm
Date: 01/09/2002 10:48:41
> No need, "align 0" has always meant "word aligned" for traditional
> > compatibility with old assemblers (pre gas).
>
> Is that 2-byte of 4-byte here?
.align 0 always give 4-byte alignment.
> The 'pc' value when the 'bx pc' is done MUST be a multiple of 4.
> Apparantly (inspite of what the ARM ARM may have said) some cpus
> don't ignore bit 1 of the pc when doing pc relative loads - so
> find all your constants rotated by 16 bits :-)
Eh? Can you cite examples?
> If (many) of the syscall hooks are in one file, making the final sequence:
>
> swi nnn
> bxcc lt
> b __go_cerror
>
> __go_cerror:
> ldr r12,=__cerror
> bx r12
>
> saves a few bytes and makes each hook 16 bytes - so they fit niceley
> into cache lines.
But costs an extra non-predictable branch (very expensive on XScale). I'm
not suggesting that we should look at something like this, but the cost
has to be borne in mind.
> Now work out the optimal order for the hooks, then
> get the .balign 32 to work (it doesn't in the arm a.out build I've used).
a.out object files on ARM only maintain the sections to 4-byte alignment,
so will ignore attempts to force greater alignment. The linker simply
concatenates each similar section ensuring that they start on a 4-byte
boundary.
R.