From 1d2e9585b44e527233dc0c87601a4bf196f12997 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 8 Jul 2005 02:01:24 +0000 Subject: fix GET_ARGV() so it pulls out the argc/argv/envp properly --- ldso/ldso/x86_64/dl-startup.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ldso/ldso/x86_64') diff --git a/ldso/ldso/x86_64/dl-startup.h b/ldso/ldso/x86_64/dl-startup.h index 1b83e5d91..468fd4703 100644 --- a/ldso/ldso/x86_64/dl-startup.h +++ b/ldso/ldso/x86_64/dl-startup.h @@ -1,7 +1,10 @@ /* vi: set sw=4 ts=4: */ /* * Architecture specific code used by dl-startup.c - * Copyright (C) 2000-2004 by Erik Andersen + * Copyright (C) 2000-2005 by Erik Andersen + * Copyright (C) 2005 by Mike Frysinger + * + * Parts taken from glibc/sysdeps/x86_64/dl-machine.h */ asm( " .text\n" @@ -24,6 +27,8 @@ asm( " subl %eax, %edx\n" " # Push argc back on the stack.\n" " pushq %rdx\n" + " # argc -> rsi\n" + " movq %rdx, %rsi\n" " # Pass our finalizer function to the user in %rdx, as per ELF ABI.\n" " leaq _dl_fini(%rip), %rdx\n" " # And make sure %rsp points to argc stored on the stack.\n" @@ -37,7 +42,7 @@ asm( /* Get a pointer to the argv array. On many platforms this can be just * the address if the first argument, on other platforms we need to * do something a little more subtle here. */ -#define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long*) & ARGS)+1) +#define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long*) ARGS)+1) /* Handle relocation of the symbols in the dynamic loader. */ static __always_inline -- cgit v1.2.3