Go to the documentation of this file.
55#ifndef SDL_dlopennote_h
56#define SDL_dlopennote_h
71#define SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED "suggested"
86#define SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED "recommended"
101#define SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED "required"
104#if !defined(SDL_PLATFORM_UNIX) || defined(SDL_PLATFORM_ANDROID)
106#ifndef SDL_DISABLE_DLOPEN_NOTES
107#define SDL_DISABLE_DLOPEN_NOTES
109#elif defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1))
111#ifndef SDL_DISABLE_DLOPEN_NOTES
112#define SDL_DISABLE_DLOPEN_NOTES
116#if defined(__ELF__) && !defined(SDL_DISABLE_DLOPEN_NOTES)
120#define SDL_ELF_NOTE_DLOPEN_VENDOR "FDO"
121#define SDL_ELF_NOTE_DLOPEN_TYPE 0x407c0c0aU
123#define SDL_ELF_NOTE_INTERNAL2(json, variable_name) \
124 __attribute__((aligned(4), used, section(".note.dlopen"))) \
125 static const struct { \
132 __attribute__((aligned(4))) char dlopen_json[sizeof(json)]; \
133 } variable_name = { \
135 sizeof(SDL_ELF_NOTE_DLOPEN_VENDOR), \
137 SDL_ELF_NOTE_DLOPEN_TYPE \
139 SDL_ELF_NOTE_DLOPEN_VENDOR, \
143#define SDL_ELF_NOTE_INTERNAL(json, variable_name) \
144 SDL_ELF_NOTE_INTERNAL2(json, variable_name)
146#define SDL_DLNOTE_JSON_ARRAY1(N1) "[\"" N1 "\"]"
147#define SDL_DLNOTE_JSON_ARRAY2(N1,N2) "[\"" N1 "\",\"" N2 "\"]"
148#define SDL_DLNOTE_JSON_ARRAY3(N1,N2,N3) "[\"" N1 "\",\"" N2 "\",\"" N3 "\"]"
149#define SDL_DLNOTE_JSON_ARRAY4(N1,N2,N3,N4) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\"]"
150#define SDL_DLNOTE_JSON_ARRAY5(N1,N2,N3,N4,N5) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\"]"
151#define SDL_DLNOTE_JSON_ARRAY6(N1,N2,N3,N4,N5,N6) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\"]"
152#define SDL_DLNOTE_JSON_ARRAY7(N1,N2,N3,N4,N5,N6,N7) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\"]"
153#define SDL_DLNOTE_JSON_ARRAY8(N1,N2,N3,N4,N5,N6,N7,N8) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\",\"" N8 "\"]"
154#define SDL_DLNOTE_JSON_ARRAY_GET(N1,N2,N3,N4,N5,N6,N7,N8,NAME,...) NAME
155#define SDL_DLNOTE_JSON_ARRAY(...) \
156 SDL_DLNOTE_JSON_ARRAY_GET( \
158 SDL_DLNOTE_JSON_ARRAY8, \
159 SDL_DLNOTE_JSON_ARRAY7, \
160 SDL_DLNOTE_JSON_ARRAY6, \
161 SDL_DLNOTE_JSON_ARRAY5, \
162 SDL_DLNOTE_JSON_ARRAY4, \
163 SDL_DLNOTE_JSON_ARRAY3, \
164 SDL_DLNOTE_JSON_ARRAY2, \
165 SDL_DLNOTE_JSON_ARRAY1 \
171#define SDL_DLNOTE_JOIN2(A,B) A##B
172#define SDL_DLNOTE_JOIN(A,B) SDL_DLNOTE_JOIN2(A,B)
173#define SDL_DLNOTE_UNIQUE_NAME SDL_DLNOTE_JOIN(s_SDL_dlopen_note_, __LINE__)
212#define SDL_ELF_NOTE_DLOPEN(feature, description, priority, ...) \
213 SDL_ELF_NOTE_INTERNAL( \
214 "[{\"feature\":\"" feature \
215 "\",\"description\":\"" description \
216 "\",\"priority\":\"" priority \
217 "\",\"soname\":" SDL_DLNOTE_JSON_ARRAY(__VA_ARGS__) "}]", \
218 SDL_DLNOTE_UNIQUE_NAME);
220#elif defined(__GNUC__) && __GNUC__ < 3
222#define SDL_ELF_NOTE_DLOPEN(args...)
224#elif defined(_MSC_VER) && _MSC_VER < 1400
230#define SDL_ELF_NOTE_DLOPEN(...)