diff options
| author | Steffen Nurpmeso <steffen@sdaoden.eu> | 2017-02-16 15:49:02 +0100 |
|---|---|---|
| committer | grischka <grischka> | 2017-02-18 09:54:41 +0100 |
| commit | f34b1feaca557cd9da198610b67d4328fb0c7a84 (patch) | |
| tree | aa74b09d8ff65b8b8429d149703f11abf4a8bb8f | |
| parent | 096125d963400951e0f160ced86416ef8c9c98b0 (diff) | |
| download | tinycc-f34b1feaca557cd9da198610b67d4328fb0c7a84.tar.gz tinycc-f34b1feaca557cd9da198610b67d4328fb0c7a84.tar.bz2 | |
-Wl, --enable-new-dtags for DT_RUNPATH instead of DT_RPATH
Today by accident i had to deal with linker problems of some
software and found an issue that mentioned DT_RUNPATH, which
mentioned that DT_RPATH is legacy and searched for
$LD_LIBRARY_PATH, whereas the newer DT_RUNPATH is searched
thereafter. Completely unencrypted! Well. For what's it worth,
i for one am astonished because of course i want to override
$LD_LIBRARY_PATH, but it surely has its merites, smart people came
to the conclusion, did they.
The attached diff below seems to be sufficient to support
DT_RUNPATH instead of DT_RPATH with tcc(1). But i have no insight
in what --enable-new-dtags is supposed to change in addition, so
i wonder.
Ciao!
--steffen
libtcc.c | 2 ++
tcc-doc.texi | 4 ++++
tcc.h | 1 +
tccelf.c | 3 ++-
4 files changed, 9 insertions(+), 1 deletion(-)
| -rw-r--r-- | libtcc.c | 2 | ||||
| -rw-r--r-- | tcc-doc.texi | 4 | ||||
| -rw-r--r-- | tcc.h | 1 | ||||
| -rw-r--r-- | tccelf.c | 3 |
4 files changed, 9 insertions, 1 deletions
@@ -1377,6 +1377,8 @@ static int tcc_set_linker(TCCState *s, const char *option) ignoring = 1; } else if (link_option(option, "rpath=", &p)) { copy_linker_arg(&s->rpath, p, ':'); + } else if (link_option(option, "enable-new-dtags", &p)) { + s->enable_new_dtags = 1; } else if (link_option(option, "section-alignment=", &p)) { s->section_align = strtoul(p, &end, 16); } else if (link_option(option, "soname=", &p)) { diff --git a/tcc-doc.texi b/tcc-doc.texi index db1d28f..a1c6761 100644 --- a/tcc-doc.texi +++ b/tcc-doc.texi @@ -307,6 +307,10 @@ Generate an object file combining all input files. @item -Wl,-rpath=path Put custom search path for dynamic libraries into executable. +@item -Wl,--enable-new-dtags +When putting a custom search path for dynamic libraries into the executable, +create the new ELF dynamic tag DT_RUNPATH instead of the old legacy DT_RPATH. + @item -Wl,--oformat=fmt Use @var{fmt} as output format. The supported output formats are: @table @code @@ -605,6 +605,7 @@ struct TCCState { char *tcc_lib_path; /* CONFIG_TCCDIR or -B option */ char *soname; /* as specified on the command line (-soname) */ char *rpath; /* as specified on the command line (-Wl,-rpath=) */ + int enable_new_dtags; /* ditto, (-Wl,--enable-new-dtags) */ /* output type, see TCC_OUTPUT_XXX */ int output_type; @@ -1968,7 +1968,8 @@ static int elf_output_file(TCCState *s1, const char *filename) } if (s1->rpath) - put_dt(dynamic, DT_RPATH, put_elf_str(dynstr, s1->rpath)); + put_dt(dynamic, s1->enable_new_dtags ? DT_RUNPATH : DT_RPATH, + put_elf_str(dynstr, s1->rpath)); /* XXX: currently, since we do not handle PIC code, we must relocate the readonly segments */ |
