This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
You want to use the address of _SDA_BASE_, not the contents. In C,
it would look like this:
int main(int argc, char **argv) {
extern void _SDA_BASE_;
printf("_SDA_BASE_ = 0x%08x\n", (int) &_SDA_BASE_);
exit(0);
}
In your _start, you can try this to set r13 = _SDA_BASE_:
lis 13,_SDA_BASE_@ha
addi 13,13,_SDA_BASE_@l
On Friday 20 September 2002 10:35 am, mwette@grover.jpl.nasa.gov wrote:
> I am looking for insight/help in working with the GNU loader. I am
> trying to work with my own versions of startup code, etc to understand
> how _start, _eabi, main, crt0, ... all work together. I am using
> gcc-2.95.3, binutils-2.12.1, gdb-5.2, all compiled on suse-linux 7.2
> for target powerpc-eabi. I am running against the (psim) simulator
> in gdb via "run -e bug".
>
> Here is the problem. I want to initialize r13 with the address of the
> start of .sdata segment. If I look in the map file that is generated
> by the loader, this address, given by _SDA_BASE_, is 0xa5a8. When I
> copy _SDA_BASE_ to "v1" and print it out from the program I get 0x125a8.
> Bitwise these are
>
> 0xa5a8 0000 0000 0000 0000 1010 0101 1010 0100
> 0x125a8 0000 0000 0000 0001 0010 0101 1010 0100
> ^ ^
> Does anyone have a clue what is going on here and what I might be going
> wrong? Any help would be appreciated. Relevant snippets of code
> included below.
>
> Thanks,
> Matt
>
>
> --- run ---
>
> albacore$ powerpc-eabi-run -e bug load4
> v1=0x125a8 (_SDA_BASE_)
>
>
> --- load4.map ---
>
> .sdata 0x0000a5a8 0x120
> 0x0000a5a8 PROVIDE (__sda_base, .)
> 0x0000a5a8 __sdata_start = .
>
>
> --- main.c ---
>
> unsigned long v1;
>
> printf("v1=0x%x (_SDA_BASE_)\n", v1);
>
>
> --- Makefile ---
> load4: main.o kos.o kos1.o kos0.o kos_i.o kos_n.o kos4b.ld
> powerpc-eabi-ld -o load4 \
> -M >load4.map \
> -g -N -Bstatic -T kos4b.ld \
> -L/usr/local/powerpc-eabi/lib \
> kos_i.o \
> main.o kos.o kos1.o kos0.o \
> -lucos1 --start-group -lmvme -lc --end-group \
> kos_n.o
>
>
> --- kos_i.S ---
>
> .section ".sdata","aw"
> .weak _SDA_BASE_
> .type _SDA_BASE_,@object
> _SDA_BASE_:
>
>
> --- kos1.S (startup code) ---
>
> .section ".got"
> .align 2
> .LCTOC1 = .
> .Ltable = .-.LCTOC1
> .Lsda = .-.LCTOC1
> .long _SDA_BASE_
>
> _start:
> ...
> .extern v1
> lwz %r7,.Lsda(%r5)
> lis %r6,v1@ha
> stw %r7,v1@l(%r6)
>
>
> --- kos4b.ld ---
>
> PHDRS
> {
> headers PT_PHDR FILEHDR PHDRS ;
> text PT_LOAD ; /* text */
> data PT_LOAD ; /* data */
> }
>
> SECTIONS
> {
> .text :
> {
> . = 0x0000;
> kos0.o(.text)
> . = 0x3000;
> kos1.o(.text)
> kos.o(.text)
> *(.text)
> } :text =0
> PROVIDE (__etext = .); PROVIDE (_etext = .); PROVIDE (etext = .);
> .sdata : {
> PROVIDE(__sda_base = . );
> __sdata_start = . ;
> *(.sdata)
> __sdata_end = . ;
> kos*(.sbss)
> *(.sbss)
> } :data = 0
> ...
>
>
>
> ------
> Want more information? See the CrossGCC FAQ,
> http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to
> crossgcc-unsubscribe@sources.redhat.com
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |