This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PIC and arm/linux-crt0.S


On 6/26/06, Shaun Jackman <sjackman@gmail.com> wrote:
The manner in which arm/linux-crt0.S writes to environ is not
compatible with PIC. So, I can either...

* patch linux-crt0.S and write the PIC store operation in assembler
        (I'm more inclined to let the compiler do this for me)
* have _start call _main instead of main and do the write there
        * and add _main to linux-syscalls1.c
        * or create a new linux-crt1.c to hold _main.

I hacked up linux-crt1.c, and I prefer it over the other options. See below for the source code. It saves me from emulating a compiler, and handles other code generation cases I probably haven't thought of. The downside is that it requires both a linux-crt0.S and a linux-crt1.c. Although, with this change the primary purpose of linux-crt0.S would be to change into thumb mode. I could do instead accomplish this task in a couple lines of inline assembler and entirely replace linux-crt0.S with linux-crt0.c.

Cheers,
Shaun

#include <stdlib.h>
#include <unistd.h>

int _main(int argc, char *argv[])
{
	environ = argv + argc + 1;
	exit(main(argc, argv, environ));
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]