@@ -352,10 +352,9 @@ COFFSymbol *WinCOFFObjectWriter::getLinkedSymbol(const MCSymbol &Symbol) {
352
352
353
353
// / This function takes a symbol data object from the assembler
354
354
// / and creates the associated COFF symbol staging object.
355
- void WinCOFFObjectWriter::DefineSymbol (const MCSymbol &MCSymGeneric ,
355
+ void WinCOFFObjectWriter::DefineSymbol (const MCSymbol &MCSym ,
356
356
MCAssembler &Assembler,
357
357
const MCAsmLayout &Layout) {
358
- const auto &MCSym = cast<MCSymbolCOFF>(MCSymGeneric);
359
358
COFFSymbol *Sym = GetOrCreateCOFFSymbol (&MCSym);
360
359
const MCSymbol *Base = Layout.getBaseSymbol (MCSym);
361
360
COFFSection *Sec = nullptr ;
@@ -366,7 +365,7 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
366
365
}
367
366
368
367
COFFSymbol *Local = nullptr ;
369
- if (MCSym.isWeakExternal ()) {
368
+ if (cast<MCSymbolCOFF>( MCSym) .isWeakExternal ()) {
370
369
Sym->Data .StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
371
370
372
371
COFFSymbol *WeakDefault = getLinkedSymbol (MCSym);
@@ -377,9 +376,6 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
377
376
WeakDefault->Data .SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
378
377
else
379
378
WeakDefault->Section = Sec;
380
- // Make the default symbol static, in order to not conflict with
381
- // similar default symbols for the same weak in other objects.
382
- WeakDefault->Data .StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
383
379
Local = WeakDefault;
384
380
}
385
381
@@ -398,8 +394,14 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
398
394
else
399
395
Sym->Section = Sec;
400
396
Local = Sym;
397
+ }
401
398
402
- Local->Data .StorageClass = MCSym.getClass ();
399
+ if (Local) {
400
+ Local->Data .Value = getSymbolValue (MCSym, Layout);
401
+
402
+ const MCSymbolCOFF &SymbolCOFF = cast<MCSymbolCOFF>(MCSym);
403
+ Local->Data .Type = SymbolCOFF.getType ();
404
+ Local->Data .StorageClass = SymbolCOFF.getClass ();
403
405
404
406
// If no storage class was specified in the streamer, define it here.
405
407
if (Local->Data .StorageClass == COFF::IMAGE_SYM_CLASS_NULL) {
@@ -411,12 +413,6 @@ void WinCOFFObjectWriter::DefineSymbol(const MCSymbol &MCSymGeneric,
411
413
}
412
414
}
413
415
414
- if (Local) {
415
- Local->Data .Value = getSymbolValue (MCSym, Layout);
416
-
417
- Local->Data .Type = MCSym.getType ();
418
- }
419
-
420
416
Sym->MC = &MCSym;
421
417
}
422
418
0 commit comments