Skip to content

Commit 0724393

Browse files
author
Valentin Tsatskin
committed
---
yaml --- r: 152511 b: refs/heads/try2 c: 0188beb h: refs/heads/master i: 152509: dcabf6a 152507: 362cf92 152503: bf98088 152495: a9dabad 152479: 1d3ab9d 152447: 0489d45 v: v3
1 parent d14a633 commit 0724393

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+441
-1342
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 1cde9d8cbb8dca25d381304f999e38e478dc6ba2
8+
refs/heads/try2: 0188bebbb703baa7d3cc9608196d9cbd7707a1e0
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/configure

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ opt mingw-cross 0 "cross-compile for win32 using mingw"
416416
opt clang 0 "prefer clang to gcc for building the runtime"
417417
opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds"
418418
opt local-rust 0 "use an installed rustc rather than downloading a snapshot"
419+
opt pax-flags 0 "apply PaX flags to rustc binaries (required for GRSecurity/PaX-patched kernels)"
419420
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
420421
opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM"
421422
opt rpath 1 "build rpaths into rustc itself"
@@ -517,6 +518,12 @@ then
517518
fi
518519
fi
519520

521+
if [ "$CFG_OSTYPE" = "unknown-linux-gnu" ]
522+
then
523+
probe CFG_PAXCTL paxctl /sbin/paxctl
524+
probe CFG_ZCAT zcat
525+
fi
526+
520527
step_msg "looking for target specific programs"
521528

522529
probe CFG_ADB adb
@@ -539,6 +546,51 @@ then
539546
fi
540547
fi
541548

549+
if [ "$CFG_OSTYPE" = "unknown-linux-gnu" ]
550+
then
551+
if [ ! -z "$CFG_ENABLE_PAX_FLAGS" -a -z "$CFG_PAXCTL" ]
552+
then
553+
err "enabled PaX markings but no paxctl binary found"
554+
fi
555+
556+
if [ -z "$CFG_DISABLE_PAX_FLAGS" ]
557+
then
558+
# GRSecurity/PaX detection. This can be very flaky.
559+
GRSEC_DETECTED=
560+
561+
# /dev/grsec only exists if CONFIG_GRKERNSEC_NO_RBAC is not set.
562+
# /proc/sys/kernel/grsecurity is not available if ÇONFIG_GRKERNSEC_SYSCTL is not set.
563+
if [ -e /dev/grsec -o -d /proc/sys/kernel/grsecurity ]
564+
then
565+
GRSEC_DETECTED=1
566+
# /proc/config.gz is normally only available to root, and only if CONFIG_IKCONFIG_PROC has been set.
567+
elif [ -r /proc/config.gz -a ! -z "$CFG_ZCAT" ]
568+
then
569+
if "$CFG_ZCAT" /proc/config.gz | grep --quiet "CONFIG_GRKERNSEC=y"
570+
then
571+
GRSEC_DETECTED=1
572+
fi
573+
# Flaky.
574+
elif grep --quiet grsec /proc/version
575+
then
576+
GRSEC_DETECTED=1
577+
fi
578+
579+
if [ ! -z "$GRSEC_DETECTED" ]
580+
then
581+
step_msg "GRSecurity: yes"
582+
if [ ! -z "$CFG_PAXCTL" ]
583+
then
584+
CFG_ENABLE_PAX_FLAGS=1
585+
else
586+
warn "GRSecurity kernel detected but no paxctl binary found: not setting CFG_ENABLE_PAX_FLAGS"
587+
fi
588+
else
589+
step_msg "GRSecurity: no"
590+
fi
591+
fi
592+
fi
593+
542594
BIN_SUF=
543595
if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
544596
then
@@ -890,33 +942,16 @@ then
890942
msg "git: submodule sync"
891943
"${CFG_GIT}" submodule sync
892944

893-
msg "git: submodule init"
894-
"${CFG_GIT}" submodule init
895-
896-
# Disable submodules that we're not using
897-
if [ ! -z "${CFG_LLVM_ROOT}" ]; then
898-
msg "git: submodule deinit src/llvm"
899-
"${CFG_GIT}" submodule deinit src/llvm
900-
fi
901-
if [ ! -z "${CFG_JEMALLOC_ROOT}" ]; then
902-
msg "git: submodule deinit src/jemalloc"
903-
"${CFG_GIT}" submodule deinit src/jemalloc
904-
fi
905-
if [ ! -z "${CFG_LIBUV_ROOT}" ]; then
906-
msg "git: submodule deinit src/libuv"
907-
"${CFG_GIT}" submodule deinit src/libuv
908-
fi
909-
910945
msg "git: submodule update"
911-
"${CFG_GIT}" submodule update
946+
"${CFG_GIT}" submodule update --init
912947
need_ok "git failed"
913948

