blob: 3e3100f77335deadd98ba3e6ca0178139b849bc7 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <android/log.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// A variant of bar.cpp that also includes a large RELRO section.
// Used to test RELRO sharing with two different libraries at the
// same time.
// This is a large table that contains pointers to ensure that it
// gets put inside the RELRO section.
#define LINE "another example string",
#define LINE8 LINE LINE LINE LINE LINE LINE LINE LINE
#define LINE64 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8
#define LINE512 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64
#define LINE4096 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512
const char* const kStrings[] = {LINE4096 LINE4096 LINE4096 LINE4096};
extern "C" void Foo();
extern "C" void Bar() {
printf("%s: Entering\n", __FUNCTION__);
__android_log_print(ANDROID_LOG_INFO, "bar", "Hi There!");
fprintf(stderr, "Hi There! from Bar\n");
for (size_t n = 0; n < sizeof(kStrings) / sizeof(kStrings[0]); ++n) {
const char* ptr = kStrings[n];
if (strcmp(ptr, "another example string")) {
printf("%s: Bad string at offset=%zu\n", __FUNCTION__, n);
exit(1);
}
}
printf("%s: Calling Foo()\n", __FUNCTION__);
Foo();
printf("%s: Exiting\n", __FUNCTION__);
}