]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix memcheck/vbit-test for BE platforms
authorAleksandar Rikalo <aleksandar.rikalo@rt-rk.com>
Fri, 17 Apr 2020 18:22:38 +0000 (18:22 +0000)
committerPetar Jovanovic <mips32r2@gmail.com>
Fri, 17 Apr 2020 18:24:51 +0000 (18:24 +0000)
We do not need u1 member of bits union as long as we use u32 for the same
purpose. Overlapping uint8_t with uint32_t causes a problem on BE platforms,
since LSB of u32 is not overlap with u1.

NEWS
memcheck/tests/vbit-test/binary.c
memcheck/tests/vbit-test/vbits.c
memcheck/tests/vbit-test/vbits.h

diff --git a/NEWS b/NEWS
index e33d1b14d86a791133a129e4a4c7a2ff1241da19..6f082d6ac7d08210cc63b07571a2d8d4ae664ee1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -122,6 +122,7 @@ where XXXXXX is the bug number as listed below.
 416667  gcc10 ppc64le impossible constraint in 'asm' in test_isa.
 416753  new 32bit time syscalls for 2038+
 417187  [MIPS] Conditional branch problem since 'grail' changes
+417238  Test memcheck/tests/vbit-test fails on mips64 BE
 417281  s390x: /bin/true segfaults with "grail" enabled
 417427  commit to fix vki_siginfo_t definition created numerous regression
         errors on ppc64
index 045221b05dbac931c3e1db5d524fe0f922fd525d..b93ab15858c391d6987dfdbb18ffdbb2d7fd5e27 100644 (file)
@@ -38,7 +38,7 @@ and_combine(vbits_t v1, vbits_t v2, value_t val2, int invert_val2)
 
    if (invert_val2) {
       switch (v2.num_bits) {
-      case 1:  val2.u1  = ~val2.u1  & 1;      break;
+      case 1:  val2.u32 = ~val2.u32 & 1;      break;
       case 8:  val2.u8  = ~val2.u8  & 0xff;   break;
       case 16: val2.u16 = ~val2.u16 & 0xffff; break;
       case 32: val2.u32 = ~val2.u32;          break;
@@ -50,7 +50,7 @@ and_combine(vbits_t v1, vbits_t v2, value_t val2, int invert_val2)
 
    switch (v2.num_bits) {
    case 1:
-      new.bits.u1  = (v1.bits.u1 & ~v2.bits.u1  & val2.u1)  & 1;
+      new.bits.u32 = (v1.bits.u32 & ~v2.bits.u32 & val2.u32) & 1;
       break;
    case 8:
       new.bits.u8  = (v1.bits.u8 & ~v2.bits.u8  & val2.u8)  & 0xff;
@@ -427,9 +427,9 @@ all_bits_zero_value(unsigned num_bits)
    value_t val;
 
    switch (num_bits) {
-   case 1:  val.u1  = 0; break;
    case 8:  val.u8  = 0; break;
    case 16: val.u16 = 0; break;
+   case 1:
    case 32: val.u32 = 0; break;
    case 64: val.u64 = 0; break;
    default:
@@ -445,7 +445,7 @@ all_bits_one_value(unsigned num_bits)
    value_t val;
 
    switch (num_bits) {
-   case 1:  val.u = 1;      break;
+   case 1:  val.u32 = 1;      break;
    case 8:  val.u8  = 0xff;   break;
    case 16: val.u16 = 0xffff; break;
    case 32: val.u32 = ~0u;    break;
index 9307efb35956cbd18b94b19b70fc59f8f1f75dcb..2e925eda0558f97ec169b262b2e2a31b9d1d94f9 100644 (file)
@@ -656,7 +656,7 @@ or_vbits(vbits_t v1, vbits_t v2)
    vbits_t new = { .num_bits = v1.num_bits };
 
    switch (v1.num_bits) {
-   case 1:   new.bits.u1  = (v1.bits.u1 | v2.bits.u1) & 1; break;
+   case 1:   new.bits.u32 = (v1.bits.u32 | v2.bits.u32) & 1; break;
    case 8:   new.bits.u8  = v1.bits.u8  | v2.bits.u8;  break;
    case 16:  new.bits.u16 = v1.bits.u16 | v2.bits.u16; break;
    case 32:  new.bits.u32 = v1.bits.u32 | v2.bits.u32; break;
@@ -685,7 +685,7 @@ and_vbits(vbits_t v1, vbits_t v2)
    vbits_t new = { .num_bits = v1.num_bits };
 
    switch (v1.num_bits) {
-   case 1:   new.bits.u1  = (v1.bits.u1 & v2.bits.u1) & 1; break;
+   case 1:   new.bits.u32 = (v1.bits.u32 & v2.bits.u32) & 1; break;
    case 8:   new.bits.u8  = v1.bits.u8  & v2.bits.u8;  break;
    case 16:  new.bits.u16 = v1.bits.u16 & v2.bits.u16; break;
    case 32:  new.bits.u32 = v1.bits.u32 & v2.bits.u32; break;
index ebeb33ad903e0f67e85313a720d9d789949fb82e..0a50fab61db3eb83e2c2b1c37b5a583d93ae6eeb 100644 (file)
@@ -36,7 +36,6 @@ typedef uint64_t uint256_t[4];
 typedef struct {
    unsigned num_bits;
    union {
-      uint8_t   u1;
       uint8_t   u8;
       uint16_t  u16;
       uint32_t  u32;
@@ -51,7 +50,6 @@ typedef struct {
    we do not expect to test with specific floating point values.
    So we don't need to represent them. */
 typedef union {
-   uint8_t   u1;
    uint8_t   u8;
    uint16_t  u16;
    uint32_t  u32;