Commit Graph

15 Commits

Author SHA1 Message Date
riastradh ad49149131 elftoolchain: Be consistent about which ELF header files we use.
1. For tools that use elftoolchain: always use elftoolchain's
   elfdefinitions.h.  Don't even think about looking at the host's
   sys/exec_elf.h, which makes no sense and should never happen.

   (ELF tools that don't use elftoolchain, like m68k-elf2coff,
   continue to use nbincludes/sys/exec_elf.h.  But no more nbincludes
   hacks in elftoolchain.)

2. For kernel components (solaris, zfs, dtrace): always use
   sys/exec_elf.h, even in Solaris components via sys/elf.h.
   elfdefinitions.h is not wired up in the kernel build at all.

3. For most userland components that involve libelf: use
   elfdefinitions.h via libelf header files (libelf.h, gelf.h).

   libdtrace in particular requires _all_ R_* reloc type definitions,
   but sys/exec_elf.h brings in only the _current machine's_ R_*
   reloc type definitions.  (While here: Use uintptr_t instead of
   Elf_Addr for pointer-to-integer cast, since Elf_Addr is MD and
   provided only by sys/exec_elf.h, not by elfdefinitions.h.)

   And most userland components using libelf don't rely on any
   properties of the current machine from sys/exec_elf.h, so they can
   use libelf's elfdefinition.h.

   Exceptions:

   - dtrace drti.c relies on link.h -> link_elf.h -> sys/exec_elf.h,
     but it also relies on sys/dtrace.h -> sys/elf.h ->
     elfdefinitions.h like other userland components using sys/elf.h.

   - kdump-ioctl.c uses sys/exec_elf.h directly and sys/dtrace.h ->
     sys/elf.h -> elfdefinitions like other userland components using
     sys/elf.h.

   - t_ptrace_wait.c (via t_ptrace_core_wait.h) uses libelf to parse
     core files, but relies on sys/exec_elf.h for struct
     netbsd_elfcore_procinfo.

   None of these exceptions needs all R_* reloc type definitions, so
   as a workaround, we can just suppress libelf's elfdefinitions.h by
   defining _SYS_ELFDEFINITIONS_H_ and use sys/exec_elf.h in these
   exceptions.

And undo the whole BUILTIN_ELF_HEADERS mistake.  This was:

- half bogus workarounds for missing build_install dependencies in
  tools/Makefile, which are no longer missing now, and
- half futile attempt to use src/sys/sys/exec_elf.h via nbincludes in
  tools involving libelf instead of libelf's elfdefinitions.h, which
  collides.

Longer-term, we may wish to unify sys/exec_elf.h and libelf's
elfdefinitions.h, so we don't have to play these games.

But at least now the games are limited to three .c files (one of
which is generated by Makefile.ioctl-c), rather than haphazardly
applied tree-wide by monstrous kludges in widely used .h files with
broken hackarounds to get the tools build lurching to completion.
2024-04-01 18:33:22 +00:00
christos 878fdbc71b revert previous, riastradh fixed it correctly and this is not needed. 2024-04-01 02:18:30 +00:00
christos 97a4ef4394 Restore the minimum build to install elfdefinitions.h. Provide a pre-built
copy, since we don't have m4 available. Use pax to install it because
using the Makefile needs more stuff available (nbsed) which we have not
built yet.
2024-03-31 03:20:38 +00:00
riastradh 3b71f8e333 tools/elftoolchain: Build with BUILTIN_ELF_HEADERS again.
The header file dependency that motivated disabling this should be
resolved now.
2024-03-30 22:39:53 +00:00
riastradh faabfc3e13 tools/elftoolchain: Handle dependencies properly.
This should properly resolve the problem christos was trying to
address by a bogus make includes hack and #ifdefs in elftoolchain.
2024-03-30 22:38:02 +00:00
christos d40876c8a3 Add ${_MKTARGET_CREATE} 2024-03-27 21:55:08 +00:00
christos 1546e871c7 Remove dependency to elfdefinitions.h, this is a mess, since it needs
${TOOL_M4} which might not be available yet.
2024-03-27 21:54:43 +00:00
christos cc85530f41 don't install headers as executable. 2024-03-26 16:52:03 +00:00
christos 1a67493085 - fix nbincludes so that it can be included from any level
- add elftoolchain/common to the list of headers to be build before depend
- make libdwarf build the includes since it needs <sys/elfdefinitions.h>
  which does not exist on non-netbsd systems.
2024-03-26 16:48:34 +00:00
christos 345cf9fb81 changes for r4037 2024-03-03 17:37:58 +00:00
jkoshy b5818589d8 Bug fix: use the correct target path in a dependency. 2022-05-02 18:28:38 +00:00
jkoshy f56b29a750 Make the generated <sys/elfdefinitions.h> file visible when compiling
libdwarf.
2022-05-01 17:25:19 +00:00
jkoshy 2718af68c3 Build 'libelf' and 'libdwarf' under 'tools/elftoolchain', after
'tools/elftoolchain/common' has been built.

This change aligns the 'tools' build with the regular build.

Subsequent commits will change 'tools/libctf' and
'tools/cft{merge,convert}' to use the new build paths.
2022-04-18 14:11:43 +00:00
jkoshy 9577c37ab9 Add a Makefile missed out in a previous commit. 2022-04-13 17:54:05 +00:00
jkoshy 42c1249ebe When building tools use a dedicated subdirectory for compiling
Elftoolchain code.

Build and install <sys/elfdefinitions.h> in ${TOOLDIR}/include.

This change prepares the ground for upgrading libelf and libdwarf to
their current Elftoolchain versions.
2022-04-13 17:52:56 +00:00