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
Marc Mutz 2013-10-12 22:02:44 +02:00 committed by The Qt Project
parent be2efef7a4
commit 7e2c9a9c62
6 changed files with 8 additions and 8 deletions

View File

@ -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))

View File

@ -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);

View File

@ -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;
};

View File

@ -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());
}

View File

@ -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)

View File

@ -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);