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

Last change on this file was b36c5209, checked in by Chris Johns <chrisj@…>, on May 3, 2019 at 12:15:20 AM

libdl: Do not access the ELF file while the allocator is locked.

  • Load symbols before allocation.
  • Parse reloc records and place any reloc recs in a cache to use while the allocator is locked.
  • Relocate symbols after section allocation.
  • Split section loading into allocation/locating and loading.
  • Update all arch back-ends with a new reloc interface to control tramp handling.
  • Add -a and -t to the object list shell command.

Closes #3741

  • Property mode set to 100644
File size: 2.2 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 @ %p\n",
48          dl_localise_file (__FILE__), rtems_main_o1);
49  printf (DL_NAME ":         dl01_bss1: %4zu: %p: %d\n",   PAINT_VAR (dl01_bss1));
50  printf (DL_NAME ":         dl01_bss2: %4zu: %p: %f\n",   PAINT_VAR (dl01_bss2[0]));
51  printf (DL_NAME ":         dl01_bss3: %4zu: %p: %02x\n", PAINT_VAR (dl01_bss3[0]));
52  printf (DL_NAME ":        dl01_data1: %4zu: %p: %d\n",   PAINT_VAR (dl01_data1));
53  /* no  %f in the rtems test printer */
54  printf (DL_NAME ":        dl01_data2: %4zu: %p: %f\n",   PAINT_VAR (dl01_data2));
55  printf (DL_NAME ":       dl01_const1: %4zu: %p: %d\n",   PAINT_VAR (dl01_const1));
56  printf (DL_NAME ":       dl01_const2: %4zu: %p: %f\n",   PAINT_VAR (dl01_const2));
57  printf (DL_NAME ":        dl01_func1: %4zu: %p\n",       sizeof(dl01_func1), &dl01_func1);
58  printf (DL_NAME ":     rtems_main_o2:       %p\n",       &rtems_main_o2);
59
60  rtems_main_o2 ();
61
62  return 0;
63}
Note: See TracBrowser for help on using the repository browser.