diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2017-06-28 07:37:39 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2017-06-28 07:37:39 +0000 |
commit | 5a902ccd0cda727997b16939de404a8955e008db (patch) | |
tree | 733a3a33a0873e1b5d1057561153dc0f963e2754 | |
parent | a91f36761c8b207d1619a331ae069d0712180a16 (diff) |
if we return nullptr for a "noexec" section, then don't change section.
prevents core dumps :)
okay tedu@
-rw-r--r-- | gnu/llvm/lib/MC/MCELFStreamer.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/gnu/llvm/lib/MC/MCELFStreamer.cpp b/gnu/llvm/lib/MC/MCELFStreamer.cpp index 06d161bccab..fd0e3452071 100644 --- a/gnu/llvm/lib/MC/MCELFStreamer.cpp +++ b/gnu/llvm/lib/MC/MCELFStreamer.cpp @@ -24,6 +24,7 @@ #include "llvm/MC/MCInst.h" #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCObjectStreamer.h" +#include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSectionELF.h" #include "llvm/MC/MCSymbolELF.h" @@ -90,8 +91,11 @@ void MCELFStreamer::InitSections(bool NoExecStack) { SwitchSection(Ctx.getObjectFileInfo()->getTextSection()); EmitCodeAlignment(4); - if (NoExecStack) - SwitchSection(Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx)); + if (NoExecStack) { + MCSection *s = Ctx.getAsmInfo()->getNonexecutableStackSection(Ctx); + if (s) + SwitchSection(s); + } } void MCELFStreamer::EmitLabel(MCSymbol *S) { @@ -283,6 +287,9 @@ bool MCELFStreamer::EmitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) { case MCSA_Internal: Symbol->setVisibility(ELF::STV_INTERNAL); break; + + case MCSA_AltEntry: + llvm_unreachable("ELF doesn't support the .alt_entry attribute"); } return true; @@ -325,8 +332,8 @@ void MCELFStreamer::EmitCommonSymbol(MCSymbol *S, uint64_t Size, ->setSize(MCConstantExpr::create(Size, getContext())); } -void MCELFStreamer::emitELFSize(MCSymbolELF *Symbol, const MCExpr *Value) { - Symbol->setSize(Value); +void MCELFStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) { + cast<MCSymbolELF>(Symbol)->setSize(Value); } void MCELFStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size, @@ -406,13 +413,10 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) { case MCSymbolRefExpr::VK_TLSLD: case MCSymbolRefExpr::VK_TLSLDM: case MCSymbolRefExpr::VK_TPOFF: + case MCSymbolRefExpr::VK_TPREL: case MCSymbolRefExpr::VK_DTPOFF: - case MCSymbolRefExpr::VK_Mips_TLSGD: - case MCSymbolRefExpr::VK_Mips_GOTTPREL: - case MCSymbolRefExpr::VK_Mips_TPREL_HI: - case MCSymbolRefExpr::VK_Mips_TPREL_LO: + case MCSymbolRefExpr::VK_DTPREL: case MCSymbolRefExpr::VK_PPC_DTPMOD: - case MCSymbolRefExpr::VK_PPC_TPREL: case MCSymbolRefExpr::VK_PPC_TPREL_LO: case MCSymbolRefExpr::VK_PPC_TPREL_HI: case MCSymbolRefExpr::VK_PPC_TPREL_HA: @@ -420,7 +424,6 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) { case MCSymbolRefExpr::VK_PPC_TPREL_HIGHERA: case MCSymbolRefExpr::VK_PPC_TPREL_HIGHEST: case MCSymbolRefExpr::VK_PPC_TPREL_HIGHESTA: - case MCSymbolRefExpr::VK_PPC_DTPREL: case MCSymbolRefExpr::VK_PPC_DTPREL_LO: case MCSymbolRefExpr::VK_PPC_DTPREL_HI: case MCSymbolRefExpr::VK_PPC_DTPREL_HA: |