mirror of
https://github.com/mirror/tinycc.git
synced 2024-12-28 04:00:06 +08:00
-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(-)
This commit is contained in:
parent
096125d963
commit
f34b1feaca
2
libtcc.c
2
libtcc.c
@ -1377,6 +1377,8 @@ static int tcc_set_linker(TCCState *s, const char *option)
|
|||||||
ignoring = 1;
|
ignoring = 1;
|
||||||
} else if (link_option(option, "rpath=", &p)) {
|
} else if (link_option(option, "rpath=", &p)) {
|
||||||
copy_linker_arg(&s->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)) {
|
} else if (link_option(option, "section-alignment=", &p)) {
|
||||||
s->section_align = strtoul(p, &end, 16);
|
s->section_align = strtoul(p, &end, 16);
|
||||||
} else if (link_option(option, "soname=", &p)) {
|
} else if (link_option(option, "soname=", &p)) {
|
||||||
|
@ -307,6 +307,10 @@ Generate an object file combining all input files.
|
|||||||
@item -Wl,-rpath=path
|
@item -Wl,-rpath=path
|
||||||
Put custom search path for dynamic libraries into executable.
|
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
|
@item -Wl,--oformat=fmt
|
||||||
Use @var{fmt} as output format. The supported output formats are:
|
Use @var{fmt} as output format. The supported output formats are:
|
||||||
@table @code
|
@table @code
|
||||||
|
1
tcc.h
1
tcc.h
@ -605,6 +605,7 @@ struct TCCState {
|
|||||||
char *tcc_lib_path; /* CONFIG_TCCDIR or -B option */
|
char *tcc_lib_path; /* CONFIG_TCCDIR or -B option */
|
||||||
char *soname; /* as specified on the command line (-soname) */
|
char *soname; /* as specified on the command line (-soname) */
|
||||||
char *rpath; /* as specified on the command line (-Wl,-rpath=) */
|
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 */
|
/* output type, see TCC_OUTPUT_XXX */
|
||||||
int output_type;
|
int output_type;
|
||||||
|
3
tccelf.c
3
tccelf.c
@ -1968,7 +1968,8 @@ static int elf_output_file(TCCState *s1, const char *filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (s1->rpath)
|
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
|
/* XXX: currently, since we do not handle PIC code, we
|
||||||
must relocate the readonly segments */
|
must relocate the readonly segments */
|
||||||
|
Loading…
Reference in New Issue
Block a user