Home | History | Annotate | Download | only in tests
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <android/log.h>
      6 #include <stdio.h>
      7 #include <stdlib.h>
      8 
      9 // A variant of bar.cpp that also includes a large RELRO section.
     10 // Used to test RELRO sharing with two different libraries at the
     11 // same time.
     12 
     13 // This is a large table that contains pointers to ensure that it
     14 // gets put inside the RELRO section.
     15 #define LINE "another example string",
     16 #define LINE8 LINE LINE LINE LINE LINE LINE LINE LINE
     17 #define LINE64 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8 LINE8
     18 #define LINE512 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64 LINE64
     19 #define LINE4096 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512 LINE512
     20 
     21 const char* const kStrings[] = {LINE4096 LINE4096 LINE4096 LINE4096};
     22 
     23 extern "C" void Foo();
     24 
     25 extern "C" void Bar() {
     26   printf("%s: Entering\n", __FUNCTION__);
     27   __android_log_print(ANDROID_LOG_INFO, "bar", "Hi There!");
     28   fprintf(stderr, "Hi There! from Bar\n");
     29 
     30   for (size_t n = 0; n < sizeof(kStrings) / sizeof(kStrings[0]); ++n) {
     31     const char* ptr = kStrings[n];
     32     if (strcmp(ptr, "another example string")) {
     33       printf("%s: Bad string at offset=%zu\n", __FUNCTION__, n);
     34       exit(1);
     35     }
     36   }
     37 
     38   printf("%s: Calling Foo()\n", __FUNCTION__);
     39   Foo();
     40 
     41   printf("%s: Exiting\n", __FUNCTION__);
     42 }
     43