summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/linux/386/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/linux/386/signal.c')
-rw-r--r--src/pkg/runtime/linux/386/signal.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/pkg/runtime/linux/386/signal.c b/src/pkg/runtime/linux/386/signal.c
index 8916e10bd..4045b2efc 100644
--- a/src/pkg/runtime/linux/386/signal.c
+++ b/src/pkg/runtime/linux/386/signal.c
@@ -182,3 +182,27 @@ os·sigpipe(void)
sigaction(SIGPIPE, SIG_DFL, false);
runtime·raisesigpipe();
}
+
+#define AT_NULL 0
+#define AT_SYSINFO 32
+extern uint32 runtime·_vdso;
+
+#pragma textflag 7
+void runtime·linux_setup_vdso(int32 argc, void *argv_list)
+{
+ byte **argv = &argv_list;
+ byte **envp;
+ uint32 *auxv;
+
+ // skip envp to get to ELF auxiliary vector.
+ for(envp = &argv[argc+1]; *envp != nil; envp++)
+ ;
+ envp++;
+
+ for(auxv=(uint32*)envp; auxv[0] != AT_NULL; auxv += 2) {
+ if(auxv[0] == AT_SYSINFO) {
+ runtime·_vdso = auxv[1];
+ break;
+ }
+ }
+}