This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch release/2.22/master updated. glibc-2.22-26-gaf822b4
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Nov 2015 00:33:51 -0000
- Subject: GNU C Library master sources branch release/2.22/master updated. glibc-2.22-26-gaf822b4
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, release/2.22/master has been updated
via af822b45a62940efbf5f691777fd2862c825e6d4 (commit)
from a7e6fd7d41c895940d059468984c61b172acf2b2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=af822b45a62940efbf5f691777fd2862c825e6d4
commit af822b45a62940efbf5f691777fd2862c825e6d4
Author: Roland McGrath <roland@hack.frob.com>
Date: Fri Nov 20 16:16:35 2015 -0800
NaCl: Use allocate_code_data after dyncode_create
(cherry picked from commit f549f0bcba7196a2afc51657c536bbc131a7c544)
diff --git a/ChangeLog b/ChangeLog
index e24c08e..b1816c2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-11-20 Roland McGrath <roland@hack.frob.com>
+
+ * sysdeps/nacl/dl-map-segments.h (_dl_map_segments): Use
+ __glibc_likely instead of __builtin_expect. After falling back to
+ dyncode_create in a non-ET_DYN case, use the allocate_code_data
+ system interface to register the code pages as occupied.
+
2015-11-14 H.J. Lu <hongjiu.lu@intel.com>
* config.make.in (have-glob-dat-reloc): New.
diff --git a/sysdeps/nacl/dl-map-segments.h b/sysdeps/nacl/dl-map-segments.h
index f305da3..f2d5d84 100644
--- a/sysdeps/nacl/dl-map-segments.h
+++ b/sysdeps/nacl/dl-map-segments.h
@@ -53,7 +53,7 @@ _dl_map_segments (struct link_map *l, int fd,
const size_t maplength, bool has_holes,
struct link_map *loader)
{
- if (__builtin_expect (type, ET_DYN) == ET_DYN)
+ if (__glibc_likely (type == ET_DYN))
{
/* This is a position-independent shared object. Let the system
choose where to place it.
@@ -165,6 +165,32 @@ _dl_map_segments (struct link_map *l, int fd,
errno = error;
return DL_MAP_SEGMENTS_ERROR_MAP_SEGMENT;
}
+ if (__glibc_unlikely (type != ET_DYN))
+ {
+ /* A successful PROT_EXEC mmap would have implicitly
+ updated the bookkeeping so that a future
+ allocate_code_data call would know that this range
+ of the address space is already occupied. That
+ doesn't happen implicitly with dyncode_create, so
+ it's necessary to do an explicit call to update the
+ bookkeeping. */
+ uintptr_t allocated_address;
+ error = __nacl_irt_code_data_alloc.allocate_code_data
+ (l->l_addr + c->mapstart, len, 0, 0, &allocated_address);
+ if (__glibc_unlikely (error))
+ {
+ errno = error;
+ return DL_MAP_SEGMENTS_ERROR_MAP_SEGMENT;
+ }
+ if (__glibc_unlikely
+ (allocated_address != l->l_addr + c->mapstart))
+ {
+ /* This is not a very helpful error for this case,
+ but there isn't really anything better to use. */
+ errno = ENOMEM;
+ return DL_MAP_SEGMENTS_ERROR_MAP_SEGMENT;
+ }
+ }
}
else
{
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 7 +++++++
sysdeps/nacl/dl-map-segments.h | 28 +++++++++++++++++++++++++++-
2 files changed, 34 insertions(+), 1 deletions(-)
hooks/post-receive
--
GNU C Library master sources