esym->ifd = ifdNil;
/* FIXME: we can do better than this for st and sc. */
esym->asym.st = stGlobal;
- esym->asym.sc = scAbs;
+ if (bfd_is_und_section (sym->section))
+ esym->asym.sc = scUndefined;
+ else if (bfd_is_com_section (sym->section))
+ esym->asym.sc = scCommon;
+ else if (bfd_is_abs_section (sym->section))
+ esym->asym.sc = scAbs;
+ else if ((sym->section->flags & SEC_HAS_CONTENTS) == 0)
+ esym->asym.sc = scBss;
+ else if ((sym->section->flags & SEC_CODE) != 0)
+ esym->asym.sc = scText;
+ else
+ esym->asym.sc = scData;
esym->asym.reserved = 0;
esym->asym.index = indexNil;
return true;