aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/i386/pr55142-1.c
blob: e6b5f126cccac8e32b2ae29cfa19b2f99b15fa9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* { dg-do compile { target { ! { ia32 } } } } */
/* { dg-require-effective-target maybe_x32 } */
/* { dg-require-effective-target fpic } */
/* { dg-options "-O2 -mx32 -maddress-mode=long -fpic" } */

typedef int int32_t;
typedef unsigned int uint32_t;
typedef int32_t Elf32_Sword;
typedef struct
{
  Elf32_Sword d_tag;
} Elf32_Dyn;
struct link_map
{
  Elf32_Dyn *l_ld;
  Elf32_Dyn *l_info[34];
};
extern struct link_map _dl_rtld_map __attribute__ ((visibility ("hidden")));
static void elf_get_dynamic_info (struct link_map *l)
{
  Elf32_Dyn *dyn = l->l_ld;
  Elf32_Dyn **info;
  info = l->l_info;
  while (dyn->d_tag != 0)
    {
      if ((uint32_t) (0x6ffffeff - dyn->d_tag) < 11)
	info[0x6ffffeff - dyn->d_tag + 12] = dyn;
      ++dyn;
    }
}
void
foo (void)
{
  elf_get_dynamic_info (&_dl_rtld_map);
}