Change to track the new calling convention for execve. This version only
needs one line of assembler to initialise gp.
This commit is contained in:
parent
f16813dcd5
commit
f075c7df77
@ -60,25 +60,9 @@ extern int etext;
|
||||
char **environ;
|
||||
char *__progname = "";
|
||||
|
||||
__asm ("
|
||||
.text
|
||||
.global _start
|
||||
.proc _start
|
||||
_start:
|
||||
alloc r14=ar.pfs,0,0,3,0 ;;
|
||||
mov out0=sp
|
||||
mov out1=r14
|
||||
mov out2=r15
|
||||
mov r14=15 ;;
|
||||
andcm sp=sp,r14 ;;
|
||||
add sp=-16,sp
|
||||
movl gp=_GLOBAL_OFFSET_TABLE_
|
||||
br.call.sptk rp=_start2
|
||||
.endp _start");
|
||||
|
||||
/* The entry function. */
|
||||
void
|
||||
_start2(char **ap,
|
||||
_start(char **ap,
|
||||
struct ps_strings *ps_strings,
|
||||
void (*cleanup)(void))
|
||||
{
|
||||
@ -86,6 +70,8 @@ _start2(char **ap,
|
||||
char **argv;
|
||||
char **env;
|
||||
|
||||
__asm __volatile("movl gp=_GLOBAL_OFFSET_TABLE_");
|
||||
|
||||
argc = * (long *) ap;
|
||||
argv = ap + 1;
|
||||
env = ap + 2 + argc;
|
||||
|
Loading…
x
Reference in New Issue
Block a user