History

Fix long bitfield

The fix is avoiding a core dump for radare2 project.

herman ten brugge committed 6 years ago

Commit dcb87d31 parent 9085b384 files · +67 −1Browse files

Unified · Split

4 files
  1. tccgen.c +1 −1
  2. tests/tests2/95_bitfields.c +18 −0
  3. tests/tests2/95_bitfields.expect +24 −0
  4. tests/tests2/95_bitfields_ms.expect +24 −0
tccgen.c+1−1
@@ -2093,7 +2093,7 @@ static int adjust_bf(SValue *sv, int bit_pos, int bit_size) · 2092 unmodified lines
2093 return 0;2093 return 0;
2094 t = sv->type.ref->auxtype;2094 t = sv->type.ref->auxtype;
2095 if (t != -1 && t != VT_STRUCT) {2095 if (t != -1 && t != VT_STRUCT) {
2096 sv->type.t = (sv->type.t & ~VT_BTYPE) | t;2096 sv->type.t = (sv->type.t & ~(VT_BTYPE | VT_LONG)) | t;
2097 sv->r |= VT_LVAL;2097 sv->r |= VT_LVAL;
2098 }2098 }
2099 return t;2099 return t;
tests/tests2/95_bitfields.c+18−0
@@ -77,6 +77,22 @@ · 76 unmodified lines
77 TEST_STRUCT(1,2,3,4,-3);77 TEST_STRUCT(1,2,3,4,-3);
78}78}
79 79
80/* ----------------------------------------------------------------------- */
81#elif TEST == 7
82{
83 struct M P __s {
84 long int d : 16;
85 long int b : 16;
86 long int x : 16;
87 long int y : 1;
88 long int z : 2;
89 long int a : 11;
90 long int e : 1;
91 long int f : 1;
92 };
93 TEST_STRUCT(1,2,3,4,5);
94}
95
80/* ----------------------------------------------------------------------- */96/* ----------------------------------------------------------------------- */
81#elif defined PACK97#elif defined PACK
82 98
@@ -101,6 +117,8 @@ top = 0; · 18 unmodified lines
101#include SELF117#include SELF
102#define TEST 6118#define TEST 6
103#include SELF119#include SELF
120#define TEST 7
121#include SELF
104 122
105#if PACK123#if PACK
106# pragma pack(pop)124# pragma pack(pop)
tests/tests2/95_bitfields.expect+24−0
@@ -34,6 +34,12 @@ bits as set : 00000030002001FD00000004 · 33 unmodified lines
34values : 01 02 03 04 fffffffd34values : 01 02 03 04 fffffffd
35align/size : 4 1235align/size : 4 12
36 36
37---- TEST 7 ----
38bits in use : 3FFFFFFFFFFF0000
39bits as set : 0026000100050000
40values : 01 00 ffffffff 04 05
41align/size : 8 8
42
37 43
38 44
39---- TEST 1 - PACKED ----45---- TEST 1 - PACKED ----
@@ -72,6 +78,12 @@ bits as set : 0030002001FD00000004 · 32 unmodified lines
72values : 01 02 03 04 fffffffd78values : 01 02 03 04 fffffffd
73align/size : 1 1079align/size : 1 10
74 80
81---- TEST 7 - PACKED ----
82bits in use : 3FFFFFFFFFFF0000
83bits as set : 0026000100050000
84values : 01 00 ffffffff 04 05
85align/size : 1 8
86
75 87
76 88
77---- TEST 1 - WITH ALIGN ----89---- TEST 1 - WITH ALIGN ----
@@ -110,6 +122,12 @@ bits as set : 00000030002001FD00000004 · 32 unmodified lines
110values : 01 02 03 04 fffffffd122values : 01 02 03 04 fffffffd
111align/size : 4 12123align/size : 4 12
112 124
125---- TEST 7 - WITH ALIGN ----
126bits in use : 3FFFFFFFFFFF0000
127bits as set : 0026000100050000
128values : 01 00 ffffffff 04 05
129align/size : 8 8
130
113 131
114 132
115---- TEST 1 - PACKED - WITH ALIGN ----133---- TEST 1 - PACKED - WITH ALIGN ----
@@ -147,3 +165,9 @@ bits in use : 007000FFFFFFFFFFFFFF · 31 unmodified lines
147bits as set : 0030002001FD00000004165bits as set : 0030002001FD00000004
148values : 01 02 03 04 fffffffd166values : 01 02 03 04 fffffffd
149align/size : 1 10167align/size : 1 10
168
169---- TEST 7 - PACKED - WITH ALIGN ----
170bits in use : 3FFFFFFFFFFF0000
171bits as set : 0026000100050000
172values : 01 00 ffffffff 04 05
173align/size : 1 8
tests/tests2/95_bitfields_ms.expect+24−0
@@ -34,6 +34,12 @@ bits as set : 000000000000003000002001000000FD00000004 · 33 unmodified lines
34values : 01 02 03 04 fffffffd34values : 01 02 03 04 fffffffd
35align/size : 4 2035align/size : 4 20
36 36
37---- TEST 7 - MS-BITFIELDS ----
38bits in use : 3FFFFFFFFFFF0000
39bits as set : 0026000100050000
40values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
41align/size : 8 8
42
37 43
38 44
39---- TEST 1 - MS-BITFIELDS - PACKED ----45---- TEST 1 - MS-BITFIELDS - PACKED ----
@@ -72,6 +78,12 @@ bits as set : 000000003000002001FD00000004 · 32 unmodified lines
72values : 01 02 03 04 fffffffd78values : 01 02 03 04 fffffffd
73align/size : 1 1479align/size : 1 14
74 80
81---- TEST 7 - MS-BITFIELDS - PACKED ----
82bits in use : 3FFFFFFFFFFF0000
83bits as set : 0026000100050000
84values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
85align/size : 1 8
86
75 87
76 88
77---- TEST 1 - MS-BITFIELDS - WITH ALIGN ----89---- TEST 1 - MS-BITFIELDS - WITH ALIGN ----
@@ -110,6 +122,12 @@ bits as set : 000000000000003000002001000000FD00000004 · 32 unmodified lines
110values : 01 02 03 04 fffffffd122values : 01 02 03 04 fffffffd
111align/size : 4 20123align/size : 4 20
112 124
125---- TEST 7 - MS-BITFIELDS - WITH ALIGN ----
126bits in use : 3FFFFFFFFFFF0000
127bits as set : 0026000100050000
128values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
129align/size : 8 8
130
113 131
114 132
115---- TEST 1 - MS-BITFIELDS - PACKED - WITH ALIGN ----133---- TEST 1 - MS-BITFIELDS - PACKED - WITH ALIGN ----
@@ -147,3 +165,9 @@ bits in use : 00000000700000FFFFFFFFFFFFFF · 31 unmodified lines
147bits as set : 000000003000002001FD00000004165bits as set : 000000003000002001FD00000004
148values : 01 02 03 04 fffffffd166values : 01 02 03 04 fffffffd
149align/size : 1 14167align/size : 1 14
168
169---- TEST 7 - MS-BITFIELDS - PACKED - WITH ALIGN ----
170bits in use : 3FFFFFFFFFFF0000
171bits as set : 0026000100050000
172values : 0000000000000001 0000000000000000 ffffffffffffffff 0000000000000004 0000000000000005
173align/size : 1 8

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t