914949
msg "git: submodule foreach sync"
915950
"${CFG_GIT}" submodule foreach --recursive 'if test -e .gitmodules; then git submodule sync; fi'
916951
need_ok "git failed"
917952

918953
msg "git: submodule foreach update"
919-
"${CFG_GIT}" submodule update --recursive
954+
"${CFG_GIT}" submodule update --init --recursive
920955
need_ok "git failed"
921956

922957
# NB: this is just for the sake of getting the submodule SHA1 values

branches/try2/mk/stage0.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ ifdef CFG_ENABLE_LOCAL_RUST
1818
$(Q)$(S)src/etc/local_stage0.sh $(CFG_BUILD) $(CFG_LOCAL_RUST_ROOT) rustlib
1919
else
2020
$(Q)$(CFG_PYTHON) $(S)src/etc/get-snapshot.py $(CFG_BUILD) $(SNAPSHOT_FILE)
21+
ifdef CFG_ENABLE_PAX_FLAGS
22+
@$(call E, apply PaX flags: $@)
23+
@"$(CFG_PAXCTL)" -cm "$@"
24+
endif
2125
endif
2226
$(Q)touch $@
2327

branches/try2/src/libcollections/slice.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2034,16 +2034,6 @@ mod tests {
20342034
assert!(xs == [1,2,0,4,3,0,0,6,5,0]);
20352035
}
20362036

2037-
#[test]
2038-
fn test_get_mut() {
2039-
let mut v = [0,1,2];
2040-
assert_eq!(v.get_mut(3), None);
2041-
v.get_mut(1).map(|e| *e = 7);
2042-
assert_eq!(v[1], 7);
2043-
let mut x = 2;
2044-
assert_eq!(v.get_mut(2), Some(&mut x));
2045-
}
2046-
20472037
#[test]
20482038
fn test_mut_chunks() {
20492039
let mut v = [0u8, 1, 2, 3, 4, 5, 6];

branches/try2/src/libcollections/treemap.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ pub struct IntersectionItems<'a, T> {
761761
b: Peekable<&'a T, SetItems<'a, T>>,
762762
}
763763

764-
/// Lazy iterator producing elements in the set union (in-order)
764+
/// Lazy iterator producing elements in the set intersection (in-order)
765765
pub struct UnionItems<'a, T> {
766766
a: Peekable<&'a T, SetItems<'a, T>>,
767767
b: Peekable<&'a T, SetItems<'a, T>>,

branches/try2/src/libcore/any.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
//! Traits for dynamic typing of any `'static` type (through runtime reflection)
11+
//! Traits for dynamic typing of any type (through runtime reflection)
1212
//!
1313
//! This module implements the `Any` trait, which enables dynamic typing
14-
//! of any `'static` type through runtime reflection.
14+
//! of any type, through runtime reflection.
1515
//!
1616
//! `Any` itself can be used to get a `TypeId`, and has more features when used as a trait object.
1717
//! As `&Any` (a borrowed trait object), it has the `is` and `as_ref` methods, to test if the
@@ -32,10 +32,8 @@ pub enum Void { }
3232
// Any trait
3333
///////////////////////////////////////////////////////////////////////////////
3434

35-
/// The `Any` trait is implemented by all `'static` types, and can be used for dynamic typing
36-
///
37-
/// Every type with no non-`'static` references implements `Any`, so `Any` can be used as a trait
38-
/// object to emulate the effects dynamic typing.
35+
/// The `Any` trait is implemented by all types, and can be used as a trait object
36+
/// for dynamic typing
3937
pub trait Any {
4038
/// Get the `TypeId` of `self`
4139
fn get_type_id(&self) -> TypeId;
@@ -263,14 +261,6 @@ mod tests {
263261
let s = format!("{}", b);
264262
assert_eq!(s.as_slice(), "&Any");
265263
}
266-
267-
#[test]
268-
fn any_fixed_vec() {
269-
let test = [0u, ..8];
270-
let test = &test as &Any;
271-
assert!(test.is::<[uint, ..8]>());
272-
assert!(!test.is::<[uint, ..10]>());
273-
}
274264
}
275265

