forked from OSchip/llvm-project
[ELF] Set ordinals properly to all atoms.
llvm-svn: 192939
This commit is contained in:
parent
ffbc4decc2
commit
b6c825a5cf
|
@ -516,7 +516,7 @@ public:
|
||||||
_referenceEndIndex = _referenceList.size();
|
_referenceEndIndex = _referenceList.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setOrdinal(uint64_t ord) { _ordinal = ord; }
|
virtual void setOrdinal(uint64_t ord) { _ordinal = ord; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const ELFFile<ELFT> &_owningFile;
|
const ELFFile<ELFT> &_owningFile;
|
||||||
|
@ -561,7 +561,7 @@ public:
|
||||||
|
|
||||||
virtual uint64_t offset() const { return _offset; }
|
virtual uint64_t offset() const { return _offset; }
|
||||||
|
|
||||||
void setOrdinal(uint64_t ord) { _ordinal = ord; }
|
virtual void setOrdinal(uint64_t ord) { _ordinal = ord; }
|
||||||
|
|
||||||
virtual uint64_t ordinal() const { return _ordinal; }
|
virtual uint64_t ordinal() const { return _ordinal; }
|
||||||
|
|
||||||
|
@ -645,9 +645,7 @@ public:
|
||||||
return _ordinal;
|
return _ordinal;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setOrdinal(uint64_t ord) {
|
virtual void setOrdinal(uint64_t ord) { _ordinal = ord; }
|
||||||
_ordinal = ord;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual uint64_t size() const {
|
virtual uint64_t size() const {
|
||||||
return _symbol->st_size;
|
return _symbol->st_size;
|
||||||
|
|
|
@ -302,7 +302,7 @@ public:
|
||||||
} else if (isCommonSymbol(&*SymI)) {
|
} else if (isCommonSymbol(&*SymI)) {
|
||||||
auto *newAtom = new (_readerStorage)
|
auto *newAtom = new (_readerStorage)
|
||||||
ELFCommonAtom<ELFT>(*this, *symbolName, &*SymI);
|
ELFCommonAtom<ELFT>(*this, *symbolName, &*SymI);
|
||||||
newAtom->setOrdinal(_ordinal++);
|
newAtom->setOrdinal(++_ordinal);
|
||||||
_definedAtoms._atoms.push_back(newAtom);
|
_definedAtoms._atoms.push_back(newAtom);
|
||||||
_symbolToAtomMapping.insert(std::make_pair(&*SymI, newAtom));
|
_symbolToAtomMapping.insert(std::make_pair(&*SymI, newAtom));
|
||||||
} else {
|
} else {
|
||||||
|
@ -361,6 +361,7 @@ public:
|
||||||
ELFDefinedAtom<ELFT> *newAtom = createSectionAtom(
|
ELFDefinedAtom<ELFT> *newAtom = createSectionAtom(
|
||||||
section, *sectionName, secCont);
|
section, *sectionName, secCont);
|
||||||
_definedAtoms._atoms.push_back(newAtom);
|
_definedAtoms._atoms.push_back(newAtom);
|
||||||
|
newAtom->setOrdinal(++_ordinal);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,6 +409,7 @@ public:
|
||||||
*this, symbolName, *sectionName, &**si, section, symbolData,
|
*this, symbolName, *sectionName, &**si, section, symbolData,
|
||||||
_references.size(), _references.size(), _references);
|
_references.size(), _references.size(), _references);
|
||||||
_definedAtoms._atoms.push_back(definedMergeAtom);
|
_definedAtoms._atoms.push_back(definedMergeAtom);
|
||||||
|
definedMergeAtom->setOrdinal(++_ordinal);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
const char _nl_default_default_domain[] __attribute__ ((visibility ("hidden"))) = "messages";
|
||||||
|
const char *_nl_current_default_domain __attribute__ ((visibility ("hidden"))) = _nl_default_default_domain;
|
||||||
|
const char _nl_default_default_dirname[] = "/usr/local";
|
Binary file not shown.
|
@ -0,0 +1,24 @@
|
||||||
|
.file "x.c"
|
||||||
|
.hidden _nl_default_default_domain
|
||||||
|
.globl _nl_default_default_domain
|
||||||
|
.section .rodata._nl_default_default_domain,"ams",@progbits,1
|
||||||
|
.type _nl_default_default_domain, @object
|
||||||
|
.size _nl_default_default_domain, 9
|
||||||
|
_nl_default_default_domain:
|
||||||
|
.string "messages"
|
||||||
|
.hidden _nl_current_default_domain
|
||||||
|
.globl _nl_current_default_domain
|
||||||
|
.section .data._nl_current_default_domain,"aw",@progbits
|
||||||
|
.align 8
|
||||||
|
.type _nl_current_default_domain, @object
|
||||||
|
.size _nl_current_default_domain, 8
|
||||||
|
_nl_current_default_domain:
|
||||||
|
.quad _nl_default_default_domain
|
||||||
|
.globl _nl_default_default_dirname
|
||||||
|
.section .rodata._nl_default_default_dirname,"ams",@progbits,1
|
||||||
|
.type _nl_default_default_dirname, @object
|
||||||
|
.size _nl_default_default_dirname, 11
|
||||||
|
_nl_default_default_dirname:
|
||||||
|
.string "/usr/local"
|
||||||
|
.ident "GCC: (Ubuntu 4.8.1-2ubuntu1~10.04.1) 4.8.1"
|
||||||
|
.section .note.GNU-stack,"",@progbits
|
|
@ -0,0 +1,9 @@
|
||||||
|
# This tests that the ordinals for all merge atoms and defined atoms have been
|
||||||
|
# set properly
|
||||||
|
|
||||||
|
RUN: lld -flavor gnu -target x86_64 %p/Inputs/rodata.o --noinhibit-exec \
|
||||||
|
RUN: --merge-strings -static -o %t1
|
||||||
|
RUN: llvm-nm -n %t1 | FileCheck %s
|
||||||
|
|
||||||
|
CHECK: {{[0-9a-f]+}} R _nl_default_default_domain
|
||||||
|
CHECK: {{[0-9a-f]+}} R _nl_default_default_dirname
|
Loading…
Reference in New Issue