Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Add basic locking to ld.elf_so.
details: https://anonhg.NetBSD.org/src/rev/c2b18287280a
branches: trunk
changeset: 763571:c2b18287280a
user: joerg <joerg%NetBSD.org@localhost>
date: Fri Mar 25 18:07:04 2011 +0000
description:
Add basic locking to ld.elf_so.
diffstat:
libexec/ld.elf_so/arch/alpha/alpha_reloc.c | 6 +-
libexec/ld.elf_so/arch/arm/mdreloc.c | 6 +-
libexec/ld.elf_so/arch/hppa/hppa_reloc.c | 6 +-
libexec/ld.elf_so/arch/i386/mdreloc.c | 6 +-
libexec/ld.elf_so/arch/m68k/mdreloc.c | 8 +-
libexec/ld.elf_so/arch/mips/mips_reloc.c | 6 +-
libexec/ld.elf_so/arch/powerpc/ppc_reloc.c | 6 +-
libexec/ld.elf_so/arch/sh3/mdreloc.c | 8 +-
libexec/ld.elf_so/arch/sparc/mdreloc.c | 6 +-
libexec/ld.elf_so/arch/sparc64/mdreloc.c | 6 +-
libexec/ld.elf_so/arch/vax/mdreloc.c | 8 +-
libexec/ld.elf_so/arch/x86_64/mdreloc.c | 6 +-
libexec/ld.elf_so/rtld.c | 194 +++++++++++++++++++++++++++-
libexec/ld.elf_so/rtld.h | 7 +-
libexec/ld.elf_so/tls.c | 32 ++++-
rescue/list.ldd | 5 +-
usr.bin/ldd/ldd.c | 24 +++-
17 files changed, 292 insertions(+), 48 deletions(-)
diffs (truncated from 937 to 300 lines):
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/alpha/alpha_reloc.c
--- a/libexec/ld.elf_so/arch/alpha/alpha_reloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/alpha/alpha_reloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: alpha_reloc.c,v 1.38 2010/09/30 09:11:18 skrll Exp $ */
+/* $NetBSD: alpha_reloc.c,v 1.39 2011/03/25 18:07:04 joerg Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -62,7 +62,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: alpha_reloc.c,v 1.38 2010/09/30 09:11:18 skrll Exp $");
+__RCSID("$NetBSD: alpha_reloc.c,v 1.39 2011/03/25 18:07:04 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -483,9 +483,11 @@
Elf_Addr result = 0; /* XXX gcc */
int err;
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, &result);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)result;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/arm/mdreloc.c
--- a/libexec/ld.elf_so/arch/arm/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/arm/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,8 +1,8 @@
-/* $NetBSD: mdreloc.c,v 1.34 2010/08/06 16:33:17 joerg Exp $ */
+/* $NetBSD: mdreloc.c,v 1.35 2011/03/25 18:07:05 joerg Exp $ */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.34 2010/08/06 16:33:17 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.35 2011/03/25 18:07:05 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -254,9 +254,11 @@
Elf_Addr new_value = 0; /* XXX gcc */
int err;
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rel, &new_value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)new_value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/hppa/hppa_reloc.c
--- a/libexec/ld.elf_so/arch/hppa/hppa_reloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/hppa/hppa_reloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: hppa_reloc.c,v 1.38 2011/03/17 22:07:52 skrll Exp $ */
+/* $NetBSD: hppa_reloc.c,v 1.39 2011/03/25 18:07:05 joerg Exp $ */
/*-
* Copyright (c) 2002, 2004 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: hppa_reloc.c,v 1.38 2011/03/17 22:07:52 skrll Exp $");
+__RCSID("$NetBSD: hppa_reloc.c,v 1.39 2011/03/25 18:07:05 joerg Exp $");
#endif /* not lint */
#include <stdlib.h>
@@ -639,9 +639,11 @@
assert(ELF_R_SYM(rela->r_info) != 0);
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, &new_value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)new_value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/i386/mdreloc.c
--- a/libexec/ld.elf_so/arch/i386/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/i386/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,8 +1,8 @@
-/* $NetBSD: mdreloc.c,v 1.33 2011/03/12 22:54:36 joerg Exp $ */
+/* $NetBSD: mdreloc.c,v 1.34 2011/03/25 18:07:05 joerg Exp $ */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.33 2011/03/12 22:54:36 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.34 2011/03/25 18:07:05 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -236,9 +236,11 @@
new_value = 0; /* XXX gcc */
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rel, &new_value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)new_value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/m68k/mdreloc.c
--- a/libexec/ld.elf_so/arch/m68k/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/m68k/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,13 +1,13 @@
-/* $NetBSD: mdreloc.c,v 1.27 2010/08/06 16:33:18 joerg Exp $ */
+/* $NetBSD: mdreloc.c,v 1.28 2011/03/25 18:07:05 joerg Exp $ */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.27 2010/08/06 16:33:18 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.28 2011/03/25 18:07:05 joerg Exp $");
#endif /* not lint */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.27 2010/08/06 16:33:18 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.28 2011/03/25 18:07:05 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -204,9 +204,11 @@
result = 0; /* XXX gcc */
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, &result);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)result;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/mips/mips_reloc.c
--- a/libexec/ld.elf_so/arch/mips/mips_reloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/mips/mips_reloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mips_reloc.c,v 1.61 2011/03/15 07:40:52 matt Exp $ */
+/* $NetBSD: mips_reloc.c,v 1.62 2011/03/25 18:07:05 joerg Exp $ */
/*
* Copyright 1997 Michael L. Hitch <mhitch%montana.edu@localhost>
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mips_reloc.c,v 1.61 2011/03/15 07:40:52 matt Exp $");
+__RCSID("$NetBSD: mips_reloc.c,v 1.62 2011/03/25 18:07:05 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -505,9 +505,11 @@
Elf_Addr new_value = 0; /* XXX gcc */
int err;
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, a0, &new_value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)new_value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/powerpc/ppc_reloc.c
--- a/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ppc_reloc.c,v 1.48 2011/03/12 07:43:53 matt Exp $ */
+/* $NetBSD: ppc_reloc.c,v 1.49 2011/03/25 18:07:06 joerg Exp $ */
/*-
* Copyright (C) 1998 Tsubai Masanari
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: ppc_reloc.c,v 1.48 2011/03/12 07:43:53 matt Exp $");
+__RCSID("$NetBSD: ppc_reloc.c,v 1.49 2011/03/25 18:07:06 joerg Exp $");
#endif /* not lint */
#include <stdarg.h>
@@ -397,9 +397,11 @@
new_value = 0; /* XXX gcc */
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, reloff, &new_value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)new_value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/sh3/mdreloc.c
--- a/libexec/ld.elf_so/arch/sh3/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/sh3/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,13 +1,13 @@
-/* $NetBSD: mdreloc.c,v 1.29 2011/03/12 22:54:36 joerg Exp $ */
+/* $NetBSD: mdreloc.c,v 1.30 2011/03/25 18:07:06 joerg Exp $ */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.29 2011/03/12 22:54:36 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.30 2011/03/25 18:07:06 joerg Exp $");
#endif /* not lint */
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.29 2011/03/12 22:54:36 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.30 2011/03/25 18:07:06 joerg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -244,9 +244,11 @@
new_value = 0; /* XXX gcc */
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, &new_value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)new_value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/sparc/mdreloc.c
--- a/libexec/ld.elf_so/arch/sparc/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/sparc/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mdreloc.c,v 1.44 2010/08/06 16:33:18 joerg Exp $ */
+/* $NetBSD: mdreloc.c,v 1.45 2011/03/25 18:07:06 joerg Exp $ */
/*-
* Copyright (c) 1999, 2002 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.44 2010/08/06 16:33:18 joerg Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.45 2011/03/25 18:07:06 joerg Exp $");
#endif /* not lint */
#include <errno.h>
@@ -325,9 +325,11 @@
value = 0; /* XXX gcc */
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, &value);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)value;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/sparc64/mdreloc.c
--- a/libexec/ld.elf_so/arch/sparc64/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/sparc64/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mdreloc.c,v 1.50 2010/09/24 12:00:10 skrll Exp $ */
+/* $NetBSD: mdreloc.c,v 1.51 2011/03/25 18:07:06 joerg Exp $ */
/*-
* Copyright (c) 2000 Eduardo Horvath.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.50 2010/09/24 12:00:10 skrll Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.51 2011/03/25 18:07:06 joerg Exp $");
#endif /* not lint */
#include <errno.h>
@@ -471,9 +471,11 @@
rela -= 4;
}
+ _rtld_shared_enter();
err = _rtld_relocate_plt_object(obj, rela, &result);
if (err)
_rtld_die();
+ _rtld_shared_exit();
return (caddr_t)result;
}
diff -r 70af4b8f3b5c -r c2b18287280a libexec/ld.elf_so/arch/vax/mdreloc.c
--- a/libexec/ld.elf_so/arch/vax/mdreloc.c Fri Mar 25 17:15:26 2011 +0000
+++ b/libexec/ld.elf_so/arch/vax/mdreloc.c Fri Mar 25 18:07:04 2011 +0000
@@ -1,13 +1,13 @@
Home |
Main Index |
Thread Index |
Old Index