From fcfe677bcc7e4c7431346c9daf7a27272415f0e6 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Tue, 26 Mar 2019 16:50:21 +0800 Subject: [PATCH] Fix makefile and loader NULL character stripping --- .travis.yml | 6 ++++-- kernel/Makefile | 3 +-- kernel/src/process/structs.rs | 8 ++++++-- user | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 37a4f6a..d41cb1e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,7 @@ env: allow_failures: matrix: - - ARCH="aarch64" + - env: ARCH="aarch64" - os: osx install: @@ -83,4 +83,6 @@ before_script: script: - cd user && make sfsimg arch=$ARCH && cd .. - cd kernel && make build arch=$ARCH $OPTS && cd .. - - cd tests && ./test.sh && cd .. + - if [ $ARCH = riscv64 ]; then + cd tests && ./test.sh && cd ..; + fi diff --git a/kernel/Makefile b/kernel/Makefile index d00b0dd..c49c4d3 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -62,8 +62,7 @@ endif ### qemu options ### qemu_opts := \ - -smp cores=$(smp) \ - -append "test=biscuit/fork" + -smp cores=$(smp) qemu_net_opts := \ -netdev type=tap,id=net0,script=no,downscript=no diff --git a/kernel/src/process/structs.rs b/kernel/src/process/structs.rs index e018db3..646e0c7 100644 --- a/kernel/src/process/structs.rs +++ b/kernel/src/process/structs.rs @@ -200,7 +200,7 @@ impl Thread { // Check interpreter if let Ok(loader_path) = elf.get_interpreter() { // assuming absolute path - if let Ok(inode) = crate::fs::ROOT_INODE.lookup_follow(&loader_path[1..], FOLLOW_MAX_DEPTH) { + if let Ok(inode) = crate::fs::ROOT_INODE.lookup_follow(loader_path, FOLLOW_MAX_DEPTH) { if let Ok(buf) = inode.read_as_vec() { debug!("using loader {}", &loader_path); // Elf loader should not have INTERP @@ -426,10 +426,14 @@ impl ElfExt for ElfFile<'_> { let header = self.program_iter() .filter(|ph| ph.get_type() == Ok(Type::Interp)) .next().ok_or("no interp header")?; - let data = match header.get_data(self)? { + let mut data = match header.get_data(self)? { SegmentData::Undefined(data) => data, _ => unreachable!(), }; + // skip NULL + while let Some(0) = data.last() { + data = &data[..data.len()-1]; + } let path = str::from_utf8(data) .map_err(|_| "failed to convert to utf8")?; Ok(path) diff --git a/user b/user index 586e682..11e0234 160000 --- a/user +++ b/user @@ -1 +1 @@ -Subproject commit 586e682f064ca124a353d992cdf365e0d8234cb7 +Subproject commit 11e02349a790923ac3710159f731155f8323b94e