276266
#[cfg(test)]

branches/try2/src/libcore/intrinsics.rs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -307,20 +307,6 @@ extern "rust-intrinsic" {
307307
/// `forget` is unsafe because the caller is responsible for
308308
/// ensuring the argument is deallocated already.
309309
pub fn forget<T>(_: T) -> ();
310-
311-
/// Unsafely transforms a value of one type into a value of another type.
312-
///
313-
/// Both types must have the same size and alignment, and this guarantee
314-
/// is enforced at compile-time.
315-
///
316-
/// # Example
317-
///
318-
/// ```rust
319-
/// use std::mem;
320-
///
321-
/// let v: &[u8] = unsafe { mem::transmute("L") };
322-
/// assert!(v == [76u8]);
323-
/// ```
324310
pub fn transmute<T,U>(e: T) -> U;
325311

326312
/// Returns `true` if a type requires drop glue.

branches/try2/src/libcore/mem.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ use ptr;
1717
use intrinsics;
1818
use intrinsics::{bswap16, bswap32, bswap64};
1919

20-
pub use intrinsics::transmute;
21-
2220
/// Returns the size of a type in bytes.
2321
#[inline]
2422
#[stable]
@@ -414,6 +412,29 @@ pub fn drop<T>(_x: T) { }
414412
#[stable]
415413
pub unsafe fn forget<T>(thing: T) { intrinsics::forget(thing) }
416414

415+
/// Unsafely transforms a value of one type into a value of another type.
416+
///
417+
/// Both types must have the same size and alignment, and this guarantee is
418+
/// enforced at compile-time.
419+
///
420+
/// # Example
421+
///
422+
/// ```rust
423+
/// use std::mem;
424+
///
425+
/// let v: &[u8] = unsafe { mem::transmute("L") };
426+
/// assert!(v == [76u8]);
427+
/// ```
428+
#[inline]
429+
#[unstable = "this function will be modified to reject invocations of it which \
430+
cannot statically prove that T and U are the same size. For \
431+
example, this function, as written today, will be rejected in \
432+
the future because the size of T and U cannot be statically \
433+
known to be the same"]
434+
pub unsafe fn transmute<T, U>(thing: T) -> U {
435+
intrinsics::transmute(thing)
436+
}
437+
417438
/// Interprets `src` as `&U`, and then reads `src` without moving the contained
418439
/// value.
419440
///

branches/try2/src/libcore/num/int_macros.rs

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -113,33 +113,6 @@ mod tests {
113113
assert!((0b1111001 as $T).count_zeros() == BITS as $T - 5);
114114
}
115115

116-
#[test]
117-
fn test_swap_bytes() {
118-
let n: $T = 0b0101100; assert_eq!(n.swap_bytes().swap_bytes(), n);
119-
let n: $T = 0b0100001; assert_eq!(n.swap_bytes().swap_bytes(), n);
120-
let n: $T = 0b1111001; assert_eq!(n.swap_bytes().swap_bytes(), n);
121-
122-
// Swapping these should make no difference
123-
let n: $T = 0; assert_eq!(n.swap_bytes(), n);
124-
let n: $T = -1; assert_eq!(n.swap_bytes(), n);
125-
}
126-
127-
#[test]
128-
fn test_rotate() {
129-
let n: $T = 0b0101100; assert_eq!(n.rotate_left(6).rotate_right(2).rotate_right(4), n);
130-
let n: $T = 0b0100001; assert_eq!(n.rotate_left(3).rotate_left(2).rotate_right(5), n);
131-
let n: $T = 0b1111001; assert_eq!(n.rotate_left(6).rotate_right(2).rotate_right(4), n);
132-
133-
// Rotating these should make no difference
134-
//
135-
// We test using 124 bits because to ensure that overlong bit shifts do
136-
// not cause undefined behaviour. See #10183.
137-
let n: $T = 0; assert_eq!(n.rotate_left(124), n);
138-
let n: $T = -1; assert_eq!(n.rotate_left(124), n);
139-
let n: $T = 0; assert_eq!(n.rotate_right(124), n);
140-
let n: $T = -1; assert_eq!(n.rotate_right(124), n);
141-
}
142-
143116
#[test]
144117
fn test_signed_checked_div() {
145118
assert!(10i.checked_div(&2) == Some(5));

0 commit comments

Comments
 (0)