boottime kernel relocation, what I missed?
Becky Bruce
becky.bruce at freescale.com
Tue Jul 17 06:51:31 EST 2007
On Jul 16, 2007, at 2:36 PM, meerkat wrote:
> So are you saying linker does all the relative reference, that the
> bl foo
> is always relative even though the foo is defined in a different
> module? (In
> my case, bl call is made in head.S, early_init() is defined in
> another file
> setup.c).
If you see "bl foo", it's relative. It has to be, because that's how
the instruction works. Also, it's not really in a different module,
it's just a different file, but it's all linked into a single
executable image.
Cheers,
-Becky
>
> Regards,
>
> Jim
>
>
>
>
> Becky Bruce wrote:
>>
>>
>> On Jul 13, 2007, at 5:07 PM, meerkat wrote:
>>
>>>
>>> Figure that out, the bootstrap actually mapped the first 16M from
>>> C000000 to
>>> the physicall address,
>>> so calling a c routine, as long as it is in the first 16M, is OK
>>>
>>
>> I think you're still not understanding the fact that "bl" is a
>> *relative* branch - the branch target in the instruction encoding is
>> just an offset from the current address, not an effective address.
>> The bl should work correctly whether the code is actually running at
>> the link address reported by nm (0xcxxxxxxx in this case), or if it
>> has been loaded and executed elsewhere.
>>
>> Refer to the 32-bit Programming Environments Manual for PowerPC, or
>> in the EREF (if you're using a BookE part - e500/e200) for more
>> details. If you're just learning PowerPC assembler, you should
>> really give this book a good thourough read.
>>
>>>
>>> meerkat wrote:
>>>>
>>>> Good day all,
>>>>
>>>> For the first time I begin working on PPC, and on low level, and
>>>> right
>>>> start from boot sequence, one issue puzzled me.
>>>>
>>>> After bootstrap code (zImage) uncompressed the kernel vmLinux to
>>>> physical
>>>> memory (say from addr 0),
>>>> it jumps to the kernel entry point, _start, using physically
>>>> address.
>>
>> If you read the book specified above, you will see that branch
>> instructions always specify an effective address, not a physical
>> address. You can disable translation or map the address so EA=PA,
>> but that's a different issue.
>>
>> -Becky
>> _______________________________________________
>> Linuxppc-embedded mailing list
>> Linuxppc-embedded at ozlabs.org
>> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
>>
>>
>
> --
> View this message in context: http://www.nabble.com/boottime-kernel-
> relocation%2C-what-I-missed--tf4072673.html#a11629480
> Sent from the linuxppc-embedded mailing list archive at Nabble.com.
>
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
More information about the Linuxppc-embedded
mailing list