From: patrick Date: Mon, 2 Aug 2021 08:50:51 +0000 (+0000) Subject: Add infrastructure to build llvm-objcopy and llvm-objdump. X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=18270f79f17989f9cfedd96c0d9a34fd91cdb415;p=openbsd Add infrastructure to build llvm-objcopy and llvm-objdump. ok kettenis@ sthen@ --- diff --git a/gnu/usr.bin/clang/Makefile b/gnu/usr.bin/clang/Makefile index 6747c05d7ed..74cf9f8b0d8 100644 --- a/gnu/usr.bin/clang/Makefile +++ b/gnu/usr.bin/clang/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.14 2021/04/28 12:55:37 patrick Exp $ +# $OpenBSD: Makefile,v 1.15 2021/08/02 08:50:51 patrick Exp $ .include @@ -99,5 +99,9 @@ SUBDIR+=liblldbUtility SUBDIR+=lldb SUBDIR+=lldb-server +SUBDIR+=include/llvm-objcopy +SUBDIR+=llvm-objcopy +SUBDIR+=llvm-objdump + .include .include diff --git a/gnu/usr.bin/clang/include/llvm-objcopy/Makefile b/gnu/usr.bin/clang/include/llvm-objcopy/Makefile new file mode 100644 index 00000000000..8f820fc217c --- /dev/null +++ b/gnu/usr.bin/clang/include/llvm-objcopy/Makefile @@ -0,0 +1,33 @@ +# $OpenBSD: Makefile,v 1.1 2021/08/02 08:50:51 patrick Exp $ + +.include + +TBLGEN= ${.OBJDIR}/../../llvm-tblgen/llvm-tblgen +OBJCOPY_INC=${.CURDIR}/../../../../llvm/llvm/tools/llvm-objcopy + +GEN= InstallNameToolOpts.inc ObjcopyOpts.inc StripOpts.inc + +all: ${GEN} + +install: + @# Nothing here so far ... + +clean cleandir: + rm -f ${GEN} + +InstallNameToolOpts.inc: ${OBJCOPY_INC}/InstallNameToolOpts.td + ${TBLGEN} -I${.CURDIR}/../../../../llvm/llvm/include \ + -I${.CURDIR}/../../../../llvm/llvm/tools/llvm-objcopy \ + -gen-opt-parser-defs -o ${.TARGET} ${.ALLSRC} + +ObjcopyOpts.inc: ${OBJCOPY_INC}/ObjcopyOpts.td + ${TBLGEN} -I${.CURDIR}/../../../../llvm/llvm/include \ + -I${.CURDIR}/../../../../llvm/llvm/tools/llvm-objcopy \ + -gen-opt-parser-defs -o ${.TARGET} ${.ALLSRC} + +StripOpts.inc: ${OBJCOPY_INC}/StripOpts.td + ${TBLGEN} -I${.CURDIR}/../../../../llvm/llvm/include \ + -I${.CURDIR}/../../../../llvm/llvm/tools/llvm-objcopy \ + -gen-opt-parser-defs -o ${.TARGET} ${.ALLSRC} + +.include diff --git a/gnu/usr.bin/clang/libLLVM/Makefile b/gnu/usr.bin/clang/libLLVM/Makefile index c8f74cb601c..fee57eeee25 100644 --- a/gnu/usr.bin/clang/libLLVM/Makefile +++ b/gnu/usr.bin/clang/libLLVM/Makefile @@ -48,6 +48,7 @@ .include "../libLLVMScalarOpts/Makefile" .include "../libLLVMSelectionDAG/Makefile" .include "../libLLVMSupport/Makefile.shared" +.include "../libLLVMSymbolize/Makefile" .include "../libLLVMTableGen/Makefile.shared" .include "../libLLVMTarget/Makefile" .include "../libLLVMTextAPI/Makefile" diff --git a/gnu/usr.bin/clang/libLLVMSymbolize/Makefile b/gnu/usr.bin/clang/libLLVMSymbolize/Makefile new file mode 100644 index 00000000000..7c77495116d --- /dev/null +++ b/gnu/usr.bin/clang/libLLVMSymbolize/Makefile @@ -0,0 +1,12 @@ +# $OpenBSD: Makefile,v 1.1 2021/08/02 08:50:52 patrick Exp $ + +LIB= LLVMSymbolize +NOPROFILE= + +CPPFLAGS+= -I${LLVM_SRCS}/include/llvm/DebugInfo/Symbolize + +SRCS+= DIPrinter.cpp \ + SymbolizableObjectFile.cpp \ + Symbolize.cpp \ + +.PATH: ${.CURDIR}/../../../llvm/llvm/lib/DebugInfo/Symbolize diff --git a/gnu/usr.bin/clang/llvm-objcopy/Makefile b/gnu/usr.bin/clang/llvm-objcopy/Makefile new file mode 100644 index 00000000000..99c5728335e --- /dev/null +++ b/gnu/usr.bin/clang/llvm-objcopy/Makefile @@ -0,0 +1,80 @@ +# $OpenBSD: Makefile,v 1.1 2021/08/02 08:50:52 patrick Exp $ + +.include + +PROG= llvm-objcopy +BINDIR= /usr/bin +LIBEXECDIR=/usr/libexec + +SRCS= Buffer.cpp \ + COFFObjcopy.cpp \ + COFFObject.cpp \ + COFFReader.cpp \ + COFFWriter.cpp \ + CopyConfig.cpp \ + ELFConfig.cpp \ + ELFObjcopy.cpp \ + ELFObject.cpp \ + MachOLayoutBuilder.cpp \ + MachOObjcopy.cpp \ + MachOObject.cpp \ + MachOReader.cpp \ + MachOWriter.cpp \ + WasmObjcopy.cpp \ + WasmObject.cpp \ + WasmReader.cpp \ + WasmWriter.cpp \ + llvm-objcopy.cpp + +COFFObject.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF/Object.cpp $@ + +COFFReader.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF/Reader.cpp $@ + +COFFWriter.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF/Writer.cpp $@ + +ELFObject.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/ELF/Object.cpp $@ + +MachOObject.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/MachO/Object.cpp $@ + +WasmObject.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm/Object.cpp $@ + +WasmReader.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm/Reader.cpp $@ + +WasmWriter.cpp: + ln -s ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm/Writer.cpp $@ + +CPPFLAGS+= -I${.OBJDIR}/../include/llvm-objcopy +CPPFLAGS+= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy +CPPFLAGS+= ${CPPFLAGS_$*} + +CPPFLAGS_COFFObject= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF +CPPFLAGS_COFFReader= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF +CPPFLAGS_COFFWriter= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF +CPPFLAGS_ELFObject= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/ELF +CPPFLAGS_MachOObject= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/MachO +CPPFLAGS_WasmObject= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm +CPPFLAGS_WasmReader= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm +CPPFLAGS_WasmWriter= -I${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm + +.PATH: ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy +.PATH: ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/COFF +.PATH: ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/ELF +.PATH: ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/MachO +.PATH: ${.CURDIR}/../../../llvm/llvm/tools/llvm-objcopy/wasm + +LLVM_LIBDEPS= LLVM + +LDADD+= -L ${.OBJDIR}/../libLLVM -lLLVM + +CLEANFILES+= COFFObject.cpp COFFReader.cpp COFFWriter.cpp +CLEANFILES+= ELFObject.cpp MachOObject.cpp +CLEANFILES+= WasmObject.cpp WasmReader.cpp WasmWriter.cpp + +.include diff --git a/gnu/usr.bin/clang/llvm-objcopy/llvm-objcopy.1 b/gnu/usr.bin/clang/llvm-objcopy/llvm-objcopy.1 new file mode 100644 index 00000000000..68868fc1f71 --- /dev/null +++ b/gnu/usr.bin/clang/llvm-objcopy/llvm-objcopy.1 @@ -0,0 +1,744 @@ +.\" Man page generated from reStructuredText. +. +.TH "LLVM-OBJCOPY" "1" "2021-07-28" "11" "LLVM" +.SH NAME +llvm-objcopy \- object copying and editing tool +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.SH SYNOPSIS +.sp +\fBllvm\-objcopy\fP [\fIoptions\fP] \fIinput\fP [\fIoutput\fP] +.SH DESCRIPTION +.sp +\fBllvm\-objcopy\fP is a tool to copy and manipulate objects. In basic +usage, it makes a semantic copy of the input to the output. If any options are +specified, the output may be modified along the way, e.g. by removing sections. +.sp +If no output file is specified, the input file is modified in\-place. If "\-" is +specified for the input file, the input is read from the program\(aqs standard +input stream. If "\-" is specified for the output file, the output is written to +the standard output stream of the program. +.sp +If the input is an archive, any requested operations will be applied to each +archive member individually. +.sp +The tool is still in active development, but in most scenarios it works as a +drop\-in replacement for GNU\(aqs \fBobjcopy\fP\&. +.SH GENERIC AND CROSS-PLATFORM OPTIONS +.sp +The following options are either agnostic of the file format, or apply to +multiple file formats. +.INDENT 0.0 +.TP +.B \-\-add\-gnu\-debuglink +Add a .gnu_debuglink section for \fB\fP to the output. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-add\-section +Add a section named \fB
\fP with the contents of \fB\fP to the +output. For ELF objects the section will be of type \fISHT_NOTE\fP, if the name +starts with ".note". Otherwise, it will have type \fISHT_PROGBITS\fP\&. Can be +specified multiple times to add multiple sections. +.sp +For MachO objects, \fB
\fP must be formatted as +\fB,
\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-binary\-architecture , \-B +Ignored for compatibility. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-disable\-deterministic\-archives, \-U +Use real values for UIDs, GIDs and timestamps when updating archive member +headers. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-discard\-all, \-x +Remove most local symbols from the output. Different file formats may limit +this to a subset of the local symbols. For example, file and section symbols in +ELF objects will not be discarded. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-dump\-section
= +Dump the contents of section \fB
\fP into the file \fB\fP\&. Can be +specified multiple times to dump multiple sections to different files. +\fB\fP is unrelated to the input and output files provided to +\fBllvm\-objcopy\fP and as such the normal copying and editing +operations will still be performed. No operations are performed on the sections +prior to dumping them. +.sp +For MachO objects, \fB
\fP must be formatted as +\fB,
\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-enable\-deterministic\-archives, \-D +Enable deterministic mode when copying archives, i.e. use 0 for archive member +header UIDs, GIDs and timestamp fields. On by default. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-help, \-h +Print a summary of command line options. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-only\-keep\-debug +Produce a debug file as the output that only preserves contents of sections +useful for debugging purposes. +.sp +For ELF objects, this removes the contents of \fISHF_ALLOC\fP sections that are not +\fISHT_NOTE\fP by making them \fISHT_NOBITS\fP and shrinking the program headers where +possible. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-only\-section
, \-j +Remove all sections from the output, except for sections named \fB
\fP\&. +Can be specified multiple times to keep multiple sections. +.sp +For MachO objects, \fB
\fP must be formatted as +\fB,
\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-redefine\-sym = +Rename symbols called \fB\fP to \fB\fP in the output. Can be specified +multiple times to rename multiple symbols. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-redefine\-syms +Rename symbols in the output as described in the file \fB\fP\&. In the +file, each line represents a single symbol to rename, with the old name and new +name separated by whitespace. Leading and trailing whitespace is ignored, as is +anything following a \(aq#\(aq. Can be specified multiple times to read names from +multiple files. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-regex +If specified, symbol and section names specified by other switches are treated +as extended POSIX regular expression patterns. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-remove\-section
, \-R +Remove the specified section from the output. Can be specified multiple times +to remove multiple sections simultaneously. +.sp +For MachO objects, \fB
\fP must be formatted as +\fB,
\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-set\-section\-alignment
= +Set the alignment of section \fB
\fP to \fI\(ga\fP\&. Can be specified +multiple times to update multiple sections. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-set\-section\-flags
=[,,...] +Set section properties in the output of section \fB
\fP based on the +specified \fB\fP values. Can be specified multiple times to update multiple +sections. +.sp +Supported flag names are \fIalloc\fP, \fIload\fP, \fInoload\fP, \fIreadonly\fP, \fIexclude\fP, +\fIdebug\fP, \fIcode\fP, \fIdata\fP, \fIrom\fP, \fIshare\fP, \fIcontents\fP, \fImerge\fP and \fIstrings\fP\&. Not +all flags are meaningful for all object file formats. +.sp +For ELF objects, the flags have the following effects: +.INDENT 7.0 +.IP \(bu 2 +\fIalloc\fP = add the \fISHF_ALLOC\fP flag. +.IP \(bu 2 +\fIload\fP = if the section has \fISHT_NOBITS\fP type, mark it as a \fISHT_PROGBITS\fP +section. +.IP \(bu 2 +\fIreadonly\fP = if this flag is not specified, add the \fISHF_WRITE\fP flag. +.IP \(bu 2 +\fIexclude\fP = add the \fISHF_EXCLUDE\fP flag. +.IP \(bu 2 +\fIcode\fP = add the \fISHF_EXECINSTR\fP flag. +.IP \(bu 2 +\fImerge\fP = add the \fISHF_MERGE\fP flag. +.IP \(bu 2 +\fIstrings\fP = add the \fISHF_STRINGS\fP flag. +.IP \(bu 2 +\fIcontents\fP = if the section has \fISHT_NOBITS\fP type, mark it as a \fISHT_PROGBITS\fP +section. +.UNINDENT +.sp +For COFF objects, the flags have the following effects: +.INDENT 7.0 +.IP \(bu 2 +\fIalloc\fP = add the \fIIMAGE_SCN_CNT_UNINITIALIZED_DATA\fP and \fIIMAGE_SCN_MEM_READ\fP +flags, unless the \fIload\fP flag is specified. +.IP \(bu 2 +\fInoload\fP = add the \fIIMAGE_SCN_LNK_REMOVE\fP and \fIIMAGE_SCN_MEM_READ\fP flags. +.IP \(bu 2 +\fIreadonly\fP = if this flag is not specified, add the \fIIMAGE_SCN_MEM_WRITE\fP +flag. +.IP \(bu 2 +\fIexclude\fP = add the \fIIMAGE_SCN_LNK_REMOVE\fP and \fIIMAGE_SCN_MEM_READ\fP flags. +.IP \(bu 2 +\fIdebug\fP = add the \fIIMAGE_SCN_CNT_INITIALIZED_DATA\fP, +\fIIMAGE_SCN_MEM_DISCARDABLE\fP and \fIIMAGE_SCN_MEM_READ\fP flags. +.IP \(bu 2 +\fIcode\fP = add the \fIIMAGE_SCN_CNT_CODE\fP, \fIIMAGE_SCN_MEM_EXECUTE\fP and +\fIIMAGE_SCN_MEM_READ\fP flags. +.IP \(bu 2 +\fIdata\fP = add the \fIIMAGE_SCN_CNT_INITIALIZED_DATA\fP and \fIIMAGE_SCN_MEM_READ\fP +flags. +.IP \(bu 2 +\fIshare\fP = add the \fIIMAGE_SCN_MEM_SHARED\fP and \fIIMAGE_SCN_MEM_READ\fP flags. +.UNINDENT +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-all\-gnu +Remove all symbols, debug sections and relocations from the output. This option +is equivalent to GNU \fBobjcopy\fP\(aqs \fB\-\-strip\-all\fP switch. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-all, \-S +For ELF objects, remove from the output all symbols and non\-alloc sections not +within segments, except for .gnu.warning, .ARM.attribute sections and the +section name table. +.sp +For COFF and Mach\-O objects, remove all symbols, debug sections, and +relocations from the output. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-debug, \-g +Remove all debug sections from the output. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-symbol , \-N +Remove all symbols named \fB\fP from the output. Can be specified +multiple times to remove multiple symbols. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-symbols +Remove all symbols whose names appear in the file \fB\fP, from the +output. In the file, each line represents a single symbol name, with leading +and trailing whitespace ignored, as is anything following a \(aq#\(aq. Can be +specified multiple times to read names from multiple files. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-unneeded\-symbol +Remove from the output all symbols named \fB\fP that are local or +undefined and are not required by any relocation. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-unneeded\-symbols +Remove all symbols whose names appear in the file \fB\fP, from the +output, if they are local or undefined and are not required by any relocation. +In the file, each line represents a single symbol name, with leading and +trailing whitespace ignored, as is anything following a \(aq#\(aq. Can be specified +multiple times to read names from multiple files. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-strip\-unneeded +Remove from the output all local or undefined symbols that are not required by +relocations. Also remove all debug sections. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-version, \-V +Display the version of the \fBllvm\-objcopy\fP executable. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-wildcard, \-w +Allow wildcard syntax for symbol\-related flags. On by default for +section\-related flags. Incompatible with \-\-regex. +.sp +Wildcard syntax allows the following special symbols: +.TS +center; +|l|l|l|. +_ +T{ +Character +T} T{ +Meaning +T} T{ +Equivalent +T} +_ +T{ +\fB*\fP +T} T{ +Any number of characters +T} T{ +\fB\&.*\fP +T} +_ +T{ +\fB?\fP +T} T{ +Any single character +T} T{ +\fB\&.\fP +T} +_ +T{ +\fB\e\fP +T} T{ +Escape the next character +T} T{ +\fB\e\fP +T} +_ +T{ +\fB[a\-z]\fP +T} T{ +Character class +T} T{ +\fB[a\-z]\fP +T} +_ +T{ +\fB[!a\-z]\fP, \fB[^a\-z]\fP +T} T{ +Negated character class +T} T{ +\fB[^a\-z]\fP +T} +_ +.TE +.sp +Additionally, starting a wildcard with \(aq!\(aq will prevent a match, even if +another flag matches. For example \fB\-w \-N \(aq*\(aq \-N \(aq!x\(aq\fP will strip all symbols +except for \fBx\fP\&. +.sp +The order of wildcards does not matter. For example, \fB\-w \-N \(aq*\(aq \-N \(aq!x\(aq\fP is +the same as \fB\-w \-N \(aq!x\(aq \-N \(aq*\(aq\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B @ +Read command\-line options and commands from response file \fI\fP\&. +.UNINDENT +.SH ELF-SPECIFIC OPTIONS +.sp +The following options are implemented only for ELF objects. If used with other +objects, \fBllvm\-objcopy\fP will either emit an error or silently ignore +them. +.INDENT 0.0 +.TP +.B \-\-add\-symbol =[
:][,] +Add a new symbol called \fB\fP to the output symbol table, in the section +named \fB
\fP, with value \fB\fP\&. If \fB
\fP is not specified, +the symbol is added as an absolute symbol. The \fB\fP affect the symbol +properties. Accepted values are: +.INDENT 7.0 +.IP \(bu 2 +\fIglobal\fP = the symbol will have global binding. +.IP \(bu 2 +\fIlocal\fP = the symbol will have local binding. +.IP \(bu 2 +\fIweak\fP = the symbol will have weak binding. +.IP \(bu 2 +\fIdefault\fP = the symbol will have default visibility. +.IP \(bu 2 +\fIhidden\fP = the symbol will have hidden visibility. +.IP \(bu 2 +\fIprotected\fP = the symbol will have protected visibility. +.IP \(bu 2 +\fIfile\fP = the symbol will be an \fISTT_FILE\fP symbol. +.IP \(bu 2 +\fIsection\fP = the symbol will be an \fISTT_SECTION\fP symbol. +.IP \(bu 2 +\fIobject\fP = the symbol will be an \fISTT_OBJECT\fP symbol. +.IP \(bu 2 +\fIfunction\fP = the symbol will be an \fISTT_FUNC\fP symbol. +.IP \(bu 2 +\fIindirect\-function\fP = the symbol will be an \fISTT_GNU_IFUNC\fP symbol. +.UNINDENT +.sp +Additionally, the following flags are accepted but ignored: \fIdebug\fP, +\fIconstructor\fP, \fIwarning\fP, \fIindirect\fP, \fIsynthetic\fP, \fIunique\-object\fP, \fIbefore\fP\&. +.sp +Can be specified multiple times to add multiple symbols. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-allow\-broken\-links +Allow \fBllvm\-objcopy\fP to remove sections even if it would leave invalid +section references. Any invalid sh_link fields will be set to zero. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-build\-id\-link\-dir +Set the directory used by \fI\%\-\-build\-id\-link\-input\fP and +\fI\%\-\-build\-id\-link\-output\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-build\-id\-link\-input +Hard\-link the input to \fB/xx/xxx\fP, where \fB\fP is the directory +specified by \fI\%\-\-build\-id\-link\-dir\fP\&. The path used is derived from the +hex build ID. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-build\-id\-link\-output +Hard\-link the output to \fB/xx/xxx\fP, where \fB\fP is the directory +specified by \fI\%\-\-build\-id\-link\-dir\fP\&. The path used is derived from the +hex build ID. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-change\-start , \-\-adjust\-start +Add \fB\fP to the program\(aqs start address. Can be specified multiple +times, in which case the values will be applied cumulatively. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-compress\-debug\-sections [