]> git.saurik.com Git - apple/ld64.git/blobdiff - src/ld/passes/branch_shim.cpp
ld64-274.2.tar.gz
[apple/ld64.git] / src / ld / passes / branch_shim.cpp
index 443f28e3c4494bd2c0aac475a2373d3f66d54c06..7be33d2ea5fa05d7a112555332227e1869636c9b 100644 (file)
@@ -59,8 +59,6 @@ public:
                                 { asprintf((char**)&_name, "%s$shim", target->name()); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char**) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _name; }
        virtual uint64_t                                                size() const                                    { return 12; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -100,8 +98,6 @@ public:
                                 { asprintf((char**)&_name, "%s$shim", target->name()); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char**) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _name; }
        virtual uint64_t                                                size() const                                    { return 12; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -141,8 +137,6 @@ public:
                                 { asprintf((char**)&_name, "%s$shim", target->name()); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char**) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _name; }
        virtual uint64_t                                                size() const                                    { return 16; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -189,8 +183,6 @@ public:
                                 { asprintf((char**)&_name, "%s$shim", target->name()); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char**) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _name; }
        virtual uint64_t                                                size() const                                    { return 16; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -229,8 +221,6 @@ public:
                                 { asprintf((char**)&_name, "%s$shim", target->name()); }
 
        virtual const ld::File*                                 file() const                                    { return NULL; }
-       virtual bool                                                    translationUnitSource(const char** dir, const char**) const 
-                                                                                                                                                       { return false; }
        virtual const char*                                             name() const                                    { return _name; }
        virtual uint64_t                                                size() const                                    { return 12; }
        virtual uint64_t                                                objectAddress() const                   { return 0; }
@@ -276,7 +266,7 @@ static void extractTarget(ld::Fixup::iterator fixup, ld::Internal& state, const
 
 
 //
-// The tail-call optimzation may result in a function ending in a jump (b) 
+// The tail-call optimization may result in a function ending in a jump (b) 
 // to another functions.  At compile time the compiler does not know 
 // if the target of the jump will be in the same mode (arm vs thumb).
 // The arm/thumb instruction set has a way to change modes in a bl(x)
@@ -338,6 +328,7 @@ void doPass(const Options& opts, ld::Internal& state)
                                                                        }
                                                                        shims.push_back(shim);
                                                                        thumbToAtomMap[target] = shim;
+                                                                       state.atomToSection[shim] = sect;
                                                                }
                                                                else {
                                                                        shim = pos->second;
@@ -371,6 +362,7 @@ void doPass(const Options& opts, ld::Internal& state)
                                                                                shim = new ARMtoThumbShimAtom(target, *sect);
                                                                        shims.push_back(shim);
                                                                        atomToThumbMap[target] = shim;
+                                                                       state.atomToSection[shim] = sect;
                                                                }
                                                                else {
                                                                        shim = pos->second;