[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-27 Thread Jason Molenda via lldb-commits

https://github.com/jasonmolenda closed 
https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-27 Thread Alex Langford via lldb-commits

https://github.com/bulbazord approved this pull request.


https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-27 Thread Alex Langford via lldb-commits


@@ -3154,7 +3154,7 @@ 
AppleObjCRuntimeV2::TaggedPointerVendorExtended::GetClassDescriptor(
 << m_objc_debug_taggedpointer_ext_payload_lshift) 
>>
m_objc_debug_taggedpointer_ext_payload_rshift);
   int64_t data_payload_signed =
-  ((int64_t)((int64_t)unobfuscated
+  ((int64_t)((uint64_t)unobfuscated
  << m_objc_debug_taggedpointer_ext_payload_lshift) >>

bulbazord wrote:

Makes sense to me. I think this is fine then.

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-26 Thread Jason Molenda via lldb-commits

https://github.com/jasonmolenda edited 
https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-26 Thread Jason Molenda via lldb-commits


@@ -3154,7 +3154,7 @@ 
AppleObjCRuntimeV2::TaggedPointerVendorExtended::GetClassDescriptor(
 << m_objc_debug_taggedpointer_ext_payload_lshift) 
>>
m_objc_debug_taggedpointer_ext_payload_rshift);
   int64_t data_payload_signed =
-  ((int64_t)((int64_t)unobfuscated
+  ((int64_t)((uint64_t)unobfuscated
  << m_objc_debug_taggedpointer_ext_payload_lshift) >>

jasonmolenda wrote:

e.g. ```
(lldb) p (-5LL <<60) >> 60
(long long) -5
```

if the bit slice we're pulling out has its high bit set, that'll shfit down and 
be sign extended.

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-26 Thread Jason Molenda via lldb-commits


@@ -3154,7 +3154,7 @@ 
AppleObjCRuntimeV2::TaggedPointerVendorExtended::GetClassDescriptor(
 << m_objc_debug_taggedpointer_ext_payload_lshift) 
>>
m_objc_debug_taggedpointer_ext_payload_rshift);
   int64_t data_payload_signed =
-  ((int64_t)((int64_t)unobfuscated
+  ((int64_t)((uint64_t)unobfuscated
  << m_objc_debug_taggedpointer_ext_payload_lshift) >>

jasonmolenda wrote:

Probably the one interesting thing is that the value we're slicing out is, 
apparently, signed, so we want it to sign extend to Int64 when it is done.  
That would take a little more care with a bit slice approach.

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-26 Thread Jason Molenda via lldb-commits


@@ -3154,7 +3154,7 @@ 
AppleObjCRuntimeV2::TaggedPointerVendorExtended::GetClassDescriptor(
 << m_objc_debug_taggedpointer_ext_payload_lshift) 
>>
m_objc_debug_taggedpointer_ext_payload_rshift);
   int64_t data_payload_signed =
-  ((int64_t)((int64_t)unobfuscated
+  ((int64_t)((uint64_t)unobfuscated
  << m_objc_debug_taggedpointer_ext_payload_lshift) >>

jasonmolenda wrote:

I suspect the runtime gave us these "left & right shift" values, and the person 
who wrote this used the obvious implementation.  It could be expressed as a bit 
slice with a little subtraction, true.  Just to be clear, we're not fixing a 
real bug here, we were saying a UInt64 was signed and then ubsan got all shirty 
when we shifted away some bits that would indicate sign.

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-26 Thread Greg Clayton via lldb-commits


@@ -3154,7 +3154,7 @@ 
AppleObjCRuntimeV2::TaggedPointerVendorExtended::GetClassDescriptor(
 << m_objc_debug_taggedpointer_ext_payload_lshift) 
>>
m_objc_debug_taggedpointer_ext_payload_rshift);
   int64_t data_payload_signed =
-  ((int64_t)((int64_t)unobfuscated
+  ((int64_t)((uint64_t)unobfuscated
  << m_objc_debug_taggedpointer_ext_payload_lshift) >>

clayborg wrote:

We could just shift right and then mask.

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-26 Thread Alex Langford via lldb-commits


@@ -3154,7 +3154,7 @@ 
AppleObjCRuntimeV2::TaggedPointerVendorExtended::GetClassDescriptor(
 << m_objc_debug_taggedpointer_ext_payload_lshift) 
>>
m_objc_debug_taggedpointer_ext_payload_rshift);
   int64_t data_payload_signed =
-  ((int64_t)((int64_t)unobfuscated
+  ((int64_t)((uint64_t)unobfuscated
  << m_objc_debug_taggedpointer_ext_payload_lshift) >>

bulbazord wrote:

Since the goal is to extract some bits from the middle of this 64-bit value, is 
there a way we could produce a mask instead of shifting left and then shifting 
right?

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] [lldb] [ObjC runtime] Don't cast to signed when left shifting (PR #86605)

2024-03-25 Thread Jason Molenda via lldb-commits

jasonmolenda wrote:

I've seen this ubsan error every time I run the testsuite for years, i just 
finally sat down and figured out what was going on.

https://github.com/llvm/llvm-project/pull/86605
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits