This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.22-544-gf549f0b
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Nov 2015 00:33:44 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.22-544-gf549f0b
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, master has been updated
via f549f0bcba7196a2afc51657c536bbc131a7c544 (commit)
from 2d2c271aea8edd4147793ee6eea82b4ebe2143ae (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=f549f0bcba7196a2afc51657c536bbc131a7c544
commit f549f0bcba7196a2afc51657c536bbc131a7c544
Author: Roland McGrath <roland@hack.frob.com>
Date: Fri Nov 20 16:16:35 2015 -0800
NaCl: Use allocate_code_data after dyncode_create
diff --git a/ChangeLog b/ChangeLog
index c0235f3..d4e2d8a 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-20 Joseph Myers <joseph@codesourcery.com>
* sysdeps/arm/math_private.h [!_MATH_PRIVATE_H]: Change guard to
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