[MIPS] Fix $gp usage
authorShinya Kuribayashi <shinya.kuribayashi@necel.com>
Sun, 21 Oct 2007 01:55:36 +0000 (10:55 +0900)
committerShinya Kuribayashi <skuribay@ruby.dti.ne.jp>
Sun, 21 Oct 2007 01:55:36 +0000 (10:55 +0900)
commit22069215eb7adf5a3888bf7c7784ea9d70a72cd0
tree12fe5fd8d2a5a2009e0a910b3c2bd9011de0e575
parentcbf2323b5b8285ea01acba7bbb905a3162d9b021
[MIPS] Fix $gp usage

Now we load $gp with _GLOBAL_OFFSET_TABLE_, but this is incorrect use.
As a general principle, we should use _gp for $gp.

Thanks to linker script's help we fortunately have _gp which equals to
_GLOBAL_OFFSET_TABLE_. But once _gp gets out of alignment, we will not
be able to access to GOT entires, global variables and procedure entry
points. The right thing to do is to use _gp.

This patch also introduce a new symbol `.gpword _GLOBAL_OFFSET_TABLE_'
which holds the offset from _gp. When updating GOT entries, we use this
offset and _gp to calculate the final _GLOBAL_OFFSET_TABLE_.

This patch is originally submitted by Vlad Lungu <vlad@comsys.ro>, then
I made some change to leave over num_got_entries.

Signed-off-by: Shinya Kuribayashi <shinya.kuribayashi@necel.com>
Cc: Vlad Lungu <vlad@comsys.ro>
cpu/mips/start.S