diff options
author | Matthias Braun <matze@braunis.de> | 2017-12-14 00:12:46 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2017-12-14 00:12:46 +0000 |
commit | 0148c88c080cce52c09bd9bfc4dd2127734a6a9e (patch) | |
tree | 75fe343be05f900e3dc0e5b8aec67e790995e718 /llvm/lib/MC/MCAsmStreamer.cpp | |
parent | 2c1fa4feb183b7168d98f5dba8984b9dfde4ab31 (diff) | |
download | bcm5719-llvm-0148c88c080cce52c09bd9bfc4dd2127734a6a9e.tar.gz bcm5719-llvm-0148c88c080cce52c09bd9bfc4dd2127734a6a9e.zip |
MC: Add support for mach-o build_version
LC_BUILD_VERSION is a new load command superseding the previously used
LC_XXX_MIN_VERSION commands. This adds an assembler directive along with
encoding/streaming support.
llvm-svn: 320661
Diffstat (limited to 'llvm/lib/MC/MCAsmStreamer.cpp')
-rw-r--r-- | llvm/lib/MC/MCAsmStreamer.cpp | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp index 8f3dccbe441..3357553cf19 100644 --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -137,6 +137,8 @@ public: void EmitDataRegion(MCDataRegionType Kind) override; void EmitVersionMin(MCVersionMinType Kind, unsigned Major, unsigned Minor, unsigned Update) override; + void EmitBuildVersion(unsigned Platform, unsigned Major, unsigned Minor, + unsigned Update) override; void EmitThumbFunc(MCSymbol *Func) override; void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) override; @@ -471,15 +473,39 @@ void MCAsmStreamer::EmitDataRegion(MCDataRegionType Kind) { EmitEOL(); } -void MCAsmStreamer::EmitVersionMin(MCVersionMinType Kind, unsigned Major, +static const char *getVersionMinDirective(MCVersionMinType Type) { + switch (Type) { + case MCVM_WatchOSVersionMin: return ".watchos_version_min"; + case MCVM_TvOSVersionMin: return ".tvos_version_min"; + case MCVM_IOSVersionMin: return ".ios_version_min"; + case MCVM_OSXVersionMin: return ".macosx_version_min"; + } + llvm_unreachable("Invalid MC version min type"); +} + +void MCAsmStreamer::EmitVersionMin(MCVersionMinType Type, unsigned Major, unsigned Minor, unsigned Update) { - switch (Kind) { - case MCVM_WatchOSVersionMin: OS << "\t.watchos_version_min"; break; - case MCVM_TvOSVersionMin: OS << "\t.tvos_version_min"; break; - case MCVM_IOSVersionMin: OS << "\t.ios_version_min"; break; - case MCVM_OSXVersionMin: OS << "\t.macosx_version_min"; break; + OS << '\t' << getVersionMinDirective(Type) << ' ' << Major << ", " << Minor; + if (Update) + OS << ", " << Update; + EmitEOL(); +} + +static const char *getPlatformName(MachO::PlatformType Type) { + switch (Type) { + case MachO::PLATFORM_MACOS: return "macos"; + case MachO::PLATFORM_IOS: return "ios"; + case MachO::PLATFORM_TVOS: return "tvos"; + case MachO::PLATFORM_WATCHOS: return "watchos"; + case MachO::PLATFORM_BRIDGEOS: return "bridgeos"; } - OS << " " << Major << ", " << Minor; + llvm_unreachable("Invalid Mach-O platform type"); +} + +void MCAsmStreamer::EmitBuildVersion(unsigned Platform, unsigned Major, + unsigned Minor, unsigned Update) { + const char *PlatformName = getPlatformName((MachO::PlatformType)Platform); + OS << "\t.build_version " << PlatformName << ", " << Major << ", " << Minor; if (Update) OS << ", " << Update; EmitEOL(); |