]> git.saurik.com Git - apple/ld64.git/blobdiff - src/ld/passes/stubs/stub_x86_64.hpp
ld64-409.12.tar.gz
[apple/ld64.git] / src / ld / passes / stubs / stub_x86_64.hpp
index e3cebca9b9f2c32186e7871c42b1264bd5a98a3b..5c7de1052f2f1ab1cce327a4bbcfc09d433beaa4 100644 (file)
@@ -39,8 +39,6 @@ public:
                                        { pass.addAtom(*this); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** nm) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return "fast binder pointer"; }
        virtual uint64_t                                                size() const                                    { return 8; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -66,8 +64,6 @@ public:
                                                        symbolTableNotIn, false, false, false, ld::Atom::Alignment(3)) { pass.addAtom(*this); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** nm) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return "image cache pointer"; }
        virtual uint64_t                                                size() const                                    { return 8; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -101,8 +97,6 @@ public:
                                        { pass.addAtom(*this); }
 
        virtual ld::File*                                               file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** nm) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return "helper helper"; }
        virtual uint64_t                                                size() const                                    { return 16; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -163,8 +157,6 @@ public:
                                _fixup3(6, ld::Fixup::k1of1, ld::Fixup::kindStoreTargetAddressX86BranchPCRel32, helperHelper(pass)) { }
                                
        virtual const ld::File*                                 file() const                                    { return _stubTo.file(); }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** nm) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _stubTo.name(); }
        virtual uint64_t                                                size() const                                    { return 10; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -215,8 +207,6 @@ public:
                                _fixup3(32, ld::Fixup::k1of1, ld::Fixup::kindStoreTargetAddressX86PCRel32, lazyPointer) { }
                                
        virtual const ld::File*                                 file() const                                    { return _stubTo.file(); }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** nm) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _stubTo.name(); }
        virtual uint64_t                                                size() const                                    { return 36; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -298,8 +288,6 @@ public:
                                        }
 
        virtual const ld::File*                                 file() const                                    { return _stubTo.file(); }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** ) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _stubTo.name(); }
        virtual uint64_t                                                size() const                                    { return 8; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -333,8 +321,6 @@ public:
                                _fixup(2, ld::Fixup::k1of1, ld::Fixup::kindStoreTargetAddressX86PCRel32, &_lazyPointer) { pass.addAtom(*this); }
 
        virtual const ld::File*                                 file() const                                    { return _stubTo.file(); }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** ) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _stubTo.name(); }
        virtual uint64_t                                                size() const                                    { return 6; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -365,18 +351,18 @@ ld::Section StubAtom::_s_section("__TEXT", "__stubs", ld::Section::typeStub);
 
 class NonLazyPointerAtom : public ld::Atom {
 public:
-                                                                                       NonLazyPointerAtom(ld::passes::stubs::Pass& pass, const ld::Atom& stubTo)
+       NonLazyPointerAtom(ld::passes::stubs::Pass& pass, const ld::Atom& stubTo,
+                                          bool weakImport)
                                : ld::Atom(_s_section, ld::Atom::definitionRegular, 
                                                        ld::Atom::combineNever, ld::Atom::scopeLinkageUnit, ld::Atom::typeNonLazyPointer, 
                                                        symbolTableNotIn, false, false, false, ld::Atom::Alignment(3)), 
                                _stubTo(stubTo),
                                _fixup1(0, ld::Fixup::k1of1, ld::Fixup::kindStoreTargetAddressLittleEndian64, &stubTo) {
+                                       _fixup1.weakImport = weakImport;
                                        pass.addAtom(*this);
                                }
 
        virtual const ld::File*                                 file() const                                    { return _stubTo.file(); }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** nm) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _stubTo.name(); }
        virtual uint64_t                                                size() const                                    { return 8; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -396,19 +382,18 @@ ld::Section NonLazyPointerAtom::_s_section("__DATA", "__got", ld::Section::typeN
 
 
 
-class KextStubAtom : public ld::Atom {
+class NonLazyStubAtom : public ld::Atom {
 public:
-                                                                                       KextStubAtom(ld::passes::stubs::Pass& pass, const ld::Atom& stubTo)
+       NonLazyStubAtom(ld::passes::stubs::Pass& pass, const ld::Atom& stubTo,
+                                       bool weakImport)
                                : ld::Atom(_s_section, ld::Atom::definitionRegular, ld::Atom::combineNever,
                                                        ld::Atom::scopeLinkageUnit, ld::Atom::typeStub, 
                                                        symbolTableNotIn, false, false, false, ld::Atom::Alignment(1)), 
                                _stubTo(stubTo), 
-                               _nonLazyPointer(pass, stubTo),
+                               _nonLazyPointer(pass, stubTo, weakImport),
                                _fixup(2, ld::Fixup::k1of1, ld::Fixup::kindStoreTargetAddressX86PCRel32, &_nonLazyPointer) { pass.addAtom(*this); }
 
        virtual const ld::File*                                 file() const                                    { return _stubTo.file(); }
-       virtual bool                                                    translationUnitSource(const char** dir, const char** ) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _stubTo.name(); }
        virtual uint64_t                                                size() const                                    { return 6; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -432,7 +417,7 @@ private:
        static ld::Section                                              _s_section;
 };
 
-ld::Section KextStubAtom::_s_section("__TEXT", "__stubs", ld::Section::typeStub);
+ld::Section NonLazyStubAtom::_s_section("__TEXT", "__stubs", ld::Section::typeStub);
 
 
 } // namespace x86_64