Re: [DynInst_API:] Dyninst-9.2 compile error on Intel Phi


Date: Wed, 06 Jul 2016 13:25:06 -0500
From: Bill Williams <bill@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] Dyninst-9.2 compile error on Intel Phi
My mistake; the actual definition you want is in Type-mem.h. That'll drag in the function definition, not just the declaration, and should make the linker behave.

--bw


On 07/06/2016 12:42 PM, Jim Galarowicz wrote:


Hi Bill,

Adding Type.h didn't change the behaviour unless it needs to be in a specific location in the include block?
This is the front-end build for MIC, so it is a x86_64 build.
I don't have this problem on my x864_64 laptop though.

Jim G


grep typeRef */*/*
dyninstAPI/src/BPatch_typePrivate.h:#define DYNINST_CLASS_NAME BPatch_typeRef
dyninstAPI/src/BPatch_typePrivate.h:class BPATCH_DLL_EXPORT BPatch_typeRef : public BPatch_type, public BPatch_fieldListInterface, public BPatch_rangedInterface {
dyninstAPI/src/BPatch_typePrivate.h:   BPatch_typeRef(int _ID, BPatch_type *_refType, const char *_name = NULL);
dyninstAPI/src/BPatch_typePrivate.h:   ~BPatch_typeRef() { refType->decrRefCount(); }
symtabAPI/doc/2-Abstractions.tex:            node [class2] (typeRef) {typeRef}
symtabAPI/doc/2-Abstractions.tex:            node [class2, below of=typeRef] (typePointer) {typePointer}
symtabAPI/doc/symtab-text.txt:typeRef *getRefType()
symtabAPI/doc/symtab-text.txt:    If this Type object represents a Reference type, then return the object casting the Type object to typeRef otherwise return NULL.
symtabAPI/doc/symtab-text.txt:6.2.7.3 Class typeRef
symtabAPI/doc/symtab-text.txt:static typeRef *create(string &name, Type *ptr, int size,
symtabAPI/h/Type.h:class typeRef;
symtabAPI/h/Type.h:   typeRef *getRefType();
symtabAPI/h/Type.h:class SYMTAB_EXPORT typeRef : public derivedType {
symtabAPI/h/Type.h:   typeRef();
symtabAPI/h/Type.h:   typeRef(typeId_t ID, Type *refType, std::string name);
symtabAPI/h/Type.h:   typeRef(Type *refType, std::string name);
symtabAPI/h/Type.h:   static typeRef *create(std::string &name, Type *ptr, Symtab * obj = NULL);
symtabAPI/src/Type.C:    max_size = MAX(sizeof(typeRef), max_size);
symtabAPI/src/Type.C:typeRef *Type::getRefType(){
symtabAPI/src/Type.C:    return dynamic_cast<typeRef *>(this);
symtabAPI/src/Type.C:    if (getRefType()) return std::string("typeRef");
symtabAPI/src/Type.C:typeRef::typeRef(int ID, Type *refType, std::string name) :
symtabAPI/src/Type.C:typeRef::typeRef(Type *refType, std::string name) :
symtabAPI/src/Type.C:typeRef *typeRef::create(std::string &name, Type *ref, Symtab *obj)
symtabAPI/src/Type.C:   typeRef *typ = new typeRef(ref, name);
symtabAPI/src/Type.C:bool typeRef::operator==(const Type &otype) const {
symtabAPI/src/Type.C:      const typeRef &oReftype = dynamic_cast<const typeRef &>(otype);
symtabAPI/src/Type.C:bool typeRef::isCompatible(Type *otype) {
symtabAPI/src/Type.C:   typeRef *oReftype = dynamic_cast< typeRef *>(otype);
symtabAPI/src/Type.C:void typeRef::fixupUnknowns(Module *module)
symtabAPI/src/Type.C:typeRef::typeRef() {}
symtabAPI/src/Type.C:                newt = new typeRef(ID_, NULL, name_);
symtabAPI/src/Type.C:void typeRef::serialize_specific(SerializerBase *sb) THROW_SPEC(SerializerError)
symtabAPI/src/Type.C:    ifxml_start_element(sb, "typeRef");
symtabAPI/src/Type.C:    ifxml_end_element(sb, "typeRef");
symtabAPI/src/Type.C:void typeRef::serialize_specific(SerializerBase *) THROW_SPEC(SerializerError)
symtabAPI/src/dwarfWalker.C:         indirectType = new typeRef(type_id(), typePointedTo, curName());
symtabAPI/src/dwarfWalker.C:         indirectType = tc()->addOrUpdateType((typeRef *) indirectType );
symtabAPI/src/parseStab.C:    typeRef *newType = new typeRef(ID, ptrType, tName);
PBS maia97 50>

symtabAPI/src/Object-elf.C:#include "Type.h"
symtabAPI/src/Object.C:#include "Type.h"
symtabAPI/src/Type.C:#include "Type.h"
symtabAPI/src/dwarfWalker.C:#include "Type.h"
symtabAPI/src/parseDwarf.C:#include "Type.h"
dyninstAPI/src/BPatch_module.C:#include "symtabAPI/h/Type.h"    // For BPatch_type related stuff
dyninstAPI/src/BPatch_snippet.C:#include "symtabAPI/h/Type.h"




On 07/06/2016 11:04 AM, Bill Williams wrote:
On 07/05/2016 09:11 PM, Jim Galarowicz wrote:
Hi Bill,

Thanks!   Adding the .c_str() got me quite a bit farther.
Now I'm getting this error.

Hrm. First question is whether adding "Type.h" to the include block fixes this--I'm surprised gnu doesn't have an issue with this instantiation.

--bw

Jim G

[ 26%] Building CXX object symtabAPI/CMakeFiles/symtabAPI.dir/src/emitElfStatic.C.o
[ 26%] Building CXX object symtabAPI/CMakeFiles/symtabAPI.dir/src/dwarfWalker.C.o
[ 26%] Building CXX object symtabAPI/CMakeFiles/symtabAPI.dir/src/emitElfStatic-x86.C.o
[ 27%] Building CXX object symtabAPI/CMakeFiles/symtabAPI.dir/src/relocationEntry-elf-x86.C.o
Linking CXX shared library libsymtabAPI.so
CMakeFiles/symtabAPI.dir/src/dwarfWalker.C.o: In function `Dyninst::SymtabAPI::DwarfWalker::parseTypeReferences()':
/nobackupnfs2/jgalarow/OpenSpeedShop_ROOT/BUILD/maia98/dyninst-9.2.0/symtabAPI/src/dwarfWalker.C:1270: undefined reference to `Dyninst::SymtabAPI::typeRef* Dyninst::SymtabAPI::typeCollection::addOrUpdateType<Dyninst::SymtabAPI::typeRef>(Dyninst::SymtabAPI::typeRef*)'
make[2]: *** [symtabAPI/libsymtabAPI.so.9.2.0] Error 1
make[1]: *** [symtabAPI/CMakeFiles/symtabAPI.dir/all] Error 2
make: *** [all] Error 2
[  0%] Building DyninstRT


[← Prev in Thread] Current Thread [Next in Thread→]