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