This makes sure it will be possible to mmap the section directly instead of having to copy them. It then also makes perf able to figure the code origin for Wine modules.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com ---
I'm resending just this one as I am now trying to upstream PE support directly in Linux perf. This should still be useful to avoid copying sections when Wine modules are loaded.
tools/winegcc/winegcc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 29c1b0549d3..24da839fd83 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -547,6 +547,9 @@ static strarray *get_link_args( struct options *opts, const char *output_name ) else if (!opts->strip) strarray_add(link_args, "-Wl,-debug:dwarf");
+ if (!try_link( opts->prefix, link_args, "-Wl,--file-alignment:0x1000")) + strarray_add( link_args, "-Wl,--file-alignment:0x1000" ); + strarray_addall( link_args, flags ); return link_args;
Hi Rémi,
On 13.07.2020 16:41, Rémi Bernon wrote:
This makes sure it will be possible to mmap the section directly instead of having to copy them. It then also makes perf able to figure the code origin for Wine modules.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com
I'm resending just this one as I am now trying to upstream PE support directly in Linux perf. This should still be useful to avoid copying sections when Wine modules are loaded.
tools/winegcc/winegcc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 29c1b0549d3..24da839fd83 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -547,6 +547,9 @@ static strarray *get_link_args( struct options *opts, const char *output_name ) else if (!opts->strip) strarray_add(link_args, "-Wl,-debug:dwarf");
if (!try_link( opts->prefix, link_args, "-Wl,--file-alignment:0x1000"))
strarray_add( link_args, "-Wl,--file-alignment:0x1000" );
This can't work, I think you meant to do that for PLATFORM_MINGW instead.
Thanks,
Jacek
On 2020-07-13 17:28, Jacek Caban wrote:
Hi Rémi,
On 13.07.2020 16:41, Rémi Bernon wrote:
This makes sure it will be possible to mmap the section directly instead of having to copy them. It then also makes perf able to figure the code origin for Wine modules.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com
I'm resending just this one as I am now trying to upstream PE support directly in Linux perf. This should still be useful to avoid copying sections when Wine modules are loaded.
tools/winegcc/winegcc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 29c1b0549d3..24da839fd83 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -547,6 +547,9 @@ static strarray *get_link_args( struct options *opts, const char *output_name ) else if (!opts->strip) strarray_add(link_args, "-Wl,-debug:dwarf"); + if (!try_link( opts->prefix, link_args, "-Wl,--file-alignment:0x1000")) + strarray_add( link_args, "-Wl,--file-alignment:0x1000" );
This can't work, I think you meant to do that for PLATFORM_MINGW instead.
Thanks,
Jacek
I was sure that PLATFORM_WINDOWS was what set when things were built as PE. Is that the case in winebuild maybe?
On Mon, 13 Jul 2020, Rémi Bernon wrote:
This makes sure it will be possible to mmap the section directly instead of having to copy them. It then also makes perf able to figure the code origin for Wine modules.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com
I'm resending just this one as I am now trying to upstream PE support directly in Linux perf. This should still be useful to avoid copying sections when Wine modules are loaded.
tools/winegcc/winegcc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 29c1b0549d3..24da839fd83 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -547,6 +547,9 @@ static strarray *get_link_args( struct options *opts, const char *output_name ) else if (!opts->strip) strarray_add(link_args, "-Wl,-debug:dwarf");
if (!try_link( opts->prefix, link_args, "-Wl,--file-alignment:0x1000"))
strarray_add( link_args, "-Wl,--file-alignment:0x1000" );
Am I reading this correctly that it checks whether the linker supports the option, and only uses it in that case?
The LLD mingw frontend doesn't support this option at the moment I believe, but it shouldn't be hard to add support for it.
The option format seems a bit confusing though.
The section the option is added into, for PLATFORM_WINDOWS, is for building with MSVC tools (or clang in MSVC mode) with a link.exe style linker (in practice, lld-link).
In that case, the option should be "-filealign:<n>" (passed via a compiler driver, so "-Wl,-filealign:<n>"), while the mingw style linker option (for the section further up) would be "-Wl,--file-alignment,<n>".
And even if it actually would work, with the argument separated with a colon, instead of as a separate argument (separated with a comma when using -Wl), I'd prefer if you'd use the more standard form without colons, as the LLD mingw frontend at least doesn't handle using colons as separator there.
// Martin
On 2020-07-13 17:33, Martin Storsjö wrote:
On Mon, 13 Jul 2020, Rémi Bernon wrote:
This makes sure it will be possible to mmap the section directly instead of having to copy them. It then also makes perf able to figure the code origin for Wine modules.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com
I'm resending just this one as I am now trying to upstream PE support directly in Linux perf. This should still be useful to avoid copying sections when Wine modules are loaded.
tools/winegcc/winegcc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 29c1b0549d3..24da839fd83 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -547,6 +547,9 @@ static strarray *get_link_args( struct options *opts, const char *output_name ) else if (!opts->strip) strarray_add(link_args, "-Wl,-debug:dwarf");
+ if (!try_link( opts->prefix, link_args, "-Wl,--file-alignment:0x1000")) + strarray_add( link_args, "-Wl,--file-alignment:0x1000" );
Am I reading this correctly that it checks whether the linker supports the option, and only uses it in that case?
The LLD mingw frontend doesn't support this option at the moment I believe, but it shouldn't be hard to add support for it.
The option format seems a bit confusing though.
The section the option is added into, for PLATFORM_WINDOWS, is for building with MSVC tools (or clang in MSVC mode) with a link.exe style linker (in practice, lld-link).
In that case, the option should be "-filealign:<n>" (passed via a compiler driver, so "-Wl,-filealign:<n>"), while the mingw style linker option (for the section further up) would be "-Wl,--file-alignment,<n>".
And even if it actually would work, with the argument separated with a colon, instead of as a separate argument (separated with a comma when using -Wl), I'd prefer if you'd use the more standard form without colons, as the LLD mingw frontend at least doesn't handle using colons as separator there.
// Martin
Yes sorry, I'll move that to the PLATFORM_MINGW part, with comma as separator. I don't think the PLATFORM_WINDOWS case matters much as it's not supposed to be loaded with the Wine loader IIRC.