for (unsigned i = 0, e = ExternalSymbolData.size(); i != e; ++i) {
ELFSymbolData &MSD = ExternalSymbolData[i];
MCSymbolData &Data = *MSD.SymbolData;
- assert((Data.getFlags() & ELF_STB_Global) &&
- "External symbol requires STB_GLOBAL flag");
+ assert(((Data.getFlags() & ELF_STB_Global) ||
+ (Data.getFlags() & ELF_STB_Weak)) &&
+ "External symbol requires STB_GLOBAL or STB_WEAK flag");
WriteSymbol(F, MSD, Layout);
if (GetBinding(Data) == ELF::STB_LOCAL)
LastLocalSymbolIndex++;
.weak foo
.long foo
+// And that bar is after all local symbols
+ .weak bar
+bar:
+
+//CHECK: # Symbol 4
+//CHECK-NEXT: (('st_name', 5) # 'bar'
+//CHECK-NEXT: ('st_bind', 2)
+//CHECK-NEXT: ('st_type', 0)
+//CHECK-NEXT: ('st_other', 0)
+//CHECK-NEXT: ('st_shndx', 1)
+//CHECK-NEXT: ('st_value', 0)
+//CHECK-NEXT: ('st_size', 0)
+//CHECK-NEXT: ),
+//CHECK-NEXT: # Symbol 5
//CHECK: (('st_name', 1) # 'foo'
//CHECK-NEXT: ('st_bind', 2)
//CHECK-NEXT: ('st_type', 0)
//CHECK-NEXT: ('st_shndx', 0)
//CHECK-NEXT: ('st_value', 0)
//CHECK-NEXT: ('st_size', 0)
+//CHECK-NEXT: ),
+//CHECK-NEXT: ])