@@ -216,17 +216,17 @@ Outbuffer *SECbuf; // Buffer to build section table in
216
216
// not used.
217
217
static int section_cnt ; // Number of sections in table
218
218
219
- #define SHI_TEXT 1
220
- #define SHI_RELTEXT 2
221
- #define SHI_DATA 3
222
- #define SHI_RELDATA 4
223
- #define SHI_BSS 5
224
- #define SHI_RODAT 6
225
- #define SHI_STRINGS 7
226
- #define SHI_SYMTAB 8
227
- #define SHI_SECNAMES 9
228
- #define SHI_COM 10
229
- #define SHI_NOTE 11
219
+ #define SHN_TEXT 1
220
+ #define SHN_RELTEXT 2
221
+ #define SHN_DATA 3
222
+ #define SHN_RELDATA 4
223
+ #define SHN_BSS 5
224
+ #define SHN_RODAT 6
225
+ #define SHN_STRINGS 7
226
+ #define SHN_SYMTAB 8
227
+ #define SHN_SECNAMES 9
228
+ #define SHN_COM 10
229
+ #define SHN_NOTE 11
230
230
231
231
IDXSYM * mapsec2sym ;
232
232
#define S2S_INC 20
@@ -252,6 +252,10 @@ static int local_cnt; // Number of symbols with STB_LOCAL
252
252
// Symbol Table
253
253
Outbuffer * SYMbuf ; // Buffer to build symbol table in
254
254
255
+ // Extended section header indices
256
+ static Outbuffer * shndx_data ;
257
+ static const IDXSEC secidx_shndx = SHN_HIRESERVE + 1 ;
258
+
255
259
// Notes data (note currently used)
256
260
static Outbuffer * note_data ;
257
261
static IDXSEC secidx_note ; // Final table index for note data
@@ -458,9 +462,22 @@ static IDXSYM elf_addsym(IDXSTR nam, targ_size_t val, unsigned sz,
458
462
*/
459
463
if (sz == 0 && (bind == STB_GLOBAL || bind == STB_WEAK ) &&
460
464
(typ == STT_OBJECT || typ == STT_TLS ) &&
461
- sec != SHT_UNDEF )
465
+ sec != SHN_UNDEF )
462
466
sz = 1 ; // so fake it if it doesn't
463
467
468
+ if (sec > SHN_HIRESERVE )
469
+ { // If the section index is too big we need to store it as
470
+ // extended section header index.
471
+ if (!shndx_data )
472
+ shndx_data = new Outbuffer (50 * sizeof (Elf64_Word ));
473
+ // fill with zeros up to symbol_idx
474
+ const size_t shndx_idx = shndx_data -> size () / sizeof (Elf64_Word );
475
+ shndx_data -> writezeros ((symbol_idx - shndx_idx ) * sizeof (Elf64_Word ));
476
+
477
+ shndx_data -> write32 (sec );
478
+ sec = SHN_XINDEX ;
479
+ }
480
+
464
481
if (I64 )
465
482
{
466
483
if (!SYMbuf )
@@ -539,6 +556,14 @@ static IDXSEC elf_newsection2(
539
556
{ SECbuf = new Outbuffer (4 * sizeof (Elf32_Shdr ));
540
557
SECbuf -> reserve (16 * sizeof (Elf32_Shdr ));
541
558
}
559
+ if (section_cnt == SHN_LORESERVE )
560
+ { // insert dummy null sections to skip reserved section indices
561
+ section_cnt = SHN_HIRESERVE + 1 ;
562
+ SECbuf -> writezeros ((SHN_HIRESERVE + 1 - SHN_LORESERVE ) * sizeof (sec ));
563
+ // shndx itself becomes the first section with an extended index
564
+ IDXSTR namidx = Obj ::addstr (section_names , ".symtab_shndx" );
565
+ elf_newsection2 (namidx ,SHT_SYMTAB_SHNDX ,0 ,0 ,0 ,0 ,SHN_SYMTAB ,0 ,4 ,4 );
566
+ }
542
567
SECbuf -> write ((void * )& sec , sizeof (sec ));
543
568
return section_cnt ++ ;
544
569
}
@@ -702,9 +727,9 @@ Obj *Obj::init(Outbuffer *objbuf, const char *filename, const char *csegname)
702
727
// name,type,flags,addr,offset,size,link,info,addralign,entsize
703
728
elf_newsection2 (0 , SHT_NULL , 0 , 0 ,0 ,0 ,0 ,0 , 0 ,0 );
704
729
elf_newsection2 (NAMIDX_TEXT ,SHT_PROGDEF ,SHF_ALLOC |SHF_EXECINSTR ,0 ,0 ,0 ,0 ,0 , 4 ,0 );
705
- elf_newsection2 (NAMIDX_RELTEXT ,SHT_RELA , 0 ,0 ,0 ,0 ,SHI_SYMTAB , SHI_TEXT , 8 ,0x18 );
730
+ elf_newsection2 (NAMIDX_RELTEXT ,SHT_RELA , 0 ,0 ,0 ,0 ,SHN_SYMTAB , SHN_TEXT , 8 ,0x18 );
706
731
elf_newsection2 (NAMIDX_DATA ,SHT_PROGDEF ,SHF_ALLOC |SHF_WRITE , 0 ,0 ,0 ,0 ,0 , 8 ,0 );
707
- elf_newsection2 (NAMIDX_RELDATA64 ,SHT_RELA , 0 ,0 ,0 ,0 ,SHI_SYMTAB , SHI_DATA , 8 ,0x18 );
732
+ elf_newsection2 (NAMIDX_RELDATA64 ,SHT_RELA , 0 ,0 ,0 ,0 ,SHN_SYMTAB , SHN_DATA , 8 ,0x18 );
708
733
elf_newsection2 (NAMIDX_BSS , SHT_NOBITS ,SHF_ALLOC |SHF_WRITE , 0 ,0 ,0 ,0 ,0 , 16 ,0 );
709
734
elf_newsection2 (NAMIDX_RODATA ,SHT_PROGDEF ,SHF_ALLOC , 0 ,0 ,0 ,0 ,0 , 16 ,0 );
710
735
elf_newsection2 (NAMIDX_STRTAB ,SHT_STRTAB , 0 , 0 ,0 ,0 ,0 ,0 , 1 ,0 );
@@ -748,9 +773,9 @@ Obj *Obj::init(Outbuffer *objbuf, const char *filename, const char *csegname)
748
773
// name,type,flags,addr,offset,size,link,info,addralign,entsize
749
774
elf_newsection2 (0 , SHT_NULL , 0 , 0 ,0 ,0 ,0 ,0 , 0 ,0 );
750
775
elf_newsection2 (NAMIDX_TEXT ,SHT_PROGDEF ,SHF_ALLOC |SHF_EXECINSTR ,0 ,0 ,0 ,0 ,0 , 16 ,0 );
751
- elf_newsection2 (NAMIDX_RELTEXT ,SHT_REL , 0 ,0 ,0 ,0 ,SHI_SYMTAB , SHI_TEXT , 4 ,8 );
776
+ elf_newsection2 (NAMIDX_RELTEXT ,SHT_REL , 0 ,0 ,0 ,0 ,SHN_SYMTAB , SHN_TEXT , 4 ,8 );
752
777
elf_newsection2 (NAMIDX_DATA ,SHT_PROGDEF ,SHF_ALLOC |SHF_WRITE , 0 ,0 ,0 ,0 ,0 , 4 ,0 );
753
- elf_newsection2 (NAMIDX_RELDATA ,SHT_REL , 0 ,0 ,0 ,0 ,SHI_SYMTAB , SHI_DATA , 4 ,8 );
778
+ elf_newsection2 (NAMIDX_RELDATA ,SHT_REL , 0 ,0 ,0 ,0 ,SHN_SYMTAB , SHN_DATA , 4 ,8 );
754
779
elf_newsection2 (NAMIDX_BSS , SHT_NOBITS ,SHF_ALLOC |SHF_WRITE , 0 ,0 ,0 ,0 ,0 , 32 ,0 );
755
780
elf_newsection2 (NAMIDX_RODATA ,SHT_PROGDEF ,SHF_ALLOC , 0 ,0 ,0 ,0 ,0 , 1 ,0 );
756
781
elf_newsection2 (NAMIDX_STRTAB ,SHT_STRTAB , 0 , 0 ,0 ,0 ,0 ,0 , 1 ,0 );
@@ -777,37 +802,39 @@ Obj *Obj::init(Outbuffer *objbuf, const char *filename, const char *csegname)
777
802
778
803
if (SYMbuf )
779
804
SYMbuf -> setsize (0 );
805
+ if (shndx_data )
806
+ shndx_data -> setsize (0 );
780
807
symbol_idx = 0 ;
781
808
local_cnt = 0 ;
782
809
// The symbols that every object file has
783
810
elf_addsym (0 , 0 , 0 , STT_NOTYPE , STB_LOCAL , 0 );
784
- elf_addsym (0 , 0 , 0 , STT_FILE , STB_LOCAL , SHT_ABS ); // STI_FILE
785
- elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHI_TEXT ); // STI_TEXT
786
- elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHI_DATA ); // STI_DATA
787
- elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHI_BSS ); // STI_BSS
788
- elf_addsym (0 , 0 , 0 , STT_NOTYPE , STB_LOCAL , SHI_TEXT ); // STI_GCC
789
- elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHI_RODAT ); // STI_RODAT
790
- elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHI_NOTE ); // STI_NOTE
791
- elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHI_COM ); // STI_COM
811
+ elf_addsym (0 , 0 , 0 , STT_FILE , STB_LOCAL , SHN_ABS ); // STI_FILE
812
+ elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHN_TEXT ); // STI_TEXT
813
+ elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHN_DATA ); // STI_DATA
814
+ elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHN_BSS ); // STI_BSS
815
+ elf_addsym (0 , 0 , 0 , STT_NOTYPE , STB_LOCAL , SHN_TEXT ); // STI_GCC
816
+ elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHN_RODAT ); // STI_RODAT
817
+ elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHN_NOTE ); // STI_NOTE
818
+ elf_addsym (0 , 0 , 0 , STT_SECTION , STB_LOCAL , SHN_COM ); // STI_COM
792
819
793
820
// Initialize output buffers for CODE, DATA and COMMENTS
794
821
// (NOTE not supported, BSS not required)
795
822
796
823
seg_count = 0 ;
797
824
798
- elf_getsegment2 (SHI_TEXT , STI_TEXT , SHI_RELTEXT );
825
+ elf_getsegment2 (SHN_TEXT , STI_TEXT , SHN_RELTEXT );
799
826
assert (SegData [CODE ]-> SDseg == CODE );
800
827
801
- elf_getsegment2 (SHI_DATA , STI_DATA , SHI_RELDATA );
828
+ elf_getsegment2 (SHN_DATA , STI_DATA , SHN_RELDATA );
802
829
assert (SegData [DATA ]-> SDseg == DATA );
803
830
804
- elf_getsegment2 (SHI_RODAT , STI_RODAT , 0 );
831
+ elf_getsegment2 (SHN_RODAT , STI_RODAT , 0 );
805
832
assert (SegData [CDATA ]-> SDseg == CDATA );
806
833
807
- elf_getsegment2 (SHI_BSS , STI_BSS , 0 );
834
+ elf_getsegment2 (SHN_BSS , STI_BSS , 0 );
808
835
assert (SegData [UDATA ]-> SDseg == UDATA );
809
836
810
- elf_getsegment2 (SHI_COM , STI_COM , 0 );
837
+ elf_getsegment2 (SHN_COM , STI_COM , 0 );
811
838
assert (SegData [COMD ]-> SDseg == COMD );
812
839
813
840
if (config .fulltypes )
@@ -927,6 +954,24 @@ void *elf_renumbersyms()
927
954
}
928
955
}
929
956
957
+ // Reorder extended section header indices
958
+ if (shndx_data && shndx_data -> size ())
959
+ {
960
+ // fill with zeros up to symbol_idx
961
+ const size_t shndx_idx = shndx_data -> size () / sizeof (Elf64_Word );
962
+ shndx_data -> writezeros ((symbol_idx - shndx_idx ) * sizeof (Elf64_Word ));
963
+
964
+ Elf64_Word * old_buf = (Elf64_Word * )shndx_data -> buf ;
965
+ Elf64_Word * tmp_buf = (Elf64_Word * )util_malloc (sizeof (Elf64_Word ), symbol_idx );
966
+ for (SYMIDX old_idx = 0 ; old_idx < symbol_idx ; ++ old_idx )
967
+ {
968
+ const SYMIDX new_idx = sym_map [old_idx ];
969
+ tmp_buf [new_idx ] = old_buf [old_idx ];
970
+ }
971
+ memcpy (old_buf , tmp_buf , sizeof (Elf64_Word ) * symbol_idx );
972
+ util_free (tmp_buf );
973
+ }
974
+
930
975
// Renumber the relocations
931
976
for (int i = 1 ; i <= seg_count ; i ++ )
932
977
{ // Map indicies in the segment table
@@ -938,7 +983,7 @@ void *elf_renumbersyms()
938
983
unsigned oidx = SecHdrTab [pseg -> SDshtidx ].sh_info ;
939
984
assert (oidx < symbol_idx );
940
985
// we only have one symbol table
941
- assert (SecHdrTab [pseg -> SDshtidx ].sh_link == SHI_SYMTAB );
986
+ assert (SecHdrTab [pseg -> SDshtidx ].sh_link == SHN_SYMTAB );
942
987
SecHdrTab [pseg -> SDshtidx ].sh_info = sym_map [oidx ];
943
988
}
944
989
@@ -1064,8 +1109,13 @@ void Obj::term(const char *objfilename)
1064
1109
};
1065
1110
int hdrsize = I64 ? sizeof (Elf64_Ehdr ) : sizeof (Elf32_Hdr );
1066
1111
1067
- elf_header .e_shnum = section_cnt ;
1068
- elf_header .e_shstrndx = SHI_SECNAMES ;
1112
+ if (section_cnt < SHN_LORESERVE )
1113
+ elf_header .e_shnum = section_cnt ;
1114
+ else
1115
+ { elf_header .e_shnum = SHN_UNDEF ;
1116
+ SecHdrTab [0 ].sh_size = section_cnt ;
1117
+ }
1118
+ elf_header .e_shstrndx = SHN_SECNAMES ;
1069
1119
fobjbuf -> writezeros (hdrsize );
1070
1120
1071
1121
// Walk through sections determining size and file offsets
@@ -1139,7 +1189,7 @@ void Obj::term(const char *objfilename)
1139
1189
1140
1190
if (comment_data )
1141
1191
{
1142
- sechdr = & SecHdrTab [SHI_COM ]; // Comments
1192
+ sechdr = & SecHdrTab [SHN_COM ]; // Comments
1143
1193
sechdr -> sh_size = comment_data -> size ();
1144
1194
sechdr -> sh_offset = foffset ;
1145
1195
fobjbuf -> write (comment_data -> buf , sechdr -> sh_size );
@@ -1149,7 +1199,7 @@ void Obj::term(const char *objfilename)
1149
1199
//
1150
1200
// Then output string table for section names
1151
1201
//
1152
- sechdr = & SecHdrTab [SHI_SECNAMES ]; // Section Names
1202
+ sechdr = & SecHdrTab [SHN_SECNAMES ]; // Section Names
1153
1203
sechdr -> sh_size = section_names -> size ();
1154
1204
sechdr -> sh_offset = foffset ;
1155
1205
//dbg_printf("section names offset %d\n",foffset);
@@ -1160,19 +1210,29 @@ void Obj::term(const char *objfilename)
1160
1210
// Symbol table and string table for symbols next
1161
1211
//
1162
1212
//dbg_printf("output symbol table size %d\n",SYMbuf->size());
1163
- sechdr = & SecHdrTab [SHI_SYMTAB ]; // Symbol Table
1213
+ sechdr = & SecHdrTab [SHN_SYMTAB ]; // Symbol Table
1164
1214
sechdr -> sh_size = SYMbuf -> size ();
1165
1215
sechdr -> sh_entsize = I64 ? sizeof (Elf64_Sym ) : sizeof (Elf32_Sym );
1166
- sechdr -> sh_link = SHI_STRINGS ;
1216
+ sechdr -> sh_link = SHN_STRINGS ;
1167
1217
sechdr -> sh_info = local_cnt ;
1168
1218
foffset = elf_align (4 ,foffset );
1169
1219
sechdr -> sh_offset = foffset ;
1170
1220
fobjbuf -> write (symtab , sechdr -> sh_size );
1171
1221
foffset += sechdr -> sh_size ;
1172
1222
util_free (symtab );
1173
1223
1224
+ if (shndx_data && shndx_data -> size ())
1225
+ {
1226
+ assert (section_cnt >= secidx_shndx );
1227
+ sechdr = & SecHdrTab [secidx_shndx ];
1228
+ sechdr -> sh_size = shndx_data -> size ();
1229
+ sechdr -> sh_offset = foffset ;
1230
+ fobjbuf -> write (shndx_data -> buf , sechdr -> sh_size );
1231
+ foffset += sechdr -> sh_size ;
1232
+ }
1233
+
1174
1234
//dbg_printf("output section strings size 0x%x,offset 0x%x\n",symtab_strings->size(),foffset);
1175
- sechdr = & SecHdrTab [SHI_STRINGS ]; // Symbol Strings
1235
+ sechdr = & SecHdrTab [SHN_STRINGS ]; // Symbol Strings
1176
1236
sechdr -> sh_size = symtab_strings -> size ();
1177
1237
sechdr -> sh_offset = foffset ;
1178
1238
fobjbuf -> write (symtab_strings -> buf , sechdr -> sh_size );
@@ -1435,7 +1495,7 @@ void obj_filename(const char *modname)
1435
1495
{
1436
1496
//dbg_printf("obj_filename(char *%s)\n",modname);
1437
1497
unsigned strtab_idx = Obj ::addstr (symtab_strings ,modname );
1438
- elf_addsym (strtab_idx ,0 ,0 ,STT_FILE ,STB_LOCAL ,SHT_ABS );
1498
+ elf_addsym (strtab_idx ,0 ,0 ,STT_FILE ,STB_LOCAL ,SHN_ABS );
1439
1499
}
1440
1500
1441
1501
/*******************************
@@ -2177,7 +2237,7 @@ int Obj::external_def(const char *name)
2177
2237
//dbg_printf("Obj::external_def('%s')\n",name);
2178
2238
assert (name );
2179
2239
IDXSTR namidx = Obj ::addstr (symtab_strings ,name );
2180
- IDXSYM symidx = elf_addsym (namidx , 0 , 0 , STT_NOTYPE , STB_GLOBAL , SHT_UNDEF );
2240
+ IDXSYM symidx = elf_addsym (namidx , 0 , 0 , STT_NOTYPE , STB_GLOBAL , SHN_UNDEF );
2181
2241
return symidx ;
2182
2242
}
2183
2243
@@ -2205,14 +2265,14 @@ int Obj::external(Symbol *s)
2205
2265
if (s -> Sscope && !tyfunc (s -> ty ()))
2206
2266
{
2207
2267
symtype = STT_OBJECT ;
2208
- sectype = SHT_COMMON ;
2268
+ sectype = SHN_COMMON ;
2209
2269
size = type_size (s -> Stype );
2210
2270
}
2211
2271
else
2212
2272
#endif
2213
2273
{
2214
2274
symtype = STT_NOTYPE ;
2215
- sectype = SHT_UNDEF ;
2275
+ sectype = SHN_UNDEF ;
2216
2276
size = 0 ;
2217
2277
}
2218
2278
if (s -> ty () & mTYthread )
@@ -2270,7 +2330,7 @@ int Obj::common_block(Symbol *s,targ_size_t size,targ_size_t count)
2270
2330
alignOffset (UDATA ,size );
2271
2331
IDXSYM symidx = elf_addsym (namidx , SegData [UDATA ]-> SDoffset , size * count ,
2272
2332
(s -> ty () & mTYthread ) ? STT_TLS : STT_OBJECT ,
2273
- STB_WEAK , SHI_BSS );
2333
+ STB_WEAK , SHN_BSS );
2274
2334
//dbg_printf("\tObj::common_block returning symidx %d\n",symidx);
2275
2335
s -> Sseg = UDATA ;
2276
2336
s -> Sfl = FLudata ;
@@ -2429,10 +2489,10 @@ void ElfObj::addrel(int seg, targ_size_t offset, unsigned type,
2429
2489
if (segdata -> SDrel -> size () == 0 )
2430
2490
{ IDXSEC relidx ;
2431
2491
2432
- if (secidx == SHI_TEXT )
2433
- relidx = SHI_RELTEXT ;
2434
- else if (secidx == SHI_DATA )
2435
- relidx = SHI_RELDATA ;
2492
+ if (secidx == SHN_TEXT )
2493
+ relidx = SHN_RELTEXT ;
2494
+ else if (secidx == SHN_DATA )
2495
+ relidx = SHN_RELDATA ;
2436
2496
else
2437
2497
{
2438
2498
// Get the section name, and make a copy because
@@ -2453,15 +2513,15 @@ void ElfObj::addrel(int seg, targ_size_t offset, unsigned type,
2453
2513
* Elf64_Shdr.
2454
2514
*/
2455
2515
Elf32_Shdr * relsec = & SecHdrTab [relidx ];
2456
- relsec -> sh_link = SHI_SYMTAB ;
2516
+ relsec -> sh_link = SHN_SYMTAB ;
2457
2517
relsec -> sh_info = secidx ;
2458
2518
relsec -> sh_entsize = sizeof (Elf64_Rela );
2459
2519
relsec -> sh_addralign = 8 ;
2460
2520
}
2461
2521
else
2462
2522
{
2463
2523
Elf32_Shdr * relsec = & SecHdrTab [relidx ];
2464
- relsec -> sh_link = SHI_SYMTAB ;
2524
+ relsec -> sh_link = SHN_SYMTAB ;
2465
2525
relsec -> sh_info = secidx ;
2466
2526
relsec -> sh_entsize = sizeof (Elf32_Rel );
2467
2527
relsec -> sh_addralign = 4 ;
@@ -2681,12 +2741,12 @@ int Obj::reftoident(int seg, targ_size_t offset, Symbol *s, targ_size_t val,
2681
2741
{ // identifier is defined somewhere else
2682
2742
if (I64 )
2683
2743
{
2684
- if (SymbolTable64 [s -> Sxtrnnum ].st_shndx != SHT_UNDEF )
2744
+ if (SymbolTable64 [s -> Sxtrnnum ].st_shndx != SHN_UNDEF )
2685
2745
external = FALSE;
2686
2746
}
2687
2747
else
2688
2748
{
2689
- if (SymbolTable [s -> Sxtrnnum ].st_shndx != SHT_UNDEF )
2749
+ if (SymbolTable [s -> Sxtrnnum ].st_shndx != SHN_UNDEF )
2690
2750
external = FALSE;
2691
2751
}
2692
2752
}
@@ -3220,7 +3280,7 @@ static void obj_rtinit()
3220
3280
3221
3281
// use a weak reference for _d_dso_registry
3222
3282
namidx = ElfObj ::addstr (symtab_strings , "_d_dso_registry" );
3223
- const IDXSYM symidx = elf_addsym (namidx , 0 , 0 , STT_NOTYPE , STB_WEAK , SHT_UNDEF );
3283
+ const IDXSYM symidx = elf_addsym (namidx , 0 , 0 , STT_NOTYPE , STB_WEAK , SHN_UNDEF );
3224
3284
3225
3285
if (config .flags3 & CFG3pic )
3226
3286
{
@@ -3345,7 +3405,7 @@ static void obj_rtinit()
3345
3405
// set group section infos
3346
3406
Offset (groupseg ) = SegData [groupseg ]-> SDbuf -> size ();
3347
3407
Elf32_Shdr * p = MAP_SEG2SEC (groupseg );
3348
- p -> sh_link = SHI_SYMTAB ;
3408
+ p -> sh_link = SHN_SYMTAB ;
3349
3409
p -> sh_info = dso_rec ; // set the dso_rec as group symbol
3350
3410
p -> sh_entsize = sizeof (IDXSYM );
3351
3411
p -> sh_size = Offset (groupseg );
0 commit comments