mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
2952f10cd7
The AMDGPU HSA OS ABI (code object v3 and above) defines the NT_AMDGPU_METADATA ELF note [1]. The content is a msgpack object describing, among other things, the kernels present in the code object and how to call them. I think it would be useful for readelf to be able to display the content of those notes. msgpack is a structured format, a bit like JSON, except not text-based. It is therefore possible to dump the contents in human-readable form without knowledge of the specific layout of the note. Add configury to binutils to optionally check for the msgpack C library [2]. Add There is a new --with{,out}-msgpack configure flag, and the actual library lookup is done using pkg-config. If msgpack support is enabled, dumping a NT_AMDGPU_METADATA note looks like: $ readelf --notes amdgpu-code-object Displaying notes found in: .note Owner Data size Description AMDGPU 0x0000040d NT_AMDGPU_METADATA (code object metadata) { "amdhsa.kernels": [ { ".args": [ { ".address_space": "global", ".name": "out.coerce", ".offset": 0, ".size": 8, ".value_kind": "global_buffer", }, <snip> If msgpack support is disabled, dump the contents as hex, as is done with notes that are not handled in a special way. This allows one to decode the contents manually (maybe using a command-line msgpack decoder) if really needed. [1] https://llvm.org/docs/AMDGPUUsage.html#code-object-metadata [2] https://github.com/msgpack/msgpack-c/tree/c_master binutils/ChangeLog: * Makefile.am (readelf_CFLAGS): New. (readelf_LDADD): Add MSGPACK_LIBS. * Makefile.in: Re-generate. * config.in: Re-generate. * configure: Re-generate. * configure.ac: Add --with-msgpack flag and check for msgpack using pkg-config. * readelf.c: Include msgpack.h if HAVE_MSGPACK. (print_note_contents_hex): New. (print_indents): New. (dump_msgpack_obj): New. (dump_msgpack): New. (print_amdgpu_note): New. (process_note): Handle NT_AMDGPU_METADATA note contents. Use print_note_contents_hex. Change-Id: Ia60a654e620bc32dfdb1bccd845594e2af328b84
266 lines
7.1 KiB
Plaintext
266 lines
7.1 KiB
Plaintext
/* config.in. Generated from configure.ac by autoheader. */
|
|
|
|
/* Check that config.h is #included before system headers
|
|
(this works only for glibc, but that should be enough). */
|
|
#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) && !defined(__CONFIG_H__)
|
|
# error config.h must be #included before system headers
|
|
#endif
|
|
#define __CONFIG_H__ 1
|
|
|
|
/* Should ar and ranlib use -D behavior by default? */
|
|
#undef DEFAULT_AR_DETERMINISTIC
|
|
|
|
/* Have readelf and objdump follow debug links by default */
|
|
#undef DEFAULT_FOR_FOLLOW_LINKS
|
|
|
|
/* Have nm use F and f for global and local ifunc symbols */
|
|
#undef DEFAULT_F_FOR_IFUNC_SYMBOLS
|
|
|
|
/* Should strings use -a behavior by default? */
|
|
#undef DEFAULT_STRINGS_ALL
|
|
|
|
/* Define if you want run-time sanity checks. */
|
|
#undef ENABLE_CHECKING
|
|
|
|
/* Handle .ctf type-info sections */
|
|
#undef ENABLE_LIBCTF
|
|
|
|
/* Define to 1 if translation of program messages to the user's native
|
|
language is requested. */
|
|
#undef ENABLE_NLS
|
|
|
|
/* Suffix used for executables, if any. */
|
|
#undef EXECUTABLE_SUFFIX
|
|
|
|
/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
|
|
don't. */
|
|
#undef HAVE_DECL_ASPRINTF
|
|
|
|
/* Define to 1 if you have the declaration of `environ', and to 0 if you
|
|
don't. */
|
|
#undef HAVE_DECL_ENVIRON
|
|
|
|
/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
|
|
don't. */
|
|
#undef HAVE_DECL_GETC_UNLOCKED
|
|
|
|
/* Is the prototype for getopt in <unistd.h> in the expected format? */
|
|
#undef HAVE_DECL_GETOPT
|
|
|
|
/* Define to 1 if you have the declaration of `sbrk', and to 0 if you don't.
|
|
*/
|
|
#undef HAVE_DECL_SBRK
|
|
|
|
/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't.
|
|
*/
|
|
#undef HAVE_DECL_STPCPY
|
|
|
|
/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
|
|
don't. */
|
|
#undef HAVE_DECL_STRNLEN
|
|
|
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
#undef HAVE_DLFCN_H
|
|
|
|
/* Does the platform use an executable suffix? */
|
|
#undef HAVE_EXECUTABLE_SUFFIX
|
|
|
|
/* Define to 1 if you have the <fcntl.h> header file. */
|
|
#undef HAVE_FCNTL_H
|
|
|
|
/* Define to 1 if you have the `getc_unlocked' function. */
|
|
#undef HAVE_GETC_UNLOCKED
|
|
|
|
/* Define to 1 if you have the `getpagesize' function. */
|
|
#undef HAVE_GETPAGESIZE
|
|
|
|
/* Does <utime.h> define struct utimbuf? */
|
|
#undef HAVE_GOOD_UTIME_H
|
|
|
|
/* Define if you have the iconv() function. */
|
|
#undef HAVE_ICONV
|
|
|
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
#undef HAVE_INTTYPES_H
|
|
|
|
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
|
#undef HAVE_LC_MESSAGES
|
|
|
|
/* Define to 1 if debuginfod is enabled. */
|
|
#undef HAVE_LIBDEBUGINFOD
|
|
|
|
/* Define if mbstate_t exists in wchar.h. */
|
|
#undef HAVE_MBSTATE_T
|
|
|
|
/* Define to 1 if you have the <memory.h> header file. */
|
|
#undef HAVE_MEMORY_H
|
|
|
|
/* Define to 1 if you have the `mkdtemp' function. */
|
|
#undef HAVE_MKDTEMP
|
|
|
|
/* Define to 1 if you have the `mkstemp' function. */
|
|
#undef HAVE_MKSTEMP
|
|
|
|
/* Define to 1 if you have a working `mmap' system call. */
|
|
#undef HAVE_MMAP
|
|
|
|
/* Define to 1 if msgpack is available. */
|
|
#undef HAVE_MSGPACK
|
|
|
|
/* Define to 1 if you have the `sbrk' function. */
|
|
#undef HAVE_SBRK
|
|
|
|
/* Define to 1 if you have the <stdint.h> header file. */
|
|
#undef HAVE_STDINT_H
|
|
|
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
#undef HAVE_STDLIB_H
|
|
|
|
/* Define to 1 if you have the <strings.h> header file. */
|
|
#undef HAVE_STRINGS_H
|
|
|
|
/* Define to 1 if you have the <string.h> header file. */
|
|
#undef HAVE_STRING_H
|
|
|
|
/* Define to 1 if `st_atimensec' is a member of `struct stat'. */
|
|
#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
|
|
|
|
/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */
|
|
#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
|
|
|
|
/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */
|
|
#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
|
|
|
|
/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */
|
|
#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
|
|
|
|
/* Define to 1 if you have the <sys/file.h> header file. */
|
|
#undef HAVE_SYS_FILE_H
|
|
|
|
/* Define to 1 if you have the <sys/param.h> header file. */
|
|
#undef HAVE_SYS_PARAM_H
|
|
|
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
#undef HAVE_SYS_STAT_H
|
|
|
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
|
#undef HAVE_SYS_TIME_H
|
|
|
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
#undef HAVE_SYS_TYPES_H
|
|
|
|
/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
|
|
#undef HAVE_SYS_WAIT_H
|
|
|
|
/* Define to 1 if you have the <unistd.h> header file. */
|
|
#undef HAVE_UNISTD_H
|
|
|
|
/* Define to 1 if you have the `utimensat' function. */
|
|
#undef HAVE_UTIMENSAT
|
|
|
|
/* Define to 1 if you have the `utimes' function. */
|
|
#undef HAVE_UTIMES
|
|
|
|
/* Define to 1 if you have the <windows.h> header file. */
|
|
#undef HAVE_WINDOWS_H
|
|
|
|
/* Define as const if the declaration of iconv() needs const. */
|
|
#undef ICONV_CONST
|
|
|
|
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
|
*/
|
|
#undef LT_OBJDIR
|
|
|
|
/* Name of package */
|
|
#undef PACKAGE
|
|
|
|
/* Define to the address where bug reports for this package should be sent. */
|
|
#undef PACKAGE_BUGREPORT
|
|
|
|
/* Define to the full name of this package. */
|
|
#undef PACKAGE_NAME
|
|
|
|
/* Define to the full name and version of this package. */
|
|
#undef PACKAGE_STRING
|
|
|
|
/* Define to the one symbol short name of this package. */
|
|
#undef PACKAGE_TARNAME
|
|
|
|
/* Define to the home page for this package. */
|
|
#undef PACKAGE_URL
|
|
|
|
/* Define to the version of this package. */
|
|
#undef PACKAGE_VERSION
|
|
|
|
/* The size of `long', as computed by sizeof. */
|
|
#undef SIZEOF_LONG
|
|
|
|
/* The size of `long long', as computed by sizeof. */
|
|
#undef SIZEOF_LONG_LONG
|
|
|
|
/* Define to 1 if you have the ANSI C header files. */
|
|
#undef STDC_HEADERS
|
|
|
|
/* Configured target name. */
|
|
#undef TARGET
|
|
|
|
/* Define to 1 if user symbol names have a leading underscore, 0 if not. */
|
|
#undef TARGET_PREPENDS_UNDERSCORE
|
|
|
|
/* Define to 1 if the type of the st_atim member of a struct stat is struct
|
|
timespec. */
|
|
#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
|
|
|
|
/* Use b modifier when opening binary files? */
|
|
#undef USE_BINARY_FOPEN
|
|
|
|
/* Enable extensions on AIX 3, Interix. */
|
|
#ifndef _ALL_SOURCE
|
|
# undef _ALL_SOURCE
|
|
#endif
|
|
/* Enable GNU extensions on systems that have them. */
|
|
#ifndef _GNU_SOURCE
|
|
# undef _GNU_SOURCE
|
|
#endif
|
|
/* Enable threading extensions on Solaris. */
|
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
|
# undef _POSIX_PTHREAD_SEMANTICS
|
|
#endif
|
|
/* Enable extensions on HP NonStop. */
|
|
#ifndef _TANDEM_SOURCE
|
|
# undef _TANDEM_SOURCE
|
|
#endif
|
|
/* Enable general extensions on Solaris. */
|
|
#ifndef __EXTENSIONS__
|
|
# undef __EXTENSIONS__
|
|
#endif
|
|
|
|
|
|
/* Version number of package */
|
|
#undef VERSION
|
|
|
|
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
|
|
`char[]'. */
|
|
#undef YYTEXT_POINTER
|
|
|
|
/* Enable large inode numbers on Mac OS X 10.5. */
|
|
#ifndef _DARWIN_USE_64_BIT_INODE
|
|
# define _DARWIN_USE_64_BIT_INODE 1
|
|
#endif
|
|
|
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
|
#undef _FILE_OFFSET_BITS
|
|
|
|
/* Define for large files, on AIX-style hosts. */
|
|
#undef _LARGE_FILES
|
|
|
|
/* Define to 1 if on MINIX. */
|
|
#undef _MINIX
|
|
|
|
/* Define to 2 if the system does not provide POSIX.1 features except with
|
|
this defined. */
|
|
#undef _POSIX_1_SOURCE
|
|
|
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
#undef _POSIX_SOURCE
|