[lld] r212093 - [mach-o] add representation for LC_ID_DYLIB to MachONormalizedFile
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Thu Jul 3 05:15:05 PDT 2014
Hi,
this test seems to be flaky:
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-debian-fast/builds/16473/steps/test/logs/stdio
On Tue, Jul 1, 2014 at 12:15 PM, Tim Northover <tnorthover at apple.com> wrote:
> Author: tnorthover
> Date: Tue Jul 1 03:15:41 2014
> New Revision: 212093
>
> URL: http://llvm.org/viewvc/llvm-project?rev=212093&view=rev
> Log:
> [mach-o] add representation for LC_ID_DYLIB to MachONormalizedFile
>
> It still needs to be tied into BinaryReader, but this allows reasonably
> sensible creation of SharedLibrary atoms on MachO.
>
> Added:
> lld/trunk/test/mach-o/Inputs/
> lld/trunk/test/mach-o/Inputs/use-dylib-install-names.yaml
> lld/trunk/test/mach-o/dylib-install-names.yaml
> Modified:
> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
> lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
> lld/trunk/test/mach-o/lit.local.cfg
> lld/trunk/test/mach-o/use-simple-dylib.yaml
>
> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp Tue Jul 1 03:15:41 2014
> @@ -386,6 +386,15 @@ readBinary(std::unique_ptr<MemoryBuffer>
> }
> }
> }
> + if (cmd == LC_ID_DYLIB) {
> + const dylib_command *dl = reinterpret_cast<const dylib_command*>(lc);
> + dylib_command tempDL;
> + if (swap) {
> + tempDL = *dl; swapStruct(tempDL); dl = &tempDL;
> + }
> +
> + f->installName = lc + dl->dylib.name;
> + }
> return false;
> });
> if (ec)
>
> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp Tue Jul 1 03:15:41 2014
> @@ -324,6 +324,12 @@ uint32_t MachOFileLayout::loadCommandsSi
> size += segCommandSize;
> ++count;
>
> + // If creating a dylib, add LC_ID_DYLIB.
> + if (_file.fileType == llvm::MachO::MH_DYLIB) {
> + size += sizeof(dylib_command) + pointerAlign(_file.installName.size() + 1);
> + ++count;
> + }
> +
> // Add LC_DYLD_INFO
> size += sizeof(dyld_info_command);
> ++count;
> @@ -621,6 +627,24 @@ std::error_code MachOFileLayout::writeLo
> else
> ec = writeSegmentLoadCommands<MachO32Trait>(lc);
>
> + // Add LC_ID_DYLIB command for dynamic libraries.
> + if (_file.fileType == llvm::MachO::MH_DYLIB) {
> + dylib_command *dc = reinterpret_cast<dylib_command*>(lc);
> + StringRef path = _file.installName;
> + uint32_t size = sizeof(dylib_command) + pointerAlign(path.size() + 1);
> + dc->cmd = LC_ID_DYLIB;
> + dc->cmdsize = size;
> + dc->dylib.name = sizeof(dylib_command); // offset
> + dc->dylib.timestamp = 0; // FIXME
> + dc->dylib.current_version = 0; // FIXME
> + dc->dylib.compatibility_version = 0; // FIXME
> + if (_swap)
> + swapStruct(*dc);
> + memcpy(lc + sizeof(dylib_command), path.begin(), path.size());
> + lc[sizeof(dylib_command) + path.size()] = '\0';
> + lc += size;
> + }
> +
> // Add LC_DYLD_INFO_ONLY.
> dyld_info_command* di = reinterpret_cast<dyld_info_command*>(lc);
> di->cmd = LC_DYLD_INFO_ONLY;
> @@ -720,7 +744,6 @@ std::error_code MachOFileLayout::writeLo
> lc[sizeof(dylib_command)+dep.path.size()] = '\0';
> lc += size;
> }
> -
> }
> return ec;
> }
>
> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp Tue Jul 1 03:15:41 2014
> @@ -934,6 +934,7 @@ normalizedFromAtoms(const lld::File &ato
> f->arch = context.arch();
> f->fileType = context.outputMachOType();
> f->flags = util.fileFlags();
> + f->installName = context.installName();
> util.copySegmentInfo(normFile);
> util.copySections(normFile);
> util.addDependentDylibs(atomFile, normFile);
>
> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp Tue Jul 1 03:15:41 2014
> @@ -605,7 +605,8 @@ normalizedObjectToAtoms(const Normalized
> ErrorOr<std::unique_ptr<lld::File>>
> normalizedDylibToAtoms(const NormalizedFile &normalizedFile, StringRef path,
> bool copyRefs) {
> - std::unique_ptr<MachODylibFile> file(new MachODylibFile(path));
> + std::unique_ptr<MachODylibFile> file(
> + new MachODylibFile(normalizedFile.installName));
>
> for (auto &sym : normalizedFile.globalSymbols) {
> assert((sym.scope & N_EXT) && "only expect external symbols here");
>
> Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp Tue Jul 1 03:15:41 2014
> @@ -508,7 +508,6 @@ struct MappingTraits<DependentDylib> {
> }
> };
>
> -
> template <>
> struct ScalarEnumerationTraits<RebaseType> {
> static void enumeration(IO &io, RebaseType &value) {
>
> Added: lld/trunk/test/mach-o/Inputs/use-dylib-install-names.yaml
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/Inputs/use-dylib-install-names.yaml?rev=212093&view=auto
> ==============================================================================
> --- lld/trunk/test/mach-o/Inputs/use-dylib-install-names.yaml (added)
> +++ lld/trunk/test/mach-o/Inputs/use-dylib-install-names.yaml Tue Jul 1 03:15:41 2014
> @@ -0,0 +1,28 @@
> +--- !mach-o
> +arch: x86_64
> +file-type: MH_OBJECT
> +flags: [ ]
> +has-UUID: false
> +OS: unknown
> +sections:
> + - segment: __TEXT
> + section: __text
> + type: S_REGULAR
> + attributes: [ S_ATTR_PURE_INSTRUCTIONS ]
> + address: 0x0000000000000000
> + content: [ 0x55, 0x48, 0x89, 0xE5, 0xE8, 0x00, 0x00, 0x00,
> + 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x00,
> + 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00,
> + 0xE8, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xE9, 0x00,
> + 0x00, 0x00, 0x00 ]
> +global-symbols:
> + - name: _foo
> + type: N_SECT
> + scope: [ N_EXT ]
> + sect: 1
> + value: 0x0000000000000000
> +undefined-symbols:
> + - name: _myGlobal
> + type: N_UNDF
> + scope: [ N_EXT ]
> + value: 0x0000000000000000
>
> Added: lld/trunk/test/mach-o/dylib-install-names.yaml
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/dylib-install-names.yaml?rev=212093&view=auto
> ==============================================================================
> --- lld/trunk/test/mach-o/dylib-install-names.yaml (added)
> +++ lld/trunk/test/mach-o/dylib-install-names.yaml Tue Jul 1 03:15:41 2014
> @@ -0,0 +1,41 @@
> +# RUN: lld -flavor darwin -arch x86_64 -install_name libwibble.dylib -dylib %s -o %t.dylib
> +# RUN: macho-dump %t.dylib | FileCheck %s --check-prefix=CHECK-BINARY-WRITE
> +# RUN: lld -flavor darwin -arch x86_64 %p/Inputs/use-dylib-install-names.yaml %t.dylib -r -print_atoms | FileCheck %s --check-prefix=CHECK-BINARY-READ
> +
> +--- !mach-o
> +arch: x86_64
> +file-type: MH_OBJECT
> +flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
> +has-UUID: false
> +OS: unknown
> +sections:
> + - segment: __TEXT
> + section: __text
> + type: S_REGULAR
> + attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
> + alignment: 4
> + address: 0x0000000000000000
> + content: [ 0xCC, 0xC3, 0x90, 0xC3, 0x90, 0x90, 0xC3, 0x90,
> + 0x90, 0x90, 0xC3, 0x90, 0x90, 0x90, 0x90, 0xC3,
> + 0x31, 0xC0, 0xC3 ]
> +local-symbols:
> + - name: _myStatic
> + type: N_SECT
> + sect: 1
> + value: 0x000000000000000B
> +global-symbols:
> + - name: _myGlobal
> + type: N_SECT
> + scope: [ N_EXT ]
> + sect: 1
> + value: 0x0000000000000001
> +...
> +
> +
> +# CHECK-BINARY-WRITE: (('command', 13)
> +# CHECK-BINARY-WRITE-NEXT: ('size', 40)
> +# CHECK-BINARY-WRITE-NEXT: ('install_name', 'libwibble.dylib')
> +
> +# CHECK-BINARY-READ: shared-library-atoms:
> +# CHECK-BINARY-READ: - name: _myGlobal
> +# CHECK-BINARY-READ: load-name: libwibble.dylib
>
> Modified: lld/trunk/test/mach-o/lit.local.cfg
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/lit.local.cfg?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/test/mach-o/lit.local.cfg (original)
> +++ lld/trunk/test/mach-o/lit.local.cfg Tue Jul 1 03:15:41 2014
> @@ -1,3 +1,4 @@
>
> # mach-o test cases encode input files in yaml and use .yaml extension
> config.suffixes = ['.yaml']
> +config.excludes = ['Inputs']
>
> Modified: lld/trunk/test/mach-o/use-simple-dylib.yaml
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/use-simple-dylib.yaml?rev=212093&r1=212092&r2=212093&view=diff
> ==============================================================================
> --- lld/trunk/test/mach-o/use-simple-dylib.yaml (original)
> +++ lld/trunk/test/mach-o/use-simple-dylib.yaml Tue Jul 1 03:15:41 2014
> @@ -1,5 +1,5 @@
> # RUN: lld -flavor darwin -arch x86_64 -print_atoms -r %s | FileCheck %s
> -# lld -flavor darwin -arch x86_64 -print_atoms -r %s %p/Inputs/simple-dylib.yaml -o - | FileCheck %s
> +
>
> --- !mach-o
> arch: x86_64
> @@ -110,6 +110,8 @@ global-symbols:
> sect: 1
> desc: [ N_SYMBOL_RESOLVER ]
> value: 0x0000000000000010
> +
> +install-name: libspecial.dylib
> ...
>
>
> @@ -118,12 +120,12 @@ global-symbols:
> # CHECK: - name: _myVariablePreviouslyKnownAsPrivateExtern
> # CHECK: shared-library-atoms:
> # CHECK: - name: _myHidden
> -# CHECK: load-name: {{.*}}use-simple-dylib.yaml
> +# CHECK: load-name: libspecial.dylib
> # CHECK: - name: _myGlobal
> -# CHECK: load-name: {{.*}}use-simple-dylib.yaml
> +# CHECK: load-name: libspecial.dylib
> # CHECK: - name: _myHiddenWeak
> -# CHECK: load-name: {{.*}}use-simple-dylib.yaml
> +# CHECK: load-name: libspecial.dylib
> # CHECK: - name: _myGlobalWeak
> -# CHECK: load-name: {{.*}}use-simple-dylib.yaml
> +# CHECK: load-name: libspecial.dylib
> # CHECK: - name: _myResolver
> -# CHECK: load-name: {{.*}}use-simple-dylib.yaml
> +# CHECK: load-name: libspecial.dylib
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list