Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
906b3eb9
Unverified
Commit
906b3eb9
authored
Mar 24, 2020
by
Martin Liska
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improve endianess detection.
PR lto/94249 * plugin-api.h: Add more robust endianess detection.
parent
596c90d3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
2 deletions
+68
-2
include/ChangeLog
+5
-0
include/plugin-api.h
+63
-2
No files found.
include/ChangeLog
View file @
906b3eb9
2020-03-24 Martin Liska <mliska@suse.cz>
PR lto/94249
* plugin-api.h: Add more robust endianess detection.
2020-03-21 Martin Liska <mliska@suse.cz>
2020-03-21 Martin Liska <mliska@suse.cz>
* plugin-api.h (enum ld_plugin_symbol_type): Remove
* plugin-api.h (enum ld_plugin_symbol_type): Remove
...
...
include/plugin-api.h
View file @
906b3eb9
...
@@ -37,6 +37,60 @@
...
@@ -37,6 +37,60 @@
#error cannot find uint64_t type
#error cannot find uint64_t type
#endif
#endif
/* Detect endianess based on __BYTE_ORDER__ macro. */
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_PDP_ENDIAN__)
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define PLUGIN_LITTLE_ENDIAN 1
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#define PLUGIN_BIG_ENDIAN 1
#elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__
#define PLUGIN_PDP_ENDIAN 1
#endif
#else
/* Older GCC releases (<4.6.0) can make detection from glibc macros. */
#if defined(__GLIBC__) || defined(__GNU_LIBRARY__) || defined(__ANDROID__)
#include <endian.h>
#ifdef _BYTE_ORDER
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define PLUGIN_LITTLE_ENDIAN 1
#elif __BYTE_ORDER == __BIG_ENDIAN
#define PLUGIN_BIG_ENDIAN 1
#endif
#endif
#endif
/* Include all necessary header files based on target. */
#if defined(__SVR4) && defined(__sun)
#include <sys/byteorder.h>
#endif
#if defined(__FreeBSD__) || defined(__NetBSD__) || \
defined(__DragonFly__) || defined(__minix)
#include <sys/endian.h>
#endif
#if defined(__OpenBSD__)
#include <machine/endian.h>
#endif
/* Detect endianess based on _BYTE_ORDER. */
#ifdef _BYTE_ORDER
#if _BYTE_ORDER == _LITTLE_ENDIAN
#define PLUGIN_LITTLE_ENDIAN 1
#elif _BYTE_ORDER == _BIG_ENDIAN
#define PLUGIN_BIG_ENDIAN 1
#endif
#endif
/* Detect based on _WIN32. */
#if defined(_WIN32)
#define PLUGIN_LITTLE_ENDIAN 1
#endif
/* Detect based on __BIG_ENDIAN__ and __LITTLE_ENDIAN__ */
#ifdef __LITTLE_ENDIAN__
#define PLUGIN_LITTLE_ENDIAN 1
#endif
#ifdef __BIG_ENDIAN__
#define PLUGIN_BIG_ENDIAN 1
#endif
#endif
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
extern
"C"
{
{
...
@@ -89,16 +143,23 @@ struct ld_plugin_symbol
...
@@ -89,16 +143,23 @@ struct ld_plugin_symbol
char
*
version
;
char
*
version
;
/* This is for compatibility with older ABIs. The older ABI defined
/* This is for compatibility with older ABIs. The older ABI defined
only 'def' field. */
only 'def' field. */
#if
def __BIG_ENDIAN__
#if
PLUGIN_BIG_ENDIAN == 1
char
unused
;
char
unused
;
char
section_kind
;
char
section_kind
;
char
symbol_type
;
char
symbol_type
;
char
def
;
char
def
;
#el
se
#el
if PLUGIN_LITTLE_ENDIAN == 1
char
def
;
char
def
;
char
symbol_type
;
char
symbol_type
;
char
section_kind
;
char
section_kind
;
char
unused
;
char
unused
;
#elif PLUGIN_PDP_ENDIAN == 1
char
symbol_type
;
char
def
;
char
unused
;
char
section_kind
;
#else
#error "Could not detect architecture endianess"
#endif
#endif
int
visibility
;
int
visibility
;
uint64_t
size
;
uint64_t
size
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment