Hi
I am working on Shared flat file support for uClinux (No MMU ARM ).The
gcc version
I am using is 2.95 and 3.4.0.Theory of operation is similar to that
implemented for m68k.I have implemented -mshared-library-id flag ,and
store/ restore sl (GOT register in
arm)
I am not using the _current_shared_library_a5_offset_ .The library id
calculation(i.e id=arm_library_id * -4 -4) is done in the compiler
itself.The defsym argument to
linker(ld.real) in ld(script) is commented out.
so the gcc -mshared-library-id=1
generates following function prologue and epilogue(for gcc 2.95)
mov ip ,sp
stmdb sp!,{sl,fp,ip,lr,pc} /*store sl on stack*/
sub sl,sl,#8 /*bad hack to update sl*/
ldr sl,[sl] /*bad hack continues.. ideally this should be
one
instruction i.e ldr sl,[sl,# - 8] ...its in my TODO list*/
....................
...................
...................
ldmdb fp,{sl,fp,sp,pc} /*restore sl */
But to implement "-R" option it is s important that the function calls
should be via GOT i.e
******c-code**************
foo()
{}
main()
{
foo();
}
******************************
is to be called as
****compiler output***********
ldr r3, .L4
mov lr,pc
ldr pc[sl,r3]
.L4:
.word foo(GOT)
******************************
as opposed to
bl foo(PLT)
where sl holds the address of GOT.(binfmt_flat loader ensures that
before the program start)
in gcc 3.4.0 this is some how achieved if the function attribute
__attribute__((weak)) is specified.But no idea for 2.95
Kindly bail me out on this one.(I have posted a similar request on GCC
mailing list)
Sincere Thanks in advance.
Vivek Tyagi
_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev