1
0
Fork 0

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;
t = sv->type.ref->auxtype;
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;
}
return t;

View File

@ -77,6 +77,22 @@
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
@ -101,6 +117,8 @@ top = 0;
#include SELF
#define TEST 6
#include SELF
#define TEST 7
#include SELF
#if PACK
# pragma pack(pop)

View File

@ -34,6 +34,12 @@ bits as set : 00000030002001FD00000004
values : 01 02 03 04 fffffffd
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 ----
@ -72,6 +78,12 @@ bits as set : 0030002001FD00000004
values : 01 02 03 04 fffffffd
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 ----
@ -110,6 +122,12 @@ bits as set : 00000030002001FD00000004
values : 01 02 03 04 fffffffd
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 ----
@ -147,3 +165,9 @@ bits in use : 007000FFFFFFFFFFFFFF
bits as set : 0030002001FD00000004
values : 01 02 03 04 fffffffd
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
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 ----
@ -72,6 +78,12 @@ bits as set : 000000003000002001FD00000004
values : 01 02 03 04 fffffffd
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 ----
@ -110,6 +122,12 @@ bits as set : 000000000000003000002001000000FD00000004
values : 01 02 03 04 fffffffd
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 ----
@ -147,3 +165,9 @@ bits in use : 00000000700000FFFFFFFFFFFFFF
bits as set : 000000003000002001FD00000004
values : 01 02 03 04 fffffffd
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