Closed Bug 286506 Opened 20 years ago Closed 20 years ago

warning: locally defined symbol ... imported in function ...

Categories

(Toolkit Graveyard :: XULRunner, defect)

x86
Windows XP
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.8beta2

People

(Reporter: darin.moz, Assigned: darin.moz)

Details

(Keywords: perf)

Attachments

(1 file)

While linking xul.dll, we get a ton of these kinds of warnings: docshell.lib(nsMIMEInfoImpl.obj) : warning LNK4217: locally defined symbol ?RemoveCStringA t@nsCStringArray@@QAEHH@Z (public: int __thiscall nsCStringArray::RemoveCStringAt(int)) im ported in function "public: virtual unsigned int __stdcall nsMIMEInfoBase::SetPrimaryExten sion(class nsACString const &)" (?SetPrimaryExtension@nsMIMEInfoBase@@UAGIABVnsACString@@@ Z) I believe that these are caused because we do not compile with _IMPL_NS_COM=1 defined across all translation units that are to be linked into xul.dll. I'm not sure, but I think this means that the compiler is not optimizing the code as well as it could since it'll think that it cannot encode a PC-relative jump for the various function calls. (I'd be surprised if the linker rewrote the code for the various functions where this is happening.) So, we could probably improve performance and codesighs by fixing these warnings. And, even if it doesn't make a significant performance improvement, it'd be nice to clean up the excessive warnings ;-)
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla1.8beta2
That is a correct assesment of the problem, but it's not easy to fix. There are static libs (rdfutil/unicharutil) that are currently linked into both libxul and non-libxul units. I think this warning is not worth spending time on yet... when the rest of libxul is done (tier 50) and when RDF resource factories are gone.
well.. solving this should be just as simple as defining _IMPL_NS_COM=1 in the right modules (any that define LIBXUL_LIBRARY I would think). that define has no bearing on what is actually exported from libxul ;-) i agree that we will see this warning for other things that are not part of xpcom, but that should be a much smaller set. i'd like to get the xpcom set taken care of for gecko 1.8.
LIBXUL_LIBRARY already defines _IMPL_NS_COM. For the vast majority of our code, we do this correctly. The "hard parts" are the static libs I mentioned, which are linked into both libxul and non-libxul code. http://lxr.mozilla.org/mozilla/source/config/config.mk#479
Ah, so we do. Then, what I see the problem being is that at least in a good number of cases we do not define LIBXUL_LIBRARY when we should. See for example the directories under uriloader/. Shouldn't we specify LIBXUL_LIBRARY in every Makefile that builds object files that will be linked into xul.dll?
Yes, we should list LIBXUL_LIBRARY in every Makefile that gets linked into xul.dll, except for unicharutil/rdfutil (and maybe one or two others I'm forgetting). Certainly uriloader should have it.
OK, then I'll write up a patch for that.
Attachment #177918 - Flags: first-review?(benjamin)
Attachment #177918 - Flags: first-review?(benjamin) → first-review+
fixed-on-trunk resolving this bug as FIXED since the remaining warnings only pertain to unicharutil and rdfutil, which i presume are to be handled in a separate bug.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Flags: in-testsuite-
Product: Toolkit → Toolkit Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: