moc: move qt_meta_extradata data from .data.rel into .data.rel.ro
It's still a relocation, but at least it can be marked read-only after the relocation run, if indeed the dynamic linker goes to such a length. Change-Id: Ibadddac3ab99d2e58cc32cfd57311bddd3bdb0ef Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
be2efef7a4
commit
7e2c9a9c62
|
|
@ -942,7 +942,7 @@ static const QMetaObject *QMetaObject_findMetaObject(const QMetaObject *self, co
|
|||
return self;
|
||||
if (self->d.relatedMetaObjects) {
|
||||
Q_ASSERT(priv(self->d.data)->revision >= 2);
|
||||
const QMetaObject **e = self->d.relatedMetaObjects;
|
||||
const QMetaObject * const *e = self->d.relatedMetaObjects;
|
||||
if (e) {
|
||||
while (*e) {
|
||||
if (const QMetaObject *m =QMetaObject_findMetaObject((*e), name))
|
||||
|
|
|
|||
|
|
@ -741,7 +741,7 @@ void QMetaObjectBuilder::addMetaObject
|
|||
|
||||
if ((members & RelatedMetaObjects) != 0) {
|
||||
Q_ASSERT(priv(prototype->d.data)->revision >= 2);
|
||||
const QMetaObject **objects = prototype->d.relatedMetaObjects;
|
||||
const QMetaObject * const *objects = prototype->d.relatedMetaObjects;
|
||||
if (objects) {
|
||||
while (*objects != 0) {
|
||||
addRelatedMetaObject(*objects);
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ struct Q_CORE_EXPORT QMetaObject
|
|||
const uint *data;
|
||||
typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **);
|
||||
StaticMetacallFunction static_metacall;
|
||||
const QMetaObject **relatedMetaObjects;
|
||||
const QMetaObject * const *relatedMetaObjects;
|
||||
void *extradata; //reserved for future use
|
||||
} d;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -464,7 +464,7 @@ void Generator::generateCode()
|
|||
}
|
||||
|
||||
if (!extraList.isEmpty()) {
|
||||
fprintf(out, "static const QMetaObject *qt_meta_extradata_%s[] = {\n ", qualifiedClassNameIdentifier.constData());
|
||||
fprintf(out, "static const QMetaObject * const qt_meta_extradata_%s[] = {\n ", qualifiedClassNameIdentifier.constData());
|
||||
for (int i = 0; i < extraList.count(); ++i) {
|
||||
fprintf(out, " &%s::staticMetaObject,\n", extraList.at(i).constData());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1321,8 +1321,8 @@ bool tst_QMetaObjectBuilder::sameMetaObject
|
|||
return false;
|
||||
}
|
||||
|
||||
const QMetaObject **objects1 = meta1->d.relatedMetaObjects;
|
||||
const QMetaObject **objects2 = meta2->d.relatedMetaObjects;
|
||||
const QMetaObject * const *objects1 = meta1->d.relatedMetaObjects;
|
||||
const QMetaObject * const *objects2 = meta2->d.relatedMetaObjects;
|
||||
if (objects1 && !objects2)
|
||||
return false;
|
||||
if (objects2 && !objects1)
|
||||
|
|
|
|||
|
|
@ -884,7 +884,7 @@ void tst_Moc::testExtraDataForEnum()
|
|||
const QMetaObject *mobjUser = &EnumUserClass::staticMetaObject;
|
||||
QCOMPARE(mobjUser->enumeratorCount(), 0);
|
||||
|
||||
const QMetaObject **objects = mobjUser->d.relatedMetaObjects;
|
||||
const QMetaObject * const *objects = mobjUser->d.relatedMetaObjects;
|
||||
QVERIFY(objects);
|
||||
QVERIFY(objects[0] == mobjSource);
|
||||
QVERIFY(objects[1] == 0);
|
||||
|
|
@ -3098,7 +3098,7 @@ namespace QTBUG32933_relatedObjectsDontIncludeItself {
|
|||
void tst_Moc::QTBUG32933_relatedObjectsDontIncludeItself()
|
||||
{
|
||||
const QMetaObject *mo = &QTBUG32933_relatedObjectsDontIncludeItself::NS::Obj::staticMetaObject;
|
||||
const QMetaObject **objects = mo->d.relatedMetaObjects;
|
||||
const QMetaObject * const *objects = mo->d.relatedMetaObjects;
|
||||
// the related objects should be empty because the enums is in the same object.
|
||||
QVERIFY(!objects);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue