From: vineet.gupta1@synopsys.com (Vineet Gupta)
To: linux-snps-arc@lists.infradead.org
Subject: [PATCH 10/21] ARC: Linux Startup and Dynamic Loading
Date: Tue, 18 Dec 2018 13:04:32 -0800 [thread overview]
Message-ID: <1545167083-16764-11-git-send-email-vgupta@synopsys.com> (raw)
In-Reply-To: <1545167083-16764-1-git-send-email-vgupta@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta at synopsys.com>
---
ChangeLog | 3 ++
sysdeps/unix/sysv/linux/arc/dl-static.c | 84 +++++++++++++++++++++++++++++++++
sysdeps/unix/sysv/linux/arc/ldconfig.h | 25 ++++++++++
sysdeps/unix/sysv/linux/arc/ldsodefs.h | 32 +++++++++++++
4 files changed, 144 insertions(+)
create mode 100644 sysdeps/unix/sysv/linux/arc/dl-static.c
create mode 100644 sysdeps/unix/sysv/linux/arc/ldconfig.h
create mode 100644 sysdeps/unix/sysv/linux/arc/ldsodefs.h
diff --git a/ChangeLog b/ChangeLog
index ca010c356597..f6ad5968d7de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -71,6 +71,9 @@
* sysdeps/unix/sysv/linux/arc/sys/user.h: New file.
* sysdeps/unix/sysv/linux/arc/ucontext-macros.h: New file.
* sysdeps/unix/sysv/linux/arc/ucontext_i.sym: New file.
+ * sysdeps/unix/sysv/linux/arc/dl-static.c: New file.
+ * sysdeps/unix/sysv/linux/arc/ldconfig.h: New file.
+ * sysdeps/unix/sysv/linux/arc/ldsodefs.h: New file.
2018-12-17 Joseph Myers <joseph at codesourcery.com>
diff --git a/sysdeps/unix/sysv/linux/arc/dl-static.c b/sysdeps/unix/sysv/linux/arc/dl-static.c
new file mode 100644
index 000000000000..2683ee5e7e2a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/dl-static.c
@@ -0,0 +1,84 @@
+/* Variable initialization. ARC version.
+ Copyright (C) 2001-2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ldsodefs.h>
+
+#ifdef SHARED
+
+void
+_dl_var_init (void *array[])
+{
+ /* It has to match "variables" below. */
+ enum
+ {
+ DL_PAGESIZE = 0
+ };
+
+ GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]);
+}
+
+#else
+
+static void *variables[] =
+{
+ &GLRO(dl_pagesize)
+};
+
+static void
+_dl_unprotect_relro (struct link_map *l)
+{
+ ElfW(Addr) start = ((l->l_addr + l->l_relro_addr)
+ & ~(GLRO(dl_pagesize) - 1));
+ ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size)
+ & ~(GLRO(dl_pagesize) - 1));
+
+ if (start != end)
+ __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE);
+}
+
+void
+_dl_static_init (struct link_map *l)
+{
+ struct link_map *rtld_map = l;
+ struct r_scope_elem **scope;
+ const ElfW(Sym) *ref = NULL;
+ lookup_t loadbase;
+ void (*f) (void *[]);
+ size_t i;
+
+ loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
+ NULL, 0, 1, NULL);
+
+ for (scope = l->l_local_scope; *scope != NULL; scope++)
+ for (i = 0; i < (*scope)->r_nlist; i++)
+ if ((*scope)->r_list[i] == loadbase)
+ {
+ rtld_map = (*scope)->r_list[i];
+ break;
+ }
+
+ if (ref != NULL)
+ {
+ f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
+ _dl_unprotect_relro (rtld_map);
+ f (variables);
+ _dl_protect_relro (rtld_map);
+ }
+}
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/ldconfig.h b/sysdeps/unix/sysv/linux/arc/ldconfig.h
new file mode 100644
index 000000000000..c38ce20edaea
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ldconfig.h
@@ -0,0 +1,25 @@
+/* dynamic linker names for ARC
+ Copyright (C) 2001-2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdeps/generic/ldconfig.h>
+
+#define SYSDEP_KNOWN_INTERPRETER_NAMES \
+ { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 },
+#define SYSDEP_KNOWN_LIBRARY_NAMES \
+ { "libc.so.6", FLAG_ELF_LIBC6 }, \
+ { "libm.so.6", FLAG_ELF_LIBC6 },
diff --git a/sysdeps/unix/sysv/linux/arc/ldsodefs.h b/sysdeps/unix/sysv/linux/arc/ldsodefs.h
new file mode 100644
index 000000000000..005c49a7b7cd
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ldsodefs.h
@@ -0,0 +1,32 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects. ARC
+ Copyright (C) 2001-2018 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _LDSODEFS_H
+
+/* Get the real definitions. */
+#include_next <ldsodefs.h>
+
+/* Now define our stuff. */
+
+/* We need special support to initialize DSO loaded for statically linked
+ binaries. */
+extern void _dl_static_init (struct link_map *map);
+#undef DL_STATIC_INIT
+#define DL_STATIC_INIT(map) _dl_static_init (map)
+
+#endif /* ldsodefs.h */
--
2.7.4
next prev parent reply other threads:[~2018-12-18 21:04 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-18 21:04 [PATCH 00/21] glibc port to ARC processors Vineet Gupta
2018-12-18 21:04 ` [PATCH 01/21] longlong.h: sync from gcc to fix ARC inline asm constraints Vineet Gupta
2018-12-18 22:56 ` Joseph Myers
2018-12-18 23:11 ` Vineet Gupta
2018-12-21 18:46 ` Joseph Myers
2018-12-21 19:07 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 02/21] ARC: add definitions to elf/elf.h Vineet Gupta
2018-12-18 21:04 ` [PATCH 03/21] ARC: ABI Implementation Vineet Gupta
2018-12-18 23:09 ` Joseph Myers
2018-12-19 2:00 ` Vineet Gupta
2018-12-19 17:40 ` Joseph Myers
2018-12-19 20:20 ` Vineet Gupta
2018-12-19 20:37 ` Joseph Myers
2019-01-28 23:03 ` ARC binutils init/fini (was Re: [PATCH 03/21] ARC: ABI Implementation) Vineet Gupta
2019-01-28 23:13 ` Joseph Myers
2019-01-28 23:42 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 04/21] ARC: startup and dynamic linking code Vineet Gupta
2018-12-18 23:24 ` Joseph Myers
2018-12-19 0:52 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 05/21] ARC: Thread Local Storage support Vineet Gupta
2018-12-18 21:04 ` [PATCH 06/21] ARC: Atomics and Locking primitives Vineet Gupta
2018-12-18 23:15 ` Joseph Myers
2019-01-15 0:40 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 07/21] ARC: math soft float support Vineet Gupta
2018-12-18 23:23 ` Joseph Myers
2018-12-19 0:01 ` Joseph Myers
2018-12-20 21:35 ` Vineet Gupta
2018-12-21 1:08 ` Vineet Gupta
2018-12-21 1:19 ` Joseph Myers
2018-12-18 21:04 ` [PATCH 08/21] ARC: Linux Syscall Interface Vineet Gupta
2018-12-18 23:30 ` Joseph Myers
2018-12-19 2:39 ` Vineet Gupta
2018-12-19 17:58 ` ARC vs. generic sigaction (was Re: [PATCH 08/21] ARC: Linux Syscall Interface) Vineet Gupta
2018-12-19 18:07 ` Joseph Myers
2018-12-19 22:00 ` Adhemerval Zanella
2018-12-19 22:23 ` Vineet Gupta
2018-12-20 11:19 ` Adhemerval Zanella
2018-12-20 12:06 ` Arnd Bergmann
2018-12-20 19:25 ` Vineet Gupta
2018-12-20 12:40 ` Florian Weimer
2018-12-20 18:48 ` Vineet Gupta
2019-01-03 13:10 ` Florian Weimer
2018-12-20 19:23 ` Vineet Gupta
2018-12-20 20:06 ` Adhemerval Zanella
2018-12-20 20:46 ` Vineet Gupta
2018-12-21 12:05 ` Adhemerval Zanella
2019-01-09 21:49 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 09/21] ARC: Linux ABI Vineet Gupta
2018-12-18 23:38 ` Joseph Myers
2018-12-19 19:57 ` Vineet Gupta
2018-12-19 20:36 ` Joseph Myers
2018-12-21 23:06 ` Vineet Gupta
2018-12-18 21:04 ` Vineet Gupta [this message]
2018-12-18 23:49 ` [PATCH 10/21] ARC: Linux Startup and Dynamic Loading Joseph Myers
2018-12-19 20:26 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 11/21] ARC: ABI lists Vineet Gupta
2018-12-18 22:31 ` Andreas Schwab
2018-12-18 22:32 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 12/21] ARC: Update syscall-names.list for ARC specific syscalls Vineet Gupta
2018-12-18 21:26 ` Florian Weimer
2018-12-18 21:29 ` Vineet Gupta
2018-12-19 8:16 ` Florian Weimer
2018-12-18 21:04 ` [PATCH 13/21] ARC: Build Infrastructure Vineet Gupta
2018-12-18 23:44 ` Joseph Myers
2018-12-19 21:58 ` Vineet Gupta
2018-12-19 22:17 ` Joseph Myers
2018-12-20 23:21 ` Vineet Gupta
2018-12-20 23:24 ` Joseph Myers
2019-01-29 23:36 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 14/21] ARC: Enable __start as entry point vs. canonical _start Vineet Gupta
2018-12-18 21:28 ` Florian Weimer
2018-12-18 21:31 ` Vineet Gupta
2018-12-18 22:59 ` Joseph Myers
2018-12-18 23:08 ` Vineet Gupta
2018-12-19 20:36 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 15/21] ARC: testsuite fix: elf/check-initfini Vineet Gupta
2018-12-18 21:04 ` [PATCH 16/21] ARC: testsuite fix: sysvipc/* Vineet Gupta
2018-12-18 21:04 ` [PATCH 17/21] ARC: testsuite fix: stdlib/tst-makecontext Vineet Gupta
2018-12-18 22:36 ` Andreas Schwab
2019-01-21 22:32 ` Vineet Gupta
2018-12-18 21:04 ` [PATCH 18/21] ARC: testsuite fix: GD TLS issue Vineet Gupta
2018-12-18 21:04 ` [PATCH 19/21] ARC: fix several unwining and cancelation tests Vineet Gupta
2018-12-18 21:04 ` [PATCH 20/21] build-many-glibcs.py: Enable ARC builds Vineet Gupta
2018-12-18 21:04 ` [PATCH 21/21] NEWS: mention ARC port Vineet Gupta
2018-12-18 23:45 ` Joseph Myers
2018-12-19 18:30 ` Vineet Gupta
2018-12-18 22:52 ` [PATCH 00/21] glibc port to ARC processors Joseph Myers
2018-12-18 23:07 ` Vineet Gupta
2018-12-18 23:52 ` Joseph Myers
2018-12-21 1:55 ` Vineet Gupta
2018-12-21 14:32 ` Joseph Myers
2018-12-21 17:36 ` Vineet Gupta
2018-12-18 23:11 ` Joseph Myers
2018-12-19 23:45 ` Vineet Gupta
2018-12-20 0:14 ` Joseph Myers
2018-12-20 0:51 ` Vineet Gupta
2018-12-20 21:22 ` test related questions (was Re: [PATCH 00/21] glibc port to ARC processors) Vineet Gupta
2018-12-20 21:59 ` Joseph Myers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1545167083-16764-11-git-send-email-vgupta@synopsys.com \
--to=vineet.gupta1@synopsys.com \
--cc=linux-snps-arc@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.