From 31942939034ecc9586d0e44f1c9ce30d0816dca9 Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Mon, 1 Dec 2014 17:49:42 +0000 Subject: [PATCH] Build infrastructure for elftoolchain tools Set WITH_ELFTOOLCHAIN_TOOLS in src.conf to use the elftoolchain version of the following tools: * addr2line * elfcopy (strip / mcs) * nm * size * strings Reviewed by: bapt (earlier version) Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D1224 --- Makefile.inc1 | 12 +++++++++ gnu/usr.bin/binutils/Makefile | 20 ++++++++++---- lib/Makefile | 5 ++++ lib/libelftc/Makefile | 30 +++++++++++++++++++++ lib/libelftc/elftc_version.c | 10 +++++++ share/mk/src.libnames.mk | 5 ++++ share/mk/src.opts.mk | 1 + tools/build/options/WITH_ELFTOOLCHAIN_TOOLS | 9 +++++++ usr.bin/Makefile | 15 ++++++++++- usr.bin/addr2line/Makefile | 16 +++++++++++ usr.bin/elfcopy/Makefile | 24 +++++++++++++++++ usr.bin/nm/Makefile | 16 +++++++++++ usr.bin/size/Makefile | 16 +++++++++++ usr.bin/strings/Makefile | 15 +++++++++++ 14 files changed, 188 insertions(+), 6 deletions(-) create mode 100644 lib/libelftc/Makefile create mode 100644 lib/libelftc/elftc_version.c create mode 100644 tools/build/options/WITH_ELFTOOLCHAIN_TOOLS create mode 100644 usr.bin/addr2line/Makefile create mode 100644 usr.bin/elfcopy/Makefile create mode 100644 usr.bin/nm/Makefile create mode 100644 usr.bin/size/Makefile create mode 100644 usr.bin/strings/Makefile diff --git a/Makefile.inc1 b/Makefile.inc1 index 7d828ec9d081..ee7fc519bcf4 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -1415,6 +1415,14 @@ _kgzip= usr.sbin/kgzip # If we're given an XAS, don't build binutils. .if ${XAS:M/*} == "" && ${MK_BINUTILS_BOOTSTRAP} != "no" _binutils= gnu/usr.bin/binutils +.if ${MK_ELFTOOLCHAIN_TOOLS} != "no" +_elftctools= lib/libelftc \ + usr.bin/addr2line \ + usr.bin/elfcopy \ + usr.bin/nm \ + usr.bin/size \ + usr.bin/strings +.endif .endif # If an full path to an external cross compiler is given, don't build @@ -1434,6 +1442,7 @@ cross-tools: .MAKE ${_clang_libs} \ ${_clang} \ ${_binutils} \ + ${_elftctools} \ ${_cc} \ usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ ${_btxld} \ @@ -1491,6 +1500,7 @@ native-xtools: .MAKE ${_clang_tblgen} \ usr.bin/ar \ ${_binutils} \ + ${_elftctools} \ ${_cc} \ ${_gcc_tools} \ ${_clang_libs} \ @@ -2045,6 +2055,7 @@ _xb-build-tools: _xb-cross-tools: .for _tool in \ ${_binutils} \ + ${_elftctools} \ usr.bin/ar \ ${_clang_libs} \ ${_clang} \ @@ -2077,6 +2088,7 @@ _xi-cross-tools: @echo "_xi-cross-tools" .for _tool in \ ${_binutils} \ + ${_elftctools} \ usr.bin/ar \ ${_clang_libs} \ ${_clang} \ diff --git a/gnu/usr.bin/binutils/Makefile b/gnu/usr.bin/binutils/Makefile index a544bc54b32d..9dac24403520 100644 --- a/gnu/usr.bin/binutils/Makefile +++ b/gnu/usr.bin/binutils/Makefile @@ -1,19 +1,29 @@ # $FreeBSD$ +.include + SUBDIR= libiberty \ libbfd \ libopcodes \ libbinutils \ - addr2line \ + ${_addr2line} \ as \ ld \ - nm \ + ${_nm} \ objcopy \ objdump \ readelf \ - size \ - strings \ - strip \ + ${_size} \ + ${_strings} \ + ${_strip} \ doc + +.if ${MK_ELFTOOLCHAIN_TOOLS} == "no" +_addr2line= addr2line +_nm= nm +_size= size +_strings= strings +_strip= strip +.endif .include diff --git a/lib/Makefile b/lib/Makefile index d87b32e91883..8bd565385ef0 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -45,6 +45,7 @@ SUBDIR= ${SUBDIR_ORDERED} \ libdpv \ libdwarf \ libedit \ + ${_libelftc} \ ${_libevent} \ libexecinfo \ libexpat \ @@ -190,6 +191,10 @@ _clang= clang _cuse= libcuse .endif +.if ${MK_ELFTOOLCHAIN_TOOLS} != "no" +_libelftc= libelftc +.endif + .if ${MK_GPIB} != "no" _libgpib= libgpib .endif diff --git a/lib/libelftc/Makefile b/lib/libelftc/Makefile new file mode 100644 index 000000000000..ccae1a554313 --- /dev/null +++ b/lib/libelftc/Makefile @@ -0,0 +1,30 @@ +# $FreeBSD$ +.include + +INTERNALLIB= + +ELFTCDIR= ${.CURDIR}/../../contrib/elftoolchain + +.PATH: ${ELFTCDIR}/libelftc + +LIB= elftc + +SRCS= elftc_bfdtarget.c \ + elftc_copyfile.c \ + elftc_demangle.c \ + elftc_set_timestamps.c \ + elftc_string_table.c \ + elftc_version.c \ + libelftc_bfdtarget.c \ + libelftc_dem_arm.c \ + libelftc_dem_gnu2.c \ + libelftc_dem_gnu3.c \ + libelftc_hash.c \ + libelftc_vstr.c + +INCS= libelftc.h +CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common + +NO_MAN= yes + +.include diff --git a/lib/libelftc/elftc_version.c b/lib/libelftc/elftc_version.c new file mode 100644 index 000000000000..f04781fe2b2c --- /dev/null +++ b/lib/libelftc/elftc_version.c @@ -0,0 +1,10 @@ +/* $FreeBSD$ */ + +#include +#include + +const char * +elftc_version(void) +{ + return "libelftc r2974"; +} diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk index 094897d06a1f..60f395bc2c47 100644 --- a/share/mk/src.libnames.mk +++ b/share/mk/src.libnames.mk @@ -27,6 +27,7 @@ _INTERNALIBS= \ amu \ bsnmptools \ cron \ + elftc \ event \ fifolog \ ipf \ @@ -286,6 +287,10 @@ LIBATF_CXX?= ${LIBATF_CXXDIR}/libatf-c++.a LIBBSDSTATDIR= ${ROOTOBJDIR}/lib/libbsdstat LIBBSDSTAT?= ${LIBBSDSTATDIR}/libbsdstat.a +LIBELFTCDIR= ${ROOTOBJDIR}/lib/libelftc +LDELFTC?= ${LIBELFTCDIR}/libelftc.a +LIBELFTC?= ${LIBELFTCDIR}/libelftc.a + LIBEVENTDIR= ${ROOTOBJDIR}/lib/libevent LIBEVENT?= ${LIBEVENTDIR}/libevent.a diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk index 87c0f9998cd7..024bb9165f84 100644 --- a/share/mk/src.opts.mk +++ b/share/mk/src.opts.mk @@ -160,6 +160,7 @@ __DEFAULT_NO_OPTIONS = \ BSD_GREP \ CLANG_EXTRAS \ EISA \ + ELFTOOLCHAIN_TOOLS \ FMAKE \ HESIOD \ LLDB \ diff --git a/tools/build/options/WITH_ELFTOOLCHAIN_TOOLS b/tools/build/options/WITH_ELFTOOLCHAIN_TOOLS new file mode 100644 index 000000000000..1d6197851d7f --- /dev/null +++ b/tools/build/options/WITH_ELFTOOLCHAIN_TOOLS @@ -0,0 +1,9 @@ +.\" $FreeBSD$ +Set to use +.Xr addr2line 1 , +.Xr nm 1 , +.Xr size 1 , +.Xr strings 1 , +and +.Xr strip 1 +from the elftoolchain project instead of GNU binutils. diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 298903e5e5b9..88628fb0611d 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -9,7 +9,8 @@ # Moved to secure: bdes # -SUBDIR= alias \ +SUBDIR= ${_addr2line} \ + alias \ apply \ asa \ awk \ @@ -41,6 +42,7 @@ SUBDIR= alias \ du \ ee \ elf2aout \ + ${_elfcopy} \ elfdump \ enigma \ env \ @@ -119,6 +121,7 @@ SUBDIR= alias \ nfsstat \ nice \ nl \ + ${_nm} \ nohup \ opieinfo \ opiekey \ @@ -150,12 +153,14 @@ SUBDIR= alias \ seq \ shar \ showmount \ + ${_size} \ sockstat \ soeliminate \ sort \ split \ stat \ stdbuf \ + ${_strings} \ su \ systat \ tabs \ @@ -236,6 +241,14 @@ SUBDIR+= calendar _clang= clang .endif +.if ${MK_ELFTOOLCHAIN_TOOLS} != "no" +_addr2line= addr2line +_elfcopy= elfcopy +_nm= nm +_size= size +_strings= strings +.endif + .if ${MK_FMAKE} != "no" SUBDIR+= make .endif diff --git a/usr.bin/addr2line/Makefile b/usr.bin/addr2line/Makefile new file mode 100644 index 000000000000..918707a7e7e1 --- /dev/null +++ b/usr.bin/addr2line/Makefile @@ -0,0 +1,16 @@ +# $FreeBSD$ + +.include + +ELFTCDIR= ${.CURDIR}/../../contrib/elftoolchain +ADDR2LINEDIR= ${ELFTCDIR}/addr2line + +.PATH: ${ADDR2LINEDIR} + +PROG= addr2line + +LIBADD= elftc dwarf elf + +CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common + +.include diff --git a/usr.bin/elfcopy/Makefile b/usr.bin/elfcopy/Makefile new file mode 100644 index 000000000000..8e7f31d2b9bd --- /dev/null +++ b/usr.bin/elfcopy/Makefile @@ -0,0 +1,24 @@ +# $FreeBSD$ + +.include + +ELFTCDIR= ${.CURDIR}/../../contrib/elftoolchain +ELFCOPYDIR= ${ELFTCDIR}/elfcopy + +.PATH: ${ELFCOPYDIR} + +PROG= elfcopy + +SRCS= archive.c ascii.c binary.c main.c sections.c segments.c symbols.c + +WARNS?= 5 + +LIBADD= archive elftc elf + +CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common + +MAN= elfcopy.1 strip.1 + +LINKS= ${BINDIR}/elfcopy ${BINDIR}/strip + +.include diff --git a/usr.bin/nm/Makefile b/usr.bin/nm/Makefile new file mode 100644 index 000000000000..5078e1030069 --- /dev/null +++ b/usr.bin/nm/Makefile @@ -0,0 +1,16 @@ +# $FreeBSD$ + +.include + +ELFTCDIR= ${.CURDIR}/../../contrib/elftoolchain +NMDIR= ${ELFTCDIR}/nm + +.PATH: ${NMDIR} + +PROG= nm + +LIBADD= dwarf elftc elf + +CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common + +.include diff --git a/usr.bin/size/Makefile b/usr.bin/size/Makefile new file mode 100644 index 000000000000..6aba73da0c88 --- /dev/null +++ b/usr.bin/size/Makefile @@ -0,0 +1,16 @@ +# $FreeBSD$ + +.include + +ELFTCDIR= ${.CURDIR}/../../contrib/elftoolchain +SIZEDIR= ${ELFTCDIR}/size + +.PATH: ${SIZEDIR} + +PROG= size + +LIBADD= elftc elf + +CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common + +.include diff --git a/usr.bin/strings/Makefile b/usr.bin/strings/Makefile new file mode 100644 index 000000000000..8543dcf435fe --- /dev/null +++ b/usr.bin/strings/Makefile @@ -0,0 +1,15 @@ +# $FreeBSD$ + +.include + +ELFTCDIR= ${.CURDIR}/../../contrib/elftoolchain + +.PATH: ${ELFTCDIR}/strings + +PROG= strings + +LIBADD= elftc elf + +CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common + +.include