[LLVMdev] Is address space 1 reserved?
Philip Reames
listmail at philipreames.com
Wed Jan 7 12:10:17 PST 2015
On 01/07/2015 12:05 PM, Matt Arsenault wrote:
>
>> On Jan 7, 2015, at 2:55 PM, Philip Reames <listmail at philipreames.com
>> <mailto:listmail at philipreames.com>> wrote:
>>
>>
>> On 01/07/2015 11:52 AM, Matt Arsenault wrote:
>>>
>>>> On Jan 7, 2015, at 2:25 PM, Owen Anderson <resistor at mac.com
>>>> <mailto:resistor at mac.com>> wrote:
>>>>
>>>> I'm not aware of any such restriction, and I know of several LLVM
>>>> based systems that use address space 1 for something other than that.
>>>>
>>>> -Owen
>>>
>>> Yes, this would be a problem for us. We use 1 for a normal address
>>> space where 0 is invalid. However, we also have a problem where some
>>> other address spaces do want 0 to be a valid address, which just
>>> sort of don’t work correctly now.
>> If you have an example with a null in a non-0 address space being
>> mishandled, please file a bug. We'll fix them as we find them.
>
> I think the problems aren’t so much that accessing 0 doesn’t work
> (although I imagine there are problems with that), but expectations of
> comparison with null. The main problem I’m aware of is comparisons
> with null pointers. The first global object in addrspace(3) will have
> the address of 0, so if a user does if (x != NULL), it will not behave
> as expected. For C I think this is supposed to be fixed by changing
> the value of NULL to -1, but I don’t think that is currently
> supported. That is also complicated because the null value is
> different for different address spaces, and I think the actual null
> pointer value must be 0 for C++. It doesn’t really turn up often in
> real code so I don’t think anybody has really spent time thinking
> about how to properly solve this.
Just to make sure I'm interpreting this right: the problem is
essentially that we hard code "null" to mean address 0 in all address
spaces? If we allowed the numeric value of null to be configurable per
address space, would that resolve the issue at the LLVM IR level?
Solving the frontend/language spec problem seems out of scope for LLVM,
though probably not for clang. Can you point me to a usage of C++ with
non-zero address spaces? I'd be curious to know what's happening in
this space.
>
> -Matt
>
>
>>>
>>> -Matt
>>>
>>>
>>>
>>>>
>>>> On Jan 7, 2015, at 1:18 PM, Philip Reames
>>>> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>>>>
>>>>> On the review for http://reviews.llvm.org/D6808, majnemer
>>>>> <http://reviews.llvm.org/p/majnemer/> commented that:
>>>>> "Address space 1 has a special meaning in LLVM, it's identical to
>>>>> address space 0 except for the fact that "null" may be
>>>>> dereferenced. You might want to consider a different address space."
>>>>>
>>>>> This is the first I've heard of this and I can't find any
>>>>> documentation about it being reserved, either in general, or
>>>>> specifically for x86. Can anyone clarify?
>>>>>
>>>>> The only address spaces with special meanings I know of are:
>>>>> - 0 (the normal address space, null is not dereferencable)
>>>>> - 256 - TLS, GS relative addressing
>>>>> - 257 - FS relative addressing
>>>>>
>>>>> Philip
>>>>> _______________________________________________
>>>>> LLVM Developers mailing list
>>>>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>>>> http://llvm.cs.uiuc.edu <http://llvm.cs.uiuc.edu/>
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
>>>> http://llvm.cs.uiuc.edu <http://llvm.cs.uiuc.edu/>
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150107/bb80d335/attachment.html>
More information about the llvm-dev
mailing list