Fix long bitfield

The fix is avoiding a core dump for radare2 project.
This commit is contained in:
herman ten brugge 2020-08-09 07:50:34 +02:00
parent 9085b38a71
commit dcb87d36fe
4 changed files with 67 additions and 1 deletions

View File

@ -2093,7 +2093,7 @@ static int adjust_bf(SValue *sv, int bit_pos, int bit_size)
return 0; return 0;
t = sv->type.ref->auxtype; t = sv->type.ref->auxtype;
if (t != -1 && t != VT_STRUCT) { if (t != -1 && t != VT_STRUCT) {
sv->type.t = (sv->type.t & ~VT_BTYPE) | t; sv->type.t = (sv->type.t & ~(VT_BTYPE | VT_LONG)) | t;
sv->r |= VT_LVAL; sv->r |= VT_LVAL;
} }
return t; return t;

View File

@ -77,6 +77,22 @@
TEST_STRUCT(1,2,3,4,-3); TEST_STRUCT(1,2,3,4,-3);
} }
/* ----------------------------------------------------------------------- */
#elif TEST == 7
{
struct M P __s {
long int d : 16;
long int b : 16;
long int x : 16;
long int y : 1;
long int z : 2;
long int a : 11;
long int e : 1;
long int f : 1;
};
TEST_STRUCT(1,2,3,4,5);
}
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
#elif defined PACK #elif defined PACK
@ -101,6 +117,8 @@ top = 0;
#include SELF #include SELF
#define TEST 6 #define TEST 6
#include SELF #include SELF
#define TEST 7
#include SELF
#if PACK #if PACK
# pragma pack(pop) # pragma pack(pop)

View File

@ -34,6 +34,12 @@ bits as set : 00000030002001FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 4 12 align/size : 4 12
---- TEST 7 ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 01 00 ffffffff 04 05
align/size : 8 8
---- TEST 1 - PACKED ---- ---- TEST 1 - PACKED ----
@ -72,6 +78,12 @@ bits as set : 0030002001FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 1 10 align/size : 1 10
---- TEST 7 - PACKED ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 01 00 ffffffff 04 05
align/size : 1 8
---- TEST 1 - WITH ALIGN ---- ---- TEST 1 - WITH ALIGN ----
@ -110,6 +122,12 @@ bits as set : 00000030002001FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 4 12 align/size : 4 12
---- TEST 7 - WITH ALIGN ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 01 00 ffffffff 04 05
align/size : 8 8
---- TEST 1 - PACKED - WITH ALIGN ---- ---- TEST 1 - PACKED - WITH ALIGN ----
@ -147,3 +165,9 @@ bits in use : 007000FFFFFFFFFFFFFF
bits as set : 0030002001FD00000004 bits as set : 0030002001FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 1 10 align/size : 1 10
---- TEST 7 - PACKED - WITH ALIGN ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 01 00 ffffffff 04 05
align/size : 1 8

View File

@ -34,6 +34,12 @@ bits as set : 000000000000003000002001000000FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 4 20 align/size : 4 20
---- TEST 7 - MS-BITFIELDS ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
align/size : 8 8
---- TEST 1 - MS-BITFIELDS - PACKED ---- ---- TEST 1 - MS-BITFIELDS - PACKED ----
@ -72,6 +78,12 @@ bits as set : 000000003000002001FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 1 14 align/size : 1 14
---- TEST 7 - MS-BITFIELDS - PACKED ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
align/size : 1 8
---- TEST 1 - MS-BITFIELDS - WITH ALIGN ---- ---- TEST 1 - MS-BITFIELDS - WITH ALIGN ----
@ -110,6 +122,12 @@ bits as set : 000000000000003000002001000000FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 4 20 align/size : 4 20
---- TEST 7 - MS-BITFIELDS - WITH ALIGN ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
align/size : 8 8
---- TEST 1 - MS-BITFIELDS - PACKED - WITH ALIGN ---- ---- TEST 1 - MS-BITFIELDS - PACKED - WITH ALIGN ----
@ -147,3 +165,9 @@ bits in use : 00000000700000FFFFFFFFFFFFFF
bits as set : 000000003000002001FD00000004 bits as set : 000000003000002001FD00000004
values : 01 02 03 04 fffffffd values : 01 02 03 04 fffffffd
align/size : 1 14 align/size : 1 14
---- TEST 7 - MS-BITFIELDS - PACKED - WITH ALIGN ----
bits in use : 3FFFFFFFFFFF0000
bits as set : 0026000100050000
values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
align/size : 1 8