source: rtems/testsuites/libtests/dl09/dl-o1.c @ 194eb403

Last change on this file since 194eb403 was d8c70ba6, checked in by Chris Johns <chrisj@…>, on Jan 15, 2019 at 6:47:41 AM

libdl: Add support for trampolines

  • Trampolines or fixups for veneers provide long jump support for instruciton sets that implement short relative address branches. The linker provides trampolines when creating a static image. This patch adds trampoline support to libdl and the ARM architecture.
  • The dl09 test requires enough memory so modules are outside the relative branch instruction ranges for the architecture.

Updates #3685

  • Property mode set to 100644
File size: 2.1 KB
Line 
1/*
2 * Copyright (c) 2018 Chris Johns <chrisj@rtems.org>.
3 * All rights reserved.
4 *
5 * The license and distribution terms for this file may be
6 * found in the file LICENSE in this distribution or at
7 * http://www.rtems.org/license/LICENSE.
8 */
9
10#include "dl-o1.h"
11
12#include <rtems/test.h>
13#include "dl-load.h"
14#include "dl-o1.h"
15#include "dl-o2.h"
16
17#define printf(...) rtems_printf(&rtems_test_printer, __VA_ARGS__);
18
19/*
20 * Create some symbols. The uninitialised will be in the common section with
21 * separated text and data and this means there is no actual section in the ELF
22 * file, the details for this are in the symbols.
23 */
24int         dl01_bss1;            /* unitialised, .bss */
25float       dl01_bss2[30];        /* unitialised, .bss */
26char        dl01_bss3[10];        /* unitialised, .bss */
27int         dl01_data1 = 1;       /* initialised, .data */
28float       dl01_data2 = 0.3333;  /* initialised, .data */
29const int   dl01_const1 = 3;      /* read-only, .const */
30const float dl01_const2 = 0.666;  /* read-only, .const */
31int dl01_func1(void)              /* code, .text */
32{
33  return 4;
34}
35
36/*
37 * Yes a decl in the source. This is a modules main and I could not find which
38 * header main is defined in.
39 */
40int rtems_main_o1 (void);
41
42#define DL_NAME       "dlo1"
43#define PAINT_VAR(_v) sizeof(_v), &_v, _v
44
45int rtems_main_o1 (void)
46{
47  printf (DL_NAME ": module: %s\n", dl_localise_file (__FILE__));
48  printf (DL_NAME ":         dl01_bss1: %4u: %p: %d\n",   PAINT_VAR (dl01_bss1));
49  printf (DL_NAME ":         dl01_bss2: %4u: %p: %f\n",   PAINT_VAR (dl01_bss2[0]));
50  printf (DL_NAME ":         dl01_bss3: %4u: %p: %02x\n", PAINT_VAR (dl01_bss3[0]));
51  printf (DL_NAME ":        dl01_data1: %4u: %p: %d\n",   PAINT_VAR (dl01_data1));
52  /* no  %f in the rtems test printer */
53  printf (DL_NAME ":        dl01_data2: %4u: %p: %f\n",   PAINT_VAR (dl01_data2));
54  printf (DL_NAME ":       dl01_const1: %4u: %p: %d\n",   PAINT_VAR (dl01_const1));
55  printf (DL_NAME ":       dl01_const2: %4u: %p: %f\n",   PAINT_VAR (dl01_const2));
56  printf (DL_NAME ":        dl01_func1: %4u: %p\n",       sizeof(dl01_func1), &dl01_func1);
57
58  rtems_main_o2 ();
59
60  return 0;
61}
Note: See TracBrowser for help on using the repository browser.