mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-19 07:00:08 +00:00
TODO(pldd): cheri: elf: fix pldd to compile for purecap abi
Adjust types in the E(*) structs to support capabilities. TODO: purecap pldd should refuse to deal with lp64 and ELF32 processes. the code for the 32bit case should be disabled. TODO: a correct fix requires support for all abis that can run on the same system (purecap, lp64 and ELF32 too).
This commit is contained in:
parent
7dac60585d
commit
7f9c78bc3a
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include <dl-r_debug.h>
|
#include <dl-r_debug.h>
|
||||||
|
|
||||||
|
#ifndef __CHERI_PURE_CAPABILITY__
|
||||||
struct E(link_map)
|
struct E(link_map)
|
||||||
{
|
{
|
||||||
EW(Addr) l_addr;
|
EW(Addr) l_addr;
|
||||||
@ -35,6 +36,48 @@ struct E(link_map)
|
|||||||
Lmid_t l_ns;
|
Lmid_t l_ns;
|
||||||
EW(Addr) l_libname;
|
EW(Addr) l_libname;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct E(libname_list)
|
||||||
|
{
|
||||||
|
EW(Addr) name;
|
||||||
|
EW(Addr) next;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct E(r_debug)
|
||||||
|
{
|
||||||
|
int r_version;
|
||||||
|
# if CLASS == 64
|
||||||
|
int pad;
|
||||||
|
# endif
|
||||||
|
EW(Addr) r_map;
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
struct E(link_map)
|
||||||
|
{
|
||||||
|
uintptr_t l_addr;
|
||||||
|
uintptr_t l_name;
|
||||||
|
uintptr_t l_ld;
|
||||||
|
uintptr_t l_next;
|
||||||
|
uintptr_t l_prev;
|
||||||
|
uintptr_t l_real;
|
||||||
|
Lmid_t l_ns;
|
||||||
|
uintptr_t l_libname;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct E(libname_list)
|
||||||
|
{
|
||||||
|
uintptr_t name;
|
||||||
|
uintptr_t next;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct E(r_debug)
|
||||||
|
{
|
||||||
|
int r_version;
|
||||||
|
int pad;
|
||||||
|
uintptr_t r_map;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CLASS == __ELF_NATIVE_CLASS
|
#if CLASS == __ELF_NATIVE_CLASS
|
||||||
_Static_assert (offsetof (struct link_map, l_addr)
|
_Static_assert (offsetof (struct link_map, l_addr)
|
||||||
== offsetof (struct E(link_map), l_addr), "l_addr");
|
== offsetof (struct E(link_map), l_addr), "l_addr");
|
||||||
@ -44,27 +87,12 @@ _Static_assert (offsetof (struct link_map, l_next)
|
|||||||
== offsetof (struct E(link_map), l_next), "l_next");
|
== offsetof (struct E(link_map), l_next), "l_next");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct E(libname_list)
|
|
||||||
{
|
|
||||||
EW(Addr) name;
|
|
||||||
EW(Addr) next;
|
|
||||||
};
|
|
||||||
#if CLASS == __ELF_NATIVE_CLASS
|
#if CLASS == __ELF_NATIVE_CLASS
|
||||||
_Static_assert (offsetof (struct libname_list, name)
|
_Static_assert (offsetof (struct libname_list, name)
|
||||||
== offsetof (struct E(libname_list), name), "name");
|
== offsetof (struct E(libname_list), name), "name");
|
||||||
_Static_assert (offsetof (struct libname_list, next)
|
_Static_assert (offsetof (struct libname_list, next)
|
||||||
== offsetof (struct E(libname_list), next), "next");
|
== offsetof (struct E(libname_list), next), "next");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct E(r_debug)
|
|
||||||
{
|
|
||||||
int r_version;
|
|
||||||
#if CLASS == 64
|
|
||||||
int pad;
|
|
||||||
#endif
|
|
||||||
EW(Addr) r_map;
|
|
||||||
};
|
|
||||||
#if CLASS == __ELF_NATIVE_CLASS
|
#if CLASS == __ELF_NATIVE_CLASS
|
||||||
_Static_assert (offsetof (struct r_debug, r_version)
|
_Static_assert (offsetof (struct r_debug, r_version)
|
||||||
== offsetof (struct E(r_debug), r_version), "r_version");
|
== offsetof (struct E(r_debug), r_version), "r_version");
|
||||||
|
Loading…
Reference in New Issue
Block a user