Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Rename TARGET_DARWIN to TARGET_OSX - #33959

Merged
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin
Mar 24, 2020
Merged

Rename TARGET_DARWIN to TARGET_OSX#33959
akoeplinger merged 3 commits into
dotnet:masterfrom
akoeplinger:target-darwin

Conversation

@akoeplinger

Copy link
Copy Markdown
Member

#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.

dotnet#33716 set TARGET_DARWIN for iOS too but most of the logic is really OSX-specific.
Unset TARGET_DARWIN for iOS and rename the rest of the occurrences to TARGET_OSX.
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
Comment threadsrc/libraries/Native/Unix/CMakeLists.txt
if(NOT CLR_CMAKE_TARGET_ARCH_WASM AND NOT CLR_CMAKE_TARGET_IOS)
if(CLR_CMAKE_TARGET_OSX)
add_definitions(-DTARGET_OSX)
add_link_options(-Wl,-bind_at_load)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@janvorli I see that you have added -bind_at_load in https://github.com/dotnet/runtime/pull/685/files#diff-1e019a64c92fd71addd77bc8288ca11fR174 . Was it intentional? Why is it needed?

It looks like a unnecessary de-optimization to me.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The -bind_at_load is an equivalent of -z,now that we use on Linux.

From https://gcc.gnu.org/onlinedocs/gcc-4.7.4/gcc/Darwin-Options.html:

-bind_at_load
Causes the output file to be marked such that the dynamic linker will bind all undefined references when the file is loaded or launched.

From https://linux.die.net/man/1/ld

now
When generating an executable or shared library, mark it to tell the dynamic linker to resolve all symbols when the program is started, or when the shared library is linked to using dlopen, instead of deferring function call resolution to the point when the function is first called.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand what it does. I do not understand why we need it. What is not going to work when we remove -z,now and -bind_at_load ?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a hardening feature. -z,relro enables just a partial relro. To enable full relro, both -z,relro and -z,now is needed. See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro. GOT ovewrite attacks are still possible with partial relro, but not with full relro.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe worth a comment.

#ifndef PAL_IMPLEMENTATION

// OS X already defines these types in 64 bit
#if !defined(TARGET_OSX)

@akoeplingerakoeplingerMar 23, 2020

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR uncovered an interesting issue: before this PR TARGET_OSX was already set in src/coreclr/src/pal/src/CMakeLists.txt and used here, but not set when accessed from other object files.

Now that TARGET_OSX is defined globally this code here got disabled which resulted in a compilation error:

In file included from /Users/alexander/dev/runtime/src/coreclr/src/nativeresources/resourcestring.cpp:7:
In file included from /Users/alexander/dev/runtime/src/coreclr/src/inc/utilcode.h:25:
/Users/alexander/dev/runtime/src/coreclr/src/inc/daccess.h:2350:14: error: unknown type name 'uint32_t'
typedef DPTR(uint32_t) PTR_uint32_t;
^

Removing the #if seems to work fine and should match the earlier behavior but I'd appreciate a second set of eyes. @jkotas

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is fine since it is under #ifndef PAL_IMPLEMENTATION and so it can never collide with platform header files. We used to build part of PAL, the safecrt, without this define in the past, but it was fixed about a week ago in #32800, so the define doesn't make sense here anyways.

@akoeplinger
akoeplinger merged commit 3d8073d into dotnet:masterMar 24, 2020
@akoeplinger
akoeplinger deleted the target-darwin branch March 24, 2020 10:44
monojenkins pushed a commit to monojenkins/mono that referenced this pull request Apr 9, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: dotnet/runtime#33959 (comment)Fixes: dotnet/runtime#33976
cc @akoeplinger, @jkotas
akoeplinger added a commit that referenced this pull request Jun 1, 2020
iOS requires 3.14.5 version and we have a special case for it. Since this is a minor version difference, and no distro is particularly providing cmake 3.14.2 package, it is safe to update to 3.14.5 to cover our supported platform matrix.
Discussion: #33959 (comment)Fixes: #33976
Co-authored-by: Alexander Köplinger <alex.koeplinger@outlook.com>
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@akoeplinger@am11@jkotas@janvorli@Dotnet-GitSync-Bot