Browse Source

Merge branch 'binutils_regressions' into 'master'

Binutils regressions

See merge request redox-os/relibc!269
Jeremy Soller 4 years ago
parent
commit
f6a119d3fc

+ 4 - 3
src/header/stdio/printf.rs

@@ -472,7 +472,6 @@ struct PrintfArg {
     sign_always: bool,
     min_width: Number,
     precision: Option<Number>,
-    pad_space: Number,
     pad_zero: Number,
     intkind: IntKind,
     fmt: u8,
@@ -596,7 +595,6 @@ impl Iterator for PrintfIter {
                 sign_always,
                 min_width,
                 precision,
-                pad_space,
                 pad_zero,
                 intkind,
                 fmt,
@@ -667,8 +665,11 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, mut ap: VaList) ->
         let sign_always = arg.sign_always;
         let min_width = arg.min_width.resolve(&mut varargs, &mut ap);
         let precision = arg.precision.map(|n| n.resolve(&mut varargs, &mut ap));
-        let pad_space = arg.pad_space.resolve(&mut varargs, &mut ap);
         let pad_zero = arg.pad_zero.resolve(&mut varargs, &mut ap);
+        let pad_space = match pad_zero {
+            0 => min_width,
+            _ => 0,
+        };
         let intkind = arg.intkind;
         let fmt = arg.fmt;
         let fmtkind = arg.fmtkind;

+ 2 - 4
src/ld_so/linker.rs

@@ -394,7 +394,7 @@ impl Linker {
                 };
                 if same_elf {
                     let addr = dso.as_ref().unwrap().base_addr;
-                    let mut size = bounds.1;
+                    let size = bounds.1;
                     // Fill the gaps i the binary
                     let mut ranges = Vec::new();
                     for ph in elf.program_headers.iter() {
@@ -410,8 +410,6 @@ impl Linker {
                     let mut start = addr;
                     for (vaddr, vsize) in ranges.iter() {
                         if start < addr + vaddr {
-                            let gap_size = addr + vaddr - start;
-                            size += gap_size;
                             sys_mman::mmap(
                                 start as *mut c_void,
                                 addr + vaddr - start,
@@ -668,7 +666,7 @@ impl Linker {
                         set_u64(tm as u64);
                     }
                     reloc::R_X86_64_DTPOFF64 => {
-                        set_u64((s + a) as u64);
+                        set_u64(rel.r_offset as u64);
                     }
                     reloc::R_X86_64_GLOB_DAT | reloc::R_X86_64_JUMP_SLOT => {
                         set_u64(s as u64);

+ 1 - 0
tests/Makefile

@@ -41,6 +41,7 @@ EXPECT_NAMES=\
 	stdio/scanf \
 	stdio/setvbuf \
 	stdio/sprintf \
+	stdio/printf_space_pad \
 	stdlib/a64l \
 	stdlib/alloc \
 	stdlib/atof \

+ 1 - 1
tests/error.c

@@ -20,7 +20,7 @@ int main(void) {
     int ret2 = strerror_r(err, buf2, 3);
     printf("errno: %d = %s, return: %d\n", err, buf2, ret2);
 
-    char buf3[256];
+    char buf3[256] = {0};
     int ret3 = strerror_r(err, buf3, 0);
     printf("errno: %d = %s, return: %d\n", err, buf3, ret3);
 }

+ 0 - 0
tests/expected/stdio/printf_space_pad.stderr


+ 1 - 0
tests/expected/stdio/printf_space_pad.stdout

@@ -0,0 +1 @@
+A  B

+ 4 - 0
tests/stdio/printf_space_pad.c

@@ -0,0 +1,4 @@
+#include <stdio.h>
+int main() {
+  printf ("%s%*s\n","A", 3, "B");
+}